その前に、Vagrantとは何か?
Vagrant入門 ~導入/配布/設定/プラグインの使い方~に記載しました。
Vagrantでrsyncを使う理由
Webシステムの開発でVagrantを使う場合において、テスト環境の仮想マシンへのデプロイにSynced Folderを使うと便利であったが、いくつかの欠点… 例えば、アクセス速度が遅い、パーミッションが変更できないなどの問題があった。
rsyncでファイルを同期すれば、パフォーマンスが向上し、パーミッションも変更できるようになる。
Vagranfileの設定
rsyncではない、フォルダ共有の場合
config.vm.synced_folder "./src", "/srv/website"
rsyncで同期する
上記の設定にtype: "rsync"
を追加する。同期しないフォルダはrsync__exclude: [".git/"]
のように追加する。
設定例
config.vm.synced_folder "./src", "/srv/website", type: "rsync", rsync__exclude: [".git/", ".idea/"]
設定はこれで終わり。
ただ、このまま実行すると、rsync
が見つからないとのエラーが出る場合があります。
その場合はCygwinなどをインストールして利用する。
次、rsyncを使えるようにするための手順。
Cygwinとrsyncをインストール
Cygwinをrsync付きでインストールする際は、下の画像のようにSelect Packageの画面でNet > rsync
を選択する。
binフォルダにパスを通す。デフォルトではここC:\cygwin\bin
再起動する。
Vagrant upを実行する
vagrant up
かvagrant reload
を実行すると、次のエラーが出た。
rsync: change_dir "/c/path/to/project" failed: No such file or directory (2)
/c
がローカルディスクCを参照していないためだと思われる。
参照させるため、シンボリックリンクを作成する。
Cygwinでシンボリックリンクを作成
Cygwinを起動し、次のコマンドで/c
がローカルディスクCを参照するようにする。
$ cd /
$ ln -s /cygdrive/c c
lrwxrwxrwx 1 Daichi None 11 6月 3 22:03 c -> /cygdrive/c
再度、Vagrant upを実行する
vagrant up
かvagrant reload
を実行する
今度は成功。
ゲストOSで同期されたディレクトリを確認する。
$ ls -l
drwxr-xr-x 7 vagrant vagrant 4096 Jun 3 12:50 project_name
このように、所有者とグループはvagrantになる。
vagrant起動中に同期を実行する
vagrant rsync-auto
コマンドを使います。
vagrant rsync-auto
==> default: Doing an initial rsync...
==> default: Rsyncing folder: /c/path/to/project/ => /srv/website
==> default: Watching: C:/path/to/project/
これでファイルの監視状態になり、ホストOSで更新したファイルは自動的にゲストOSに同期されます。