我有一个Vagrant环境,我非常希望使用NFS在端口80上启动。前者是因为它的Drupal和非标准端口引起了一些胃灼热,后者纯粹是为了表现。要做到这一点,据我所知,我需要使用sudo
。没问题,sudo vagrant up
确实如此。
我遇到的问题是应用程序生成文件,并且可能是因为VM在sudo
下站起来,这些文件归主机系统上的root
所有(操作系统) X)所以当应用程序尝试将文件写入服务器时,权限被拒绝。
我修改了我的Vagrant文件,将整个项目目录设置为777
。仅仅为了披露,以下是我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
这就是我所看到的情况:
/vagrant
的内容没有给出完整的烫发(777
)。在这些变化之前就是这种情况。/vagrant
中的文件(同样,从VM中查看时)归dialout
用户所有。这似乎是一个NFS的东西,所以只要我能让第一个项目工作就没问题。更新
看起来问题可能是我对NFS如何工作的理解。我需要尝试纠正这个问题,但如果我只删除NFS组件(现在已经在上面的剪辑中注释和替换),事情似乎更有用。仍然想知道其他人是否/如何处理这个问题。
答案 0 :(得分: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(" darwin")节那么整洁,它删除了vagrant halt
上转发的端口)
这样做是在主机上设置端口8080(和8443)以在guest虚拟机上转发到80,然后使用sudo将主机上的端口80转发到主机上的端口8080。
这意味着只有端口80转发是以root身份完成的,而不是整个流浪过程,并且通常会让我更快乐。
注意:如果skype将自己绑定到端口80和443(默认情况下这样做),这在桌面计算机上仍然会失败。