1.Vagrant的配置步驟

1.首先下載 Vagrant 安裝
2.再下載 VirtualBox 安裝 (根據(jù)Windows版本不同會(huì)有坑在里面,詳情請(qǐng)見最下面的報(bào)錯(cuò)解決)
(Win7防止不入坑建議下載vagrant1.9.6 VirtualBox-4.3.12)
安裝
//安裝完后查看一下是否 vagrant安裝成功 cmd 下
C:\Users\Administrator>vagrant -v

//然后我們需要添加box文件,剛開始是沒有的可以用命令查看一下
C:\Users\Administrator>vagrant box list //查看box命令
C:\Users\Administrator>vagrant box add (box起個(gè)名) E:/box/ubuntu.box (注意這個(gè)是/不是\)
C:\Users\Administrator>vagrant box remove (box名稱) //刪除box命令

如果沒有
vagrant package打過包,可以執(zhí)行下面的命令遠(yuǎn)程下載安裝。
VagrantBox下載地址 Vagrant box 國內(nèi)鏡像對(duì)應(yīng)上面語法去添加自己的box
或者Vagrant box 官網(wǎng)鏡像
如果打不開國內(nèi)鏡像:打開cmd 清理 DNS :ipconfig/flushdns
【遠(yuǎn)程添加CentOS-7.0的box地址】
vagrant box add CentOS-7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
初始化
/*
隨便找個(gè)盤,然后創(chuàng)建你的 Vagrant 鏡像文件夾
鼠標(biāo)對(duì)著Vagrant文件夾 按住shift + 右鍵 ‘在此處打開命令窗口’
*/
E:\Vagrant>vagrant init //然后在找個(gè)空文件夾里生成一個(gè)文件Vagrantfile
1.把Vagrantfile里的config.vm.box = "laravel" //對(duì)應(yīng)剛才添加的box名稱
2.把config.vm.network "private_network", ip: "192.168.33.10"http://這行代碼打開注釋這是虛擬機(jī)IP

啟動(dòng)Vagrant
vagrant up 啟動(dòng)虛擬機(jī)
vagrant halt 關(guān)閉虛擬機(jī)
vagrant reload 重啟虛擬機(jī)
vagrant package 打包運(yùn)行中的Box虛擬環(huán)境成一個(gè)可重復(fù)使用的box
vagrant suspend 掛起虛擬機(jī)
vagrant resume 喚醒虛擬機(jī)
vagrant status 查看虛擬機(jī)運(yùn)行狀態(tài)
vagrant destroy 銷毀當(dāng)前虛擬機(jī)
Xshell直接連接服務(wù)器
【主機(jī)地址】127.0.0.1【端口】2222
【默認(rèn)用戶名】vagrant【默認(rèn)密碼】vagrant
Vagrantfile配置文件 · 有哪些功能?
- 打開1GB運(yùn)存
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vagrant up啟動(dòng)時(shí),是否自動(dòng)打開virtual box的窗口,缺省為false
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# 指定vm內(nèi)存,單位為MB
vb.memory = "1024"
# 設(shè)置CPU個(gè)數(shù)
vb.cpus = "2"
end
- 打開外網(wǎng)訪問
// private_network 就是把保護(hù)改成public
config.vm.network "public_network", ip: "192.168.33.10"
- 開放端口(端口轉(zhuǎn)發(fā))
# guest 外網(wǎng)連接端口 host 映射自己的端口
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 3306
config.vm.network "forwarded_port", guest: 22, host: 2222
- 映射項(xiàng)目目錄路徑
# 主機(jī)目錄 , VM目錄
config.vm.synced_folder "../Laravel55", "/home/wwwroot/defalut"
- 定義分布式系統(tǒng)
建立多臺(tái)虛擬機(jī),并使它們保持通信。假設(shè)其中一臺(tái)是
應(yīng)用服務(wù)器,另一臺(tái)是DB服務(wù)器,第三臺(tái)是緩存服務(wù)器。這個(gè)結(jié)構(gòu)在Vagrant中非常簡單,我們只需要通過config.vm.define定義不同的角色,設(shè)置如下
Vagrant.configure("2") do |config|
# 定義應(yīng)用服務(wù)器
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
end
web.vm.box = "centos7"
web.vm.hostname = "web"
web.vm.network :private_network, ip: "11.11.1.1"
end
# 定義DB服務(wù)器
config.vm.define :db do |db|
db.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
end
db.vm.box = "centos7"
db.vm.hostname = "db"
db.vm.network :private_network, ip: "11.11.1.2"
end
# 定義緩存服務(wù)器
config.vm.define :redis do |redis|
redis.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"]
end
redis.vm.box = "centos7"
redis.vm.hostname = "redis"
reids.vm.network :private_network, ip: "11.11.1.2"
end
end
2.Vagrant的報(bào)錯(cuò)解決(入坑巨坑TAT)
1.粗心馬虎【坑】
【惡心系數(shù)】:★
Vagrantfile文件中box名稱的 config.vm.box = "ewmzc" //對(duì)應(yīng)上你的box名稱

2.指桑罵槐【坑】錯(cuò)誤代碼E_FAIL(0x80004005)
【惡心系數(shù)】:★★★★★
報(bào)的錯(cuò)是驢唇不對(duì)馬嘴的,
直接使用VirtualBox開啟一個(gè)vm也會(huì)失敗,基本上可以確定是VirtualBox版本的問題
遇到過安裝了VirtualBox-5.0.22-108108-Win.exe的版本在win7下用不了,卸載重裝低版本的VirtualBox
VirtualBox-4.3.12-93733-Win.exe
下載地址:http://download.virtualbox.org/virtualbox/4.3.12/VirtualBox-4.3.12-93733-Win.exe

