Nouveau : Datasets open source gratuits disponibles !Decouvrir →
☁️
Intermediaire 25 min Django

Deployer Django sur AWS

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 virtualenv
  • virtualenv venv
  • source 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

  1. Déploiement Continu avec AWS CodeDeploy : https://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/welcome.html
  2. Optimisation des performances de l'application Django sur AWS : https://aws.amazon.com/blogs/database/how-to-optimize-django-applications-for-aws/
  3. 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.

Besoin d'aide sur Django ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quels sont les pré-requis pour déployer Django sur AWS ?
Avant de commencer, vous devriez avoir un compte AWS et connaître les bases d'Amazon EC2, S3 et RDS. Vous aurez également besoin de Python installé localement et des outils de gestion de paquets comme pip.
Comment configurer l'environnement Django pour le déploiement sur AWS ?
Pour configurer votre environnement Django, assurez-vous que toutes les dépendances sont spécifiées dans un fichier requirements.txt. Créez également une configuration de production qui désactive les déboguages et active la compression des fichiers statiques.
Quels services AWS utiliser pour héberger Django en production ?
Pour héberger Django, utilisez Amazon EC2 pour le serveur web, S3 pour stocker vos fichiers statiques et les médias, et RDS pour votre base de données relationnelle. AWS Elastic Beanstalk peut également être utilisé pour automatiser la mise en place de l'environnement.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.