Déployer Django sur AWS EC2 utilisant Postgresql comme BDD
Deployer Django et Postgresql sur une instance EC2.
Django en tant que framework Web a besoin d’un serveur Web pour fonctionner. Et comme la plupart des serveurs Web ne communiquent pas nativement avec Python, il y a besoin d’une interface pour permettre cette communication.WSGI est le standard Python principal pour la communication entre les serveurs Web et les applications.
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.
L'objectif final de ce post est de 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.
Étape 4 : Installation de Python et Postgresql
Mettez à jour l’index des paquets du serveur et préparer le à l’aide des commandes suivante :
sudo apt upgrade
sudo apt install libpq-dev postgresql-contrib
sudo apt install build-essential
Installez Postgresql et Python (Suivant la version disponible. ici la 3.11)
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
Connectez-vous à la base Postgresql :
Créez un utilisateur admin de la nouvelle base 'adminmabase':
\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' :
\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 (utliser la which pour localiser postgresql) :
sudo nano /etc/postgresql/15/main/postgresql.conf
Ajoutez ou modifiez la ligne
listen_addresses = '*'
Ajouter 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
cd mon_projet_web
python3.11 -m venv .env
Un environnement virtuel nommé “env” sera créé. Activez cet environnement virtuel :
Installez les biliothèques nécessaire :
pip install psycopg2-binary
Creez votre le projet django : 'django_projet'
Creéz une application : 'monappli'
Étape 6 (deuxième cas) : Importer le projet à partir d'un dépot GITHUB :
Installez git.
git config --global user.name "Votre Nom"
git config --global user.email "votre_email@example.com"
Recupérez votre dépot Git :
cd mon_projet_web
git clone https://github.com/MonUserGit/django_projet.git
Création d’un environnement virtuel Python dans le repertoire 'django_projet'
Un environnement virtuel nommé “env” sera créé. Activez cet environnement virtuel :
importez les bibliothèques nécessaires au projet :
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 :
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
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 :
python manage.py migrate
python manage.py collectstatic
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 .
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 .
Ajoutez également ces lignes en bas du fichier blog/urls.py +.
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL)
Ajoutez ces lignes d’importation en haut du fichier blog/urls.py.
from django.conf.urls.static import static # new
Installer livereload en exécutant la commande:
python src/manage.py livereload
python src/manage.py collectstatic
Etape 9: Demarrer Django :
Configurer l'accès ssh dans visualcode
dans 'show et run commands'
selectionner REMOTE-SSH : OPEN SSH configuration file
ajoutez
HostName adresse_publique_de_votre_instance
User username_session_debian
IdentityFile votre_chemin\Votre_Cle.pem
selectionner REMOTE-SSH : connect to host
Demarrer Django et livereload sur 2 terminaux différents
python src/manage.py runserver