Pourquoi Deployer Django sur AWS ?
Le déploiement de Django sur Amazon Web Services (AWS) est une solution idéale pour les développeurs qui cherchent à offrir un service web performant, sécurisé et échelonnable. AWS offre une gamme complète de services qui peuvent être combinés pour créer une infrastructure robuste et hautement disponible.
Un cas d'usage concret serait le déploiement d'un site Web ou d'une application web d'e-commerce. Avec Django sur AWS, vous pouvez gérer un grand nombre d'utilisateurs en temps réel tout en assurant une haute disponibilité et une sécurité optimale.
Prerequis
Pour suivre ce tutoriel, il est nécessaire de :
- Avoir un compte AWS
- Connaître les bases de Django (minimum 1 an d'expérience)
- Avoir installé Python 3.6 ou plus récent
- Installer pip pour gérer les packages Python
- Avoir Git pour le contrôle de version
Outils à installer :
pip install virtualenvvirtualenv venvsource venv/bin/activate(sur Unix/MacOS)venv\Scripts\activate(sur Windows)
Concepts fondamentaux
1. Instance EC2
Une instance EC2 est une machine virtuelle dans le cloud AWS.
## Créer une instance EC2 via l'interface AWS ou avec la commande AWS CLI
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --count 1 --instance-type t2.micro --key-name mon-key-pair
2. Système de Stockage
AWS propose des options de stockage comme EBS (Elastic Block Store) et S3 (Simple Storage Service).
## Créer un volume EBS pour une instance EC2
aws ec2 create-volume --size 10 --availability-zone us-east-1a
## Associer le volume EBS à l'instance EC2
aws ec2 attach-volume --volume-id vol-0abcdef1234567890 --instance-id i-0abcdef1234567890 --device /dev/sdh
3. RDS (Relational Database Service)
RDS offre des bases de données relationnelles managées.
## Créer une instance RDS MySQL
aws rds create-db-instance --db-name mydatabase --allocated-storage 20 --db-instance-class db.t2.micro --engine mysql --master-username admin --master-user-password password123
4. S3 (Simple Storage Service)
S3 est un service de stockage d'objets.
## Créer un bucket S3 pour stocker les médias
aws s3 mb s3://mon-bucket
## Copier des fichiers dans le bucket S3
aws s3 cp media/ s3://mon-bucket/media --recursive
Mise en pratique : Projet fil rouge
1. Création du Projet Django
## Créer un nouveau projet Django
django-admin startproject myproject
cd myproject
## Créer une application Django
python manage.py startapp tasks
2. Configuration de l'Instance EC2
a. Configurer le Security Group
Créez un groupe de sécurité pour votre instance EC2 et autorisez les ports HTTP (80) et SSH (22).
## Créer un groupe de sécurité
aws ec2 create-security-group --group-name my-sg --description "Groupe de sécurité pour Django"
b. Configurer l'Instance EC2
## Connectez-vous à votre instance EC2 via SSH
ssh -i mon-key-pair.pem ubuntu@<IP_DE_Votre_Instances>
3. Installation des Dépendances
## Installer Python et pip
sudo apt-get update
sudo apt-get install python3 python3-pip
## Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate
## Installer Django et d'autres dépendances
pip install django gunicorn psycopg2-binary
4. Déploiement de l'Application Django sur AWS
a. Configurer les Variables d'Environnement
export DJANGO_SECRET_KEY='your_secret_key'
export DATABASE_URL='postgresql://admin:password123@<IP_DE_Votre_RDS>:5432/mydatabase'
b. Configurer le Settings.py de Django
## myproject/settings.py
import os
DATABASES = {
'default': dj_database_url.config(default=os.environ.get('DATABASE_URL'))
}
ALLOWED_HOSTS = ['*']
c. Configuration de Gunicorn
Créez un fichier gunicorn_config.py :
## gunicorn_config.py
bind = "0.0.0.0:8000"
workers = 3
loglevel = 'info'
d. Démarrer l'Application avec Gunicorn
gunicorn --config gunicorn_config.py myproject.wsgi
5. Configuration des Services AWS
a. Configurer le Service RDS et les Variables d'Environnement
Créez une instance RDS et notez l'adresse IP.
Ajoutez les variables d'environnement dans votre groupe de sécurité EC2 :
export DATABASE_URL='postgresql://admin:password123@<IP_DE_Votre_RDS>:5432/mydatabase'
b. Configurer le Bucket S3 pour Stocker les Médias
aws s3 mb s3://mon-bucket
aws s3 cp media/ s3://mon-bucket/media --recursive
c. Configurer l'Utilisation des Media Files en Production
Modifiez settings.py :
## myproject/settings.py
MEDIA_URL = 'https://<votre-bucket-s3>.s3.amazonaws.com/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
6. Déploiement Continu (OPTIONNEL)
Vous pouvez utiliser AWS CodeDeploy pour un déploiement continu.
## Installer CodeDeploy Agent
sudo apt-get install ruby-full
sudo gem install --no-document aws-codedeploy-agent
## Configurer l'Agent CodeDeploy
aws s3 cp s3://code-deploy-us-east-1/latest/install /tmp/aws-codedeploy-agent-install.sh
chmod +x /tmp/aws-codedeploy-agent-install.sh
/tmp/aws-codedeploy-agent-install.sh auto
## Créer un déploiement avec CodeDeploy
aws deploy create-application --application-name my-django-app
Erreurs Frequentes et Debugging
1. Mauvaise Configuration de la Base de Données
## ❌ Mauvais
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'admin',
'PASSWORD': 'password123',
'HOST': '<IP_DE_Votre_RDS>',
'PORT': '5432',
}
}
## ✅ Correct
DATABASES = dj_database_url.config(default=os.environ.get('DATABASE_URL'))
2. Problème avec les Permissions sur S3
## ❌ Mauvais
aws s3 cp media/ s3://mon-bucket/media --recursive
## ✅ Correct
aws s3 cp media/ s3://mon-bucket/media --recursive --acl public-read
3. Problème avec l'Utilisation des Media Files en Production
## ❌ Mauvais
MEDIA_URL = 'media/'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
## ✅ Correct
MEDIA_URL = 'https://<votre-bucket-s3>.s3.amazonaws.com/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Pour aller plus loin
- Déploiement Continu avec AWS CodeDeploy : https://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/welcome.html
- Optimisation des performances de l'application Django sur AWS : https://aws.amazon.com/blogs/database/how-to-optimize-django-applications-for-aws/
- Gestion des utilisateurs et des autorisations avec AWS IAM : https://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/introduction.html
Défi Pratique
Déployez une application Django d'e-commerce simple sur AWS, incluant les fonctionnalités suivantes :
- Gestion de produits
- Panier d'achat
- Processus de paiement (utiliser un service comme Stripe)
En suivant ce tutoriel et en réalisant le défi pratique, vous serez capable de déployer une application Django robuste sur AWS.