藍色巨人 (IBM) 近年來積極發展雲端服務,除了於 2013 年收購 IaaS ( Infrastructure as a Service) 的 SoftLayer 外,今年更推出 Bluemix PaaS (Platform-as-a-Service) 的雲端平台。

Bluemix 簡介
根據官方文件,IBM Bluemix 硬件方面是建基於自家出品 SoftLayer IaaS 平台,至於平台架構則是建基於 Cloud Foundry,故此熟悉 Cloud Foundry 的朋友,於操作和管理 Bluemix 會大有親切的感覺。
Bluemix 的設計和定位為 PaaS ( Platform-as-a-Service ) 的雲端服務平台,其跟 IaaS ( Infrastructure-as-a-Service ) 如 SoftLayer 、 Amazon EC2 等的主要分別在於;
IaaS 是提供整台 VM Server 給用家使用和管理,意則用家要處理 VM Server 上的作業系統 ( OS ) 和軟件 ( Software ) 的安裝、設置和管理,用家甚至可以控制 VM Server 的資源分配如 Storage 、Memory 及 IP 等,VM Server 提供甚麼服務,怎樣提供完完全全掌握於用家手中,其好處是 IaaS 給予用家極大的自由和靈活性 ( Flexibility ) ,但壞處則是跟傳統 On-premises server 一般,您得要找人來管理和設置 VM Server。
PaaS 則是提供一個運行 ( Runtime ) 平台給用家,例如用家需要運行 Java 應用,PaaS 就會提供 ( Provision ) 一個 Java Runtime 給用家去部署 ( Deploy );如用家需要運行 Node.js 應用,就可以向 PaaS 要求一個 Node.js Runtime,而當中用家並不太須要管理 Server 上的資源和設置,也不須要安裝及設定軟件,這對於只懂編程的開發人員或不太懂架設服務伺服器的 StartUps 來說,使用上來會有很大的便利,亦加速了 Time-to-market。當然,壞處就是 Server 的靈活性及專用化 (Customization)則比 IaaS 大大降低了,例如如果那個 PaaS 服務供應商沒有提供 Ruby Runtime 或沒有提供 CouchDB 服務,您就不能自行架起相關的服務,只好期盼它將來會提供相關的 Runtime 或服務或轉到別家的服務供應商。
由於無須花太多的人力資源來管理 Server,PaaS 的出現對於自由工作 ( Freelance ) 的開發人員或得小貓三、四隻的 StartUps 公司來說,不但提昇了工作效率及生產力,更由於 PaaS 亦是 Pay-as-you-go 的收費模式,起始成本 ( Initial Cost) 亦大大降低,我可以預期利用 PaaS 的 Freelancer 或 StartUps 數量將會大大增加,甚至這將會是業界中一種十分普遍營運模式。
IBM 就是看準這個趨勢,今年推出了 Bluemix PaaS 平台,及早於市場佔一席位,試想想現在有很多家受歡迎的網站或手機應用,如 Facebook 、Whatsapp、Angry Bird等,不是本來都是一家寂寂無名的 StartUp?現在又何嘗不是坐擁數以億計的用家的 IT 公司?這個商業模式大概有點像風險創投資金 ( Venture Capital ) 一樣,IBM 投放 1,000 家 StartUp 中,只要有一家能像 Facebook 、Whatsapp 那般做得成功,將來何嘗沒有大客?
Bluemix 的免費套餐
現在登記及加入 Bluemix ,可享有 30 天免費任用,可跑共 2GB 記憶體的 Runtime 應用和共十個服務 (如數據庫、Session Cache 、Server Monitoring 等)。30天後,就必須登記信用咭才可繼續使用,並根據您所選擇服務計劃和使用量來收費。
真失望!只有30 天免費?
其實也不盡然,就算 30 天過後,Bluemix 仍會提供一個免費的套餐 ( Free-tier )。只要一個月內不用超過 375 GB-hours 的 Runtime 就不用收費。 (即足夠應付一個連續執行一個佔用記憶體 512MB 一個月的 Runtime)

