Exécuter Django dans l'environnement standard App Engine

Les applications Django qui s'exécutent dans 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. Dans ce tutoriel, les modèles de l'application représentent des sondages contenant des questions. Vous pouvez interagir avec ces modèles à l'aide de la console d'administration Django.

Ce tutoriel nécessite Python 3.7.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez Cloud SQL Admin API.

    Activer l'API

  5. Installez et initialisez le SDK Cloud.

Se connecter à gcloud

Procurez-vous de nouveaux identifiants pour utiliser l'API Cloud SQL Admin :

gcloud auth application-default login

Télécharger et exécuter l'application

Une fois les conditions préalables remplies, téléchargez et déployez l'exemple d'application Django. Les sections suivantes vous guident dans la configuration, l'exécution et le déploiement de cette application.

Cloner l'application Django

Le code de l'exemple d'application Django se trouve dans le dépôt GoogleCloudPlatform/python-docs-samples sur GitHub.

  1. 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

  2. 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

Configurer votre environnement local

Une fois déployée, votre application communique avec votre instance Cloud SQL via le proxy Cloud SQL intégré à l'environnement App 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.

Apprenez-en plus sur le proxy Cloud SQL.

Pour effectuer des tâches administratives de base sur votre instance Cloud SQL, vous pouvez utiliser le client MySQL.

Activer l'API Cloud SQL Admin

Avant d'utiliser Cloud SQL, vous devez activer l'API Cloud SQL Admin à l'aide de la commande suivante :

gcloud services enable sqladmin

Installer le proxy Cloud SQL

Téléchargez et installez le proxy Cloud SQL. Le proxy Cloud SQL se connecte à votre instance Cloud SQL lorsqu'il est exécuté en local.

Linux 64 bits

  1. Téléchargez le proxy :
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Rendez le proxy exécutable :
    chmod +x cloud_sql_proxy
    

Linux 32 bits

  1. Téléchargez le proxy :
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Rendez le proxy exécutable :
    chmod +x cloud_sql_proxy
    

macOS 64 bits

  1. Téléchargez le proxy :
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Rendez le proxy exécutable :
    chmod +x cloud_sql_proxy
    

macOS 32 bits

  1. Téléchargez le proxy :
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Rendez le proxy exécutable :
    chmod +x cloud_sql_proxy
    

Windows 64 bits

Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier en cloud_sql_proxy.exe.

Windows 32 bits

Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier en cloud_sql_proxy.exe.
Si votre système d'exploitation n'apparaît pas ici, vous pouvez également compiler le proxy à partir de la source.

Créer une instance Cloud SQL

  1. Créez une instance Cloud SQL pour MySQL de deuxième génération.

    Nommez-la polls-instance ou donnez-lui un nom similaire. La préparation de l'instance peut prendre quelques minutes. Une fois l'instance prête, elle est visible dans la liste des instances.

  2. Utilisez à présent le SDK Cloud pour exécuter la commande suivante, en remplaçant [YOUR_INSTANCE_NAME] par le nom de votre instance Cloud SQL.
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    Dans le résultat, notez la valeur indiquée pour [CONNECTION_NAME].

    La valeur de [CONNECTION_NAME] est au format [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].

Initialiser votre instance Cloud SQL

  1. Démarrez le proxy Cloud SQL en utilisant la valeur [CONNECTION_NAME] de l'étape précédente :

    Linux/macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    Remplacez [YOUR_INSTANCE_CONNECTION_NAME] par la valeur [CONNECTION_NAME] que vous avez enregistrée à l'étape précédente.

    Cette étape permet d'établir une connexion depuis votre ordinateur local vers votre instance Cloud SQL à des fins de test. N'arrêtez pas le proxy Cloud SQL lors du test local de votre application.

  2. Créez un utilisateur et une base de données Cloud SQL :

    Cloud Console

    1. Créez une base de données à l'aide de Cloud Console dans l'instance Cloud SQL polls-instance. Vous pouvez par exemple utiliser le nom polls.
    2. Créez un utilisateur à l'aide de Cloud Console dans l'instance Cloud SQL polls-instance.

    Client MySQL

    1. Dans un onglet de ligne de commande distinct, connectez-vous à votre instance au moyen du client MySQL ou d'un programme similaire. Lorsque vous y êtes invité, saisissez le mot de passe racine que vous avez configuré.
      mysql --host 127.0.0.1 --user root --password
    2. Créez les bases de données, les utilisateurs et les autorisations d'accès nécessaires dans votre base de données Cloud SQL à l'aide des commandes suivantes. Remplacez [MYSQL_USER] et [MYSQL_PASSWORD] par le nom d'utilisateur et le mot de passe que vous souhaitez utiliser.
      CREATE DATABASE polls;
      CREATE USER '[MYSQL_USER]' IDENTIFIED BY '[MYSQL_PASSWORD]';
      GRANT ALL ON . TO '[MYSQL_USER]';

