Vagrant 是個相當方便的工具,可以用來整備(provision)開發、測試所需的服務器, 隨著它開始支援不同的雲端虛擬機供應商,甚至也可以使用它來整備生產環境。 雖然在雲端虛擬機整備這塊跟 Ansible 或者 Saltstack 有所重疊,但由於可以支援從開發、測試到生產環境的整備,Vagrant 還是值得探討更多應用的可能性。
除了本地虛擬機外,Vagrant 也可以支援多種不同的雲端虛擬機平台,像是 DigitalOcean, Amazon EC2, 等等。 但沒有支援 Linode 這點倒是讓山姆鍋有點不能理解,因為像是 Ansible 或者Saltstack 都有支援 Linode。 不管如何,本文介紹如何讓 Vagrant 可以部署虛擬機到 DigitalOcean 這個平台上。
- 關聯文章:微型企業之雲端虛擬服務器
安裝 DigitalOcean Vagrant Provider
Vagrant 的虛擬機支援是藉由 Provider 插件來提供,由於它本身不內建支援 DigitalOcean, 需要使用這個 DigitalOcean Vagrant Provider ⎘ 。 安裝上還算簡單,只要使用下列指令:
$ vagrant plugin install vagrant-digitalocean
如果您跟山姆鍋一樣都是使用 Mac 系統的話,還需要安裝一個 CA bundle 套件讓 Vagrant 可以透過 SSL 跟 DigitalOcean 系統通訊。 使用 Homebrew 安裝這個套件最簡單,只要使用:
$ brew install curl-ca-bundle
安裝完這個套件,將下列環境變數加入您的~/.bash_profile 中:
export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
記得要開啟新的 shell 視窗或者 source ~/.bash_profile 來讓設定生效。
設定 Vagrant 使用 DigitalOcean
跟其它 Vagrant 專案一樣,需要在 Vagrantfile 中修改設定:
Vagrant.configure('2') do |config|
config.vm.provider :digital_ocean do |provider, override|
override.ssh.private_key_path = '~/.ssh/id_rsa'
override.vm.box = 'digital_ocean'
override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
provider.client_id = 'YOUR CLIENT ID'
provider.api_key = 'YOUR API KEY'
provider.image = "Ubuntu 12.10 x64"
provider.region = "New York 2"
end
end
其中,‘YOUR_CLIENT_ID’ 是您在 DigitalOcean ⎘ 的 Client ID; ‘YOUR API KEY’ 則是存取 DigitalOcean 需要的祕鑰,如果還沒有,您可以產生新的祕鑰。
可以使用的參數有:
provider.image
- 欲使用的系統映像(image)名稱, 例如:Ubuntu 12.10 x64
,這也是預設值。provider.region
- 新建立的 Droplet 要位於哪個區域,預設是`New York 2`。provider.size
- 指定虛擬機的容量規格,預設是`512MB`。provider.private_networking
- 指定是否支援私有網路,不是每個區域都支援,預設是`false`。provider.ssh_key_name
- 用來認證 Droplet 連線的 SSH key 的名稱,預設是`Vagrant`。provider.setup
- 只是是否需要建立新的使用者帳戶,預設是`true`。
部署虛擬機
跟部署其它虛擬機其實沒有太大的不同,只是需要額外指定使用的 Provider:
$ vagrant up --provider digital_ocean
結語
從本文不難看出,除了需要另外安裝 Provider 插件外,跟使用其它虛擬機技術沒有太大差異 (跟使用的 Provider 有關)。針對 DigitalOcean Vagrant Provider 要注意的是: 它目前只能從現有的系統映像來建立新的 droplet(DigitalOcean 的 VM), 尚不支援使用 snapshot 來建立。這也就是說, 使用的映像沒有預先安裝像是 Puppet/Chef 這種來進一步配置系統的工具! 關於如何處理這個問題,山姆鍋會另外寫一篇文章來說明。