デプロイ向けにアプリケーションを準備する

完了

最も一般的な設定の一部を更新して、アプリケーションを運用環境用に設定します。

ライブラリの追加

プロジェクトに 2 つの新しいライブラリを使用します。

  • 静的ファイルを提供する whitenoise
  • PostgreSQL (運用データベース) に接続する psycopg2-binary

これらのライブラリをプロジェクトにインストールします。

  1. Visual Studio Code で requirements.txt を開きます。

  2. requirements.txt の最後に次のコードを追加します。

    whitenoise
    psycopg2-binary
    
  3. [ターミナル]>[新しいターミナル]を選択して、新しい [ターミナル] ウィンドウを開きます。

  4. 次のコマンドを実行してライブラリをインストールします。

    pip install -r requirements.txt
    

運用設定ファイルを作成する

2 つのコア設定 ALLOWED_HOSTSDATABASES に割り当てる値は、アプリケーションをホストする環境によって異なります。 既定の設定は、開発用に設計されています。 運用環境でアプリを実行するには、これらの設定が正しく更新されていることを確認します。

ALLOWED_HOSTS では、アプリケーションのホストまたは実行が許可されているサーバーを制御します。 サイトを Azure からローカルで実行できるように構成します。 DATABASES には使用できる接続文字列の一覧が含まれています。

設定を構成する一般的な方法は、運用環境の設定のコレクションを含む 2 つ目の Python ファイルを作成することです。 その後、settings.py の最後にあるチェックにより、運用設定を使用するかどうかが判断されます。

次に、運用設定ファイルを作成し、アプリケーションが運用環境で実行されているかどうかを判断するチェックを追加します。

  1. project 内に新しいファイルを作成します。 これに 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 []
    

    Note

    Azure App Service によって、WEBSITE_HOSTNAME という名前の環境変数が自動的に作成されます。 この変数には、Web サイトの 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'] 
        }
    }
    

    Note

    後の手順で、Azure で環境変数を設定します。

    Note

    データベース接続は 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. 次のコードを追加して、環境変数からの 1 つの読み取りで 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 アプリケーションを構成できました。