Déployer Django sur AWS EC2 utilisant Postgresql comme BDD

Par défaut ces applications sont configurées pour stocker leur données dans des bases SQLite.
Ce type de configuration fonctionne parfaitement pour des applications peu gourmandes, mais utiliser un autre système de stockage peut aider à augmenter les performances en production..
Dans cet article nous verrons comment installer et configurer PostgreSQL et l’utiliser avec vos applications Django.

Lors du prochain post nous verrons comment connecter l’interface de passerelle du serveur Web Django (WSGI) au serveur Nginx pour exécuter des application Django, dans un environnement de production utilisant AWS ElasticCloudComputing comme service cloud.

Étape 1 : Créer une instance EC2

La première étape pour déployer une application Django sur AWS consiste à créer une instance EC2. Une instance EC2 est un serveur virtuel qui s’exécute dans le cloud AWS. Pour créer une instance EC2, vous devrez vous connecter à votre compte AWS et accéder au tableau de bord EC2.

Une fois dans le tableau de bord EC2, cliquez sur le bouton “Lancer l’instance”. À partir de là, vous serez invité à sélectionner une image de machine Amazon (AMI). Une AMI est une image de machine virtuelle préconfigurée qui inclut le système d’exploitation, le serveur d’applications et d’autres logiciels nécessaires pour exécuter votre application.

Pour ce tutoriel, nous utiliserons la machine Amazon Debian. Après avoir sélectionné l’AMI, choisissez le type d’instance qui convient le mieux à vos besoins. Pour les applications de petite à moyenne taille, une instance t2.micro est un bon choix.

Étape 2 : Configurer le groupe de sécurité

Après avoir créé l’instance EC2, vous devrez configurer le groupe de sécurité. Le groupe de sécurité contrôle le trafic entrant et sortant vers et depuis votre instance EC2. Pour configurer le groupe de sécurité, accédez à la section “Groupes de sécurité” du tableau de bord EC2 et créez un nouveau groupe de sécurité. .

Ajoutez les règles suivantes au groupe de sécurité pour autoriser le trafic entrant :

  • SSH (port 22) pour l’accès distant à votre instance
  • HTTP (port 80) pour le trafic web
  • HTTPS (port 443) pour le trafic web sécurisé

Étape 3 : Se connecter à votre instance EC2

Maintenant que vous avez créé et configuré votre instance EC2, il est temps de vous y connecter. Pour vous connecter à votre instance, vous devrez utiliser un client SSH. Si vous utilisez un ordinateur Mac ou Linux, vous pouvez utiliser le terminal. Si vous utilisez Windows, vous pouvez utiliser PuTTY.

Téléchargez votre clé privée (.pem), puis connectez-vous à votre instance via votre terminal :

ssh -i "votre-cle.pem" ubuntu@votre-ip-ec2.compute.amazonaws.com

Étape 4 : Installation de Python et Postgresql

Une fois connecté à votre instance debian, mettez à jour le gestionnaire de paquets et installez Python, PostgreSQL et les outils nécessaires :

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv postgresql postgresql-contrib libpq-dev nginx curl -y

Installez Postgresql et Python (Suivant la version disponible. ici la 3.11)

sudo apt install postgresql
apt show python3
sudo apt install python3.11
sudo apt install python3.11-venv
sudo apt install python3.11-dev
sudo apt install python3-pip

Étape 5 : Configuration de la base Posgresql

Par défaut, Django utilise SQLite, ce qui n’est pas adapté pour la production. Configurerons PostgreSQL.

Connectez-vous à l’invite de commande PostgreSQL en tant qu’utilisateur postgres :

sudo -u postgres psql

Créez un utilisateur admin ‘adminmabase’ de la nouvelle base :

CREATE USER adminmabase WITH ENCRYPTED PASSWORD '##########';
\du (q pour quitter)
ALTER ROLE adminmabase SET client_encoding TO 'utf8';
ALTER ROLE adminmabase SET default_transaction_isolation TO 'read committed';

