Vagrant的安裝及使用

'Vagrant'

Vagrant 簡介

Vagrant 是一款用來構建虛擬開發環境的工具,非常適合 php/python/ruby/java 這類語言開發 web 應用,“代碼在我機子上運行沒有問題”這種說辭將成為歷史。

我們可以通過 Vagrant 封裝一個 Linux 的開發環境,分發給團隊成員。成員可以在自己喜歡的桌面系統(Mac/Windows/Linux)上開發程序,代碼卻能統一在封裝好的環境里運行,非常霸氣。

當然啦,如果你和我一樣有系統潔癖的話,也非常推薦使用 Vagrant 。畢竟電腦上經常莫名其妙會安裝各種環境,導致有時候開發項目并不清楚究竟項目的依賴環境具體有哪些,使用 Vagrant 是一個很有逼格的解決方案。我自己的 Surface 和 Mac 都搭建了各種 Vagrant 的虛擬環境——有專門運行 Hexo 博客的,有專門運行 Wordpress 的,也有專門用來學習 Linux 的……

當然如果你用各種虛擬機如 VirtualBox、VMware、AWS、Parallels Desktop 來搭建虛擬開發環境也沒有什么不可以。但是我這里還是安利一下 Vagrant 。用 Vagrant 來裝,不僅安裝起來更方便快捷,而且后面真正開發中也會有很多好處。

Vargant的優點

1、 統一開發環境。一次配置打包,統一分發給團隊成員,統一團隊開發環境,解決諸如“編碼問題”,“缺少模塊”,“配置文件不同”帶來的問題;

2、 避免重復搭建開發環境。新員工加入,不用浪費時間搭建開發環境,快速加入開發,減少時間成本的浪費;

3、 多個相互隔離開發環境。可以在不用box里跑不同的語言,或者編譯安裝同一語言不同版本,搭建多個相互隔離的開發環境,卸載清除時也很快捷輕松。

安裝步驟

1、安裝 VirtualBox

VirtualBox 是一個免費開源的虛擬機,相對 VMware 來說更加小巧,個人比較喜歡。

下載地址:https://www.virtualbox.org/wiki/Downloads

雖然 Vagrant 也支持 VMware,不過 VMware 是收費的,對應的 Vagrant 版本也是收費的。

2、安裝 Vagrant

下載地址:http://downloads.vagrantup.com

有 Windows 版,也有 Mac 版,找到適合自己的包來安裝就好了,和安裝別的軟件沒啥區別,我這里就不演示了,雙擊來安裝,到終端中執行:

vagrant -v

如果看到輸出,表示已經裝好了。

3、到 vagrantcloud 上找一個 box鏡像 并添加

如果你要其他系統的鏡像,可以來這里下載:http://www.vagrantbox.es
www.vagrantbox.es

可以看到這里有上百種不同的鏡像,而且全部都可以通過命令行一鍵安裝。(但是國內的網絡會經常失敗。)

所以也可以下載之后再安裝。

添加鏡像語法
vagrant box add [名稱] [源路徑]
添加 ubuntu 鏡像并命名為 ubuntu_base

已經下載好的 源文件路徑: E:\resource\Vagrant\trusty-server-cloudimg-amd64-vagrant-disk1.box

vagrant box add ubuntu_base E:\resource\Vagrant\trusty-server-cloudimg-amd64-vagrant-disk1.box

輸出的一部分內容

