7

在主机和虚拟机之间实现 Vagrant NFS“同步文件夹”的最佳方法是什么?

总的来说,我终于能够让 NFS 正常工作,但它需要在 VM 中进行一些调整;而且我不确定如何自动化这些更改以供其他人使用。

具体来说,我必须修改 /etc/passwd 和 /etc/group 中的 UID/GID 以匹配导出文件系统的用户/组。(例如主机使用 502:20,VM apache 用户也必须设置为使用 502:20)

如果没有此更改,我会遇到各种阻止 Web 应用程序运行的权限/所有权问题。通过 UID/GID 匹配,一切正常。

我已经阅读了我能找到的所有文档,包括 Vagrant 网站。

附带说明:我还尝试了本机文件夹同步(非常慢)和 rsync(100% CPU ......无法使用)

NFS 似乎是性能的赢家,但我的设置很粗略。

如果它有任何区别,我正在使用以下内容:

  • 主机:OS X 10.9.2
  • 流浪者:1.5.4
  • 提供者:VMware Fusion
  • 盒子:厨师/centos-6.5
  • 开发应用程序:Magento 1.8
4

2 回答 2

12

在 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| ...

因此,您可以在 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
于 2014-05-27T10:44:26.113 回答
5

绑定文件

GitLabbindfs在弃用 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
于 2014-05-24T07:04:58.093 回答