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 update
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)
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
Connectez-vous à la base Postgresql :
sudo -u postgres psql
Créez un utilisateur admin de la nouvelle base 'adminmabase':
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 (utliser la which pour localiser postgresql) :
which postgresql
sudo nano /etc/postgresql/15/main/postgresql.conf
Ajoutez ou modifiez la ligne
listen_addresses = '*'
sudo nano /etc/postgresql/15/main/pg_hba.conf
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
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
Creéz une application : '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éation d’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
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 makemigrations
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
+.
if settings.DEBUG:
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 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 visualcode
dans 'show et run commands'
selectionner REMOTE-SSH : OPEN SSH configuration file
ajoutez
Host un_label_de_votre_choix
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 livereload
python src/manage.py runserver