教學課程:在 Azure App 服務 上建置 PHP (Laravel) 和 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器應用程式
適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
Azure App 服務 使用Linux作業系統提供可高度調整、自我修補的Web主機服務。 本教學課程示範如何在連線到 MySQL 資料庫的 Azure App 服務 中建立安全的 PHP 應用程式(使用 適用於 MySQL 的 Azure 資料庫 彈性伺服器)。 當您完成時,您會在 Linux 上的 Azure App 服務 上執行 Laravel 應用程式。
在本教學課程中,您會了解如何:
- 在 Azure 中建立安全的 PHP 和 MySQL 應用程式
- 使用應用程式設定來設定 MySQL 的連線密碼
- 使用 GitHub Actions 部署應用程式程式代碼
- 更新並重新部署應用程式
- 安全地執行資料庫移轉
- 從 Azure 串流診斷記錄
- 在 Azure 入口網站 中管理應用程式
必要條件
- Azure 訂用帳戶 如果您沒有 Azure 訂用帳戶,請在開始之前建立 Azure 免費帳戶 。 目前,使用 Azure 免費帳戶,您可以試用 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器免費 12 個月。 如需詳細資訊,請參閱免費試用 適用於 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
作為 Webapp DNS 名稱的一部分。 - 應用程式的運行時間。 您可以選取要用於應用程式的 PHP 版本。
- 應用程式的資源群組。 資源群組可讓您將應用程式所需的所有 Azure 資源分組(在邏輯容器中)。
登入 Azure 入口網站,並遵循下列步驟來建立您的 Azure App 服務 資源。
指示 | Screenshot |
---|---|
在 Azure 入口網站中:
|
|
在 [ 建立 Web 應用程式 + 資料庫 ] 頁面中,填寫表單,如下所示。
|
|
部署需要幾分鐘的時間才能完成,並建立下列資源:
|
2 - 設定資料庫連線能力
建立精靈會產生 應用程式設定 ,讓您用來連線到資料庫,但不是您程式代碼可使用的格式。 在此步驟中,您會將應用程式設定編輯和更新為應用程式所需的格式。
指示 | Screenshot | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
在 App Service 頁面的左側功能表中,選取 [ 組態]。 | |||||||||||
在 [組態] 頁面的 [應用程式設定] 索引標籤中,針對下列每個設定,按兩下列每個設定,按兩下列每個設定,按兩下 [編輯],以新的值更新 [名稱] 字段,然後按兩下 [確定]。
|
|||||||||||
建立新的 MYSQL_ATTR_SSL_CA 資料庫設定:
|
|||||||||||
依照相同的步驟建立下列額外的應用程式設定,然後按兩下 [儲存]。
|
3 - 部署範例程序代碼
在此步驟中,您將使用 GitHub Actions 設定 GitHub 部署。 這隻是部署至 App Service 的許多方式之一,也是在部署程式中持續整合的絕佳方式之一。 根據預設,每個 git push
GitHub 存放庫都會開始建置和部署動作。 您將直接在瀏覽器中使用 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 服務 中執行資料驅動的 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 資料庫 彈性伺服器資料庫,您可以使用數種方法,根據您處置的工具和環境:
- 命令列工具存取:
mysql
使用來自應用程式 SSH 終端機的 命令進行基本存取。
- 桌面工具(例如 MySQL Workbench):
- 搭配 Azure CLI 使用 SSH 通道:
- 使用 Azure CLI 建立 Web 應用程式的 SSH 工作階段。
- 使用 SSH 作業階段將流量通道傳送至 MySQL。
- 使用站對站 VPN 或 Azure VM:
- 您的電腦必須是虛擬網路的一部分。
- 請考慮使用:
- 連結至其中一個子網的 Azure VM。
- 內部部署網路中具有 Azure 虛擬網路站對站 VPN 連線的電腦。
- 搭配 Azure CLI 使用 SSH 通道:
- Azure Cloud Shell 整合:
- 整合 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 run。 由於每個作業都會在自己的乾淨環境中執行,因此工作流程檔案可確保 deploy
作業能夠存取作業中的 build
檔案:
- 在作業結束時
build
, 將檔案上傳為成品。 - 在作業開始時
deploy
,下載成品。
兩項作業程序花費的大部分時間都是上傳和下載成品。 如果您想要的話,您可以將這兩個作業合併成一個作業,以簡化工作流程檔案,而不需要上傳和下載步驟。
摘要
在本教學課程中,您已了解如何:
- 在 Azure 中建立安全的 PHP 和 適用於 MySQL 的 Azure 資料庫 彈性伺服器應用程式
- 使用應用程式設定將連線密碼設定為 適用於 MySQL 的 Azure 資料庫 彈性伺服器
- 使用 GitHub Actions 部署應用程式程式代碼
- 更新並重新部署應用程式
- 安全地執行資料庫移轉
- 從 Azure 串流診斷記錄
- 管理 Azure 入口網站中的應用程式