Share via


教學課程:在 Azure App 服務 上使用 Service 連線 or 建置具有 Postgres 的 Django 應用程式

注意

在本教學課程中,您會使用 Service 連線 or,簡化將 Web 應用程式連線至資料庫服務的程式。 本教學課程是 App Service 教學課程的修改,因此您可能會看到一些相似之處。 查看設定環境變數以連線資料庫一節,以查看 Service 連線 或運作的位置,並簡化 App Service 教學課程中提供的連線程式。

本教學課程示範如何將數據驅動 Python Django Web 應用程式部署至 Azure App 服務,並將其連線至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫。

在本教學課程中,您會使用 Azure CLI 來完成下列工作:

  • 使用 Python 和 Azure CLI 設定初始環境
  • 建立 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫
  • 將程式代碼部署至 Azure App 服務 並連線到 PostgreSQL 彈性伺服器
  • 更新您的程式代碼並重新部署
  • 檢視診斷記錄
  • 在 Azure 入口網站 中管理 Web 應用程式

設定初始環境

  1. 安裝 Python 3.8 或更高版本。 若要檢查 Python 版本是否為 3.8 或更高版本,請在終端機視窗中執行下列程式代碼:

    python3 --version
    
  2. 安裝 Azure CLI 2.30.0 或更高版本。 若要檢查您的 Azure CLI 版本是否為 2.30.0 或更高版本,請執行 az --version 命令。 如果您需要升級,請執行 az upgrade (需要 2.30.0+版)。

  3. 使用 CLI 搭配 az login登入 Azure。 此命令會開啟瀏覽器來收集您的認證。 當命令完成時,即會顯示 JSON 輸出,其中包含您的訂用帳戶相關資訊。 登入之後,您可以使用 Azure CLI 執行 Azure 命令,以使用訂用帳戶中的資源。

複製或下載範例應用程式

複製範例存放庫:

git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django.git

瀏覽至下列資料夾:

cd serviceconnector-webapp-postgresql-django

使用範例的彈性伺服器分支,其中包含一些必要的變更,例如資料庫伺服器 URL 的設定方式,以及 'OPTIONS': {'sslmode': 'require'} 新增至 Azure PostgreSQL 彈性伺服器所需的 Django 資料庫組態。

git checkout flexible-server

djangoapp 範例包含您在 Django 檔中撰寫第一個 Django 應用程式所 得到的數據驅動 Django 輪詢應用程式 。 您可以在這裡提供完整的應用程式,以方便您。

此範例也會修改為在生產環境中執行,例如 App Service:

  • 生產設定位於 azuresite/production.py 檔案中。 開發設定位於 azuresite/settings.py
  • 設定環境變數時, WEBSITE_HOSTNAME 應用程式會使用生產設定。 Azure App 服務 會自動將此變數設定為 Web 應用程式的 URL, 例如 msdocs-django.azurewebsites.net

生產設定是設定 Django 以在任何生產環境中執行,且並非 App Service 的特定設定。 如需詳細資訊,請參閱 Django 部署檢查清單。 另請參閱 Azure 上 Django 的生產設定,以取得一些變更的詳細數據。

有問題嗎? 請告訴我們

