Vagrant在Windows下安裝及注意事項

pythontab發表於2015-07-08

做Web開發少不了要在本地搭建好開發環境,雖然說目前各種指令碼都有對應的Windows版,甚至是一鍵安裝包,但很多時候和Windows環境的相性並不是那麼好,各麻煩的問題是實際部署的環境通常是Linux,常常還要面臨著開發和部署環境不一致,上線前還要大量的除錯。

Windows下玩Linux少不了虛擬機器,但裝系統依舊是相當費事。在現在什麼都在自動化的今天,Vagrant就是這麼一個神器,基於Ruby開發,使用開源 VirtualBox 作為虛擬化支援,可以輕鬆的跨平臺部署。

今天試著把幾臺機器的環境都換成Vagrant,很爽很順暢,我本人實測發現,執行一個centos只需要不到60兆記憶體,相當的給力。

下面說下安裝步驟,順便把注意點說一下!

準備工作:

下載安裝 VirtualBox :https://www.virtualbox.org/

下載安裝 Vagrant :http://www.vagrantup.com/

下載需要使用的 box :

官方提供的範例:http://files.vagrantup.com/precise32.box

還可以在 http://www.vagrantbox.es/ 這裡下載更多不同系統甚至是已經配置好環境直接可以用的box,雖然可以直接在Vagrant直接使用網址,由Vagrant自動下載安裝,但是考慮到網路情況,還是建議自行先下載好。

由於習慣用CentOS,於是我就下了CentOS 6.3 x86_64 minimal,這個Box根據個人情況進行選擇即可。

設定環境:

安裝完成並且重啟好系統之後就可以開始設定環境了。

首先在本地建立好工作目錄,並在命令列下切換到對應目錄

vagrant box add base CentOS-6.3-x86_64-minimal.box

base 表示指定預設的box,也可以為box指定名稱,比如 centos63 ,使用base時,之後可以直接使用 vagrant init 進行初始化,如果自行指定名稱,則初始化的時候需要指定box的名稱。

CentOS-6.3-x86_64-minimal.box 是box對應的檔名,這裡可以是本地儲存box的路徑,也可以是可以下載box的網址,如果是網址的話,Vagrant會自動啟動下載。

[vagrant] Downloading with Vagrant::Downloaders::File...
[vagrant] Copying box to temporary location...
[vagrant] Extracting box...
[vagrant] Verifying box...
[vagrant] Cleaning up downloaded box...

設定好box之後,在當前工作目錄執行

vagrant init

生成對應的Vagrantfile。透過文字編輯器開啟Vagrantfile可以進行一些進一步的常用配置:

網路配置:

Vagrant的網路有三種模式

1、較為常用是埠對映,就是將虛擬機器中的埠對映到宿主機對應的埠直接使用 ,在Vagrantfile中配置:

config.vm.network :forwarded_port, guest: 80, host: 8080

guest: 80 表示虛擬機器中的80埠, host: 8080 表示對映到宿主機的8080埠。

2、如果需要自己自由的訪問虛擬機器,但是別人不需要訪問虛擬機器,可以使用private_network,併為虛擬機器設定IP ,在Vagrantfile中配置:

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

192.168.1.104 表示虛擬機器的IP,多臺虛擬機器的話需要互相訪問的話,設定在相同網段即可

3、如果需要將虛擬機器作為當前區域網中的一臺計算機,由區域網進行DHCP,那麼在Vagrantfile中配置:

config.vm.network :public_network

目錄對映:

既然是開發環境,那麼開發工作肯定還是需要在本地完成,而不是都要進到虛擬機器中去完成,虛擬機器就好好在後臺執行服務就好了,不然就本末倒置了,所以這裡就需要使用目錄對映功能,將本地的目錄對映到虛擬機器的對應目錄。

預設情況下,當前的工作目錄,會被對映到虛擬機器的 /vagrant 目錄,當前目錄下的檔案可以直接在 /vagrant 下進行訪問,當然也可以在透過 ln 建立軟連線,如

ln -fs /vagrant/wwwroot /var/www

來進行目錄對映,當然,從自動化配置的角度,能不進系統就不需要進系統,所以在Vagrant也可以進行目錄對映的操作:

