Vagrant、NFS、端口80和sudo

Vagrant、NFS、端口80和sudo,vagrant,Vagrant,我有一个非常希望使用NFS在端口80上启动的流浪环境。前者是因为它是Drupal,而非标准端口导致了一点烧心,后者纯粹是为了性能。要做到这一点,据我所知,我需要使用sudo。没问题,sudo vagrant up 我遇到的问题是,应用程序生成文件,可能是因为VM是在sudo下运行的,这些文件属于主机系统(OS X)上的root,因此当应用程序尝试将文件写入服务器时,权限被拒绝 我修改了我的Vagrant文件,将整个项目目录设置为777。为了便于披露,以下是我的Vagrantfile中的相关(非标

我有一个非常希望使用NFS在端口80上启动的流浪环境。前者是因为它是Drupal,而非标准端口导致了一点烧心,后者纯粹是为了性能。要做到这一点,据我所知,我需要使用
sudo
。没问题,
sudo vagrant up

我遇到的问题是,应用程序生成文件,可能是因为VM是在
sudo
下运行的,这些文件属于主机系统(OS X)上的
root
,因此当应用程序尝试将文件写入服务器时,权限被拒绝

我修改了我的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
以下是我看到的情况:

  • 当我从存储库的干净克隆启动时,没有问题。耶。
    • 但是,我确实注意到,当从VM本身查看时,
      /vagrant
      的内容并没有得到完整的perms(
      777
      )。这是这些变化之前的情况
  • 当我在停止VM后启动时。。。
    • 无法写入生成的文件
    • /vagrant
      中的文件(同样,从VM中查看时)归
      拨号用户所有。这似乎是一个NFS的东西,所以只要我能让第一项工作就没有问题
更新


看起来问题可能在于我对NFS工作原理的理解。我需要尝试纠正这一点,但如果我只是删除NFS组件(现在在上面的截图中注释并替换),事情似乎更有用。我仍然很想知道其他人是否/如何处理这件事。

而不是做
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)设置为转发到来宾机上的80,然后使用sudo将主机上的端口80转发到主机上的端口8080

这意味着只有端口80转发作为根进行,而不是整个流浪过程,这通常让我更高兴


注意:如果skype将自己绑定到端口80和443(默认情况下是这样的),那么在桌面计算机上仍然会失败。

值得注意的是,当您为nfs设置一个hostonly网络以工作时,您实际上可以访问该ip上端口80上的计算机,而无需sudo启动。所以192.168.33.10:80应该是有效的。虽然有点不相关,但用puphpet植入你的流浪实例会有帮助吗?它们具有有用的默认值,一旦生成,就可以轻松地进行配置。