Déploiement d'une application Django sur Elastic Beanstalk - AWS Elastic Beanstalk

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déploiement d'une application Django sur Elastic Beanstalk

Ce didacticiel vous guide tout au long du déploiement d'un site web Django par défaut, généré automatiquement, sur un environnement AWS Elastic Beanstalk exécutant Python. Ce tutoriel vous montre comment héberger une application web Python dans le cloud à l'aide d'un environnement Elastic Beanstalk.

Dans le cadre de ce didacticiel, vous effectuerez les tâches suivantes :

Prérequis

Pour suivre ce didacticiel, la Configuration de votre environnement de développement Python doit être terminée et les packages suivants installés :

  • Python 3.7 ou version ultérieure

  • pip

  • virtualenv

  • awsebcli

L'infrastructure Django est installée dans le cadre de ce tutoriel.

Note

La création d'environnements avec l'EB CLI nécessite un rôle de service. Vous pouvez créer un rôle de service en créant un environnement dans la console Elastic Beanstalk. Si vous n'avez pas de rôle de service, l'EB CLI tente d'en créer un lors de l'exécutioneb create.

Configuration d'un environnement virtuel Python et installation de Django

Créez un environnement virtuel avec virtualenv et utilisez-le pour installer Django et ses dépendances. En utilisant un environnement virtuel, vous pouvez savoir exactement de quels packages votre application a besoin, afin que les packages requis soient installés sur les EC2 instances Amazon qui exécutent votre application.

Les étapes suivantes illustrent les commandes que vous devez entrer pour les systèmes Unix et Windows, affichées sur des onglets distincts.

Pour configurer votre environnement virtuel
  1. Créez un environnement virtuel nommé eb-virt.

    Unix-based systems
    ~$ virtualenv ~/eb-virt
    Windows
    C:\> virtualenv %HOMEPATH%\eb-virt
  2. Activez l’environnement virtuel.

    Unix-based systems
    ~$ source ~/eb-virt/bin/activate (eb-virt) ~$
    Windows
    C:\>%HOMEPATH%\eb-virt\Scripts\activate (eb-virt) C:\>

    Vous verrez (eb-virt) ajouté à votre invite de commande, ce qui indique que vous êtes dans un environnement virtuel.

    Note

    Les instructions restantes montrent l'invite de commande Linux dans votre répertoire de base ~$. Sur WindowsC:\Users\USERNAME>, c'est là où USERNAME est votre nom de connexion Windows.

  3. Utilisez pip pour installer Django.

    (eb-virt)~$ pip install django==2.2
    Note

    La version Django que vous installez doit être compatible avec la version Python sur la configuration Elastic Beanstalk Python que vous choisissez pour déployer votre application. Pour plus d'informations sur le déploiement, consultez Déployez votre site avec l'EB CLI dans cette rubrique.

    Pour plus d'informations sur les versions actuelles de la plateforme Python, consultez Python dans le document Plateformes prises en charge par AWS Elastic Beanstalk .

    Pour plus d'informations sur la compatibilité de la version Django avec Python, consultez Quelle version de Python puis-je utiliser avec Django ?

  4. Pour vérifier que Django est installé, entrez ce qui suit.

    (eb-virt)~$ pip freeze Django==2.2 ...

    Cette commande répertorie tous les packages installés dans votre environnement virtuel. Plus tard, vous utiliserez le résultat de cette commande pour configurer votre projet à utiliser avec Elastic Beanstalk.

Création d'un projet Django

Vous êtes maintenant prêt à créer un projet Django et à l'exécuter sur votre ordinateur, à l'aide de l'environnement virtuel.

Note

Ce didacticiel utilise SQLite un moteur de base de données inclus dans Python. La base de données est déployée avec vos fichiers de projet. Pour les environnements de production, nous vous recommandons d'utiliser Amazon Relational Database Service (RDSAmazon) et de le séparer de votre environnement. Pour de plus amples informations, veuillez consulter Ajouter une RDS instance de base de données Amazon à votre environnement Python Elastic Beanstalk.

