Les applications Django exécutées sur l'environnement standard App Engine évoluent de manière dynamique en fonction du trafic.
Dans ce tutoriel, nous partons du principe que vous connaissez bien le développement Web avec Django. Si vous débutez dans le développement avec Django, nous vous recommandons d'écrire votre première application Django avant de continuer.
Bien que ce tutoriel illustre spécifiquement Django, vous pouvez utiliser ce processus de déploiement avec d'autres frameworks basés sur Django, tels que Wagtail et le CMS Django.
Ce tutoriel utilise Django 4, qui nécessite au moins Python 3.8. L'environnement standard App Engine est compatible avec Python 3.7 ou version ultérieure, y compris Python 3.8.
Objectifs
Au cours de ce tutoriel, vous allez effectuer les opérations suivantes :
- Créer et connecter une base de données Cloud SQL.
- Créer et utiliser des valeurs secrètes dans Secret Manager.
- Déployer une application Django dans l'environnement standard App Engine.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Si vous ne l'avez pas déjà fait, initialisez App Engine et sélectionnez la région de votre choix :
gcloud app create
Préparer votre environnement
Cloner une application exemple
Le code de l'exemple d'application Django se trouve dans le dépôt GitHub GoogleCloudPlatform/python-docs-samples.
Vous pouvez soit télécharger l'exemple sous forme de fichier ZIP et l'extraire, soit cloner le dépôt sur votre ordinateur local à l'aide de la commande suivante :
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Accédez au répertoire qui contient l'exemple de code :
Linux/macOS
cd python-docs-samples/appengine/standard_python3/django
Windows
cd python-docs-samples\appengine\standard_python3\django
Confirmer la configuration de Python
Ce tutoriel s'appuie sur Python pour exécuter l'exemple d'application sur votre machine. L'exemple de code nécessite également l'installation de dépendances.
Pour en savoir plus, consultez le guide de l'environnement de développement Python.
Vérifiez que vous utilisez la version 3.8 ou ultérieure de Python.
python -V
Vous devriez voir
Python 3.8.0
ou une valeur supérieure.Créez un environnement virtuel Python et installez des dépendances :
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
Windows
python -m venv venv venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Télécharger le proxy d'authentification Cloud SQL pour vous connecter à Cloud SQL depuis votre ordinateur local
Une fois déployée, votre application utilise le proxy d'authentification Cloud SQL intégré à l'environnement standard App Engine pour communiquer avec le client Compute Engine. Notez toutefois que pour tester votre application en local, vous devez installer et utiliser une copie locale du proxy dans votre environnement de développement. Pour en savoir plus, consultez le guide sur les proxys d'authentification Cloud SQL.
Le proxy d'authentification Cloud SQL utilise l'API Cloud SQL pour interagir avec votre instance SQL. Pour ce faire, il nécessite l'authentification de l'application via la CLI gcloud.
Authentifiez-vous et acquérez des identifiants pour l'API :
gcloud auth application-default login
Téléchargez et installez le proxy d'authentification Cloud SQL sur votre ordinateur local.
Linux 64 bits
- Téléchargez le proxy d'authentification Cloud SQL :
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.linux.amd64
- Rendez le proxy d'authentification Cloud SQL exécutable :
chmod +x cloud-sql-proxy
Linux 32 bits
- Téléchargez le proxy d'authentification Cloud SQL :
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.linux.386
- Si la commande
curl
est introuvable, exécutezsudo apt install curl
puis répétez la commande de téléchargement. - Rendez le proxy d'authentification Cloud SQL exécutable :
chmod +x cloud-sql-proxy
macOS 64 bits
- Téléchargez le proxy d'authentification Cloud SQL :
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.darwin.amd64
- Rendez le proxy d'authentification Cloud SQL exécutable :
chmod +x cloud-sql-proxy
Mac M1
- Téléchargez le proxy d'authentification Cloud SQL :
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.darwin.arm64
- Rendez le proxy d'authentification Cloud SQL exécutable :
chmod +x cloud-sql-proxy
Windows 64 bits
Effectuez un clic droit sur https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.x64.exe et sélectionnez Enregistrer le lien sous pour télécharger le proxy d'authentification Cloud SQL. Renommez le fichier encloud-sql-proxy.exe
.Windows 32 bits
Effectuez un clic droit sur https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.x86.exe et sélectionnez Enregistrer le lien sous pour télécharger le proxy d'authentification Cloud SQL. Renommez le fichier encloud-sql-proxy.exe
.Image Docker du proxy d'authentification Cloud SQL
Le proxy d'authentification Cloud SQL possède différentes images de conteneur, telles que
distroless
,alpine
etbuster
. L'image de conteneur du proxy d'authentification Cloud SQL par défaut utilisedistroless
, qui ne contient aucune interface système. Si vous avez besoin d'une interface système ou d'outils associés, téléchargez une image basée suralpine
oubuster
. Pour plus d'informations, consultez la page Images de conteneurs du proxy d'authentification Cloud SQL.Vous pouvez extraire la dernière image sur votre ordinateur local en utilisant Docker avec la commande suivante :
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.13.0
Autres systèmes d'exploitation
Pour les autres systèmes d'exploitation non inclus ici, vous pouvez compiler le proxy d'authentification Cloud SQL à partir de la source.Vous pouvez déplacer le téléchargement vers un emplacement courant, tel qu'un emplacement sur votre
PATH
ou dans votre répertoire d'accueil. Si vous choisissez cette solution, lorsque vous démarrerez le proxy d'authentification Cloud SQL plus tard dans le tutoriel, n'oubliez pas de faire référence à l'emplacement que vous avez choisi lors de l'utilisation des commandescloud-sql-proxy
.- Téléchargez le proxy d'authentification Cloud SQL :
Créer des services externes
Dans ce tutoriel, nous utilisons plusieurs services Google Cloud pour fournir la base de données, le stockage multimédia et le stockage de secrets compatibles avec le projet Django déployé. Ces services sont déployés dans une région spécifique. Pour plus d'efficacité entre les services, tous les services doivent être déployés dans la même région. Pour plus d'informations sur la région la plus proche de vous, consultez la section Produits disponibles par région.
Ce tutoriel utilise les mécanismes d'hébergement d'éléments statiques intégrés dans l'environnement standard App Engine.Configurer une instance Cloud SQL pour PostgreSQL
Django est officiellement compatible avec plusieurs bases de données relationnelles, mais offre la plus grande compatibilité avec PostgreSQL. PostgreSQL est compatible avec Cloud SQL. Ce tutoriel choisit donc d'utiliser ce type de base de données.
La section suivante décrit la création d'une instance PostgreSQL, d'une base de données et d'un utilisateur de base de données pour l'application.
Créez l'instance PostgreSQL :
Console
Dans la console Google Cloud, accédez à la page Instances Cloud SQL.
Cliquez sur Create Instance (Créer une instance).
Cliquez sur PostgreSQL.
Dans le champ ID d'instance, saisissez
INSTANCE_NAME
.Indiquez le mot de passe de l'utilisateur postgres.
Conservez les valeurs par défaut des autres champs.
Cliquez sur Create (Créer).
La création de l'instance et la préparation à son utilisation prennent quelques minutes.
gcloud
Créez l'instance PostgreSQL :
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_13 \ --tier db-f1-micro \ --region REGION
Remplacez l'élément suivant :
INSTANCE_NAME
: nom de l'instance Cloud SQLPROJECT_ID
: ID de projet Google CloudREGION
: région Google Cloud
La création de l'instance et la préparation à son utilisation prennent quelques minutes.
Dans l'instance créée, créez une base de données :
Console
- Sur la page de votre instance, accédez à l'onglet Bases de données.
- Cliquez sur Create database.
- Dans la boîte de dialogue Nom de la base de données, saisissez
DATABASE_NAME
. - Cliquez sur Create (Créer).
gcloud
Créez la base de données dans l'instance récemment créée :
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAME
Remplacez
DATABASE_NAME
par le nom de la base de données dans l'instance.
Créez un utilisateur de base de données :
Console
- Dans la page de votre instance, accédez à l'onglet Utilisateurs.
- Cliquez sur Ajouter un compte utilisateur.
- Dans la boîte de dialogue Ajouter un compte utilisateur à l'instance, sous "Authentification intégrée", effectuez les opérations suivantes :
- Saisissez le nom d'utilisateur
DATABASE_USERNAME
. - Saisissez le mot de passe
DATABASE_PASSWORD
. - Cliquez sur Ajouter.
gcloud
Créez l'utilisateur dans l'instance récemment créée :
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORD
Remplacez
PASSWORD
par un mot de passe sécurisé.
Stocker les valeurs du secret dans Secret Manager
Maintenant que les services externes sont configurés, Django a besoin d'informations sur ces services. Au lieu de placer ces valeurs directement dans le code source de Django, ce tutoriel utilise Secret Manager pour stocker ces informations en toute sécurité.
L'environnement standard App Engine interagit avec les secrets à l'aide de son compte de service.Créer un fichier d'environnement Django en tant que secret Secret Manager
Vous stockez les paramètres requis pour démarrer Django dans un fichier d'environnement sécurisé.
L'exemple d'application utilise l'API Secret Manager pour récupérer la valeur du secret, et le package django-environ
pour charger les valeurs dans l'environnement Django. Le secret est configuré pour être accessible par l'environnement standard App Engine.
Créez un fichier appelé
.env
, en définissant la chaîne de connexion à la base de données, le nom du bucket multimédia et une nouvelle valeurSECRET_KEY
:echo DATABASE_URL=postgres://DATABASE_USERNAME:DATABASE_PASSWORD@//cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/DATABASE_NAME > .env echo GS_BUCKET_NAME=PROJECT_ID_MEDIA_BUCKET >> .env echo SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1) >> .env
Stockez le secret dans le gestionnaire de secrets :
Console
Dans la console Google Cloud, accédez à la page Secret Manager.
Cliquez sur Créer un secret.
Dans le champ Nom, saisissez
django_settings
.Dans la boîte de dialogue Valeur du secret, collez le contenu de votre fichier
.env
.Cliquez sur Créer un secret.
Supprimez le fichier local pour empêcher tout remplacement des paramètres locaux.
gcloud
Créez le secret
django_settings
avec la valeur du fichier.env
:gcloud secrets create django_settings --data-file .env
Pour confirmer la création du secret, vérifiez-le :
gcloud secrets describe django_settings gcloud secrets versions access latest --secret django_settings
Supprimez le fichier local pour empêcher tout remplacement des paramètres locaux :
rm .env
Configurez l'accès au secret :
Console
- Cliquez sur l'onglet Autorisations.
- Cliquez sur Ajouter.
- Dans le champ Nouveaux membres, saisissez
PROJECT_ID@appspot.gserviceaccount.com
, puis appuyez surEnter
. - Dans le menu déroulant Rôle, sélectionnez Accesseur de secrets de Secret Manager.
- Cliquez sur Enregistrer.
gcloud
Accordez l'accès au secret au compte de service standard App Engine :
gcloud secrets add-iam-policy-binding django_settings \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Exécuter l'application sur votre ordinateur local
Maintenant que les services externes sont configurés, vous pouvez exécuter l'application sur votre ordinateur. Cette configuration permet le développement local, la création d'un super-utilisateur et l'application de migrations de bases de données.
Dans un terminal distinct, démarrez le proxy d'authentification Cloud SQL :
Linux/macOS
./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
Windows
cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
Cette étape permet d'établir une connexion depuis votre ordinateur local vers votre instance Cloud SQL à des fins de test. Gardez le Proxy d'authentification Cloud SQL s'exécutant pendant toute la durée du test local de votre application L'exécution de ce processus dans un terminal distinct vous permet de continuer à travailler pendant son exécution.
Dans le terminal d'origine, définissez l'ID de projet localement (utilisé par l'API Secret Manager) :
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Windows
set GOOGLE_CLOUD_PROJECT=PROJECT_ID
Définissez une variable d'environnement pour indiquer que vous utilisez le proxy d'authentification Cloud SQL (cette valeur est reconnue dans le code):
Linux/macOS
export USE_CLOUD_SQL_AUTH_PROXY=true
Windows
set USE_CLOUD_SQL_AUTH_PROXY=true
Exécutez les migrations Django pour configurer vos modèles et vos éléments :
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstatic
Démarrez le serveur Web Django :
python manage.py runserver 8080
Dans votre navigateur, accédez à http://localhost:8080.
Si vous êtes dans Cloud Shell, cliquez sur le bouton Aperçu sur le Web, puis sélectionnez Prévisualiser sur le port 8080.
La page affiche le texte suivant : "Hello, world. You're at the polls index." Le serveur Web Django qui s'exécute sur votre ordinateur diffuse les pages de l'exemple d'application.
Appuyez sur
Ctrl
/Cmd
+C
pour arrêter le serveur Web local.
Utiliser la console d'administration Django
Pour vous connecter à la console d'administration de Django, vous devez créer un super-utilisateur. Comme vous disposez d'une connexion locale à la base de données, vous pouvez exécuter les commandes de gestion :
Créez un super-utilisateur. Vous êtes invité à saisir un nom d'utilisateur, une adresse e-mail et un mot de passe.
python manage.py createsuperuser
Démarrez un serveur Web local :
python manage.py runserver
Dans votre navigateur, accédez à http://localhost:8000/admin.
Connectez-vous au site d'administration à l'aide du nom d'utilisateur et du mot de passe que vous avez spécifiés dans la commande
createsuperuser
.
Déployer l'application dans l'environnement standard App Engine
Avec tous les services externes configurés et l'application testée localement, vous pouvez maintenant déployer l'application sur l'environnement standard App Engine :
- Importez l'application en exécutant la commande suivante, qui déploie l'application conformément aux instructions du fichier
app.yaml
, et définit la version nouvellement déployée comme version par défaut, de sorte que celle-ci diffuse tout le nouveau trafic :gcloud app deploy
- Confirmez les paramètres en saisissant "yes" lorsque vous y êtes invité.
- Attendez le message vous informant que la mise à jour est terminée.
- Ouvrez
app.yaml
et mettez à jour la valeur deAPPENGINE_URL
avec votre URL déployée :... env_variables: APPENGINE_URL: https://PROJECT_ID.uc.r.appspot.com
- Importez vos modifications de configuration:
gcloud app deploy
Exécuter l'application déployée
L'application a été déployée, et elle est désormais accessible :
Ouvrez le site Web déployé :
gcloud app browse
Vous pouvez également afficher l'URL et l'ouvrir manuellement :
gcloud app describe --format "value(defaultHostname)"
La requête est diffusée par un serveur Web s'exécutant dans l'environnement standard App Engine.
Mettre à jour l'application
Pour mettre à jour votre application, modifiez le code, puis exécutez à nouveau la commande gcloud app deploy
.
Le déploiement crée nouvelle version de votre application et le fait passer à la version par défaut. Les anciennes versions de votre application sont conservées. Toutes ces versions restent des ressources facturables. Pour réduire les coûts, supprimez toutes les versions de votre application sauf celle par défaut.
Configurer pour la production
Votre déploiement Django est opérationnel, mais vous pouvez suivre d'autres étapes pour vous assurer que votre application est prête pour la production.
Désactiver le débogage
Vérifiez que la variable DEBUG
dans mysite/settings.py
est définie sur False
. Cela empêche l'affichage pour l'utilisateur de pages d'erreur détaillées, ce qui peut conduire à des fuites des informations sur les configurations.
Limiter les droits d'utilisateur de la base de données
Tous les utilisateurs créés à l'aide de Cloud SQL disposent des droits associés au rôle cloudsqlsuperuser
: CREATEROLE
, CREATEDB
et LOGIN
.
Pour empêcher l'utilisateur de la base de données Django de disposer de ces autorisations, créez-le manuellement dans PostgreSQL. Vous devrez avoir installé le terminal interactif psql
ou utiliser Cloud Shell, dans lequel cet outil est préinstallé.
Console
-
In the Google Cloud console, activate Cloud Shell.
Dans Cloud Shell, utilisez le terminal intégré pour vous connecter à votre instance
INSTANCE_NAME
:gcloud sql connect INSTANCE_NAME --user postgres
Saisissez le mot de passe utilisateur Postgres.
Vous utilisez désormais
psql
. L'invitepostgres=>
doit s'afficher.Créez un compte utilisateur :
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Remplacez
PASSWORD
par un mot de passe unique et aléatoire.Accordez tous les droits sur la nouvelle base de données au nouvel utilisateur :
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Quittez
psql
:\q
gcloud
Démarrez une connexion à l'instance SQL :
gcloud sql connect INSTANCE_NAME --user postgres
Remplacez
INSTANCE_NAME
par l'instance Cloud SQL créée.Saisissez le mot de passe utilisateur Postgres.
Vous utilisez désormais
psql
. L'invitepostgres=>
doit s'afficher.Créez un compte utilisateur :
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Accordez tous les droits sur la nouvelle base de données au nouvel utilisateur :
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Quittez
psql
:\q
Comprendre le code
Exemple d'application
L'exemple d'application Django a été créé à l'aide des outils Django standards. Les commandes suivantes créent le projet et l'application polls :
django-admin startproject mysite
python manage.py startapp polls
Les vues de base, les modèles et les configurations de routage ont été copiés à partir du tutoriel Écrire votre première application Django (Partie 1 et Partie 2).
Secrets de Secret Manager
Le fichier settings.py
contient du code qui utilise l'API Python Secret Manager pour récupérer la dernière version du secret nommé et l'extraire dans l'environnement (à l'aide de django-environ
) :
Le secret est utilisé pour stocker plusieurs valeurs secrètes afin de réduire le nombre de secrets différents à configurer.
Configurations CSRF
Django dispose d'une protection intégrée contre la falsification de requête intersites (CSRF). À partir de Django 4.0, les modifications apportées au fonctionnement de Django signifient qu'il est important d'indiquer à Django l'URL hébergée, afin d'offrir les meilleures protections aux utilisateurs qui envoient des données.
Vous fournissez l'URL de l'application en tant que variable d'environnement dans le fichier settings.py
. C'est la valeur que Django utilise pour les paramètres pertinents.
Remplacement des secrets locaux
Si un fichier .env
se trouve sur le système de fichiers local, il est utilisé à la place de la valeur de Secret Manager. La création d'un fichier .env
localement peut être utile pour les tests locaux (par exemple, développement local avec une base de données SQLite ou d'autres paramètres locaux).
Connexion à une base de données
Le fichier settings.py
contient la configuration de la base de données SQL. Il utilise l'outil d'aide env.db()
.
depuis django-environ
pour charger la chaîne de connexion définie dans DATABASE_URL
dans le paramètre DATABASES
.
Lorsque vous exécutez l'application en local et que vous utilisez le proxy d'authentification Cloud SQL pour accéder à la
hébergée, l'option USE_CLOUD_SQL_AUTH_PROXY
ajuste la base de données
pour utiliser le proxy.
Contenu statique hébergé
Le fichier app.yaml
contient les informations de configuration concernant le déploiement sur App Engine.
Ce fichier app.yaml
spécifie qu'App Engine diffuse les fichiers statiques à partir du répertoire static/
:
Lorsque vous exécutez l'application en local avec DEBUG
activé, ces fichiers sont diffusés localement par Django :
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Étape suivante
- Apprenez à configurer PostgreSQL pour la production.
- Apprenez-en plus sur Django sur Google Cloud.