除了 Runtime 之外,Bluemix 亦有一大堆服務是有免費套餐或完全不用收費的。例如MySQL、PostgreSQL 、MongoDB 數據庫是不用收費,低用量的 Mobile Push 和 Mobile Data 都不用收費。所以絕對不用怕您不能用 Bluemix 來試驗和開發您心目中的應用程式。收費及免費套餐的詳情可參照此連結。
執行 PHP 應用
要講 Bluemix 的功能,恐怕寫 10 篇 Blogs 也不能盡說。基本上,它的線上文件對每一個 Runtime 和服務都有詳盡的解釋,而且亦是根據 Cloud Foundry 架構來建立,自行研究摸索應該不是甚麼難事。 IBM 亦於這平台上附設了很多 Starter Apps 作為 Demo 之用,大家可以 Deploy 這些 Starter Apps 來測試 Bluemix 的使用方法。它亦增設一些懶人包 (Boilerplates) ,大家一按選擇就自動部署整個 Starter Apps 的 Runtime 及所需要的 dependency services,十分方便。

但官方提供的 Runtime 和 Boilerplates 只提供了 Java 、Node.js 及 Ruby 的支援,那麼廣大的 PHP 應用怎麼辦?是不是就不能利用 Bluemix 平台來開發及部署呢?
答案當然是"不"。幸好 Bluemix 是按照 Cloud Foundry 的架構來建立的,坊間有許多有心人士建立了很多不同的 Community buildpack,大都可以於 Bluemix 上執行,而當中亦不乏能夠執行 PHP 應用的 Buildpack。其中以下的兩個 Community PHP buildpack 的 git respository locations 就可以讓 Bluemix 建立出一個 PHP Runtime 來執行 PHP 應用。
https://github.com/cloudfoundry/cf-buildpack-php.git
https://github.com/dmikusa-pivotal/cf-php-build-pack.git

