2

NFS を使用してポート 80 で起動したい Vagrant 環境があります。前者は Drupal であり、非標準ポートが少し胸焼けを引き起こしているためであり、後者は純粋にパフォーマンスのためです。そのためには、私の知る限り、を使用する必要がありますsudo。問題ありませんsudo vagrant up

私が直面している問題は、アプリがファイルを生成することです。おそらく、VM が で起動されたため、これらのファイルはホスト システム (OS X) でsudo所有されているため、アプリがファイルをサーバーに書き込もうとすると、アクセス許可root否定された。

Vagrant ファイルを変更して、プロジェクト ディレクトリ全体を に設定しました777。開示のために、ここに関連する(および非標準の)スニペットを my から示しますVagrantfile

config.vm.network :hostonly, "192.168.33.10"
config.vm.forward_port 80, 80
# config.vm.share_folder( "v-root", "/vagrant", ".", :nfs => (RUBY_PLATFORM =~ /mingw32/).nil?, :extra => 'dmode=777,fmode=777' )
config.vm.share_folder( "v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777' )
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
Vagrant::Config.run do |config|
  config.vm.provision :shell, :path => "provision.vm.sh"
end

これが私が起こっていることです:

  • リポジトリのクリーン クローンから起動すると、問題はありません。わーい。
    • ただし、VM 自体から見ると、 のコンテンツに/vagrantは完全な権限が付与されていないことに気付きました ( 777)。これは、これらの変更の前のケースでした。
  • VM を停止した後に起動すると...
    • 生成されたファイルは書き込めません。
    • 内のファイル/vagrant(ここでも、VM 内から表示した場合) はdialoutユーザーが所有しています。これは NFS のように見えるので、最初の項目が機能する限り問題ありません。

アップデート

問題は、NFS がどのように機能するかについての私の理解にあるようです。私はそれを修正しようとする必要がありますが、NFS コンポーネントを削除するだけで (上記の抜粋でコメントされ、置き換えられました)、はるかに使いやすくなります。他の人がこれを処理したかどうか、またはどのように処理したかを知りたいです。

4

1 に答える 1

1

行う代わりにsudo vagrant up-これは理想的ではありません-私は次のことをしています:

if Vagrant::Util::Platform.windows?
    config.vm.network :forwarded_port, host: 80, guest: 8080
elsif Vagrant::Util::Platform.darwin?
    config.vm.network :forwarded_port, host: 8080, guest: 80
    config.vm.network :forwarded_port, host: 8443, guest: 443
    config.trigger.after [:provision, :up, :reload] do
      puts " ==> Sudo Password (to forward ports) "
      system('echo "
    rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080  
    rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 8443  
    " | sudo pfctl -f - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 8443"')  
    end
else
    config.vm.network :forwarded_port, host: 8080, guest: 80
    config.vm.network :forwarded_port, host: 8443, guest: 443
    puts " ==> Sudo Password (to forward ports) "
    system("sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80;
    sudo ipfw add 101 fwd 127.0.0.1,8443 tcp from any to me 443")
end

if Vagrant::Util::Platform.darwin?
    config.trigger.after [:halt, :destroy] do
        system("sudo pfctl -f /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding'")
    end
end

(その linux スタンザは、OS X (「ダーウィン」) スタンザよりもきれいではなく、転送されているポートが削除されますvagrant halt)

これは、ホスト マシンのポート 8080 (および 8443) をゲストの 80 に転送するように設定し、sudo を使用してホスト マシンのポート 80 をホスト マシンのポート 8080 に転送することです。

これは、vagrant プロセス全体ではなく、ポート 80 転送のみがルートとして実行されていることを意味し、一般的に私をより幸せにします.

注: skype がデフォルトでポート 80 と 443 にバインドされている場合、これはデスクトップ マシンでは失敗します。

于 2014-06-20T10:19:07.447 に答える