教學課程 - 在 Azure App Service 上建置 PHP (Laravel) 與適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
Azure App Service 使用 Linux 作業系統提供可高度擴充、自我修復的 Web 主機服務。 本教學課程說明如何在連線到 MySQL 資料庫的 Azure App Service 中建立安全的 PHP 應用程式 (使用適用於 MySQL 的 Azure 資料庫彈性伺服器)。 完成後,Linux 上的 Azure App Service 上將會執行 Laravel 應用程式。
在本教學課程中,您會了解如何:
- 在 Azure 中建立預設安全的 PHP 和 MySQL 應用程式
- 使用應用程式設定來設定 MySQL 的連線秘密
- 使用 GitHub Actions 部署應用程式程式碼
- 更新並重新部署應用程式
- 安全執行資料庫移轉
- 來自 Azure 的串流診斷記錄
- 在 Azure 入口網站中管理應用程式
必要條件
- Azure 訂閱 - 如果您沒有 Azure 訂閱,請在開始前建立 Azure 免費帳戶。 目前,Azure 免費帳戶可讓您免費試用「適用於 MySQL 的 Azure 資料庫 - 彈性伺服器」12 個月。 如需詳細資訊,請參閱使用 Azure 免費帳戶免費試用 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器。
範例應用程式
若要繼續遵循本教學課程,請從存放庫複製或下載應用程式範例:
git clone https://github.com/Azure-Samples/laravel-tasks.git
如果您想要在本機執行應用程式,請執行下列動作:
在 .env 中,使用本機適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫中的設定,設定資料庫設定 (例如
DB_DATABASE
、DB_USERNAME
和DB_PASSWORD
)。 您需要本機適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體,才能執行此範例。從存放庫的根目錄,使用下列命令啟動 Laravel:
composer install php artisan migrate php artisan key:generate php artisan serve
1 - 建立 App Service 與適用於 MySQL 的 Azure 資料庫彈性伺服器資源
在此步驟中,您會建立 Azure 資源。 本教學課程中使用的步驟會建立預設安全的 App Service 和適用於 MySQL 的 Azure 資料庫彈性伺服器設定。 針對建立程序,您將指定:
- Web 應用程式的 [名稱]。 此名稱會以
https://<app-name>.azurewebsites.net
的形式作為 Web 應用程式 DNS 名稱的一部分。 - 應用程式的 [執行階段]。 您可以在此處選取要用於應用程式的 PHP 版本。
- 應用程式的 [資源群組]。 資源群組允許您將應用程式所需的所有 Azure 資源分組 (在邏輯容器中)。
登入 Azure 入口網站,遵循下列步驟建立您的 Azure App Service 資源。
指示 | Screenshot |
---|---|
在 Azure 入口網站中:
|
|
在 [建立 Web 應用程式 + 資料庫] 頁面上,填寫表單,如下所示。
|
|
部署需要幾分鐘的時間才能完成,並會建立下列資源:
|
2 - 設定資料庫連線
建立精靈會為您產生可用來連線到資料庫的應用程式設定,但該設定還不是程式碼可用的格式。 在此步驟中,您會對應用程式設定進行編輯和更新,以符合應用程式需要的格式。
指示 | Screenshot | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
在 App Service 頁面上的左側功能表,選取 [組態]。 | |||||||||||
在 [組態] 頁面的 [應用程式設定] 索引標籤中,針對下列每個設定,選取 [編輯],以新的值更新 [名稱] 字段,然後選取 [確定]。
|
|||||||||||
建立新的 MYSQL_ATTR_SSL_CA 資料庫設定:
|
|||||||||||
依照相同的步驟建立下列額外的應用程式設定,然後選取 [ 儲存]。
|
3 - 部署範例程式碼
在此步驟中,您將使用 GitHub Actions 來設定 GitHub 部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,您 GitHub 存放庫的每個 git push
都會開始建置和部署動作。 您將直接在瀏覽器中使用 Visual Studio Code 對程式碼基底進行一些變更,然後讓 GitHub Actions 自動為您部署。
4 - 產生資料庫結構描述
建立精靈會將適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體放在私人端點後,因此只能從虛擬網路存取。 因為 App Service 應用程式已經與虛擬網路整合,所以使用資料庫執行資料庫移轉的最簡單方式,就是直接從 App Service 容器內執行資料庫移轉。
指示 | Screenshot |
---|---|
在 [App Service] 頁面中:
https://<app-name>.scm.azurewebsites.net/webssh/host 。 |
|
在 SSH 終端機中:
|
5 - 變更網站根目錄
Laravel 應用程式生命週期是在 /public 目錄中啟動。 App Service 的預設 PHP 8.0 容器會使用 Nginx,這會在應用程式的根目錄中啟動。 若要變更網站根目錄,您必須變更 PHP 8.0 容器中的 Nginx 設定檔 (/etc/nginx/sites-available/default)。 為了方便起見,範例存放庫包含稱為 default 的自訂組態檔。 如先前所述,您不想使用 SSH 殼層取代此檔案,因為您的變更會在應用程式重新開機之後遺失。
6 - 瀏覽至應用程式
指示 | Screenshot |
---|---|
在 [App Service] 頁面中:
|
|
將一些工作新增至清單。恭喜,您正在 Azure App Service 中執行資料驅動的 PHP 應用程式。 |
7 - 串流診斷記錄
指示 | Screenshot |
---|---|
在 [App Service] 頁面中:
|
|
從左側功能表中,選取 [ 記錄數據流]。您會看到應用程式的記錄,包括來自容器內的平台記錄和記錄。 |
清除資源
完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。
指示 | Screenshot |
---|---|
在 [Azure 入口網站] 頂端的搜尋列中:
|
|
在 [資源群組] 頁面中,選取 [刪除資源群組]。 | |
|
常見問題集
- 這設定會產生多少費用?
- 如何連線到在虛擬網路後方受到保護的適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫?
- 本機應用程式開發如何與 GitHub Actions 搭配運作?
- 為何 GitHub Actions 部署速度過慢?
這設定會產生多少費用?
建立資源的定價如下:
- App Service 方案是在進階 V2 層中建立,並可相應增加或減少。 請參閱 App Service 定價。
- 適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體是在 B1ms 層中建立,並可增加或減少。 使用 Azure 免費帳戶時,B1ms 層免費 12 個月,最多可達每月限制。 請參閱適用於 MySQL 的 Azure 資料庫彈性伺服器定價。
- 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價。
- 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價。
如何連線到在虛擬網路後方受到保護的適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫?
若要連線到適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫,可以根據您可以使用的工具和環境使用多種方法:
- 命令列工具存取:
- 使用來自應用程式 SSH 終端的
mysql
命令進行基本存取。
- 使用來自應用程式 SSH 終端的
- 桌面工具 (例如 MySQL Workbench):
- 使用 SSH 通道搭配 Azure CLI:
- 使用 Azure CLI 建立 Web 應用程式的 SSH 工作階段。
- 使用 SSH 工作階段將流量通道傳送至 MySQL。
- 使用站對站 VPN 或 Azure VM:
- 您的機器必須是虛擬網路的一部分。
- 請考慮使用:
- 連結至其中一個子網路的 Azure VM。
- 內部部署網路中的機器,具有與 Azure 虛擬網路的站對站 VPN 連線。
- 使用 SSH 通道搭配 Azure CLI:
- Azure Cloud Shell 整合:
本機應用程式開發如何與 GitHub Actions 搭配運作?
以 App Service 自動產生的工作流程檔案為例,每個 git push
都會開始執行新的組建和部署。 從 GitHub 存放庫的本機複本,您會將所需的更新推送至 GitHub。 例如:
git add .
git commit -m "<some-message>"
git push origin main
為何 GitHub Actions 部署速度過慢?
App Service 自動產生的工作流程檔案會定義 build-then-deploy、two-job 執行。 由於每個作業都會在自己的清除環境中執行,因此工作流程檔案可確保 deploy
作業可以存取作業中的 build
檔案:
- 在
build
作業結束時,將檔案上傳為成品。 - 在
deploy
作業開始時,下載成品。
兩項作業程序花費的大部分時間都是上傳和下載成品。 如有需要,您可以將這兩個作業合併成一個作業來簡化工作流程檔案,這樣就不需要上傳和下載步驟。
摘要
在本教學課程中,您已了解如何:
- 在 Azure 中建立預設安全的 PHP 和適用於 MySQL 的 Azure 資料庫彈性伺服器應用程式
- 使用應用程式設定,設定適用於 MySQL 的 Azure 資料庫彈性伺服器的連線秘密
- 使用 GitHub Actions 部署應用程式程式碼
- 更新並重新部署應用程式
- 安全執行資料庫移轉
- 來自 Azure 的串流診斷記錄
- 在 Azure 入口網站中管理應用程式