config.vm.synced_folder "wwwroot/", "/var/www"

前面的引數 “wwwroot/”  表示的是本地的路徑,這裡使用對於工作目錄的相對路徑,這裡也可以使用絕對路徑,比如: “d:/www/”

後面的引數 “/var/www” 表示虛擬機器中對應對映的目錄。

執行指令碼:

雖然不是必須,但是如果有需要在啟動時執行一些指令碼(環境的安裝或者有些服務的啟動需要在完成目錄對映之後進行),可以編輯指令碼,類似如下(摘自Vagrant Document):

#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

儲存在和Vagrantfile相同目錄,檔名自取(如 boot.sh),然後在Vagrantfile中新增:

config.vm.provision :shell, :path => "boot.sh"

 當初次使用基本的設定都完成則之後,則可以使用 vagrant up 啟動虛擬機器

Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] You are trying to forward to privileged ports (ports < = 1024). Most operating systems restrict this to only privileged process (typicallyprocesses running as an administrative user). This is a warning in case
the port forwarding doesn't work. If any problems occur, please try a port higher than 1024.
[default] Forwarding ports...
[default] -- 22 => <strong>2222</strong> (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can cause things such as shared folders to not work properly. If you see shared folder errors, please update the guest additions within the virtual machine and reload your VM.
Guest Additions Version: 4.1.18
VirtualBox Version: 4.2
[default] Mounting shared folders...
[default] -- /var/www
[default] -- /vagrant
[default] Running provisioner: shell...

虛擬機器啟動之後則可以透過 vagrant ssh 聯入虛擬機器進行進一步的環境配置,或者軟體安裝相關的工作,在Windows系統下,並不能直接透過 vagrant ssh 連到虛擬機器,需要使用 Putty,Xshell 等第三方工具進行連線

連線的IP和埠根據網路環境配置的不同有所不同,如果是預設使用埠對映的話,一般是連線 本地的2222埠。

登入的帳號密碼均為 vagrant ,登入之後如果需要 su root ,密碼也是 vagrant

注:使用 vagrant ssh 時,會提示可以使用金鑰進行登入,如果需要使用putty進行金鑰登入的話,需要下載 puttygen 將 ssh 的金鑰轉換為 ppk 檔案才能使用。

登入ssh完成環境的配置,如果在開發環境中使用webserver(nginx/apache)為了避免一些靜態檔案處理的問題,可能還需要進行一些額外的配置:Vagrant下共享目錄靜態檔案(js/jpg/png等)“快取”問題

在不進入虛擬機器的情況下,還可以使用下面的命令對 虛擬機器進行管理:

vagrant up (啟動虛擬機器)
vagrant halt (關閉虛擬機器——對應就是關機)
vagrant suspend (暫停虛擬機器——只是暫停,虛擬機器記憶體等資訊將以狀態檔案的方式儲存在本地,可以執行恢復操作後繼續使用)
vagrant resume (恢復虛擬機器 —— 與前面的暫停相對應)
vagrant destroy (刪除虛擬機器,刪除後在當前虛擬機器所做進行的除開Vagrantfile中的配置都不會保留)
當在啟動Vagrant後,對於虛擬機器有進行過安裝環境相關的配置,如果並不希望寫在Vagrant的啟動shell裡面每次都重新安裝配置一遍,可以將當前配置好的虛擬機器打包成box,
vagrant package --output NAME --vagrantfile FILE

可選引數:

--output NAME : (可選)設定透過NAME來指定輸出的檔名

--vagrantfile FILE:(可選)可以將Vagrantfile直接封進box中

注:如果網路模式中使用 private_network 的話,在打包之前需要清除一下private_network的設定,避免不必要的錯誤:

sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

製作完成之後直接將box檔案拿到其他計算機上配置即可使用。


注意點: 1.如果在windows下無法啟動,則可以開啟box的gui端,這樣就可以看到出現什麼問題。

開啟方法:

修改Vagrantfile檔案,新增一下內容:

config.vm.provider :virtualbox do |vb|

  vb.gui = true

end

我就遇到了這個問題,虛擬機器需要VT虛擬技術支援,所以要開啟VT


相關文章