F:\vagrant_base>vagrant box add ubuntu_base E:\resource\Vagrant\trusty-server-cloudimg-amd64-vagrant-disk1.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu_base' (v0) for provider:
    box: Unpacking necessary files from: file:///E:/resource/Vagrant/trusty-server-cloudimg-amd64-vagrant-disk1.box
    box: Progress: 100% (Rate: 540M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'ubuntu_base' (v0) for 'virtualbox'!

4、初始化開發環境

這個就是我要的64位 ubuntu14.04 系統。先新建一個新的目錄,然后進入目錄,到終端里執行初始化命令:

vagrant init ubuntu_base

接下來執行開機命令,就會進入安裝:

vagrant up

輸出信息

F:\vagrant_base>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu_base'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_base_default_1481788759445_62713
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key

等個幾分鐘左右,就安裝成功了。

成功之后可以輸入一下命令可以連接進虛擬機:

vagrant ssh  

連接成功后會進入到虛擬機的 bash 中,并且會展示虛擬機的環境。

windows 執行結果

F:\vagrant_base>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use your favorite SSH client with the following
authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: F:/vagrant_base/.vagrant/machines/default/virtualbox/private_key

F:\vagrant_base>

Windows 用戶注意:Windows 終端并不支持 ssh,所以需要安裝第三方 SSH 客戶端,比如:Putty、Cygwin 等。我使用Xshell。
因為自動導出私鑰了,所以 直接用密鑰文件進登陸即可, 下面是xshell的配置過程。


添加主機
配置賬號密碼, 選擇密鑰文件登陸
登陸成功界面

宿主機的交換目錄

其中,vagrant 的 /vagrant目錄是與宿主機的交換目錄。可以很方便的實現在宿主機編碼,在虛擬機運行。


虛擬機中的地址 /vagrant
本地話環境的地址, 就是安裝目錄,內容是同步的

修改虛擬機內存

登陸到虛擬機里面,默認的用戶叫做 vagrant,可以用 whoami 查看一下。再查看一下內存,用 free -m 命令,發現默認內存大小還不到500M,所以敲 Ctrl-D 退出來。添加下面幾行到 Vagrantfile 文件。

config.vm.provider "virtualbox" do |v|
  v.memory = 2048
end

文件內容


編輯后的文件內容

然后執行:

vagrant reload

來加載設置就可以了。

加載過程

編輯后的文件內容

修改 訪問方式為 host-only

Vagrant 默認是使用端口映射方式將虛擬機的端口映射本地從而實現類似 http://localhost:80 這種訪問方式,這種方式比較麻煩,新開和修改端口的時候都得編輯。相比較而言,host-only 模式顯得方便多了。打開 Vagrantfile,將下面這行的注釋去掉(移除 #)并保存:

config.vm.network :private_network, ip: "192.168.20.14"

重啟虛擬機,這樣我們就能用 192.168.20.14 訪問這臺機器了,你可以把 IP 改成其他地址,只要不產生沖突就行。

打包分發

當你配置好開發環境后,退出并關閉虛擬機。在終端里對開發環境進行打包:

vagrant package

打包完成后會在當前目錄生成一個 package.box 的文件,將這個文件傳給其他用戶,其他用戶只要添加這個 box 并用其初始化自己的開發目錄就能得到一個一模一樣的開發環境了。

集成預安裝

從上面這條看下來,你會發現每次都修改了一點點內容,再打包分發給其他用戶其實很麻煩。為此 Vagrant 還提供了更為便捷的預安裝定制。打開 Vagrantfile 文件末尾處有下面被注釋的代碼:

config.vm.provision "shell", inline: <<-SHELL
   apt-get update
   apt-get install -y apache2
SHELL

沒錯,這段代碼就是讓你在初次運行 vagrant up 后,虛擬機創建過程眾自動運行的初始化命令。 取消注釋,把要預先安裝的 php/mysql/redis 和配置之類的通通都寫進去。初始化時這些程序都會根據你寫好的方法安裝并配置。

如果你不是初次運行,同時又修改了這里的命令,想讓系統再次運行這里面的命令,你可以使用 vagrant reload --provision 進行重載。所以在這種情況下,你只要將 Vagrantfile 共享給團隊的其他成員就可以了,其他成員運行相同的命令即可,是不是比打包分發要方便許多。

你還可以把要運行的命令單獨寫在一個文件里存放在相同的目錄下,比如 bootstrap.sh:

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi

然后在 Vagrantfile 里這樣添加:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  ...

  config.vm.provision "shell", path: "bootstrap.sh"  # 添加這行
end

效果和直接寫在 Vagrantfile 是一樣的。

注意事項

使用 Apache/Nginx 時會出現諸如圖片修改后但頁面刷新仍然是舊文件的情況,是由于靜態文件緩存造成的。需要對虛擬機里的 Apache/Nginx 配置文件進行修改:

# Apache 配置(httpd.conf 或者 apache.conf)添加:
EnableSendfile off

# Nginx 配置(nginx.conf)添加:
sendfile off;

常用命令

vagrant init  # 初始化
vagrant up  # 啟動虛擬機
vagrant halt  # 關閉虛擬機
vagrant reload  # 重啟虛擬機
vagrant ssh  # SSH 至虛擬機
vagrant status  # 查看虛擬機運行狀態
vagrant destroy  # 銷毀當前虛擬機
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容