以下的步驟將會展示如何部署一個 WordPress PHP 應用:
- 首先,當然是先登記及登入 Bluemix。
- 然後於 Catalog 頁面中選擇 “Bring Your Buildpack Community” Runtime
- 然後會指示去下載一個叫 cf 的 utility 程式,請根據指示去完成下載及安裝。
- 然後開啓 Windows cmd prompt ,用 cf 來連接及登入 Bluemix (如下)
$ cf api https://api.ng.bluemix.net Setting api endpoint to https://api.ng.bluemix.net... OKAPI endpoint: https://api.ng.bluemix.net (API version: 2.4.0) Not logged in. Use 'cf login' to log in. $ cf login API endpoint: https://api.ng.bluemix.net Email> <your bluemix registered email> Password> <your password> Authenticating... OK Targeted org [email protected] Targeted space dev API endpoint: https://api.ng.bluemix.net (API version: 2.4.0) User: [email protected] Org: [email protected] Space: dev
- 完成以上的步驟,您的 cf utility 程序就已經連結上您的 Bluemix 賬戶。接下來,就得要到 wordpress.org 去下載最新的 WordPress PHP 應用。
- 把 WordPress 解壓後,請利用 cmd prompt ,Change Directory (cd) 到 WordPress 解壓後的根目錄。(即有 index.php 的那一個目錄)
- 利用 cf utility 把 WordPress 利用 PHP Buildpack 推 ( push ) 上 Bluemix,指令如下:(註:newwp 是您的應用名稱,請更改成自己喜歡的名稱)
$> cf push newwp -b https://github.com/cloudfoundry/cf-buildpack-php.git -m 512M Creating app newwp in org [email protected] / space dev as [email protected]... OK Creating route newwp.mybluemix.com... OK Binding newwp.mybluemix.com to newwp... OK Uploading newwp... Uploading app files from: C:\wordpress-3.9.2\wordpress Uploading 9.9M, 1205 files OK Starting app newwp in org [email protected] / space dev as [email protected]... OK -----> Downloaded app package (6.1M) Cloning into '/tmp/buildpacks/cf-buildpack-php'... Checking out files: 6% (452/6863) Checking out files: 7% (481/6863) ......... Checking out files: 99% (6795/6863) Checking out files: 100% (6863/6863), done. Submodule 'buildpack-packager' (https://github.com/cf-buildpacks/buildpack-packager.git) registered for path 'buildpack-packager' Submodule 'compile-extensions' (https://github.com/cf-buildpacks/compile-extensions.git) registered for path 'compile-extensions' Cloning into 'buildpack-packager'... Submodule path 'buildpack-packager': checked out '237ac62a3f05423474e04b6724e33726631dde8f' Cloning into 'compile-extensions'... Submodule path 'compile-extensions': checked out '134c97d7fb9430dcb088d8b96301e5e5b7a40089' ! WARNING: No composer.json found. Using index.php to declare PHP applications is considered legacy functionality and may lead to unexpected behavior. See https://devcenter.heroku.com/categories/php -----> Setting up runtime environment... - PHP 5.5.12 - Apache 2.4.9 - Nginx 1.4.6 -----> Installing PHP extensions: - opcache (automatic; bundled, using 'ext-opcache.ini') -----> Installing dependencies... Composer version 1e27ff5e22df81e3cd0cd36e5fdd4a3c5a031f4a 2014-08-11 15:46:48 Loading composer repositories with package information Installing dependencies Nothing to install or update Generating optimized autoload files -----> Building runtime environment... NOTICE: No Procfile, defaulting to 'web: vendor/bin/heroku-php-apache2' -----> Uploading droplet (73M) 1 of 1 instances running App started Showing health and status for app newwp in org [email protected] / space dev as [email protected]... OK requested state: started instances: 1/1 usage: 1G x 1 instances urls: newwp.mybluemix.com state since cpu memory disk #0 running 2014-08-22 03:35:32 PM 0.0% 28.6M of 1G 259.6M of 1G
- 完成後,返回 Bluemix Dashboard,您應該發現一個以您命名的 WordPress PHP 應用已經運行當中。
- 這個應用的 URL 會暫時定為 <your_app_name>.mybluemix.net,往後我會教導大家怎樣把它轉成自己的専屬網域。我們把 Memory Usage 保持於 512MB,就可以確保即使過了試用期後,Free tier 的 Runtime GB-Hours 都足夠我們運行 24×7 而不用收費。
- 由於 WordPress 是需要 MySQL 數據庫,所以我們要為這個 PHP Runtime 加設 MySQL 服務。方法就是 Click 入 Application,然後按 “ADD A SERVICE”。
- 現時 Bluemix 提供的 MySQL 服務共有兩款 (免費的),各有優劣,我們這裡會選用 Community 版本的 MySQL。
Bluemix 提供的 MySQL 服務 - 加入後,Application 會要求重新啟動,之後您會發現 MySQL 服務已經加入到您的 PHP Runtime 裡,按下 “Show Credentials”,您可以找到連接 MySQL 數據庫的名稱、IP、連接埠、用戶名和密碼等必要資料。
- 接下來的功夫就簡單了,就是設定您的 PHP 應用去連接 MySQL 數據庫。
- 大功告成!現在一個全新的 WordPress 就於 http://newwp.mybluemix.net/ 運行中。
設定專屬的網域 ( Domain )
大家於 Bluemix 上的 Application 都是預設運行於 mybluemix.net 這個網域 ( Domain ) 上,如果大家好像我一般都擁有自己的 Domain 而又想套用於 Bluemix 上,可以依以下的方法來設置:
- 於 Bluemix 主畫面,按下自己右上方的賬戶電郵名稱,然後按下 “Manage Organization”。
- 於 Manage Organization – Domain 版面上,可以加入自己的 Domain。
- 加入自己的 Domain 後,返回 Application ,然後按上右上方齒輪 Icon 的圖示並選擇 “Edit Routes”。
- 在這裡,您應該可以見到早前加入的 Domain ,您可以在這裡為自己的 Application 加入新的路徑 ( Route ),如 bluemix.itarchitect.hk。(註:原本的 <your_app_name>.mybluemix.net 路徑請不要刪除)
- 完成後,您得要到您的 DNS server 中,加入一個 CNAME Record 把您的剛加上的路徑 (即 bluemix.itarchitect.hk) 指到 Bluemix預設的 hostname (即 newwp.mybluemix.net)。
- 等待 DNS Server 完成同步後後,您應該可以用您專屬的網堿網址來訪問您於 Bluemix 上的應用。