

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
<a name="create-deploy-python-django"></a>

Ce didacticiel vous guide tout au long du déploiement d'un site web [Django](https://www.djangoproject.com/) 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 :
+ [Configuration d'un environnement virtuel Python et installation de Django](#python-django-setup-venv)
+ [Création d'un projet Django](#python-django-create-app)
+ [Configurer votre application Django pour Elastic Beanstalk](#python-django-configure-for-eb) 
+ [Déploiement de votre site avec l'interface de ligne de commande (CLI) EB](#python-django-deploy) 
+ [Mise à jour de votre application](#python-django-update-app) 
+ [Nettoyage](#python-django-stopping)

## Conditions préalables
<a name="python-django-prereq"></a>

Pour suivre ce didacticiel, la [Configuration de votre environnement de développement Python](python-development-environment.md) doit être terminée et les packages suivants installés :
+ Python 3.7 ou version ultérieure
+ `pip`
+ `virtualenv`
+ `awsebcli`

L'infrastructure [Django](https://www.djangoproject.com/) est installée dans le cadre de ce tutoriel.

**Note**  
Créer des environnements avec l'interface de ligne de commande (CLI) EB nécessite un [rôle de service](concepts-roles-service.md). 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'interface de ligne de commande (CLI) EB essaie d'en créer un lorsque vous exécutez `eb create`.

## Configuration d'un environnement virtuel Python et installation de Django
<a name="python-django-setup-venv"></a>

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
   ```

------

1. 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 `~$`. Sous Windows`C:\Users\USERNAME>`, voici où se *USERNAME* trouve votre nom de connexion Windows.

1. 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éploiement de votre site avec l'interface de ligne de commande (CLI) EB](#python-django-deploy) dans cette rubrique.  
Pour plus d'informations sur les versions actuelles de la plateforme Python, consultez [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.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 ?](https://docs.djangoproject.com/en/3.1/faq/install/#what-python-version-can-i-use-with-django)

1. 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
<a name="python-django-create-app"></a>

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 (Amazon RDS) et de le séparer de votre environnement. Pour de plus amples informations, veuillez consulter [Ajouter une instance de base de données Amazon RDS à votre environnement Python Elastic Beanstalk](create-deploy-python-rds.md).

**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 `~/`. Sous Windows`C:\Users\USERNAME>`, voici où se *USERNAME* trouve votre nom de connexion Windows.

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

1. Exécutez votre site Django localement avec `manage.py runserver`.

   ```
   (eb-virt) ~$ cd ebdjango
   ```

   ```
   (eb-virt) ~/ebdjango$ python manage.py runserver
   ```

1. Dans un navigateur web, ouvrez `http://127.0.0.1:8000/` pour afficher le site.

1. 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\$1C**.

   ```
   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
<a name="python-django-configure-for-eb"></a>

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
   ```

------

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

1. Créez un répertoire nommé `.ebextensions`.

   ```
   (eb-virt) ~/ebdjango$ mkdir .ebextensions
   ```

1. Dans le répertoire `.ebextensions`, ajoutez un [fichier de configuration](ebextensions.md) nommé `django.config` avec le texte suivant.  
**Example \$1/ebdjango/.ebextensions/django.config**  

   ```
   option_settings:
     aws:elasticbeanstalk:container:python:
       WSGIPath: ebdjango.wsgi:application
   ```

   Ce paramètre, `WSGIPath`, spécifie l'emplacement du script WSGI qu'Elastic Beanstalk utilise pour lancer votre application.
**Note**  
Si vous utilisez une version de plateforme AMI Python Amazon Linux (antérieure à Amazon Linux 2), remplacez la valeur `WSGIPath` par `ebdjango/wsgi.py`. La valeur de l'exemple fonctionne avec le serveur WSGI Gunicorn, qui n'est pas pris en charge sur les versions de la plateforme AMI Amazon Linux.

1. 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éploiement de votre site avec l'interface de ligne de commande (CLI) EB
<a name="python-django-deploy"></a>

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 de l'en-tête HTTP `Host`. Pour plus d'informations, consultez la section [Validation de l'en-tête Host](https://docs.djangoproject.com/en/2.2/topics/security/#host-headers-virtual-hosting).

**Pour créer un environnement et déployer votre application Django**
**Note**  
Ce tutoriel utilise l'interface de ligne de commande (CLI) EB comme mécanisme de déploiement, mais vous pouvez également utiliser la console Elastic Beanstalk pour déployer un fichier ZIP où se trouve le contenu de votre projet. 

1. Initialisez votre référentiel de la CLI EB avec la commande **eb init** :

   ```
   ~/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.

1. (Facultatif) Exécutez à **eb init** nouveau pour configurer une paire de clés par défaut afin de pouvoir utiliser SSH pour vous connecter à l' EC2 instance 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**.

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

   ```
   ~/ebdjango$ eb create django-env
   ```
**Note**  
Si un message d'erreur « rôle de service requis » s'affiche, exécutez `eb create` de manière interactive (sans spécifier de nom d'environnement) et l'interface de ligne de commande (CLI) EB 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. Lorsqu'Elastic Beanstalk crée les ressources nécessaires pour exécuter votre application, il génère des messages d'information que l'interface de ligne de commande (CLI) EB relaie à votre terminal.

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

1. 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']
   ```

1. Enregistrez le fichier, puis déployez votre application en exécutant **eb deploy**. Lorsque vous exécutez **eb deploy**, l'interface de ligne de commande (CLI) EB crée un bundle avec le contenu de votre répertoire de 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](eb3-cli-git.md).

1. 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](troubleshooting.md#troubleshooting-deployments) 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 \$1

## Mise à jour de votre application
<a name="python-django-update-app"></a>

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
<a name="python-django-modify-site"></a>

Par défaut, votre site web Django utilise le fuseau horaire UTC 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`.  
**Example \$1/ .py ebdjango/ebdjango/settings**  

   ```
   ...
   # 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](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

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

   ```
   ~/ebdjango/$ eb deploy
   ```

### Création d'un administrateur de site
<a name="python-django-create-admin"></a>

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
   ```

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

1. Pour dire à Django où stocker les fichiers statiques, définissez `STATIC_ROOT` dans `settings.py`.  
**Example \$1/ .py ebdjango/ebdjango/settings**  

   ```
   # Static files (CSS, JavaScript, Images)
   # https://docs.djangoproject.com/en/2.2/howto/static-files/
   STATIC_URL = '/static/'
   STATIC_ROOT = 'static'
   ```

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

1. Déployez votre application.

   ```
   ~/ebdjango$ eb deploy
   ```

1. Affichez la console d'administration en ouvrant le site dans votre navigateur, en ajoutant `/admin/` à l'URL du site, comme suit.

   ```
   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.\]](http://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/images/eb_django_admin_login.png)

1. 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\]](http://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/images/eb_django_admin_console.png)

Vous pouvez utiliser une procédure similaire de local updating/testing 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 \$1

### Ajout d'un fichier de configuration de migration de base de données
<a name="python-django-migrate-site"></a>

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](ebextensions.md) nommé `db-migrate.config` avec le contenu suivant.  
**Example \$1/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.

1. Déployez votre application.

   ```
   ~/ebdjango$ eb deploy
   ```

## Nettoyage
<a name="python-django-stopping"></a>

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

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
<a name="python-django-next-steps"></a>

Pour plus d'informations sur Django, y compris un didacticiel approfondi, consultez [la documentation officielle](https://docs.djangoproject.com/en/2.2/).

Si vous souhaitez essayer un autre cadre web Python, veuillez consulter [Déploiement d'une application Flask sur Elastic Beanstalk](create-deploy-python-flask.md).