Варианты синхронизированной папки Vagrant
Каков наилучший метод для реализации Vagrant NFS "синхронизированных папок" между хостом и виртуальной машиной?
Я, наконец, смог заставить работать NFS, но для этого потребовалось несколько настроек внутри виртуальной машины; и я не уверен, как автоматизировать эти изменения для использования другими.
В частности, мне нужно изменить UID/GID в /etc/passwd и /etc/group, чтобы они соответствовали идентификатору пользователя / группы экспортируемой файловой системы. (например, хост-машина использует 502:20, пользователь VM Apache должен быть также настроен на использование 502: 20)
Без этого изменения у меня возникают всевозможные проблемы с правами доступа и правами собственности, которые мешают запуску веб-приложения. С соответствием UID/GID все работает отлично.
Я прочитал все документы, которые смог найти, включая веб-сайт Vagrant.
В качестве примечания: я также попытался синхронизировать собственные папки (мучительно медленно) и rsync (100% ЦП... не используется)
NFS выглядит как победитель по производительности, но мои настройки не очень хороши.
Если это имеет какое-то значение, я работаю со следующим:
- Хост: OS X 10.9.2
- Бродяга: 1.5.4
- Провайдер: VMware Fusion
- Коробка: шеф-повар / Centos-6,5
- Приложение для разработчиков: Magento 1.8
2 ответа
В Vagrantfile вы можете назначить текущий uid/gid для отображения nfs. (См. На хосте /etc/exports после предоставления.)
config.nfs.map_uid = Process.uid
config.nfs.map_gid = Process.gid
С Puppet в качестве поставщика вы можете оценить следующие значения:
config.vm.provision :puppet, :facter => {
"host_uid" => config.nfs.map_uid,
"host_gid" => config.nfs.map_gid,
} do |puppet| ...
Таким образом, вы можете использовать его в области кукол, как переменные, например,
user { "www-data":
ensure => present,
uid => $::host_uid,
gid => $::host_gid,
}
Я думаю, что в шеф-поваре пользовательский параметр JSON эквивалентен использованию его позже в рецептах шеф-повара
Vagrant.configure("2") do |config|
config.vm.provision "chef_solo" do |chef|
# ...
chef.json = {
"map" => {
"uid" => config.nfs.map_uid,
"gid" => config.nfs.map_gid
}
}
end
end
bindfs
GitLab использовала bindfs
до того, как он отказался от Vagrant как метода разработки.
Есть даже плагин Vagrant для этого по адресу: https://github.com/gael-ian/vagrant-bindfs
Соответствующие строки Vagrantfile, когда файл все еще был частью проекта:
config.vm.synced_folder ".", "/vagrant", :disabled => true
config.vm.synced_folder "./home_git", "/git-nfs", :nfs => true
config.bindfs.bind_folder "/git-nfs", "/home/git", :owner => "1111", :group => "1111", :'create-as-user' => true, :perms => "u=rwx:g=rwx:o=rwx", :'create-with-perms' => "u=rwx:g=rwx:o=rwx", :'chown-ignore' => true, :'chgrp-ignore' => true, :'chmod-ignore' => true