2013-03-22 2 views
2

У меня есть среда бродяг, которую я очень хотел бы запустить на порт 80 с помощью NFS. Первый, потому что это Drupal и нестандартный порт, вызывают немного изжоги, а последний - исключительно для производительности. Для этого, насколько мне известно, мне нужно использовать sudo. Нет проблем, sudo vagrant up есть.Vagrant, NFS, порт 80 и sudo

Проблема, с которой я столкнулся, заключается в том, что приложение генерирует файлы и, предположительно, потому что VM была вставлена ​​под sudo, эти файлы принадлежат root на хост-системе (OS X), поэтому, когда приложение пытается написать файлы на сервер, разрешение отклонено.

Я изменил свой файл бродяг, чтобы установить весь каталог проекта в 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, если смотреть с самой ВМ, не дано полным perms (777). Это произошло до этих изменений.
  • Когда я загружусь после останавливающей виртуальной машины ...
    • Создаваемых файлы не могут быть записаны.
    • Файлы в /vagrant (опять же, если смотреть с VM) принадлежат пользователю dialout. Это похоже на NFS, поэтому нет проблем, пока я могу получить первый элемент для работы.

UPDATE

Похоже, что проблема может быть мое понимание того, как работает NFS. Мне нужно попытаться исправить это, но если я просто удалю компонент NFS (теперь прокомментировал &, замененный в перевернутом выше), вещи кажутся гораздо более полезными. Хотелось бы еще узнать, могут ли другие люди справиться с этим.

+0

Стоит отметить, что при настройке хост-сети для работы nfs вы можете фактически получить доступ к машине на порту 80 на этом ip-сервере, не требуя взлома sudo. Поэтому 192.168.33.10:80 должен работать. – timmow

+0

В то время как немного несвязанный, высевал бы ваш бродячий экземпляр с помощью марионетки? У них есть полезные значения по умолчанию, и их легко настроить после создания. – T0xicCode

ответ

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 

(The Linux строфа, которая менее аккуратной, чем OS X() строфу "Дарвина", который удаляет порты, пересылаемые по адресу vagrant halt)

Это то, что это настройка порта 8080 (и 8443) на хост-компьютере для пересылки на 80 на гостевой машине, а затем с помощью sudo для пересылки порта 80 на хост-машине порт 8080 на главной машине.

Это означает, что только переадресация порта 80 выполняется как корень, а не весь бродячий процесс и, как правило, делает меня счастливее.

Примечание. Это будет по-прежнему не работать на настольном компьютере, если skype связывает себя с портами 80 и 443, что по умолчанию.