3.不明覺厲【坑】VirtualBox注冊(cè)Com對(duì)象失敗
【惡心系數(shù)】:★★★★
啟動(dòng)VirtualBox可能會(huì)報(bào)這個(gè)錯(cuò)誤
解決方法: 注冊(cè)VBoxC.dll
控制臺(tái)cmd切換到VirtualBox目錄
E:\VirtualBox>VBoxSVC /ReRegServer
E:\VirtualBox>regsrv32 VBoxC.dll
后彈出注冊(cè)成功對(duì)話框,然后去啟動(dòng)VirtualBox就解決了


4.自食其果【坑】VirtualBox兼容性問題
【惡心系數(shù)】:★★★
報(bào)錯(cuò):Bringing machine 'default' up with 'virtualbox' provider...There was an error while executing
VBoxManage, a CLI used by Vagrantfor controlling VirtualBox. The command and stderr is shown below.Command: ["list", "hostonlyifs"]Stderr: VBoxManage.exe: error: Failed to create the VirtualBox object!VBoxManage.exe: error: Code E_NOINTERFACE (0x80004002) - No such interface supported (extended info not available)VBoxManage.exe: error: Most likely, the VirtualBox COM server is not running orfailed to start.
VirtualBox兼容性問題,在VirtualBox安裝目錄中找到VBoxManage.exe,
右擊選擇屬性,設(shè)置Windows Server 2008兼容模式運(yùn)行。
再執(zhí)行vagrant up,正常運(yùn)行,問題解決。

5.疑難雜癥【坑】Nginx文件同步導(dǎo)致css緩存無法修改樣式
(雖然不是Vagrant問題,也放這里提醒自己吧)
【惡心系數(shù)】:★★
開始以為是瀏覽器的緩存,但是更換瀏覽器,強(qiáng)刷,清緩存都無效果。
然后以為又是編輯器問題換成 notepad++ 和 PhpStorm依舊不行。
排除了瀏覽器 和 編輯器的問題,那就是環(huán)境問題了查閱了一下nginx得出:
原來是nginx文件同步的問題,nginx.conf文件的sendfile on;改為 off

還有一種可能nginx解析問題:
注釋的是用來nginx解析php,如果是vue就需要用下面的html
location / {
#try_files $uri $uri/ /index.php?$query_string;
try_files $uri $uri/ /index.html =404;
}
6.微軟的鍋【坑】Vagrant啟動(dòng)沖突
【惡心系數(shù)】:★
控制面板->程序功能-> 啟用或關(guān)閉Windows功能 -> 將
Hyper-V的勾選去掉 ,重啟電腦
Hyper-V是微軟自帶的虛擬機(jī),不管是Vagrant或者docker這倆分別需要這個(gè)東西會(huì)報(bào)錯(cuò)。
7.固件支持【坑】固件中的虛擬化支持被禁用
【惡心系數(shù)】:★★
入這個(gè)坑解決了我兩個(gè)下午的時(shí)間 使用Vagrant配置本地開發(fā)環(huán)境
這是別人寫的,這也是最后的那一根救命草。這是由于在BOIS中沒有開啟cpu虛擬化支持,重啟F2或F10等進(jìn)入BIOS設(shè)置Virtualization為Enable(我的Thinkpad是Security=>Virtualizatio設(shè)置為Enable)
由于我的BIOS是中文所以我再電腦重啟啟動(dòng)中F2進(jìn)入BIOS后直接選擇虛擬化-開啟

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value. // 超時(shí)
將Vagrantfile配置文件中vb.gui = true的注釋去掉 // 這個(gè)測試了沒有用,就是進(jìn)入BOIS開啟虛擬化就好了
報(bào)錯(cuò)會(huì)提示:VT-x/AMD-V硬件加速在您的系統(tǒng)中不可用。您的64-位虛擬機(jī)將無法檢測到 64-位處理器,從而無法啟動(dòng)。


8.端口沖突【坑】無法訪問 Vagrant (不管是ip訪問還是域名訪問)
【惡心系數(shù)】:★★★★★
有時(shí)候需要
Vagrant多個(gè)項(xiàng)目就需要開幾個(gè)端口去指定訪問項(xiàng)目,然后就Vagrantfile多添加了下面這幾行代碼,坑爹的是里面有端口沖突,但是也能vagrant up不會(huì)報(bào)任何錯(cuò)誤。
然后就會(huì)發(fā)現(xiàn)不管是用ip訪問vagrant 還是 本地域名訪問vagrant 都會(huì)解析不出來。
config.vm.network "forwarded_port", guest: 3306, host: 3306
config.vm.network "forwarded_port", guest: 8000, host: 8000
config.vm.network "forwarded_port", guest: 6379, host: 6379

9.網(wǎng)段沖突【坑】同一網(wǎng)段,你的虛擬機(jī)ip最后幾位數(shù)被別人使用后也會(huì)導(dǎo)致打不開
【惡心系數(shù)】:★★★★★
同上
8號(hào)問題,網(wǎng)站打不開,vagrant up不報(bào)錯(cuò)正常啟動(dòng),但是如果你是public_network外網(wǎng)訪問的話,這種情況就會(huì)存在網(wǎng)段沖突
【查看網(wǎng)絡(luò)ip地址】ifconfig
【重啟網(wǎng)絡(luò)】sudo service network restart
如果解決了問題,記得點(diǎn)贊關(guān)注,謝謝。