Git
nginx
vagrant
VirtualBox
Ansible

Vagrant + Virtualbox + Gitなどの開発環境を複数台のPCで共有(Mac編)

前提

私の仕事環境は、主に3台のPCから成り立っています。
iMac、mac book air、Toshibaのノート(windows 10 64bit 経理用)

去年はiMacを購入し、メインで使う予定だったのですが、
Vagrant環境の案件が増えてしまい、常に対応できるようにと
結局はmac book airをメインで利用する毎日でした。

iMacの方は、Server.app(OSX Server)を利用して、簡単なDNSサーバーとファイルサーバーを運用するのみ
という勿体無い使い方をしていた。iMacの消費電力はWindowsマシンよりかは少なめなので、
使い勝手は非常に良かった。

しかし、

  • 大切な開発環境がいつ壊れてもおかしくないmac book airに入れるのをやめたい。
  • いい加減iMacも本格的に使いたい
  • mac book airの512GBのSSDが完全に埋まってしまった
  • mac book airのスペックに限界を感じる(同時に複数のVagrantを立ち上げると重い)

などの理由から、Vagrantなどの開発環境を複数のPCでシェアする方法がないか
調べ始めました。

PC間で同期を取るだけでは解決できなかった問題

  • vagrant.dの中に紐付いているVirtualboxのIDが入っており、PCによってそのIDが違う
  • IDだけを合わせても、vagrant up時に中途半端なprovisionが実行されることがある

Packageをエクスポートして使えば? という意見が聞こえてきそうですが、セットアップ内容に変化があった際に
他人に共有しなおしたりするのが面倒。また、色々試してマシンを破棄したりすることもあるので、サンドボックス代わりにも
利用できるのが良い。

辿り着いた解決策は、開発環境を1台のPCから参照すること

これはかなり面倒な方法でサクッとやりたかった方には向いてません。また、セキュリティー面に気になる点もあるので、
完全とは言えないのが現状ですね。

構成を図にすると、下記のようになります。

qiita用の構成図.jpg

大まかの流れはこのようになりますが、わかりにくいと思いますので、後ほど説明します。

Vagrantの起動と外部(mac book air)からの参照方法

WEBサーバー周りの図をもう少しわかりやすくすると下記のようになる。

qiita用の構成図2.jpg

かなり面倒な工程に見えるが、実際もその通りです。かなり面倒。
ちなみに、私の場合はずっと前からファイルサーバーとしてOSX Serverを使っていたので、それにしていますが
Macの共有機能を利用するか、Sambaサーバーを立てても良いと思います。

固定IPでない環境の場合

固定IPが一番良いのですが、今回はお金をかけないでやりたいので、brewでddclientをインストールしてcloudflareで設定しているドメインのAレコードを更新する方向にしました。
mac book airでは、そのドメインを参照してSSHやAFPの接続を行います。

AFP) afp://mydata.com
SSH) sudo ssh imacuser@mydata.com -p 22以外の変更したポート

mac book air側では、hostsファイルに開発サイトのドメインとimacを紐付ける表記を入れないと行けないので、
固定IPであれば1度の設定で済みますが、私の場合は固定IPではないので、シェルスクリプトで自動アップデートすることにしました。
面倒なので載せませんが、スクリプトを見たい方はコメントください。

引っかかった問題

AFPでマウントしたボリュームでのgit関係のコマンドがめちゃくちゃ遅い

$ git statusで18秒ほど。HDDからSSDへ変更しても9秒台。SSDのケースをUSB3.0からThunderboltに変更しても7秒台。
結果的に、SSHでiMacに接続してgitを操作することにしました。cdでの移動が面倒なので、変数を設けると良い。

Server.appで既に80と443ポートが使われている

OSX Serverでは、AFPやSMB以外にもWebdavという通信方法が用意されている。WEBサーバーを用いた通信なので、Apacheが常に起動状態です。OSX ServerのWebdavやApacheを使わない前提ですが、Apacheの設定ファイルからListen部分をコメントすることで解決。エラーログは数秒に一回は吐き出されるけど、気にしない!

AUのWiMAX(W03)からなぜかSMBが繋がらない