Configurer les paramètres de base de données

  1. Ouvrez mysite/settings.py pour y apporter des modifications.

    1. Pour configurer la connexion à la base de données à la fois pour le déploiement d'App Engine et pour les tests locaux, renseignez <your-database-user> et <your-database-password> avec le nom d'utilisateur et le mot de passe que vous avez créés précédemment à l'étape Créer une instance Cloud SQL.

    2. Récupérez les valeurs des paramètres de l'instance à l'aide de la commande suivante :

      gcloud sql instances describe [YOUR_INSTANCE_NAME]
      
    3. Copiez la valeur connectionName du résultat en vue de l'étape suivante.

    4. Renseignez <your-cloudsql-connection-string> avec la valeur connectionName copiée à l'étape précédente.

    5. Renseignez [YOUR-DATABASE] avec le nom de base de données que vous avez choisi lors de l'étape Initialiser votre instance Cloud SQL.

  2. Enregistrez et fermez le fichier settings.py.

Exécuter l'application sur votre ordinateur local

  1. Pour exécuter l'application Django sur votre ordinateur local, configurez un environnement de développement Python comprenant au moins Python, pip et virtualenv.

  2. Créez un environnement Python isolé et installez des dépendances :

    Linux/macOS

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  3. Exécutez les migrations Django pour configurer vos modèles :

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. Démarrez un serveur Web local :

    python manage.py runserver
    
  5. Dans le navigateur, accédez à l'adresse http://localhost:8000.

    http://localhost:8000
    

    La page affiche le texte suivant : "No polls are available." (Aucun sondage n'est disponible.) Le serveur Web Django qui s'exécute sur votre ordinateur diffuse les pages de l'exemple d'application.

  6. Appuyez sur Control+C pour arrêter le serveur Web local.

Utiliser la console d'administration Django

  1. Créez un super-utilisateur en spécifiant son nom d'utilisateur et son mot de passe.

    python manage.py createsuperuser
    
  2. Démarrez un serveur Web local :

    python manage.py runserver
    
  3. Dans votre navigateur, accédez à http://localhost:8000/admin.

    http://localhost:8000/admin
    
  4. 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

  1. Regroupez tout le contenu statique dans un dossier en déplaçant à l'aide de la commande suivante tous les fichiers statiques de l'application dans le dossier STATIC_ROOT spécifié dans le fichier settings.py :

    python manage.py collectstatic
    
  2. Mettez l'application en ligne en exécutant la commande suivante dans le répertoire python-docs-samples/appengine/standard/django de l'application où se trouve le fichier app.yaml :

    gcloud app deploy
    

    Attendez le message vous informant que la mise à jour est terminée.

Afficher l'application exécutée dans Google Cloud

La commande suivante 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.

La requête est diffusée par un serveur Web s'exécutant dans l'environnement standard App Engine.

Si vous modifiez votre application, vous pouvez déployez la version à jour en saisissant la même commande que celle utilisée pour le premier déploiement. Le nouveau déploiement crée une nouvelle version de votre application, qui devient alors la version par défaut. Les versions précédentes de votre application sont conservées. Toutes ces versions de l'application sont facturables. Pour réduire les coûts, supprimez toutes les versions de votre application sauf celle par défaut.

Pour plus d'informations sur la suppression des versions autres que celles par défaut de votre application, consultez la section Effectuer un nettoyage.

Production

Lorsque vous êtes prêt à diffuser le contenu en production, faites passer la variable DEBUG à False dans le fichier mysite/settings.py.

Comprendre le code

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
    
  • Le fichier settings.py contient la configuration de la base de données SQL. Le code de settings.py utilise la variable d'environnement GAE_APPLICATION pour déterminer si l'application s'exécute sur App Engine ou sur votre ordinateur local :

    • Lorsque l'application s'exécute sur App Engine, elle se connecte à l'hôte MySQL à l'aide du socket Unix /cloudsql.
    • Lorsque l'application s'exécute sur votre ordinateur local, elle se connecte à l'hôte MySQL via TCP, qui nécessite un nom d'utilisateur et un mot de passe.
    if os.getenv('GAE_APPLICATION', None):
        # Running on production App Engine, so connect to Google Cloud SQL using
        # the unix socket at /cloudsql/<your-cloudsql-connection string>
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
                'USER': '[YOUR-USERNAME]',
                'PASSWORD': '[YOUR-PASSWORD]',
                'NAME': '[YOUR-DATABASE]',
            }
        }
    else:
        # Running locally so connect to either a local MySQL instance or connect to
        # Cloud SQL via the proxy. To start the proxy via command line:
        #
        #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
        #
        # See https://cloud.google.com/sql/docs/mysql-connect-proxy
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'HOST': '127.0.0.1',
                'PORT': '3306',
                'NAME': '[YOUR-DATABASE]',
                'USER': '[YOUR-USERNAME]',
                'PASSWORD': '[YOUR-PASSWORD]',
            }
        }
  • 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/ :

    runtime: python38
    
    handlers:
    # This configures Google App Engine to serve the files in the app's static
    # directory.
    - url: /static
      static_dir: static/
    
    # This handler routes all requests not caught above to your main app. It is
    # required when static routes are defined, but can be omitted (along with
    # the entire handlers section) when there are no static files defined.
    - url: /.*
      script: auto