Vagrant 是一個(gè)可創(chuàng)建輕量級(jí)、高復(fù)用性和便于移植的開(kāi)發(fā)環(huán)境的工具。
此文章是作者折騰vagrant的筆記, 希望大家看后,不再去網(wǎng)上搜羅資料, 能順利搭建vagrant環(huán)境。vagrant更新較快, 還建議大家以官網(wǎng)為主。Vagrant官網(wǎng)
面臨的問(wèn)題
- 開(kāi)發(fā)人員設(shè)備不統(tǒng)一, win , Mac , Linux等
- 開(kāi)發(fā)環(huán)境不統(tǒng)一, 各種軟件安裝、版本和依賴管理困難
- 沒(méi)有專業(yè)的人員來(lái)進(jìn)行系統(tǒng)管理
- 換了設(shè)備還要折騰新的開(kāi)發(fā)環(huán)境
如果你希望本地開(kāi)發(fā), 同時(shí)擁有統(tǒng)一的開(kāi)發(fā)環(huán)境, Vagrant 可以幫你搞定。
實(shí)戰(zhàn):Windows下,使用Vagrant部署Linux 開(kāi)發(fā)環(huán)境
安裝VirtualBox
下載 Vagrant
-
下載安裝Windows版
window版是msi安裝文件,直接界面安裝即可。
如果下載centos版本,是rmp包
rpm -ivh vagrant_1.8.1_x86_64.rpm
安裝 Vagrant
mkdir vagrant_getting_started
cd vagrant_getting_started
vagrant init
執(zhí)行init命令后, 會(huì)在當(dāng)前目錄生成一個(gè)配置文件 Vagrantfile
添加Vagrantbox
vagrant box add hashicorp/precise64
vagrant up
其中 hashicorp/precise64 是在(https://atlas.hashicorp.com/boxes/search)這里定義的, 會(huì)直接從網(wǎng)絡(luò)下載鏡像。
鑒于下載速度極慢,Vagrantbox還可以支持下載好直接本地add.
- Vagrantbox資源及下載到本地
- 安裝操作系統(tǒng)鏡像, 例如我們下載一個(gè)centos鏡像
[CentOS 6.5 x86_64](https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box]
從本地添加vbox
mkdir vagrant_getting_started
mkdir vagrant_vbox #centos65-x86_64-20140116.box 下載到此目錄
cd vagrant_getting_started
vagrant box add centos65 vagrant_vbox/centos65-x86_64-20140116.box
vagrant up
其中centos65是我們自定義的vbox鏡像命名,vagrant_vbox/centos65-x86_64-20140116.box是vbox下載鏡像的本地路徑。
查看已經(jīng)添加的box列表
vagrant box list
centos65 (virtualbox, 0)
說(shuō)明添加成功。
接下來(lái)可以配置Vagrantfile
Vagrant.configure(2) do |config|
#box add 的名字
config.vm.box = "centos65"
#Vagrant的三種網(wǎng)絡(luò)配置
#端口映射(Forwarded port) 把宿主計(jì)算機(jī)的端口映射到虛擬機(jī)的某一個(gè)端口上,訪問(wèn)宿主計(jì)算機(jī)端口時(shí),請(qǐng)求實(shí)際是被轉(zhuǎn)發(fā)到虛擬機(jī)上指定端口的。
#例如下面的配置,將訪問(wèn)宿主計(jì)算機(jī)8080端口的請(qǐng)求都轉(zhuǎn)發(fā)到虛擬機(jī)的80端口上進(jìn)行處理 #訪問(wèn)localhost:8080,對(duì)應(yīng)訪問(wèn)虛擬機(jī)的80端口
#優(yōu)點(diǎn):容易實(shí)現(xiàn)外網(wǎng)訪問(wèn)虛擬機(jī)
#缺點(diǎn):端口比較多時(shí),配置麻煩;不支持在宿主機(jī)器上使用小于1024的端口來(lái)轉(zhuǎn)發(fā)。比如:不能使用SSL的443端口來(lái)進(jìn)行https連接。
config.vm.network "forwarded_port", guest: 80, host: 8080
#私有網(wǎng)絡(luò)(Private network) ,只有主機(jī)可以訪問(wèn)虛擬機(jī),如果多個(gè)虛擬機(jī)設(shè)定在同一個(gè)網(wǎng)段也可以互相訪問(wèn),當(dāng)然虛擬機(jī)是可以訪問(wèn)外部網(wǎng)絡(luò)的。
#優(yōu)點(diǎn):安全,只有自己能訪問(wèn)
#缺點(diǎn):因?yàn)樗接械脑?,所以團(tuán)隊(duì)成員其他人不能和你協(xié)作
config.vm.network "private_network", ip: "192.168.33.10"
#公有網(wǎng)絡(luò)(Public network) ,虛擬機(jī)享受實(shí)體機(jī)器一樣的待遇,一樣的網(wǎng)絡(luò)配置,vagrant1.3版本之后也可以設(shè)定靜態(tài)IP。
#優(yōu)點(diǎn):方便團(tuán)隊(duì)協(xié)作,別人可以訪問(wèn)你的虛擬機(jī)
#缺點(diǎn):需要有網(wǎng)絡(luò),有路由器分配IP
config.vm.network "public_network", ip: "192.168.12.253"
#設(shè)置文件同步,如下 ../www_data 是本地目錄, /vagrant_data是虛擬機(jī)文件目錄
#兩個(gè)目錄設(shè)置為同步,這樣就可以直接本地編輯文件,使用虛擬機(jī)配置的軟件環(huán)境了。
config.vm.synced_folder "../www_data", "/vagrant_data"
啟動(dòng)虛擬機(jī)
vagrant up
配置ssh 登錄
vagrant ssh
執(zhí)行此命令后,vagrant會(huì)生成ssh配置,
hostname: localhost
port: 2222
Connection Type: SSH
User Name: vagrant
Password: vagrant
使用ssh 工具 , 如 xshell 即可登錄虛擬機(jī)
另外,登錄到虛擬機(jī)如果想使用root,可以配置root密碼
sudo passwd root
打包分發(fā)
當(dāng)你配置好開(kāi)發(fā)環(huán)境后,退出并關(guān)閉虛擬機(jī)。在終端里對(duì)開(kāi)發(fā)環(huán)境進(jìn)行打包
vagrant package
打包完成后會(huì)在當(dāng)前目錄生成一個(gè) package.box 的文件,將這個(gè)文件傳給其他用戶,其他用戶只要添加這個(gè) box 并用其初始化自己的開(kāi)發(fā)目錄就能得到一個(gè)一模一樣的開(kāi)發(fā)環(huán)境了。
也可以把配置文件打包進(jìn)box
vagrant package --vagrantfile Vagrantfile
Vagrant 常用命令
Vagrant的命令很多.官網(wǎng)上有 完整的列表, 這里會(huì)介紹一些常用的.
vagrant up
vagrant up這會(huì)運(yùn)行基于 Vagrantfile配置文件的vagrant. 我用來(lái)啟動(dòng)和重啟開(kāi)發(fā)環(huán)境.
vagrant suspend
vagrant suspend 這個(gè)能暫停當(dāng)前環(huán)境操作. 最好在關(guān)機(jī)前做好這一步,以防下次開(kāi)機(jī)配置無(wú)法恢復(fù).
Starting, Pausing, and Resuming: 啟動(dòng)和重啟可以直接使用vagrant up. 所有之前的狀態(tài)都會(huì)被保存起來(lái).
vagrant destroy
vagrant destroy永久性的移除你的虛擬環(huán)境.
vagrant reload
vagrant reload 和vagrant reload --provision如果環(huán)境掛了,可以重啟.如果加了--provision, 就會(huì)恢復(fù)資料庫(kù). 這在使用Cookbooks 或Puppet移除或添加?xùn)|西時(shí)很有效果.
vagrant ssh
vagrant ssh所有公共文件夾中的操作都會(huì)同步到虛擬環(huán)境,但如果需要直接操作可使用該命令.
vagrant ssh-config
vagrant ssh-config這個(gè)顯示連接到虛擬環(huán)境的所有配置項(xiàng)信息.