1. 程式人生 > 實用技巧 >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

可以看到這裡有上百種不同的映象,而且全部都可以通過命令列一鍵安裝。(但是國內的網路會經常失敗。)

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

新增映象語法
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

整合預安裝

從上面這條看下來,你會發現每次都修改了一點點內容,再打包分發給其他使用者其實很麻煩。為此 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  # 銷燬當前虛擬機器

轉載:https://www.jianshu.com/p/d3398b2e3f4f