在 Azure 中建立 Postgres 資料庫

  1. 使用 Azure CLI 啟用參數快取,因此您不需要為每個命令提供這些參數。 (快取的值會儲存在 .azure 資料夾中。

    az config param-persist on 
    
  2. 建立 資源群組 (您可以視需要變更名稱)。 資源組名會快取並自動套用至後續命令。

    az group create --name ServiceConnector-tutorial-rg --location eastus
    
  3. 建立資料庫伺服器(程式需要幾分鐘的時間):

    az postgres flexible-server create --sku-name Standard_B1ms --public-access all
    

    如果無法辨識 az 命令,請確定您已安裝 Azure CLI,如設定初始環境所說明。

    az postgres flexible-server create 命令會執行下列動作,這需要幾分鐘的時間:

    • 如果沒有快取的名稱,請建立預設資源群組。
    • 建立 PostgreSQL 彈性伺服器:
      • 根據預設,命令會使用產生的名稱,例如 server383813186。 您可以使用 參數來指定您自己的名稱 --name 。 此名稱在整個 Azure 中必須是唯一的。
      • 命令會使用成本 Standard_B1ms 最低的定價層。 省略 --sku-name 自變數以使用預設 Standard_D2s_v3 層。
      • 此命令會使用從上一az group create個命令快取的資源群組和位置,在此範例中eastus是區域中的資源群組ServiceConnector-tutorial-rg
    • 使用使用者名稱和密碼建立系統管理員帳戶。 您可以使用 和 --admin-password 參數直接--admin-user指定這些值。
    • 根據預設,建立名為 flexibleserverdb 的資料庫。 您可以使用 參數來指定資料庫名稱 --database-name
    • 啟用完整的公用存取,您可以使用 參數來控制 --public-access
  4. 當命令完成時, 請將命令的 JSON 輸出複製到檔案 ,因為您稍後在本教學課程中需要來自輸出的值,特別是主機、使用者名稱和密碼,以及資料庫名稱。

有問題嗎? 請告訴我們

將程式代碼部署至 Azure App 服務

在本節中,您會在 App Service 應用程式中建立應用程式主機、將此應用程式連線至 Postgres 資料庫,然後將程式代碼部署至該主機。

建立 App Service 應用程式

  1. 在終端機中,請確定您位於 包含應用程式程式代碼的 djangoapp 存放庫資料夾中。

  2. 切換至範例應用程式的 flexible-server 分支。 此分支包含 PostgreSQL 彈性伺服器所需的特定設定:

    git checkout flexible-server
    
  3. 執行下列 az webapp up 命令來建立應用程式的 App Service 主機:

    az webapp up --name <app-name> --sku B1 
    

    此命令會執行下列動作,這可能需要幾分鐘的時間,使用從上az group create一個命令快取的資源群組和位置(此範例中的區域中的eastus群組Python-Django-PGFlex-rg)。

    • 在基本定價層中建立 App Service方案 (B1)。 您可以省略 --sku 以使用預設值。
    • 建立 App Service 應用程式。
    • 啟用應用程式的默認記錄。
    • 使用已啟用建置自動化的 ZIP 部署來上傳存放庫。

成功部署時,命令會產生 JSON 輸出,如下列範例所示:

終端機的螢幕快照,其中顯示 az webapp up 命令的範例輸出。

有問題嗎? 請先參閱疑難排解指南,或者,請告訴我們

設定環境變數以連線資料庫

現在將程式代碼部署至 App Service,下一個步驟是將應用程式連線至 Azure 中的 Postgres 資料庫。

應用程式程式代碼預期會在名為、 AZURE_POSTGRESQL_NAMEAZURE_POSTGRESQL_USERAZURE_POSTGRESQL_PASS的四個環境變數AZURE_POSTGRESQL_HOST中尋找資料庫資訊。

若要在 App Service 中設定環境變數,請使用下列 az connection create 命令建立「應用程式設定」。

az webapp connection create postgres-flexible --client-type django

資源群組、應用程式名稱、資料庫名稱是從快取的值繪製而來。 您必須在執行此命令期間提供postgres資料庫的系統管理員密碼。

  • 此命令會依照應用程式程式代碼的預期,建立名為 “AZURE_POSTGRESQL_HOST”、“AZURE_POSTGRESQL_NAME”、“AZURE_POSTGRESQL_USER”、“AZURE_POSTGRESQL_PASS” 的設定。
  • 如果您忘記系統管理員認證,命令會引導您重設認證。

注意

如果您看到錯誤訊息「訂用帳戶未註冊為使用 Microsoft.ServiceLinker」,請執行 az provider register -n Microsoft.ServiceLinker 以註冊服務 連線 或資源提供者,然後再次執行連線命令。

在 Python 程式代碼中,您可以使用 之類的 os.environ.get('AZURE_POSTGRESQL_HOST')語句,以環境變數的形式存取這些設定。 如需詳細資訊,請參閱 存取環境變數

有問題嗎? 請先參閱疑難排解指南,或者,請告訴我們

執行 Django 資料庫移轉

Django 資料庫移轉可確保 Azure 資料庫上的 PostgreSQL 架構符合您的程式代碼。

  1. 執行 az webapp ssh 以瀏覽器開啟 Web 應用程式的 SSH 工作階段:

    az webapp ssh
    
  2. 在 SSH 工作階段中,執行下列命令:

    # Run database migrations
    python manage.py migrate
    
    # Create the super user (follow prompts)
    python manage.py createsuperuser
    

    如果您遇到連線到資料庫的任何錯誤,請檢查上一節中建立的應用程式設定值。

  3. 命令 createsuperuser 會提示您輸入超級用戶認證。 針對本教學課程的目的,請使用預設的用戶名稱 root,按 Enter 代表電子郵件位址保留空白,然後輸入 Pollsdb1 密碼。

  4. 如果您看到資料庫已鎖定的錯誤,請確定您在上一節中執行 az webapp settings 命令。 如果沒有這些設定,migrate 命令就無法與資料庫通訊,導致錯誤。

有問題嗎? 請先參閱疑難排解指南,或者,請告訴我們

在應用程式中建立輪詢問題

  1. 開啟應用程式網站。 應用程式應該會顯示「輪詢應用程式」和「沒有投票可供使用」訊息,因為資料庫中還沒有特定的輪詢。

    az webapp browse
    

    如果您看到「應用程式錯誤」,則您可能未在上一個步驟「設定環境變數以連接資料庫」中建立必要的設定,或這些值包含錯誤。 執行 命令 az webapp config appsettings list 來檢查設定。

    更新設定以更正任何錯誤之後,請讓應用程式一分鐘重新啟動,然後重新整理瀏覽器。

  2. 藉由附加 /admin 至網址,瀏覽至 Web 應用程式的系統管理頁面, 例如 http://<app-name>.azurewebsites.net/admin。 使用上一節的 Django 超級使用者認證登入 (rootPollsdb1)。 在 [投票] 底下,選取 [問題] 旁的 [新增],並建立具有一些選擇的輪詢問題。

  3. 返回主要網站 (http://<app-name>.azurewebsites.net) 以確認問題現在會呈現給使用者。 但您想要在資料庫中產生一些數據,但請回答問題。

恭喜! 您是在適用於Linux的 Azure App 服務中執行 Python Django Web 應用程式,並使用作用中的Postgres資料庫。

注意

App Service 會在預設建立的每個子資料夾中尋找 wsgi.py 檔案, manage.py startproject 以偵測 Django 專案。 當 App Service 找到該檔案時,它會載入 Django Web 應用程式。 如需詳細資訊,請參閱 設定內建 Python 映像

清除資源

如果您想要保留應用程式或繼續進行更多教學課程,請跳到 後續步驟。 否則,若要避免產生持續費用,請刪除針對本教學課程建立的資源群組:

az group delete --name ServiceConnector-tutorial-rg --no-wait

藉由刪除資源群組,您也會解除分配並刪除其內含的所有資源。 使用 命令之前,請確定您不再需要群組中的資源。

刪除所有資源可能需要一些時間。 自 --no-wait 變數可讓命令立即傳回。

有問題嗎? 請告訴我們

後續步驟