虛擬佈署工具Vagrant與MongoDB
虛擬佈署工具Vagrant與MongoDB
簡介 |
在開發系統時,有時會建置虛擬環境做開發與營運(Development and Operations, DevOps)。但多人同時開發時,如果共用一台遠端VM,一旦動到共用項目,就容易相互影響。Vagrant提供Portable的方式佈署虛擬環境,供不同開發成員一致性的環境,做為開發測試用。 |
作者 |
莊興旺 |
虛擬佈署工具Vagrant與MongoDB
Vagrant介紹
小什:阿魯,怎麼在發呆,上班偷懶喔?
阿魯:就我測試環境的VM髒了,想建個新的。下載ISO檔老半天,剛掛載後完成初始設定,正在等它安裝。
小什:哪尼?你知道有種東西叫Vagrant嗎?只要兩行Vagrant指令就完成VM安裝。

圖. Vagrant Logo
Vagrant 是什麼
簡單的說,它就是輕量化VM管理工具。
Vagrant是一款用於構建及配置虛擬開發環境的軟體,基於Ruby,主要以命令行的方式運行。(維基百科)
我對Vagrant的了解
1. Vagrant 是讓 VM更方便配置、重建、分享的工具。
2. 基於Provider (VirtualBox, VMware, AWS, Docker …) 之上建置 VM。
3. 搭配其他的配置管理工具(Shell, Ansible, Chef, Docker, Puppet, Salt …),自動安裝軟體。
需要用VM做測試/開發,就適合使用Vagrant。
從下列3種角色來看:
1. 維運工程師
可快速提供虛擬環境給開發團隊和前端工程師(減少架設多個VM);測試安裝維運腳本,並整合新版開發程式。
2. 開發團隊
減少準備環境的時間(等於複製完整的VM);使用自己的VM環境開發(減少其他人員干擾)
3. 前端工程師
拿到維運工程師提供的Vagrantfile檔案,就不用再請人"安裝/啟動"後端程式,可以專心設計Web App;弄髒了也可以自己重建VM
準備環境
假設我是 Windows 用戶,打算使用Vagrant幫我管理VirtualBox。
1. 安裝 VirtualBox https://www.virtualbox.org/wiki/Downloads

圖. VirtualBox管理員介面
2. 安裝 Vagrant https://www.vagrantup.com/downloads.html
l 可安裝在 Debian、Windows、CentOS、Linux、MacOS、Arch Linux

圖. Vagrant官網
l 驗證安裝成功

註:需注意Vagrant和VirtualBox版本的相容性
注意事項
l Vagrantfile:對我來說就是 Vagrant 啟動時的腳本(配置檔)。
Ø 指定CentOS的Box下載和使用

Ø 其他參數
1. 指定主機名稱
n config.vm.hostname = "sethChuang"
2. 配置記憶體(MB)和CPU cores數目
n config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
3. 配置 VM的 IP (eth1網卡)
n config.vm.network: private_network, ip: "192.168.22.101"
預設會有 NAT 網路卡
可選擇增加 "僅限主機" 介面卡(private_network)
可選擇增加 "橋接介面卡(public_network)
n config.vm.network "forwarded_port", guest: 28017, host: 28017
5. 指定共用資料夾
n config.vm.synced_folder "share", "/home/vagrant/share"
需先建立 share 目錄(與 vagrantfile 在同一目錄下)
VirtualBox 需要先安裝 Guest Additions
guest目錄的路徑不要設定成 home目錄
"目錄" 前者是 host(Windows)後者是guest(Linux)
6. VM啟動後自動執行 shell 指令/腳本
n config.vm.provision "shell", inline: "echo Hello Vagrant", run: "always"
會用 "root" Linux Account 執行
預設的目錄為 /home/vagrant
l Boxes:對我來說就是虛擬硬碟檔案(VDI/VMDK/VHD)。我也能把現行VM打包成Box上傳。
https://app.vagrantup.com/boxes/search

圖. Vagrant Boxes Repository
l Provider:由於Vagrant是管理Provider的工具,所以要有Provider。而Provider就是建立VM的工具,例. VirtualBox, Vmware, Hyper-V, Docker。
l Provisioning:是Vagrant啟動的部分流程,通常整合配置管理工具,例. Shell, Ansible, Chef, Docker, Puppet, Salt …,自動安裝軟體、修改軟體配置。
l 常用指令
1. 版本:vagrant -v
2. 啟動:vagrant up
3. 關閉:vagrant halt
4. 重啟:vagrant reload
5. 連線:vagrant ssh
6. 狀態:vagrant global-status
7. 刪除:vagrant destroy [id]
8. 清單:vagrant box list
9. 更新:vagrant box update
補充說明
l Box存放位置
Ø C:\Users\<用戶名>\.vagrant.d\boxes\<Box名稱>\
l VM映像檔位置
Ø C:\Users\<用戶名>\VirtualBox VMs\<VM名稱>\
l Box是Vagrant初次建立VM的底層,當不同的VM使用同樣的Box配置,只需下載一次,後續使用差異的部分再疊床架屋在 Box 上。
l VM映像檔隨著操作和安裝逐漸膨脹,執行 vagrant destory [id] 刪除VM,修改script和Vagrantfile,拿掉用不到的tool的指令,重建乾淨的VM。
l 執行 vagrant global-status可取得VM的 [id]。
l 執行 vagrant reload會中斷ssh 連線。
l 多台 VM 能共用 shared foler。
l 透過配置 VM的 IP,可以多台 VM 組成 Cluster。
實戰
用Vagrant建立第一支VM

圖. Vagrant Workflow
1. 建立VM專用目錄 (根目錄)

2. 建立CentOS7的Vagrantfile(或從別處拷貝)

3. 啟動(安裝/啟動VM)

4. VM建立完成(使用ssh連線 VM)

5. 預設 Linux 帳號密碼為 vagrant/vagrant,並且具有 sudo 權限。
用Vagrant執行腳本安裝MongoDB
1. 在share folder建立install_MongoDB.sh

註:shell script file 記得要轉成 UNIX格式,避免錯誤訊息。
2. 自訂義Vagrantfile

3. 啟動Vagrant執行shell

4. 在 Host 瀏覽器,連結VM 的 MongoDB HTTP Console(28017 port)

圖. HTTP Console
5. 補充
若是因為種種因素,導致無法使用 synced_folder(共用資料夾),變通的方式就是透過 FileZilla - sftp共用檔案。
除了輸入帳密,還要在 編輯>設定>SFTP> "加入private_key"
private_key路徑:根目錄\.vagrant\machines\default\virtualbox\private_key

圖. FileZilla
打包上傳Box給其他成員用
當開發團隊完成一版程式,交由維運工程師整合到最新的Vagrantfile,確認無誤後,再公開給所有成員使用,繼續開發下一階段。
1. 打包Box

2. 將 package.box 上傳到公司 FTP Server
3. 其他人從公司下載Box加入本地Boxes

4. Vagrantfile指定使用我們打包的Box

5. 將Vagrantfile放入test目錄

最後,小編要補充Vagrant也能跟 Docker整合,所以它們不是競爭關係喔 !!!