PHP on Microsoft Azure開發實戰(二) - 部署 PHP 應用程式

更新

簡介

在上一篇文章中瞭解了在 Microsoft Azure 上要如何執行 PHP 應用程式,這一篇文章介紹各種部署網站上 Microsoft Azure 的方式,不過由於虛擬機器服務(Microsoft Azure Virtual Machines)的部署方式是完全自己設定的,所以這裡主要介紹的是網站服務(Windows Azure Websites)的各種部署方式以及如何用 Windows Azure SDK 的工具來進行部署應用程式至雲端服務(Windows Azure Cloud Services)

這一系列文章包括:

  1. PHP 應用程式執行環境
  2. 部署PHP應用程式
  3. 資料庫的選擇: MySQL or SQL Database
  4. 使用 Microsoft Azure Storage – Blob storage處理靜態檔案
  5. 使用 Microsoft Azure Storage – Table Service處理Session物件
  6. 使用 Microsoft Azure Service Bus與其它系統進行通訊
  7. 實例說明:簡單購物網站實例

部署至網站服務 (Microsoft Azure Websites)

Microsoft Azure 網站服務提供了多種部署網站的方式(如:FTP/WebDeploy/TFS/Git/Mercurial/Dropbox 等),讓您可以自由選擇熟悉的部署方式。而將 PHP 網站應用程式部署至網站服務時,有兩件事情必須先瞭解:

  1. 雖然 Microsoft Azure 網站服務無法修改 php.ini 檔案對PHP執行環境做設定,但您依然可以在網站的根目錄下使用 .user.ini 檔案(別忘了最前面是 . 開頭)來做設定,設定的方式與 php.ini 檔案完全一樣,這樣便可以依據需求來自訂調整,而且不會影響到其它的 PHP 網站應用程式的設定。
  2. 有的函式庫可能需要使用到網站的實體路徑,網站的根目錄實體路徑為:「C:\DMASFiles\Sites\<網站名>\VirtualDirectory0\site\wwwroot\ 」。

接下來便能開始瞭解每一種部署網站的方式。

使用FTP上傳網站

使用FTP上傳是最簡單的部署方式,只要使用任何熟悉的FTP工具,把網站應用程式的所有檔案上傳到 Microsoft Azure網站服務的磁碟空間上即可。而FTP上傳的連線主機名稱、帳號密碼可以在網站後台的儀表板中看到:

FTP 認證資訊
在網站服務的後台儀表板裡可以看到 FTP 連線資訊

以這張圖為例,FTP主機的名稱是 waws-prod-hk1-001.ftp.azurewebsites.windows.net,使用者名稱是 phponwindowsazure\ericsk,連線密碼的部份則是可以在「快速概覽」的部份選擇「建立您的部署認證」或是「重設您的部署認證」來設定。

這裡要特別注意的是,使用 FTP 或 FTPS 連接成功後,網站的根目錄是放在 site\wwwroot 目錄下,而不是 FTP 的根目錄。一旦檔案傳輸完畢,網站服務就立刻以新的檔案來提供服務。

使用版本控制機制(Visual Studio Online, Git, Github, Mercurial, bitbuckets, 甚至是 Dropbox)

在現代開發流程中,版本控制(version control)是很常見的機制,而在 Microsoft Azure的網站服務中也支援使用版本控制的機制來進行網站的部署,它主要的支援方式為:

  1. 在 Microsoft Azure 網站服務上建立一個存儲庫(repository),將檔案 push 至該存儲庫就會換上新版本作為上線的部署。目前支援使用 git 做這樣的部署機制。
  2. 綁定一個線上版本控制服務的存儲庫,當有新的部署時,便會同步部署至 Microsoft Azure 網站,可以與原本的開發流程結合。目前支援此機制的服務有:Visual Studio Online、GitHub、Bitbuckets、Codeplex 或是自行架設的git/mercurial 伺服器,甚至可以使用 Dropbox 的資料夾做類似的部署。

使用版本控制部署的好處,就是在於可以根據不同的 check-in 來切換部署網站的版本。比方說在 Microsoft Azure 網站服務上建立了一個 git 存儲庫,在 push 了兩次到此存儲庫之後,便產生了兩個可以部署的版本,並且在後台可以隨時切換。

使用 git 推送了兩次
使用 git 推送兩次之後,網站上產生兩個部署

而針對每一種版本控制的部署方式,可以參考 Microsoft Azure 產品網站上的這篇教學文件:「Publishing from Source Control to Windows Azure Web Sites」。

部署至雲端服務(Windows Azure Cloud Services)

如前一篇文章所述,Microsoft Azure Cloud Services 是一個基於 Windows Server 以及 IIS 的 PaaS(Platform-as-a-Service)的服務平台,它提供兩種應用程式的執行環境:Web Role 及 Worker Role,前者就是像 Web 應用程式這樣,應用程式的執行是經由 web request 所驅動的;Worker Role 則是可以讓應用程式獨立執行。而在部署 PHP 網站或應用程式時,也必須一併部署 PHP 的執行環境(因為平台上只有很乾淨的 Windows Server + IIS)。目前 Microsoft Azure SDK 提供了一系列建立 Web/Worker Role 以及部署的工具,詳細的 step-by-step可以參考這篇文章的教學:「How to create PHP web and worker roles