2011年8月27日

快快樂樂飛向雲端 VMWare Micro Cloud Foundry 與 Ruby on Rails 實例測試

Cloud Foundry 是虛擬化技術龍頭 VMWare 推出的開放源碼雲端平台(PaaS)解決方案,從四月開始我們持續觀察它的後續發展。這幾個月雖然持續有相關文件出現,但是想玩 Cloud Foundry 的人應該還是看得霧煞煞,因為處於開發及封閉測試階段,早期參與者需要自己從 GitHub 專案區挖寶

直到最近 Cloud Foundry 正式發佈 Micro 版本,提供虛擬機器下載,可以輕鬆利用私有伺服器架造雲。從無到有建構自己的私有雲服務,並且將 DEMO 專案發佈到雲端,前後大約只要花費一小時,就能一探究竟。

需要更多介紹?請參考本誌過去發表過的 Cloud Foundry 文章:
  1. Micro Cloud Foundry 1.0 發佈 
  2. 開放源碼的Cloud Foundry打造PaaS
本次的實測,伺服器是 Ubuntu 10.04 + VirtualBox 4.0,利用免費的 VirtualBox 就能順利執行下載的 Micro 虛擬機器(需要將 .vmdk 掛載到 vbox 新建的 Ubuntu / 64bit VM)。

虛擬機器調整兩個部份:(1)記憶體配置給予1GB空間、(2)網路卡設定成橋接模式。

Micro 第一次開機會要求進行設定,主要是指派 IP 位址及提供 Cloud Foundry 配發的 configuration token。雖然 IP 設定有 DHCP / Static 兩種,但是為讓 XXX.cloudfoundry.me 的 domain 可以正確指向對外實體 IP 位址,因此直接使用 Static 設定靜態位址比較方便(除非有架設 DHCP 可以把對外實體 IP 配發給虛擬機器)。

從 Cloud Foundry 取得的 domain 名稱長這樣: XXX.cloudfoundry.me
若要將開發好的軟體專案,發佈到 Micro Cloud Foundry 架設的 private cloud,就是使用 api.XXX.cloudfoundry.me

Micro Cloud Foundry 伺服器畫面
虛擬機器設定完成後,必須等待一段時間,讓服務可以啟動完成。從 service status 可以觀察目前各服務的執行狀態,這裡面包含 Nginx 、 MySQL 、 Redis 、 MongoDB。這樣的配置很顯然就是要讓伺服器能耐得住大量連線負載。

服務狀態顯示
在開發機器上需要使用 vmc 指令(Cloud Foundry's Command-line Interface, CLI),才能發佈軟體專案。以下使用 Ubuntu 11.04 的開發環境為例。

首先要確認 Ruby 及 RubyGems 開發工具是否已經完成安裝。

sudo apt-get install ruby-full
sudo apt-get installl rubygems

安裝好 rubygems 系統就會有 gem 指令,利用它將 vmc 裝上。

sudo gem install vmc

如果打 vmc 找不到指令,必須手動加上 PATH 設定。

export PATH=/var/lib/gems/1.8/bin:$PATH

再來使用 vmc 設定目標服務器,XXX 就是 Cloud Foundry 配發的 domain 名稱。

vmc target api.XXX.cloudfoundry.me

然後使用 Cloud Foundry 註冊的帳號(E-Mail)及密碼登入驗證。

vmc login

以上就設定完成 vmc 所需的配置。

我們的第一個 DEMO 專案,將採用 Ruby on Rails 建立。因為目前 Cloud Foundry 僅支援 Rails 3 以上的版本,如果使用 apt 安裝 Ubuntu 套件庫的 rails,版本為 2.x 不符合需求。目前使用 gem 安裝的 rails 預設就是 3.0.10。

sudo gem install rails

檢查一下 rails 版本,沒問題就可以繼續。若版本抓錯,可以考慮用 sudo apt-get purge rails 將之前的安裝移除,再確定 gem 裝得版本沒問題。

gem list
rails -v

因為 rails 預設的資料庫採用 sqlite3 ,為了測試方便我們不想改為 MySQL,所以還要補裝 sqlite3 相關套件。

sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3

終於可以建立 rails 專案了,命名為 hello 吧(new 是 rails3+ 才需要的指令)!

rails new hello

切換到新專案資料夾。

cd hello

先檢查、補裝相依套件。

bundle package; bundle install

在本地端測試 rails 專案是否可以順利執行。

rails server

使用瀏覽器打開 http://localhost:3000/ 有看到畫面就是成功,回到終端機用 ctrl+c 把測試伺服器結束。

再來就是要把專案「推」向雲端。

vmc push

它會出現一些 Y 或 N 的問題,通常用預設值就搞定。其中 Application Name 是發佈到雲端之後的應用程式名稱,會影響網址,例如命名為 hello 發佈後就是: http://hello.XXX.cloudfoundry.me/ 。

如果你也跟我一樣僥倖發佈成功,畫面應該是長這樣:

vmc push

那...如果發佈失敗怎麼辦?

還記得李教授曾經說過:死了就上雲端啦!

如果在本地測試成功的專案,發佈到雲端失敗,剛開始還真的覺得死不瞑目吶!!!

現階段 vmc push 之後如果失敗,並不會顯示什麼有用的錯誤訊息,但是在遠(雲)端主機上會留下 log 檔,使用 vmc files 指令可以查看 log 記錄內容。

vmc files hello

輸出:
app/                                         -
logs/                                        -

vmc files hello logs/

輸出:
migration.log                             201B
staging.log                              1006B
stderr.log                                185B
stdout.log                                149B

vmc files hello logs/stderr.log

輸出:
[2011-08-27 11:19:18] INFO  WEBrick 1.3.1
[2011-08-27 11:19:18] INFO  ruby 1.8.7 (2010-08-16) [x86_64-linux]
[2011-08-27 11:19:18] INFO  WEBrick::HTTPServer#start: pid=10276 port=38902

有 log 訊息可以參考,應該比較瞑目了。

快快樂樂馬後炮:如果沒有良好且盡可能完整的測試,就把專案發佈到雲端,出錯要找問題其實相當麻煩。因此 Test-Driven Development 就更顯得重要了。如果軟體專案要為雲端做好準備,請記得測試、要測試、要先寫測試,否則很有可能...專案死了以後它自己上雲端了。

1 則留言:

  1. 看起來還在許願階段:
    http://support.cloudfoundry.com/entries/20053652-database-dump-backup

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!