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
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
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
-
Créez un environnement virtuel nommé
eb-virt
. -
Activez l’environnement virtuel.
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\
, c'est là oùUSERNAME
>USERNAME
est votre nom de connexion Windows. -
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 ?
-
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
-
Activez votre environnement virtuel.
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\
, voici, oùUSERNAME
>USERNAME
est votre nom de connexion Windows. -
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
-
Exécutez votre site Django localement avec
manage.py runserver
.(eb-virt) ~$
cd ebdjango
(eb-virt) ~/ebdjango$
python manage.py runserver
-
Dans un navigateur web, ouvrez
http://127.0.0.1:8000/
pour afficher le site. -
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
-
Activez votre environnement virtuel.
-
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. -
Créez un répertoire nommé
.ebextensions
.(eb-virt) ~/ebdjango$
mkdir .ebextensions
-
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. -
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.
-
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. -
(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.
-
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. -
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
. -
Ouvrez le fichier
settings.py
dans le répertoireebdjango
. Recherchez le paramètreALLOWED_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
'] -
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.
-
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
-
Modifiez le paramètre
TIME_ZONE
danssettings.py
.Exemple ~/ebdjango/ebdjango/settings.py
... # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE =
'US/Pacific'
USE_I18N = True USE_L10N = True USE_TZ = TruePour obtenir une liste des fuseaux horaires, consultez cette page
. -
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
-
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 -
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. -
Pour dire à Django où stocker les fichiers statiques, définissez
STATIC_ROOT
danssettings.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'
-
Exécutez
manage.py collectstatic
pour remplir lestatic
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 -
Déployez votre application.
~/ebdjango$
eb deploy
-
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/ -
Connectez-vous avec le nom utilisateur et le mot de passe que vous avez configurés à l'étape 2.
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
-
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'environnementDJANGO_SETTINGS_MODULE
explicitement (généralement,wsgi.py
s'occupe de cette tâche pour vous pendant le démarrage). La spécification deleader_only: true
dans la commande garantit qu'elle est exécutée une seule fois lors d'un déploiement sur plusieurs instances. -
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.