Creez la nouvelle base ‘mabase’ :

CREATE DATABASE mabase;
\l
GRANT ALL PRIVILEGES ON DATABASE mabase to adminmabase;
GRANT ALL PRIVILEGES ON SCHEMA public TO adminmabase;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO adminmabase;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO adminmabase;
ALTER USER adminmabase CREATEDB;
ALTER SCHEMA public OWNER TO adminmabase;
\q (quitter)

Encore quelques réglages (utiliser la commande which pour localiser postgresql) :

modifiez le fichier de configuration du serveur Postgresql

which postgresql
sudo nano /etc/postgresql/15/main/postgresql.conf

Permettons à PostgreSQL de recevoir des demandes de connexion de l’extérieur.

Ajoutez ou modifiez la ligne :

listen_addresses = '*'

modifiez le fichier pg_hba.conf de PosgreSql :

sudo nano /etc/postgresql/15/main/pg_hba.conf

Ajoutez les lignes :

hostssl all all 0.0.0.0/0 md5
hostnossl all all 0.0.0.0/0 md5

Étape 6 (premier cas) : Creation du projet Django from scratch :

Création d’un environnement virtuel Python dans un dossier mon_projet_web

mkdir mon_projet_web
cd mon_projet_web
python3.11 -m venv .env

Un environnement virtuel nommé “env” sera créé. Activez cet environnement virtuel :

source .env/bin/activate

Installez les biliothèques nécessaire :

pip install django
pip install psycopg2-binary

Creez votre le projet django : ‘django_projet’

django-admin startproject django_projet

Enfin créez l’application web : ‘monappli’

python src/manage.py startapp monappli

Étape 6 (deuxième cas) : Importer le projet à partir d’un dépot GITHUB :

Installez git.

sudo apt install git
git config --global user.name "Votre Nom"
git config --global user.email "votre_email@example.com"

Recupérez votre dépot Git :

mkdir mon_projet_web
cd mon_projet_web
git clone https://github.com/MonUserGit/django_projet.git

Créez un environnement virtuel Python dans le repertoire ‘django_projet’

python3.11 -m venv .env

Un environnement virtuel nommé “env” sera créé. Activez cet environnement virtuel :
importez les bibliothèques nécessaires au projet :

source .env/bin/activate
pip install -r requirements.txt #remplacer dans requirements.txt "psycopg2" par "psycopg2-binary"

Étape 7 : Créer l’accès à la base de donnée

Creéz un administrateur de la base de données :

python src/manage.py createsuperuser
Username (leave blank to use 'admin'): YYYYYYY
Email address: XXXXX@XXXX.com
Password: ########
Password (again): ########
Superuser created successfully.

Étape 8 : Configuration de notre projet Django

Par sécurité, Django bloque toutes les requêtes qui ne proviennent pas explicitement des domaines ou adresses IP listés ici. En y ajoutant l’IP publique de votre instance EC2 (ou votre nom de domaine), vous autorisez AWS à servir votre application.

Ajoutez votre adresse IP ou domaine à la variable ALLOWED_HOSTS dans le fichier settings.py.

Si vous avez des migrations à exécuter, effectuez l’action suivante :

ython manage.py makemigrations
python manage.py migrate
python manage.py collectstatic

Ces commandes synchronisent la structure de vos modèles Django avec votre base de données PostgreSQL sur AWS pour que vos tables soient créées.
Django ne sert pas nativement les fichiers statiques (CSS, JS, images) en production.

Cette commande va chercher tous les fichiers statiques de vos applications et les rassemble en un seul endroit (`STATIC_ROOT`) pour qu’un serveur web (comme Nginx) puisse les distribuer efficacement.

Important : Concernant les fichiers statiques, assurez-vous d’ajouter quelques lignes dans votre fichier settings.py .

