下載并安裝程序
- 下載并安裝virtualbox
https://www.virtualbox.org/wiki/Downloads - 下載并安裝vagrant
https://www.vagrantup.com/downloads.html - 下載ubuntu/xenial64的box(注意選擇的是Ubuntu 16.04 LTS 64位系統(tǒng)鏡像,不要搞錯(cuò)了,后面換源的時(shí)候如果一個(gè)14.04的box使用16.04的源,會(huì)報(bào)錯(cuò)的
W: Unknown Multi-Arch type 'no' for package 'compiz-core'的錯(cuò)誤的,血的教訓(xùn))- 訪問https://app.vagrantup.com/ubuntu/boxes/xenial64
- 點(diǎn)擊最新的版本,得到鏈接https://app.vagrantup.com/ubuntu/boxes/xenial64/versions/20180510.0.0
- 在尾部手動(dòng)添加/providers/virtualbox.box補(bǔ)全下載鏈接,使用迅雷下載(更快)
https://app.vagrantup.com/ubuntu/boxes/xenial64/versions/20180510.0.0/providers/virtualbox.box
新建項(xiàng)目目錄
vagrant(隨便啦,就是用來開發(fā)的項(xiàng)目目錄),并將下載的box文件復(fù)制進(jìn)來(不一定需要,只是為了方便后面操作的說明),之后的命令都是在這個(gè)目錄下進(jìn)行的
添加box
vagrant box add u14evm xenial-server-cloudimg-amd64-vagrant.box

命令
vagrant box add <boxName> <boxFilePath>中:
<boxName>為自己指定的box名字(默認(rèn)為base)
<boxFilePath>為下載的box文件本地路徑
其他相關(guān)命令:
- 查看box列表:
vagrant box list - 刪除box:
vagrant box remove <boxName>
vagrant初次安裝
- 初始化vagrant:
vagrant init u14evm(u14evm為<boxName>),生成Vagrantfile - 安裝并啟動(dòng)虛擬機(jī):
vagrant up(第一次才是安裝,之后就只是啟動(dòng)) - 登錄:
vagrant ssh
這里第二步:
vagrant up
可能會(huì)出現(xiàn)Warning: Remote connection disconnect. Retrying...或Warning: Authentication failure. Retrying...這個(gè)錯(cuò)誤,可能是自動(dòng)登不上虛擬機(jī)。
image.png
打開virtualbox,看看安裝的虛擬機(jī)的運(yùn)行情況
image.png
發(fā)現(xiàn)是正常啟動(dòng)的,說明已經(jīng)安裝好了,只是無法自動(dòng)登錄。點(diǎn)擊上圖上面的顯示,查看虛擬機(jī)的終端,如下圖,需要登錄
image.png
賬號和密碼都輸入vagrant,如下可以正常登錄并使用了
image.png解決辦法:改用私鑰登錄
vagrant ssh默認(rèn)通過vagrant賬號(密碼也是vagrant)登錄虛擬機(jī)(查看virtualbox確保虛擬機(jī)是啟動(dòng)狀態(tài)的)ssh-keygen -t rsa生成rsa公私鑰
image.pngcat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys將公鑰添加到authorized_keys文件里面
image.pngcat .ssh/id_rsa查看私鑰,并在目錄新建一個(gè)文件id_rsa將私鑰復(fù)制進(jìn)來
image.pngconfig.ssh.private_key_path = 'id_rsa'編輯目錄下的Vagrantfile配置文件,加入此配置logout登出虛擬機(jī)后,重新vagrant ssh登錄,可以正常登錄了vagrant reload重啟,可以看到正常啟動(dòng)的狀態(tài)了
image.png
如果上面第一步
vagrant ssh沒有密碼登錄,而是出現(xiàn)publickey密鑰錯(cuò)誤如下
image.png
vagrant ssh-config查看配置,
image.png
是讀取D:/vagrant/.vagrant/machines/default/virtualbox/private_key的私鑰,但是根據(jù)https://github.com/hashicorp/vagrant/issues/9433上面說的,是因?yàn)闆]有那個(gè)文件的權(quán)限,以及win10系統(tǒng)ssh二進(jìn)制包的問題,可以試試使用cmder試試。
如果還是不可以的話,那就只能先通過virtualbox使用vagrant賬戶登錄,然后在里面生成公私鑰,和前面2、3步一樣配一下虛擬機(jī)的公鑰,將私鑰git push到遠(yuǎn)端,主機(jī)這邊從遠(yuǎn)端拉下私鑰,執(zhí)行5、7步就可以了。
總之就是自己定義公私鑰,然后想法設(shè)法讓主機(jī)和虛擬機(jī)通過自己的公私鑰交流
其他相關(guān)命令:
啟動(dòng)虛擬機(jī):vagrant up(第一次是)
刪除虛擬機(jī):vagrant destroy
暫停虛擬機(jī):vagrant suspend(推薦)
關(guān)閉虛擬機(jī):vagrant halt (耗時(shí)不推薦)
恢復(fù)被暫停的虛擬機(jī):vagrant resume
重啟虛擬機(jī):vagrant reload(每次改了Vagrantfile配置文件記得重啟)
查看虛擬機(jī)狀態(tài):vagrant status
執(zhí)行shell命令:vagrant provision(用于執(zhí)行一鍵部署)
Vagrantfile把下面的shell腳本注釋去掉,添加echo "hello world",保存并執(zhí)行vagrant provision測試是否能夠正常使用
config.vm.provision "shell", inline: <<-SHELL
echo "hello world"
SHELL

vagrant開發(fā)環(huán)境搭建
- 配置
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# 虛擬機(jī)名字<boxName>
config.vm.box = "u14evm"
# 指定私鑰文件路徑
config.ssh.private_key_path = 'id_rsa'
# 橋接網(wǎng)絡(luò)
config.vm.network "public_network"
# 映射文件夾
config.vm.synced_folder "./web/", "/var/www/web"
# shell腳本
config.vm.provision "shell", inline: <<-SHELL
# 切換為root用戶運(yùn)行
sudo su
bash -ex /var/www/web/setup.sh
SHELL
end
- 重啟:
vagrant reload - 執(zhí)行腳本:
vagrant provision
其中setup.sh腳本做了以下幾件事:
- 換源
- 安裝依賴
- 配置相應(yīng)服務(wù)器軟件 supervisor nginx redis 等
- 重啟相應(yīng)服務(wù)器軟件 supervisor nginx 等
setup.sh腳本
# 換源
ln -f -s /var/www/web/misc/sources.list /etc/apt/sources.list
mkdir -p /root/.pip
ln -f -s /var/www/web/misc/pip.conf /root/.pip/pip.conf
# 裝依賴
apt-get update
apt-get -y install nginx
echo 'succsss'
echo 'ip'
hostname -I
misc/sources.list下寫入ubuntu源(注意虛擬機(jī)的版本和源的版本一致)
# 默認(rèn)注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 預(yù)發(fā)布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
misc/pip.conf(清華的pip源)
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
通過setup.sh最后的hostname -I可以查看當(dāng)前虛擬機(jī)的ip地址,局域網(wǎng)的其他電腦可以通過這個(gè)地址訪問虛擬機(jī),如下

因?yàn)橐呀?jīng)安裝了nginx,默認(rèn)是開啟的,在主機(jī)的瀏覽器輸入192.168.1.14,即可訪問到nginx服務(wù)










