VagrantとVirtualBoxを使用して、ホストとゲストの間でファイルを適切に共有する方法を見つけようとして、1週間半の間壁に頭をぶつけてきました。
私が達成する必要があるのは、githubからコードベースをダウンロードする自動プロビジョニングボックスです。コードベースのアクセス許可は、ファイルごとに異なる必要があります(PHPファイル、シェルスクリプト、tmpフォルダー、ログフォルダーなど)。コードベースファイルは、編集のためにホストボックスからアクセスできる必要もあります。
これまで、通常の仮想ボックス共有、NFS共有、bindFSを使用したNFS共有を試しました。これらのいずれも、個々のファイルのアクセス許可を変更することを許可していないようです。
これはVagrantにとって絶対的なショートッパーのようです。私は正直に言って、Vagrantが開発環境を共有する目的でどのように役立つのか理解していません。
誰かがこれを適切に設定する方法を知っていますか?それも可能ですか?
参考のために:
これがあなたの質問に完全に答えるかどうかはわかりませんが、アプリケーションが共有フォルダシステムのディスクに書き込めないという問題があったため、Vagrantfile
で以下を使用してr/wアクセスを許可しましたクライアント内からの共有ファイル。
config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777"
ここにはいくつかの部分的な回答がありますが、この質問を見つけやすくするために、それらの部分的な回答を1つにまとめるさまざまな方法を試す必要がないようにしたいと思います。
これは私が使用しているものであり、私にとってはうまく機能しています。 <code>
ブロック内でイタリックを使用することは困難または不可能であるため、変更するビットを<angled brackets>
内に配置しました。
config.vm.synced_folder ".", "/var/www/vhosts/<project_name>",
id: "project",
owner: <username>,
group: <group_name>,
mount_options: ["dmode=775,fmode=664"]
または、おそらく(使用しているCIFS/SMBのバージョンによって異なります):
mount_options: ["dir_mode=775,file_mode=664"]
所有者とグループがない場合、Vagrantはconfig.ssh.username
(ボックスの起動時)の値を所有者とグループとして使用します。上記のような構成を使用すると、VMにログインして、chgrp
とchown
を使用しようとしても機能しないため、共有フォルダーに割り当てる所有者とグループを制御できます。
mount_options
がないと、所有者とグループ(およびその他)に付与される権限を制御する方法がありません。これはVMであり、これらに777
権限を使用しても問題ないと主張することもできますが、これは悪い習慣であり、注意しないと持ち運びが発生する可能性があるため、お勧めしません。それは本番環境に移行し、本番環境のセキュリティを弱めます。しかし、明らかに、私が使用した775
と664
を好きなように変更することができます。それらが何を意味するのかわからない場合は、Googleの「Linuxファイルのアクセス許可」。
mount_options
配列を区切るコンマの後にスペースを(習慣から)挿入することができます。しないでください。カンマでは機能しません。
id
は、任意の名前にすることができます。
ゲストファイルシステムをホストと共有するように、Sambaサーバーなどをセットアップしてみましたか?
Vagrantに組み込まれている共有でも問題が発生したため、ゲストで必要な方法ですべてをセットアップしてから、単純なSamba共有をセットアップして、ユーザー、グループ、デフォルトのファイル作成マスクなどを強制しました。ただし、Windowsマシンなので、Sambaよりも優れた選択肢がある可能性があります...
私はubuntuゲストを持っていたので、セットアップは実行するのと同じくらい簡単でした
$ apt-get install samba
共有するフォルダごとに、次のような共有ブロックを/etc/samba/smb.conf
ファイルに追加します。
[data]
comment = Local Dev Server - /data
path = /data
browsable = yes
guest ok = yes
read only = no
create mask = 0777
force user = root
force group = root
#[data] End
更新:下部にある http://docs.vagrantup.com/v2/synced-folders/basic_usage.html をもう一度見てください。例(ドキュメントからのコピーアンドペースト):
config.vm.synced_folder "src/", "/srv/website", owner: "root", group: "root"
synced folder
を試しましたか?
私はしばらくの間Vagrant + VirtualBoxを使用しており、synced folder
を使用してホストとVagrantVM間でコードを共有しています。
リンクは次のとおりです。
http://docs.vagrantup.com/v2/synced-folders/basic_usage.html
コード例は次のとおりです。
Vagrant.configure("2") do |config|
config.vm.synced_folder "src/", "/srv/website"
end
少し背景
開発環境としてVirtualBoxをセットアップし、アプリケーションとホストデータベースサーバー、VM内のTomcatサーバーを実行します。 Hostで実行されているEclipseを使用して開発できるように、Syncedフォルダーを介してHostとVM)の間でコードを共有しています。
環境:Mac