Ajoutez cette ligne 'livereload', à INSTALLED_APPS .

Ajoutez cette ligne 'django.contrib.staticfiles', à INSTALLED_APPS .

django-livereload-server permet de rafraîchir automatiquement votre navigateur dès que vous modifiez le code. On enregistre l’application livereload et son middleware (un composant qui intercepte les requêtes pour injecter le script de rafraîchissement).

Ajoutez 'livereload.middleware.LiveReloadScript', à MIDDLEWARE .

Ajoutez STATIC_URL = 'static/' à la fin de settings.py .

Ajoutez STATIC_ROOT = BASE_DIR / 'monrepertoirestatic' à la fin de settings.py .

STATIC_ROOT = BASE_DIR / ‘monrepertoirestatic’ : C’est le dossier de destination sur votre instance AWS où la commande collectstatic va copier tous les fichiers CSS/JS.

Ajoutez également ces lignes en bas du fichier blog/urls.py.

if settings.DEBUG:
   urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
   urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL)

Cette condition est cruciale. Elle dit à Django : « Si on est encore en mode débogage (DEBUG = True), c’est toi qui gères l’affichage des images et du CSS ».
En vraie production (DEBUG = False), cette partie est ignorée, et c’est un vrai serveur web (souvent Nginx) qui prend le relais pour des raisons de performance.

Ajoutez ces lignes d’importation en haut du fichier blog/urls.py.

from django.conf import settings # new
from django.conf.urls.static import static # new

Installer livereload en exécutant la commande:

pip install django-livereload-server
python src/manage.py livereload
python src/manage.py collectstatic

Etape 9: Demarrer Django :

Configurer l’accès ssh dans VS Code
dans ‘show et run commands’
sélectionner REMOTE-SSH : OPEN SSH configuration file
remplissez le fichier de configuration SSH de VS Code avec ces paramètres :

  • Host : Un surnom simple pour votre serveur (ex: mon-projet-aws).
  • HostName : L’adresse IP publique fournie par AWS pour votre instance EC2.
  • User : Le nom d’utilisateur par défaut de votre machine virtuelle. (Attention : si vous avez choisi une instance Ubuntu ou Amazon Linux, ce sera respectivement ubuntu ou ec2-user).
  • IdentityFile : Le chemin vers la clé privée (le fichier .pem) que vous avez téléchargée sur AWS lors de la création de l’instance. Elle sert de mot de passe ultra-sécurisé.
Host un_label_de_votre_choix
HostName adresse_publique_de_votre_instance
User username_session_debian
IdentityFile votre_chemin\Votre_Cle.pem

Dans VS Code, sélectionner REMOTE-SSH : connect to host
Une fois connecté, vous ouvrez le terminal du serveur distant et lancez l’application avec deux terminaux : un pour maintenir le serveur de rafraîchissement (livereload) et l’autre pour exécuter l’application Django elle-même (runserver).

python src/manage.py livereload
python src/manage.py runserver

Un point de vigilance pour la production :
Utiliser python manage.py runserver et laisser DEBUG = True sur AWS EC2 est parfait pour une phase de test ou de développement à distance.
Cependant, pour une mise en production réelle et sécurisée devant des utilisateurs, il faudra passer DEBUG = False, confier les fichiers statiques à Nginx, et lancer Django avec un serveur d’application robuste comme Gunicorn ou uWSGI.

One thought on “Déployer Django sur AWS EC2 utilisant Postgresql comme BDD

  • Un commentateur ou commentatrice WordPress
    9 juin 2026 at 23h08

    Bonjour, ceci est un commentaire.
    Pour débuter avec la modération, la modification et la suppression de commentaires, veuillez visiter l’écran des Commentaires dans le Tableau de bord.
    Les avatars des personnes qui commentent arrivent depuis Gravatar.

Laisser un commentaire

Your email address will not be published. Required fields are marked *.

*
*