共用方式為


教學課程 - 在 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 應用程式範例螢幕快照,其中顯示已新增的工作。

在本教學課程中,您會了解如何:

  • 在 Azure 中建立預設安全的 PHP 和 MySQL 應用程式
  • 使用應用程式設定來設定 MySQL 的連線秘密
  • 使用 GitHub Actions 部署應用程式程式碼
  • 更新並重新部署應用程式
  • 安全執行資料庫移轉
  • 來自 Azure 的串流診斷記錄
  • 在 Azure 入口網站中管理應用程式

必要條件

範例應用程式

若要繼續遵循本教學課程,請從存放庫複製或下載應用程式範例:

git clone https://github.com/Azure-Samples/laravel-tasks.git

如果您想要在本機執行應用程式,請執行下列動作:

  • .env 中,使用本機適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫中的設定,設定資料庫設定 (例如 DB_DATABASEDB_USERNAMEDB_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 入口網站中:
  1. 在 Azure 入口網站頂端的搜尋列中輸入「Web 應用程式資料庫」。
  2. 選取 [Marketplace] 標題下標示為 [Web 應用程式 + 資料庫] 的項目。
您也可以直接瀏覽至建立精靈
顯示如何使用頂端工具列中搜尋方塊來尋找 Web 應用程式 + 資料庫建立精靈的螢幕快照。
在 [建立 Web 應用程式 + 資料庫] 頁面上,填寫表單,如下所示。
  1. [資源群組] → 選取 [新建] 並使用 msdocs-laravel-mysql-tutorial 的名稱。

  2. 區域 → 您附近的任何 Azure 區域。

  3. [名稱]msdocs-laravel-mysql-XYZ,其中 XYZ 是任意三個隨機字元。 此名稱在整個 Azure 中必須是唯一的。

  4. 執行階段堆疊PHP 8.0

    MySQL - 預設會為您選取彈性伺服器作為資料庫引擎。 適用於 MySQL 的 Azure 資料庫是 Azure 上完全受控的 MySQL 資料庫即服務,可與最新的社群版本相容。

  5. 記下為您產生的資料庫名稱 (<app-name>-database)。 稍後您將需要此資訊。

  6. 選取 [檢閱 + 建立]。

驗證完成時,選取 [建立]
顯示如何在 Web 應用程式 + 資料庫精靈中設定新應用程式和資料庫的螢幕快照。
部署需要幾分鐘的時間才能完成,並會建立下列資源:
  • 資源群組 → 所有已建立資源的容器。
  • App Service 計畫 → 定義 App Service 的計算資源。 系統會建立 P1v2 層中的 Linux 方案。
  • App Service → 代表您的應用程式,並在 App Service 方案中執行。
  • 虛擬網路 → 與 App Service 應用程式整合,並隔離後端網路流量。
  • 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器 → 只能從虛擬網路存取。 系統會為您在伺服器上建立資料庫和使用者。
  • 私人 DNS區域 → 啟用虛擬網路中 MySQL 資料庫伺服器的 DNS 解析。
在部署完成時,選取 [前往資源] 按鈕。 便會讓您直接前往 App Service 應用程式。
此螢幕快照顯示要填寫以在 Azure 中建立 Web 應用程式的表單。

2 - 設定資料庫連線

建立精靈會為您產生可用來連線到資料庫的應用程式設定,但該設定還不是程式碼可用的格式。 在此步驟中,您會對應用程式設定進行編輯和更新,以符合應用程式需要的格式。

指示 Screenshot
在 App Service 頁面上的左側功能表,選取 [組態] 顯示如何在 App Service 中開啟組態頁面的螢幕快照。
在 [組態] 頁面的 [應用程式設定] 索引標籤中,針對下列每個設定,選取 [編輯],以新的值更新 [名稱] 字段,然後選取 [確定]。
目前的名稱 名稱
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
顯示如何檢視自動產生的 連接字串 螢幕快照。
建立新的 MYSQL_ATTR_SSL_CA 資料庫設定:
  1. 選取 [新增應用程式設定]

  2. 在 [名稱] 欄位中,輸入 MYSQL_ATTR_SSL_CA

  3. 在 [值] 欄位中,輸入 /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem

    此應用程式設定會指向存取 MySQL 伺服器所需的 TLS/SSL 憑證路徑。 其包含在範例存放庫中,方便使用。

  4. 選取 [確定]。

顯示如何建立應用程式設定的螢幕快照。
依照相同的步驟建立下列額外的應用程式設定,然後選取 [ 儲存]。
  • APP_DEBUG:使用 true 作為值。 這是 Laravel 偵錯變數

  • APP_KEY:使用 base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= 做為值。 這是 Laravel 加密變數

    重要

    APP_KEY 值用於此處,以便使用。 針對生產案例,應該特別針對您的部署在命令列中使用 php artisan key:generate --show

顯示組態頁面中所有必要應用程式設定的螢幕快照。

3 - 部署範例程式碼

在此步驟中,您將使用 GitHub Actions 來設定 GitHub 部署。 這只是部署至 App Service 的許多方式之一,但也是在部署程序中持續整合的絕佳方式。 根據預設,您 GitHub 存放庫的每個 git push 都會開始建置和部署動作。 您將直接在瀏覽器中使用 Visual Studio Code 對程式碼基底進行一些變更,然後讓 GitHub Actions 自動為您部署。

指示 Screenshot
在新的瀏覽器視窗中:
  1. 登入您的 GitHub 帳戶。

  2. 瀏覽至 https://github.com/Azure-Samples/laravel-tasks

  3. 請選取分叉

  4. 選取 [建立派生]

顯示如何建立範例 GitHub 存放庫分支的螢幕快照。
在 GitHub 頁面中,按下 . 鍵,在瀏覽器中開啟 Visual Studio Code。 顯示如何在 GitHub 中開啟 Visual Studio Code 瀏覽器體驗的螢幕快照。
在瀏覽器中的 Visual Studio Code,於總管中開啟 config/database.php。在 mysql 連線中,看到您稍早為 MySQL 連線建立的應用程式設定已使用 (DB_HOSTDB_DATABASEDB_USERNAMEDB_PASSWORDMYSQL_ATTR_SSL_CA)。 顯示瀏覽器中 Visual Studio Code 和已開啟檔案的螢幕快照。
回到 [App Service] 頁面的左側功能表中,選取 [部署中心] 顯示如何在 App Service 中開啟部署中心的螢幕快照。
在 [部署中心] 頁面上:
  1. 在 [來源] 中,選取 [GitHub]。 根據預設,系統會選取 GitHub Actions 作為組建提供者。

  2. 登入您的 GitHub 帳戶,並遵循提示來授權 Azure。

  3. 在 [組織] 中,選取您的帳戶。

  4. 在 [存放庫] 中,選取 [laravel-tasks]

  5. 在 [分支] 中,選取 [main]

  6. 在最上層的功能表中,選取 [儲存]

App Service 會將工作流程檔案認可至 .github/workflows 目錄中選取的 GitHub 存放庫。
顯示如何使用 GitHub Actions 設定 CI/CD 的螢幕快照。
在 [部署中心] 頁面上:
  1. 選取 [記錄] 。 已啟動部署執行。

  2. 在部署執行的記錄項目中,選取 [建置/部署記錄]

    您已前往 GitHub 存放庫,並看到 GitHub 動作正在執行。 工作流程檔案會定義兩個不同的階段:建置和部署。

顯示如何在部署中心開啟部署記錄的螢幕快照。
若要對程式碼進行任何變更,請移至瀏覽器中的 Visual Studio Code:
  1. 選取 [原始檔控制] 延伸模組。

  2. 在變更的檔案 (例如 database.php) 旁,選取 + 以暫存您的變更。

  3. 在文字方塊中,輸入認可訊息,例如 add certificate

  4. 選取要認可並推送至 GitHub 的核取記號。

如果您返回 [部署中心] 頁面,您會看到新的記錄項目,因為另一個執行已啟動。 等候執行完成。 需要約 15 分鐘的時間。

提示

GitHub 巨集指令是由 GitHub 存放庫 .github/workflow 中的檔案所定義。 您可以藉由自訂檔案來加快速度。

顯示如何在 Visual Studio Code 瀏覽器體驗中認可變更的螢幕快照。

4 - 產生資料庫結構描述

建立精靈會將適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體放在私人端點後,因此只能從虛擬網路存取。 因為 App Service 應用程式已經與虛擬網路整合,所以使用資料庫執行資料庫移轉的最簡單方式,就是直接從 App Service 容器內執行資料庫移轉。

指示 Screenshot
在 [App Service] 頁面中:
  1. 從左側功能表中選取 [SSH]

  2. 選取 [執行]

瀏覽器中會開啟具有 App Service 容器的 SSH 工作階段。 如果您想要,可以改為直接瀏覽至 https://<app-name>.scm.azurewebsites.net/webssh/host
顯示如何從 Azure 入口網站 開啟應用程式的SSH殼層的螢幕快照。
在 SSH 終端機中:
  1. CD 到應用程式程式碼的根目錄:

    cd /home/site/wwwroot
    
  2. 從應用程式根目錄執行資料庫移轉

    php artisan migrate --force
    

    注意

    只有 /home 中檔案的變更才能在應用程式重新開機之後保存。 /home 以外的變更不會保存。

顯示命令在 SSH 殼層及其輸出中執行的螢幕快照。

5 - 變更網站根目錄

Laravel 應用程式生命週期是在 /public 目錄中啟動。 App Service 的預設 PHP 8.0 容器會使用 Nginx,這會在應用程式的根目錄中啟動。 若要變更網站根目錄,您必須變更 PHP 8.0 容器中的 Nginx 設定檔 (/etc/nginx/sites-available/default)。 為了方便起見,範例存放庫包含稱為 default 的自訂組態檔。 如先前所述,您不想使用 SSH 殼層取代此檔案,因為您的變更會在應用程式重新開機之後遺失。

指示 Screenshot
在 [App Service] 頁面中:
  1. 在左功能表中選取 [組態]

  2. 選取一般設定索引標籤。

顯示如何在 App Service 設定頁面中開啟 [一般設定] 索引標籤的螢幕快照。
在 [一般設定] 索引標籤中:
  1. 在 [啟動命令] 方塊中,輸入下列命令:cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload

    這會取代 PHP 8.0 容器中的 Nginx 組態檔,並重新啟動 Nginx。 此設定可確保每次啟動容器時,都會對容器進行這項變更。

  2. 選取儲存

顯示如何在 App Service 中設定啟動命令的螢幕快照。

6 - 瀏覽至應用程式

指示 Screenshot
在 [App Service] 頁面中:
  1. 從左側功能表中選取 [概觀]

  2. 選取應用程式的 URL。

    您也可以直接瀏覽至 https://<app-name>.azurewebsites.net

顯示如何從 Azure 入口網站 啟動App Service的螢幕快照。
將一些工作新增至清單。恭喜,您正在 Azure App Service 中執行資料驅動的 PHP 應用程式。 在 App Service 中執行的 Laravel 應用程式螢幕快照。

7 - 串流診斷記錄

指示 Screenshot
在 [App Service] 頁面中:
  1. 從左側功能表中,選取 [App Service 記錄]

  2. 在 [應用程式記錄] 下,選取 [檔案系統]

顯示如何在 App Service 中啟用 Azure 入口網站 原生記錄的螢幕快照。
從左側功能表中,選取 [ 記錄數據流]。您會看到應用程式的記錄,包括來自容器內的平台記錄和記錄。 顯示如何在 Azure 入口網站 中檢視記錄數據流的螢幕快照。

清除資源

完成後,您可以刪除資源群組,以從 Azure 訂用帳戶中刪除所有資源。

指示 Screenshot
在 [Azure 入口網站] 頂端的搜尋列中:
  1. 輸入資源群組名稱。

  2. 選取資源群組。

顯示如何在 Azure 入口網站 中搜尋和瀏覽至資源群組的螢幕快照。
在 [資源群組] 頁面中,選取 [刪除資源群組] 顯示 [刪除資源群組] 按鈕在 Azure 入口網站 位置的螢幕快照。
  1. 輸入您確認要刪除的資源群組名稱。

  2. 選取 [刪除]

用於刪除 Azure 入口網站 中資源群組之確認對話框的螢幕快照。

常見問題集

這設定會產生多少費用?

建立資源的定價如下:

  • App Service 方案是在進階 V2 層中建立,並可相應增加或減少。 請參閱 App Service 定價
  • 適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體是在 B1ms 層中建立,並可增加或減少。 使用 Azure 免費帳戶時,B1ms 層免費 12 個月,最多可達每月限制。 請參閱適用於 MySQL 的 Azure 資料庫彈性伺服器定價
  • 除非您設定額外的功能 (例如對等互連),否則虛擬網路不會產生費用。 請參閱 Azure 虛擬網路定價
  • 私人 DNS 區域會產生少量費用。 請參閱 Azure DNS 定價

如何連線到在虛擬網路後方受到保護的適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫?

若要連線到適用於 MySQL 的 Azure 資料庫彈性伺服器資料庫,可以根據您可以使用的工具和環境使用多種方法:

  • 命令列工具存取
    • 使用來自應用程式 SSH 終端的 mysql 命令進行基本存取。
  • 桌面工具 (例如 MySQL Workbench)
    • 使用 SSH 通道搭配 Azure CLI
      • 使用 Azure CLI 建立 Web 應用程式的 SSH 工作階段
      • 使用 SSH 工作階段將流量通道傳送至 MySQL。
    • 使用站對站 VPN 或 Azure VM
      • 您的機器必須是虛擬網路的一部分。
      • 請考慮使用:
        • 連結至其中一個子網路的 Azure VM。
        • 內部部署網路中的機器,具有與 Azure 虛擬網路的站對站 VPN 連線
  • 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 檔案:

兩項作業程序花費的大部分時間都是上傳和下載成品。 如有需要,您可以將這兩個作業合併成一個作業來簡化工作流程檔案,這樣就不需要上傳和下載步驟。

摘要

在本教學課程中,您已了解如何:

  • 在 Azure 中建立預設安全的 PHP 和適用於 MySQL 的 Azure 資料庫彈性伺服器應用程式
  • 使用應用程式設定,設定適用於 MySQL 的 Azure 資料庫彈性伺服器的連線秘密
  • 使用 GitHub Actions 部署應用程式程式碼
  • 更新並重新部署應用程式
  • 安全執行資料庫移轉
  • 來自 Azure 的串流診斷記錄
  • 在 Azure 入口網站中管理應用程式