在Windows上使用Vagrant遇到的坑
這篇文章是在windows上使用了vagrant半年后,突然切換到mac上來(lái),遇到了各種坑,今天補(bǔ)了這篇文章。希望對(duì)你有幫助。
遇到的問(wèn)題
之前寫(xiě)了一系列的vagrant使用教程,當(dāng)時(shí)寫(xiě)這個(gè)教程的時(shí)候?qū)嵲趙indows的環(huán)境下。最近再mac上使用,遇到了一些麻煩。
今天最想說(shuō)的一個(gè)問(wèn)題就是權(quán)限的問(wèn)題。
在windows中由于沒(méi)有文件權(quán)限的概念,所有當(dāng)我們共享目錄后,共享目錄默認(rèn)就是777權(quán)限。
但是當(dāng)我使用mac時(shí),共享后的目錄權(quán)限以及用戶(hù)組都不正確了。無(wú)法正常使用。這樣導(dǎo)致的一個(gè)直接問(wèn)題就是:
項(xiàng)目a運(yùn)行在虛擬機(jī)中,需要向runtime目錄寫(xiě)入日志或者臨時(shí)文件之類(lèi)的,總之就是需要讀寫(xiě)權(quán)限。
解決辦法
當(dāng)時(shí)我直接ssh上vagrang后,給予777權(quán)限,無(wú)法寫(xiě)入,然后又在主機(jī)給予777權(quán)限,可以寫(xiě)入一個(gè)文件,但是下個(gè)文件又拿到權(quán)限寫(xiě)入。
后來(lái)由各種google與百度,看到說(shuō)使用nfs的方式可以解決這個(gè)問(wèn)題,但是各方給出的解決方案都很成舊,有的方法使用后甚至虛擬機(jī)都無(wú)法啟動(dòng)了。
沒(méi)辦法,老老實(shí)實(shí)上官網(wǎng)看nfs相關(guān)的配置吧。老實(shí)說(shuō)官方給的文檔真的是有點(diǎn)太簡(jiǎn)單抽象了,只能結(jié)合之前的一些東西結(jié)合起來(lái)使用。最終終于找到辦法,這里將相關(guān)的配置貼出來(lái),供大家參考。
- 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 奇怪:***次啟動(dòng)虛擬機(jī)無(wú)法獲取ip
- p7.ssh.username = "root"
- p7.ssh.password = "vagrant"
- p7.ssh.host = "192.168.33.11"
- p7.ssh.port = 22
- ## nfs文件權(quán)限問(wèn)題 啟動(dòng)了好幾次才正常,不知道原因
- p7.vm.synced_folder "./www", "/data/wwwroot", type: "nfs", :nfs => {
- :linux_nfs_options => ["not_root_squash"],
- :map_uid => 0,
- :map_gid => 0
- }
- end
這個(gè)配置是在一個(gè) Vagrantfile 中配置多臺(tái)機(jī)器的配置文檔。其中遇到的一些奇怪問(wèn)題,注釋中都標(biāo)明了。
- 配置的ip地址,***使用 vagrant up php7 后,無(wú)效,需要重新啟動(dòng),虛擬機(jī)才能拿到這個(gè)ip。至今不懂為什么,麻煩知道的告訴我一下啊!
- nfs配置信息全面解決了權(quán)限問(wèn)題。你需要給出什么權(quán)限直接在 vagrang 虛擬機(jī)中進(jìn)行設(shè)置。但是在掛載目錄時(shí),有時(shí)候配置的新機(jī)器會(huì)莫名其妙重新啟動(dòng)好幾次才可以。我啟動(dòng)了三次。
- 另一個(gè)坑是,新機(jī)器安裝后,需要配置dns解析。否則有的資源是無(wú)法下載的。
- $ vim /etc/resolv.conf
- ## 增加以下內(nèi)容
- nameserver 8.8.8.8
由于配置了啟動(dòng)時(shí)使用 root 帳號(hào),需要每次在mac上啟動(dòng)的時(shí)候輸入機(jī)器密碼,很麻煩,官方指導(dǎo)配置 /etc/sudoers 如下內(nèi)容
- 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
該配置僅針對(duì)mac
總結(jié)
這類(lèi)問(wèn)題還是蠻常見(jiàn),對(duì)于使用很久的用戶(hù),輕松解決了,但是對(duì)于大多數(shù)使用vagrant的新手,這個(gè)問(wèn)題很頭痛,可能直接導(dǎo)致放棄使用vagrant吧。為了不讓你放棄,我必須寫(xiě)出來(lái)幫助大家渡過(guò)這道坑。