準備應用程式以進行部署

已完成

更新一些最常見的設定,以設定生產的應用程式。

新增程式庫

您將在專案中使用兩個新的程式庫:

  • whitenoise 以提供靜態檔案
  • psycopg2-binary 以連線至作為生產資料庫的 PostgreSQL

在專案中安裝這些程式庫:

  1. 在 Visual Studio Code 中,開啟 requirements.txt

  2. requirements.txt 的結尾處新增下列程式碼。

    whitenoise
    psycopg2-binary
    
  3. 選取 [終端機]>[新終端機],以開啟新的終端機窗格。

  4. 執行下列命令以安裝程式庫。

    pip install -r requirements.txt
    

建立生產設定檔案

您指派給兩個核心設定的值為 ALLOWED_HOSTSDATABASES,該值取決於裝載應用程式的環境。 預設設定是專為開發設計。 為在生產中執行應用程式,請確認這些設定已正確更新。

ALLOWED_HOSTS 控制允許託管或執行應用程式的伺服器。 您將設定其允許從 Azure 和本機執行網站。 DATABASES 包含可用連接字串的清單。

設定這些設定的常見方式,為建立包含用於生產的設定集合的第二個 Python 檔案。 然後 ,settings.py 結尾的檢查會判斷是否要使用生產設定。

現在您要建立生產設定檔案,並新增檢查以判斷您的應用程式是否正在生產環境中執行:

  1. 在 [專案] 內建立新的檔案。 將其命名為 azure.py

  2. 新增下列程式碼,以匯入 os

    from .settings import *
    import os
    
  3. 將下列程式碼新增至檔案結尾來覆寫 ALLOWED_HOSTS,以允許 Azure 裝載應用程式,以及定義受信任的原點。

    ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    CSRF_TRUSTED_ORIGINS = ['https://'+ os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    

    注意

    Azure App Service 會自動建立名為 WEBSITE_HOSTNAME 的環境變數。 此變數包含您網站的 URL。 您可以使用此變數來判斷應用程式是否正在 Azure 上執行。

  4. 新增下列程式碼,以設定適用於 PostgreSQL 的資料庫連接字串。

    hostname = os.environ['DBHOST']
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': os.environ['DBNAME'],
            'HOST': hostname + ".postgres.database.azure.com",
            'USER': os.environ['DBUSER'],
            'PASSWORD': os.environ['DBPASS'] 
        }
    }
    

    注意

    您將在稍後步驟中設定 Azure 上的環境變數。

    注意

    資料庫連線適用於 PostgreSQL 彈性伺服器。 針對 PostgreSQL 單一伺服器,將 USER 值設定為 os.environ['DBUSER'] + "@" + hostname

    您正在使用的連接字串適用於 PostgreSQL。 您提供下列資訊:

    • ENGINE:資料庫類型
    • NAME:資料庫名稱
    • HOST:伺服器的 URL
    • USER:用於連線資料庫的使用者名稱
    • PASSWORD:使用者密碼
  5. 將下列程式碼新增至檔案底部,以開啟 whitenoise,這會提供靜態檔案。

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        # Enables whitenoise for serving static files
        'whitenoise.middleware.WhiteNoiseMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    WhiteNoise 是為如 CSS 或 JavaScript 等靜態檔案讀取使用者要求的中介軟體。 也可確保正確提供檔案。 您已更新 MIDDLEWARE 陣列來註冊中介軟體。 您已註冊 STATIC_ROOT 來儲存靜態檔案。

  6. 透過新增下列程式碼,使用來自環境變數的讀取內容來設定 SECRET_KEY

    SECRET_KEY = os.getenv('SECRET_KEY')
    

    部署應用程式並儲存為應用程式設定後,您便建立了新的祕密金鑰。

  7. 新增下列程式碼來停用偵錯模式。

    DEBUG = False
    

設定應用程式以使用生產設定檔案

現在您已建立生產設定檔案,您可以更新應用程式,以在生產環境中載入檔案。 從尋找 WEBSITE_HOSTNAME 環境變數開始。 此變數表示應用程式正在 Azure 上執行。

  1. 開啟 settings.py

  2. 當應用程式在生產中執行時,新增下列程式碼至檔案結尾,以覆寫必要設定。

    import os
    if 'WEBSITE_HOSTNAME' in os.environ: # Running on Azure
        from .azure import *
    
  3. 請選取 [檔案]>[全部儲存] 以儲存全部檔案。

您現已為生產設定 Django 應用程式。