Preparare l'applicazione per la distribuzione
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 staticipsycopg2-binary
per la connessione a PostgreSQL, il database di produzione
Installare queste librerie nel progetto:
In Visual Studio Code aprire requirements.txt.
Aggiungere il codice seguente alla fine del file requirements.txt.
whitenoise psycopg2-binary
Aprire un nuovo riquadro del terminale selezionando Terminale>Nuovo terminale.
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:
Creare un nuovo file in project. Denominarlo azure.py.
Aggiungere il codice seguente per importare
os
.from .settings import * import os
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.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
suos.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
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 oggettoSTATIC_ROOT
per archiviare i file statici.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.
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.
Aprire settings.py.
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 *
Salvare tutti i file selezionando File>Salva tutto.
A questo punto è stata configurata un'applicazione Django per la produzione.