教學課程:在 Azure App 服務 上建置 PHP (Laravel) 和 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器應用程式

適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器

Azure App 服務 使用Linux作業系統提供可高度調整、自我修補的Web主機服務。 本教學課程示範如何在連線到 MySQL 資料庫的 Azure App 服務 中建立安全的 PHP 應用程式(使用 適用於 MySQL 的 Azure 資料庫 彈性伺服器)。 當您完成時,您會在 Linux 上的 Azure App 服務 上執行 Laravel 應用程式。

Screenshot of the Azure app example titled Task List showing new tasks added.

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

  • 在 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_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作為 Webapp DNS 名稱的一部分。
  • 應用程式的運行時間。 您可以選取要用於應用程式的 PHP 版本。
  • 應用程式的資源群組。 資源群組可讓您將應用程式所需的所有 Azure 資源分組(在邏輯容器中)。

登入 Azure 入口網站,並遵循下列步驟來建立您的 Azure App 服務 資源。

指示 Screenshot
在 Azure 入口網站中:
  1. 在 Azure 入口網站 頂端的搜尋列中輸入 「Web 應用程式資料庫」。
  2. 選取 [Marketplace] 標題下標示為 [Web 應用程式 + 資料庫] 的專案。
您也可以直接流覽至 建立精靈
A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.
在 [ 建立 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. 按一下 [檢閱 + 建立] 。

驗證完成之後,按兩下 [ 建立]。
A screenshot showing how to configure a new app and database in the Web App + Database wizard.
部署需要幾分鐘的時間才能完成,並建立下列資源:
  • 資源群組 →所有已建立資源的容器。
  • App Service 方案 →定義 App Service 的計算資源。 P1v2 層中的Linux方案已建立。
  • App Service → 代表您的應用程式,並在 App Service 方案中執行。
  • 虛擬網路 →與 App Service 應用程式整合,並隔離後端網路流量。
  • 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器→只能從虛擬網路存取。 系統會為您在伺服器上建立資料庫和使用者。
  • 私用 DNS 區域→啟用虛擬網路中 MySQL 資料庫伺服器的 DNS 解析。
部署完成後,按兩下 [ 移至資源 ] 按鈕。 系統會將您直接帶到 App Service 應用程式。
A screenshot showing the form to fill out to create a web app in Azure.

2 - 設定資料庫連線能力

建立精靈會產生 應用程式設定 ,讓您用來連線到資料庫,但不是您程式代碼可使用的格式。 在此步驟中,您會將應用程式設定編輯和更新為應用程式所需的格式。

指示 Screenshot
在 App Service 頁面的左側功能表中,選取 [ 組態]。 A screenshot showing how to open the configuration page in App Service.
在 [組態] 頁面的 [應用程式設定] 索引標籤中,針對下列每個設定,按兩下列每個設定,按兩下列每個設定,按兩下 [編輯],以新的值更新 [名稱] 字段,然後按兩下 [確定]。
目前 名稱 新增 名稱
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
A screenshot showing how to see the autogenerated connection string.
建立新的 MYSQL_ATTR_SSL_CA 資料庫設定:
  1. 按兩下[ 新增應用程式設定]。

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

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

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

  4. 按一下 [確定]

A screenshot showing how to create an app setting.
依照相同的步驟建立下列額外的應用程式設定,然後按兩下 [儲存]。
  • APP_DEBUG:使用 true 作為值。 這是 Laravel 偵錯變數

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

    重要

    為了 APP_KEY 方便起見,這裡會使用此值。 針對生產案例,應該特別針對您在命令行中的部署 php artisan key:generate --show 產生它。

A screenshot showing all the required app settings in the configuration page.

3 - 部署範例程序代碼

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

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

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

  3. 按兩下 [ 分叉]。

  4. 按兩下 [ 建立分叉]。

A screenshot showing how to create a fork of the sample GitHub repository.
在 GitHub 頁面中,按 . 按鍵在瀏覽器中開啟 Visual Studio Code。 A screenshot showing how to open the Visual Studio Code browser experience in GitHub.
在瀏覽器中的 Visual Studio Code 中,在總管中開啟 config/database.php。在連線中mysql,請參閱您稍早為 MySQL 連線建立的應用程式設定已使用 (DB_HOST、 、 DB_DATABASEDB_USERNAMEDB_PASSWORDMYSQL_ATTR_SSL_CA A screenshot showing Visual Studio Code in the browser and an opened file.
回到 App Service 頁面的左側功能表中,選取 [部署中心]。 A screenshot showing how to open the deployment center in App Service.
在 [部署中心] 頁面中:
  1. [來源] 中,選取 [GitHub]。 根據預設, GitHub Actions 會選取為組建提供者。

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

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

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

  5. [分支] 中,選取 main

  6. 在頂端功能表中,按兩下 [ 儲存]。

App Service 會將工作流程檔案認可至目錄中選取的 .github/workflows GitHub 存放庫。
A screenshot showing how to configure CI/CD using GitHub Actions.
在 [部署中心] 頁面中:
  1. 選取 [記錄] 。 已啟動部署執行。

  2. 在部署執行的記錄專案中,選取 [ 建置/部署記錄]。

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

A screenshot showing how to open deployment logs in the deployment center.
若要對您的程式代碼進行任何變更,請在瀏覽器中移至 Visual Studio Code:
  1. 選取原始 檔控制 延伸模組。

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

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

  4. 選取要認可並推送至 GitHub 的複選標記。

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

提示

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

A screenshot showing how to commit your changes in the Visual Studio Code browser experience.

4 - 產生資料庫架構

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

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

  2. 選取 [執行]

瀏覽器中會開啟具有 App Service 容器的 SSH 工作階段。 如果您想要,您可以改為直接巡覽至 https://<app-name>.scm.azurewebsites.net/webssh/host
A screenshot showing how to open the SSH shell for your app from the Azure portal.
在 SSH 終端機中:
  1. CD 到應用程式程式代碼的根目錄:

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

    php artisan migrate --force
    

    注意

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

A screenshot showing the commands to run in the SSH shell and their output.

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. 選取一般設定索引標籤。

A screenshot showing how to open the general settings tab in the configuration page of App Service.
在 [一般設定] 索引標籤中:
  1. 在 [ 啟動命令 ] 方塊中,輸入下列命令: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload

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

  2. 選取 [儲存]。

A screenshot showing how to configure a startup command in App Service.

6 - 瀏覽至應用程式

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

  2. 選取應用程式的 URL。

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

A screenshot showing how to launch an App Service from the Azure portal.
將一些工作新增至清單。恭喜您,您正在 Azure App 服務 中執行資料驅動的 PHP 應用程式。 A screenshot of the Laravel app running in App Service.

7 - 串流診斷記錄

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

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

A screenshot showing how to enable native logs in App Service in the Azure portal.
從左側功能表中,按兩下 [ 記錄數據流]。您會看到應用程式的記錄,包括來自容器內的平台記錄和記錄。 A screenshot showing how to view the log stream in the Azure portal.

清除資源

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

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

  2. 選取資源群組。

A screenshot showing how to search for and navigate to a resource group in the Azure portal.
在 [資源群組] 頁面中,按兩下 [ 刪除資源群組]。 A screenshot showing the location of the Delete Resource Group button in the Azure portal.
  1. 輸入資源組名以確認刪除。

  2. 按一下刪除

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal.

常見問題集

此設定的成本是多少?

建立資源的定價如下所示:

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

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

  • 命令列工具存取
    • mysql使用來自應用程式 SSH 終端機的 命令進行基本存取。
  • 桌面工具(例如 MySQL Workbench)
  • 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 檔案:

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

摘要

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

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

下一步