vagrant系列五:Vagrant使用中遇到的坑
遇到的問題
之前寫了一系列的vagrant使用教程,當時寫這個教程的時候實在windows的環境下。最近再mac上使用,遇到了一些麻煩。
今天最想說的一個問題就是許可權的問題。
在windows中由於沒有檔案許可權的概念,所有當我們共享目錄後,共享目錄預設就是777許可權。
但是當我使用mac時,共享後的目錄許可權以及使用者組都不正確了。無法正常使用。這樣導致的一個直接問題就是:
專案a執行在虛擬機器中,需要向runtime目錄寫入日誌或者臨時檔案之類的,總之就是需要讀寫許可權。
解決辦法
當時我直接ssh上vagrang後,給予777許可權,無法寫入,然後又在主機給予777許可權,可以寫入一個檔案,但是下個檔案又拿到許可權寫入。
後來由各種google與百度,看到說使用nfs的方式可以解決這個問題,但是各方給出的解決方案都很成舊,有的方法使用後甚至虛擬機器都無法啟動了。
沒辦法,老老實實上官網看nfs相關的配置吧。老實說官方給的文件真的是有點太簡單抽象了,只能結合之前的一些東西結合起來使用。最終終於找到辦法,這裡將相關的配置貼出來,供大家參考。
config.vm.define :php7 do |p7|
p7.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "php6", "--memory" , "512"]
## 域名解析慢
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
p7.vm.box = "CentOs7"
p7.vm.hostname = "php7"
p7.vm.network :private_network, ip: "192.168.33.10"
# ssh 奇怪:第一次啟動虛擬機器無法獲取ip
p7.ssh.username = "root"
p7.ssh.password = "vagrant"
p7.ssh.host = "192.168.33.11"
p7.ssh.port = 22
## nfs檔案許可權問題 啟動了好幾次才正常,不知道原因
p7.vm.synced_folder "./www", "/data/wwwroot", type: "nfs", :nfs => {
:linux_nfs_options => ["not_root_squash"],
:map_uid => 0,
:map_gid => 0
}
end
這個配置是在一個 Vagrantfile
中配置多臺機器的配置文件。其中遇到的一些奇怪問題,註釋中都標明瞭。
* 配置的ip地址,首次使用 vagrant up php7
後,無效,需要重新啟動,虛擬機器才能拿到這個ip。至今不懂為什麼,麻煩知道的告訴我一下啊!
* nfs配置資訊全面解決了許可權問題。你需要給出什麼許可權直接在 vagrang 虛擬機器中進行設定。但是在掛載目錄時,有時候配置的新機器會莫名其妙重新啟動好幾次才可以。我啟動了三次。
* 另一個坑是,新機器安裝後,需要配置dns解析。否則有的資源是無法下載的。
$ vim /etc/resolv.conf
## 增加以下內容
nameserver 8.8.8.8
- 由於配置了啟動時使用
root
帳號,需要每次在mac上啟動的時候輸入機器密碼,很麻煩,官方指導配置/etc/sudoers
如下內容
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
該配置僅針對mac
總結
這類問題還是蠻常見,對於使用很久的使用者,輕鬆解決了,但是對於大多數使用vagrant的新手,這個問題很頭痛,可能直接導致放棄使用vagrant吧。為了不讓你放棄,我必須寫出來幫助大家渡過這道坑。