Preparare l'applicazione per la distribuzione

Completato

Configurare l'applicazione per la produzione aggiornando alcune delle impostazioni più comuni.

Aggiungere librerie

Verranno usate due nuove librerie per il progetto:

  • whitenoise per gestire i file statici
  • psycopg2-binary per la connessione a PostgreSQL, il database di produzione

Installare queste librerie nel progetto:

  1. In Visual Studio Code aprire requirements.txt.

  2. Aggiungere il codice seguente alla fine del file requirements.txt.

    whitenoise
    psycopg2-binary
    
  3. Aprire un nuovo riquadro del terminale selezionando Terminale>Nuovo terminale.

  4. Installare le librerie eseguendo il comando seguente.

    pip install -r requirements.txt
    

Creare un file di impostazioni di produzione

I valori assegnati a due impostazioni di base, ALLOWED_HOSTS e DATABASES, dipendono dall'ambiente che ospita l'applicazione. Le impostazioni predefinite sono progettate per lo sviluppo. Per eseguire l'app nell'ambiente di produzione, assicurarsi che le impostazioni siano aggiornate correttamente.

L'impostazione ALLOWED_HOSTS controlla i server che sono autorizzati a ospitare o eseguire l'applicazione. Verrà configurata per consentire l'esecuzione del sito da Azure e in locale. DATABASES contiene l'elenco delle stringhe di connessione disponibili.

Un modo comune per configurare le impostazioni consiste nel creare un secondo file Python che contiene la raccolta di impostazioni per la produzione. Quindi un controllo alla fine del file settings.py determina se usare le impostazioni di produzione.

A questo punto si creerà un file di impostazioni di produzione e si aggiungerà il controllo per determinare se l'applicazione è in esecuzione nell'ambiente di produzione:

  1. Creare un nuovo file in project. Denominarlo azure.py.

  2. Aggiungere il codice seguente per importare os.

    from .settings import *
    import os
    
  3. Aggiungere il codice seguente alla fine del file per eseguire l'override di ALLOWED_HOSTS per consentire ad Azure di ospitare l'applicazione e definire origini attendibili.

    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 []
    

    Nota

    Il Servizio app di Azure crea automaticamente una variabile di ambiente denominata WEBSITE_HOSTNAME. Questa variabile contiene l'URL per il sito Web. È possibile usare questa variabile per determinare se l'applicazione è in esecuzione in Azure.

  4. Aggiungere il codice seguente per configurare la stringa di connessione del database per 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'] 
        }
    }
    

    Nota

    Le variabili di ambiente verranno impostate in Azure in un passaggio successivo.

    Nota

    La connessione di database è per PostgreSQL - Server flessibile. Per PostgreSQL - Server singolo impostare il valore USER su os.environ['DBUSER'] + "@" + hostname.

    La stringa di connessione che si sta usando è per PostgreSQL. Specificare le informazioni seguenti:

    • ENGINE: tipo di database
    • NAME: nome del database
    • HOST: URL per il server
    • USER: nome utente da usare per la connessione al database
    • PASSWORD: password per l'utente
  5. Aggiungere il codice seguente alla fine del file per abilitare whitenoise, che gestirà i file statici.

    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 è un middleware che legge le richieste degli utenti per i file statici, ad esempio CSS o JavaScript. Controlla anche che i file vengano gestiti correttamente. Il middleware è stato registrato con l'aggiornamento della matrice MIDDLEWARE. È stato registrato un oggetto STATIC_ROOT per archiviare i file statici.

  6. Impostare SECRET_KEY con un'operazione di lettura dalle variabili di ambiente tramite l'aggiunta del codice seguente.

    SECRET_KEY = os.getenv('SECRET_KEY')
    

    Una nuova chiave privata verrà creata dopo la distribuzione dell'applicazione e verrà archiviata come impostazione applicazione.

  7. Disabilitare la modalità di debug aggiungendo il codice seguente.

    DEBUG = False
    

Configurare l'app per l'uso del file di impostazioni di produzione

Dopo la creazione del file di impostazioni di produzione, è possibile aggiornare l'applicazione per caricare il file in produzione. Cercare prima di tutto la variabile di ambiente WEBSITE_HOSTNAME. Questa variabile indica che l'applicazione è in esecuzione in Azure.

  1. Aprire settings.py.

  2. Aggiungere il codice seguente alla fine del file per eseguire l'override delle impostazioni necessarie quando l'app viene eseguita nell'ambiente di produzione.

    import os
    if 'WEBSITE_HOSTNAME' in os.environ: # Running on Azure
        from .azure import *
    
  3. Salvare tutti i file selezionando File>Salva tutto.

A questo punto è stata configurata un'applicazione Django per la produzione.