Wifiの設定をどういじり倒してもSMBが繋がらない。しかし、VPNサーバーを通すと繋がる不思議。
他のWifiは問題ないのですが、WiMAXだけはダメ。どうしてもSMBを使いたい場合はVPNを通すことで回避策を取ることにしましたが、
5時間も無駄にして根本的な解決方法は見つけられませんでした。分かる優しい方いましたら、是非コメントください。

MacOS用のウィルス対策ソフトが邪魔をする

ポートを開けているので、よくある話ですね。ファイル関係のシールド調整するか、消すかで解決しましよう。

安全性について

S3などのクラウドを安く利用できる時代に自宅でやるなんて!! と言われるのが当然ですが、
それでも自宅でやっていく場合の気になる点をあげてみました。

データのバックアップ

私の場合は、MacのTimemachineを利用しています。OSや大切なデータを含めて、90分ごとに差分をバックアップできる非常に良いツールだと思います。
無くなっては本当に困るものはS3にも自動バックアップを取るようにしています。

ソースコードだけであれば問題ないのですが、AIやPSDなどの重いデータや、仮想環境などのバイナリーデータ、OS自体のデータなど
外部に逃がすよりかは、すぐにアクセスできる場所に置いておきたいこともあり、今回は自宅で開発環境を構築することになりました。

サーバー機器の安全性

個人でできる範囲がそんなに広くないのですが、最低限の処置としてUPSの完備や、定期的なSSDやHDDのチェックなどは必要かと思います。
当然、ルーター自体のセキュリティーも考えなくてはなりません。可能であれば、業務用のルーターを買った方が良いかも。

ポートの開放に伴う危険性

言うまでもないが、ポートを一度開けてしまえば、危険性が大幅に増えるというのは当然ですね。特に狙われやすいSSHの22などは開けない方が良いでしょう。
ルーターのポート変換機能を利用すれば、想定されにくいポートを選ぶことができます。ルーター側は1200で転送先のマシンは22などとすれば危険性は多少減ります。
パスワードによるログインを禁止し、証明証を交わした暗号方式に切り替えた方が良いでしょう。

その他のセキュリティー対策

SMBやAFP関係はServer.appにある程度おまかせできたとしても、ユーザーやネットワークを制限するなどの対策はあった方が良いのかも。
また、本来は沢山のデータが入っている普段使いするPCではなく、サーバー用のマシンを用意した方が良いでしょう。

開発環境を統一させたことによるデメリット

  • やり方によるけど、多少は安全性が下がる
  • 用意が面倒!長期的に見たらお金がかかる
  • 自宅にトラブルがあれば、出先で何もできない
  • 出先でのWifiの通信量が圧倒的に増える(Y!モバイル7GB制限からAUの無制限プランに変更する羽目になった)
  • 逆に言えば、Wifiなしでは何もできない
  • Vagrantを新規で追加する際にちょっと面倒。(シェルで解決)

メリット

  • すべての端末を有効利用ができる
  • どれが壊れてもOK!(Timemachineから復元すれば、次のPCで同じ環境を再現できる)
  • データを外部化できるので、他の端末にデータを置く費用がない
  • 開発環境が自宅で動くので、持ち歩くPCは低スペックでもOK
  • データにどこからでもアクセスできる
  • データは自宅保管になるので、安心感がある。消えて本当に困るものはS3に。

まとめ

タイトルと内容にズレがあると思いますが、環境の統一を行いたい方が探る方法の一つになるのではないかと思ったのであえてこのタイトルにしました。
結論から言うと、手間がかかるし安全性のことを考えなきゃいけないし、長期的にみたらハードウェア代が多少かかる。しかし、「データを手元に置いておく」「開発環境をなんとかしたい」ということを優先的に考えた結果、辿り着いた効率の悪いやり方ですね。

固定IPがあるだけでも結構シンプルになると思いますが、ダイナミックDNSを使ってまでやるメリットを見え出せるかどうかが微妙ですね。

今回はコード類を一切載せてない(興味を持つ人が恐らくいないと思った)ので、同じことをやってみたい人がいたらコメントください。
安全性に関するブーイングはお控えくださいm(__)m