Pour générer une application Django
  1. Activez votre environnement virtuel.

    Unix-based systems
    ~$ source ~/eb-virt/bin/activate (eb-virt) ~$
    Windows
    C:\>%HOMEPATH%\eb-virt\Scripts\activate (eb-virt) C:\>

    Vous verrez le préfixe (eb-virt) ajouté à votre invite de commande, ce qui indique que vous êtes dans un environnement virtuel.

    Note

    Les instructions restantes montrent l'invite de commande Linux ~$ dans votre répertoire de base et le répertoire de base Linux ~/. Sur WindowsC:\Users\USERNAME>, voici, où USERNAME est votre nom de connexion Windows.

  2. Utilisez la commande django-admin startproject pour créer un projet Django nommé ebdjango.

    (eb-virt)~$ django-admin startproject ebdjango

    Cette commande crée un site Django standard nommé ebdjango avec la structure de répertoires suivante.

    ~/ebdjango |-- ebdjango | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py `-- manage.py
  3. Exécutez votre site Django localement avec manage.py runserver.

    (eb-virt) ~$ cd ebdjango
    (eb-virt) ~/ebdjango$ python manage.py runserver
  4. Dans un navigateur web, ouvrez http://127.0.0.1:8000/ pour afficher le site.

  5. Consultez le journal du serveur pour voir le résultat de votre demande. Pour arrêter le serveur web et revenir à votre environnement virtuel, appuyez sur Ctrl+C.

    Django version 2.2, using settings 'ebdjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [07/Sep/2018 20:14:09] "GET / HTTP/1.1" 200 16348 Ctrl+C

Configurer votre application Django pour Elastic Beanstalk

Maintenant que vous avez un site Django résidant sur votre ordinateur local, vous pouvez le configurer pour le déploiement avec Elastic Beanstalk.

Par défaut, Elastic Beanstalk recherche un fichier nommé application.py pour démarrer votre application. Comme il n'existe pas dans le projet Django que vous avez créé, vous devez apporter quelques modifications à l'environnement de votre application. Vous devez également définir des variables d'environnement afin que les modules de votre application puissent être chargés.

Pour configurer votre site pour Elastic Beanstalk
  1. Activez votre environnement virtuel.

    Unix-based systems
    ~/ebdjango$ source ~/eb-virt/bin/activate
    Windows
    C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
  2. Exécutez pip freeze, puis enregistrez les données de sortie dans un fichier nommé requirements.txt.

    (eb-virt) ~/ebdjango$ pip freeze > requirements.txt

    Elastic requirements.txt Beanstalk permet de déterminer le package à installer EC2 sur les instances qui exécutent votre application.

  3. Créez un répertoire nommé .ebextensions.

    (eb-virt) ~/ebdjango$ mkdir .ebextensions
  4. Dans le répertoire .ebextensions, ajoutez un fichier de configuration nommé django.config avec le texte suivant.

    Exemple ~/ebdjango/.ebextensions/django.config
    option_settings: aws:elasticbeanstalk:container:python: WSGIPath: ebdjango.wsgi:application

    Ce paramètre indique WSGIPath l'emplacement du WSGI script utilisé par Elastic Beanstalk pour démarrer votre application.

    Note

    Si vous utilisez une version de la plateforme Amazon Linux AMI Python (antérieure à Amazon Linux 2), remplacez la valeur WSGIPath parebdjango/wsgi.py. La valeur de l'exemple fonctionne avec le WSGI serveur Gunicorn, qui n'est pas pris en charge sur les versions de la AMI plateforme Amazon Linux.

  5. Désactivez votre environnement virtuel avec la commande deactivate.

    (eb-virt) ~/ebdjango$ deactivate

    Réactivez votre environnement virtuel chaque fois que vous devez ajouter des packages à votre application ou exécuter votre application localement.

Déployez votre site avec l'EB CLI

Vous avez ajouté tout ce dont vous avez besoin pour déployer votre application sur Elastic Beanstalk. Le répertoire de votre projet devrait maintenant se présenter comme suit.

~/ebdjango/ |-- .ebextensions | `-- django.config |-- ebdjango | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py |-- db.sqlite3 |-- manage.py `-- requirements.txt

Ensuite, vous allez créer votre environnement d'applications et déployer votre application configurée avec Elastic Beanstalk.

Immédiatement après le déploiement, vous allez modifier la configuration de Django afin d'ajouter le nom de domaine attribué par Elastic Beanstalk à votre application au code ALLOWED_HOSTS de Django. Ensuite, vous redéploierez votre application. Il s'agit d'une exigence de sécurité de Django, conçue pour empêcher les attaques HTTP Host d'en-têtes. Pour plus d'informations, consultez la section Validation de l'en-tête Host.

Pour créer un environnement et déployer votre application Django
Note

Ce didacticiel utilise l'EB CLI comme mécanisme de déploiement, mais vous pouvez également utiliser la console Elastic Beanstalk pour déployer un fichier .zip contenant le contenu de votre projet.

  1. Initialisez votre CLI référentiel EB à l'aide de la eb init commande.

    ~/ebdjango$ eb init -p python-3.7 django-tutorial Application django-tutorial has been created.

    Cette commande crée une application nommée django-tutorial. Elle configure également votre référentiel local pour créer des environnements avec la dernière version de la plateforme Python 3.7.

  2. (Facultatif) Exécutez à eb init nouveau pour configurer une paire de clés par défaut que vous pourrez utiliser SSH pour vous connecter à l'EC2instance qui exécute votre application.

    ~/ebdjango$ eb init Do you want to set up SSH for your instances? (y/n): y Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]

    Sélectionnez une paire de clés si vous en avez déjà une, ou suivez les invites pour en créer une. Si vous ne voyez pas l'invite ou que vous avez besoin de modifier vos paramètres ultérieurement, exécutez eb init -i.

  3. Créez un environnement et déployez-y votre application avec eb create.

    ~/ebdjango$ eb create django-env
    Note

    Si le message d'erreur « rôle de service requis » s'affiche, lancez-le de eb create manière interactive (sans spécifier de nom d'environnement) et l'EB CLI créera le rôle pour vous.

    Cette commande crée un environnement Elastic Beanstalk équilibré en charge nommé django-env. La création d'un environnement prend environ 5 minutes. Au fur et à mesure qu'Elastic Beanstalk crée les ressources nécessaires pour exécuter votre application, il produit des messages d'information que CLI l'EB transmet à votre terminal.

  4. Lorsque le processus de création de l'environnement est terminé, recherchez le nom de domaine de votre nouvel environnement en exécutant eb status.

    ~/ebdjango$ eb status Environment details for: django-env Application name: django-tutorial ... CNAME: eb-django-app-dev.elasticbeanstalk.com ...

    Le nom de domaine de votre environnement est la valeur de la propriété CNAME.

  5. Ouvrez le fichier settings.py dans le répertoire ebdjango. Recherchez le paramètre ALLOWED_HOSTS, puis ajoutez le nom de domaine de votre application que vous avez trouvé à l'étape précédente à la valeur de ce paramètre. Si vous ne trouvez pas ce paramètre dans le fichier, ajoutez-le sur une nouvelle ligne.

    ... ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']
  6. Enregistrez le fichier, puis déployez votre application en exécutant eb deploy. Lorsque vous l'exécutezeb deploy, l'EB CLI regroupe le contenu du répertoire de votre projet et le déploie dans votre environnement.

    ~/ebdjango$ eb deploy
    Note

    Si vous utilisez Git avec votre projet, veuillez consulter Utilisation de l'interface de ligne de commande EB avec Git.

  7. Lorsque le processus de mise à jour de l'environnement est terminé, ouvrez votre site web avec la commande eb open.

    ~/ebdjango$ eb open

    Celle-ci ouvre une fenêtre de navigation en utilisant le nom de domaine créé pour votre application. Vous devez voir le même site web Django que celui que vous avez créé et testé localement.

Si vous ne voyez pas votre application en cours d'exécution ou si vous obtenez un message d'erreur, consultez Déploiements afin d'obtenir de l'aide concernant la façon de déterminer la cause de l'erreur.

Si vous voyez effectivement votre application en cours d'exécution, alors félicitations, vous avez déployé votre première application Django avec Elastic Beanstalk !

Mise à jour de votre application

Maintenant que vous disposez d'une application en cours d'exécution sur Elastic Beanstalk, vous pouvez mettre à jour et redéployer votre application ou sa configuration, et Elastic Beanstalk va effectuer les tâches de mise à jour de vos instances et de démarrage de la nouvelle version de votre application.

Pour cet exemple, nous activerons la console d'administration Django et configurerons quelques autres paramètres.

Modification des paramètres de votre site

Par défaut, votre site Web Django utilise le fuseau UTC horaire pour afficher l'heure. Vous pouvez modifier cela en spécifiant un fuseau horaire dans settings.py.

Pour modifier le fuseau horaire de votre site
  1. Modifiez le paramètre TIME_ZONE dans settings.py.

    Exemple ~/ebdjango/ebdjango/settings.py
    ... # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE = 'US/Pacific' USE_I18N = True USE_L10N = True USE_TZ = True

    Pour obtenir une liste des fuseaux horaires, consultez cette page.

  2. Déployez l'application dans votre environnement Elastic Beanstalk.

    ~/ebdjango/$ eb deploy

Création d'un administrateur de site

Vous pouvez créer un administrateur de site pour votre application Django afin d'accéder à la console d'administration directement à partir du site web. Les informations de connexion administrateur sont stockées en toute sécurité dans l'image de base de données locale incluse dans le projet par défaut que Django génère.

Pour créer un administrateur de site
  1. Initialisez la base de données locale de votre application Django.

    (eb-virt) ~/ebdjango$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK
  2. Exécutez manage.py createsuperuser pour créer un administrateur.

    (eb-virt) ~/ebdjango$ python manage.py createsuperuser Username: admin Email address: me@mydomain.com Password: ******** Password (again): ******** Superuser created successfully.
  3. Pour dire à Django où stocker les fichiers statiques, définissez STATIC_ROOT dans settings.py.

    Exemple ~/ebdjango/ebdjango/settings.py
    # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = 'static'
  4. Exécutez manage.py collectstatic pour remplir le static répertoire avec des ressources statiques (JavaScript,CSS, et images) pour le site d'administration.

    (eb-virt) ~/ebdjango$ python manage.py collectstatic 119 static files copied to ~/ebdjango/static
  5. Déployez votre application.

    ~/ebdjango$ eb deploy
  6. Pour accéder à la console d'administration, ouvrez le site dans votre navigateur et /admin/ ajoutez-le au siteURL, comme ci-dessous.

    http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
    Entrez le nom d'utilisateur et le mot de passe que vous avez créés à l'étape 2 afin de vous connecter à la console d'administration.
  7. Connectez-vous avec le nom utilisateur et le mot de passe que vous avez configurés à l'étape 2.

    La console d'administration Django de votre site web Django déployé avec Elastic Beanstalk

Vous pouvez utiliser une procédure similaire de mise à jour/test locale suivie de eb deploy. Elastic Beanstalk prend en charge les tâches de mise à jour de vos serveurs en direct, afin que vous puissiez vous concentrer sur le développement d'applications au lieu de l'administration du serveur !

Ajout d'un fichier de configuration de migration de base de données

Vous pouvez ajouter des commandes à votre script .ebextensions, qui sont exécutées lors de la mise à jour de votre site. Cela vous permet de générer automatiquement des migrations de base de données.

Pour ajouter une étape de migration lorsque votre application est déployée
  1. Créez un fichier de configuration nommé db-migrate.config avec le contenu suivant.

    Exemple ~/ebdjango/.ebextensions/db-migrate.config
    container_commands: 01_migrate: command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate" leader_only: true option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: ebdjango.settings

    Ce fichier de configuration active l'environnement virtuel du serveur et exécute la commande manage.py migrate lors du processus de déploiement, avant le démarrage de votre application. Étant donné que cette commande est exécutée avant le démarrage de l'application, vous devez également configurer la variable d'environnement DJANGO_SETTINGS_MODULE explicitement (généralement, wsgi.py s'occupe de cette tâche pour vous pendant le démarrage). La spécification de leader_only: true dans la commande garantit qu'elle est exécutée une seule fois lors d'un déploiement sur plusieurs instances.

  2. Déployez votre application.

    ~/ebdjango$ eb deploy

Nettoyage

Pour économiser des heures d'instance et d'autres AWS ressources entre les sessions de développement, mettez fin à votre environnement Elastic Beanstalk avec. eb terminate

~/ebdjango$ eb terminate django-env

Cette commande met fin à l'environnement et à toutes les AWS ressources qui s'y exécutent. Cependant, elle ne supprime pas l'application. Vous pouvez donc toujours créer d'autres environnements avec la même configuration en exécutant à nouveau eb create. Pour plus d'informations sur CLI les commandes EB, consultezGestion des environnements Elastic Beanstalk avec l'interface de ligne de commande EB.

Si vous en avez terminé avec l'exemple d'application, vous pouvez également supprimer le dossier du projet et l'environnement virtuel.

~$ rm -rf ~/eb-virt ~$ rm -rf ~/ebdjango

Étapes suivantes

Pour plus d'informations sur Django, y compris un didacticiel approfondi, consultez la documentation officielle.

Si vous souhaitez essayer un autre cadre web Python, veuillez consulter Déploiement d'une application Flask sur Elastic Beanstalk.