Vagrant MongoDB VirtualBox

虛擬佈署工具Vagrant與MongoDB

莊興旺 2018/06/01 15:32:27
2038

虛擬佈署工具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   可安裝在 DebianWindowsCentOSLinuxMacOSArch Linux

 

. Vagrant官網

 

l   驗證安裝成功

 

註:需注意VagrantVirtualBox版本的相容性

 

注意事項

l   Vagrantfile:對我來說就是 Vagrant 啟動時的腳本(配置檔)。

Ø  指定CentOSBox下載和使用

 

Ø  其他參數

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

4.         配置轉址埠

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目錄

"目錄" 前者是 hostWindows)後者是guestLinux

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   BoxVagrant初次建立VM的底層,當不同的VM使用同樣的Box配置,只需下載一次,後續使用差異的部分再疊床架屋在 Box 上。

l   VM映像檔隨著操作和安裝逐漸膨脹,執行 vagrant destory [id] 刪除VM,修改scriptVagrantfile,拿掉用不到的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.         建立CentOS7Vagrantfile(或從別處拷貝)

 

 

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 Console28017 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整合,所以它們不是競爭關係喔 !!!

莊興旺