Comment configurer Django avec Postgres, Nginx et Gunicorn sur Ubuntu



Introduction

Django est un framework web open-source en Python, reconnu pour sa capacité à faciliter le développement d’applications web robustes et modulables. PostgreSQL, quant à lui, est un système de gestion de bases de données relationnelles performant et fiable. Nginx sert de serveur web à hautes performances, tandis que Gunicorn agit comme serveur WSGI Python.

Ce tutoriel vous guidera à travers les étapes nécessaires pour configurer Django avec PostgreSQL, Nginx et Gunicorn sur un serveur Ubuntu. Nous détaillerons chaque étape pour une mise en place fluide.

Installation de Python et Virtualenv

1. Débutez en actualisant la liste des paquets de votre système :

sudo apt update

2. Installez Python 3.6 ou une version ultérieure, si elle n’est pas déjà présente :

sudo apt install python3.6

3. Installez `virtualenv` pour créer des environnements d’exécution Python isolés :

sudo apt install python3-venv

Création et Activation d’un Environnement Virtuel

1. Créez un environnement virtuel dédié pour votre projet Django :

python3 -m venv django-env

2. Activez l’environnement virtuel que vous venez de créer :

source django-env/bin/activate

Installation de Django et de ses Dépendances

1. Installez le framework Django à l’aide de `pip` :

pip install django

2. Créez un nouveau projet Django :

django-admin startproject mysite

Configuration de la Base de Données PostgreSQL

1. Installez PostgreSQL sur votre serveur :

sudo apt install postgresql

2. Créez un utilisateur et une base de données spécifiquement pour votre projet Django :

sudo -u postgres createuser --createdb mysite_user

3. Modifiez la configuration de PostgreSQL pour autoriser les connexions à distance (si nécessaire) :

sudo nano /etc/postgresql/12/main/postgresql.conf

Localisez la ligne listen_addresses et modifiez-la comme suit :

listen_addresses = '*'

4. Redémarrez le service PostgreSQL pour appliquer les modifications :

sudo systemctl restart postgresql

Configuration de Django pour Utiliser PostgreSQL

1. Ouvrez le fichier settings.py de votre projet Django pour le modifier :

nano mysite/settings.py

2. Configurez les paramètres de connexion à la base de données PostgreSQL, en remplaçant les valeurs si nécessaire:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mysite_db',
        'USER': 'mysite_user',
        'PASSWORD': 'mysite_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

Installation de Nginx

1. Installez Nginx sur votre système :

sudo apt install nginx

2. Créez un nouveau fichier de configuration Nginx pour votre projet Django :

sudo nano /etc/nginx/sites-available/mysite

3. Ajoutez la configuration suivante, en adaptant les noms de domaine et les chemins de fichiers si nécessaire :


server {
    listen 80;
    server_name mysite.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /static/ {
        alias /home/ubuntu/mysite/static/;
    }
}

4. Activez le site Nginx que vous venez de configurer :

sudo systemctl enable mysite

Installation et Configuration de Gunicorn

1. Installez Gunicorn :

pip install gunicorn

2. Configurez Gunicorn pour qu’il écoute les connexions sur une adresse et un port spécifiques :

echo "bind = 127.0.0.1:8000" > mysite/wsgi.py

Démarrage de l’Application Django

1. Lancez votre application Django via Gunicorn :

gunicorn --bind 127.0.0.1:8000 mysite.wsgi

2. Redémarrez Nginx pour que les modifications de configuration soient prises en compte :

sudo systemctl restart nginx

Conclusion

Félicitations, vous avez correctement configuré Django avec PostgreSQL, Nginx et Gunicorn sur votre serveur Ubuntu. Votre application Django est désormais accessible via Nginx, qui agit comme un proxy inverse vers Gunicorn, servant ainsi votre application. Cette configuration permet de disposer d’un environnement stable, performant et sécurisé pour votre application web Django.

FAQ

Q : Pourquoi utiliser Gunicorn avec Django ?
R : Gunicorn est un serveur WSGI performant qui permet de gérer efficacement plusieurs processus et de mettre à l’échelle horizontalement votre application Django.

Q : Comment modifier les paramètres de Nginx ?
R : Le fichier de configuration de Nginx se trouve à l’emplacement suivant : /etc/nginx/sites-available/mysite. Modifiez-le selon vos besoins.

Q : Comment mettre à jour la base de données PostgreSQL ?
R : Utilisez l’outil en ligne de commande psql ou une interface graphique comme pgAdmin pour effectuer des modifications.

Q : Puis-je déployer mon application Django sur un serveur distant ?
R : Oui, les mêmes étapes peuvent être suivies sur un serveur distant en configurant Nginx pour qu’il pointe vers le serveur Gunicorn distant.

Q : Comment diagnostiquer les problèmes de connexion à la base de données ?
R : Consultez les journaux de PostgreSQL et de Nginx pour identifier les erreurs. Vérifiez aussi les permissions de l’utilisateur de la base de données et que le port de la base de données est accessible.

Q : Comment optimiser les performances d’une application Django ?
R : L’optimisation passe par l’implémentation de systèmes de mise en cache, l’utilisation d’index de bases de données et l’optimisation des requêtes.

Q : Est-il possible d’utiliser un autre serveur web que Nginx ?
R : D’autres serveurs web comme Apache ou Caddy peuvent être employés, cependant Nginx est souvent recommandé pour ses performances et sa légèreté.

Q : Comment configurer plusieurs instances de Workers Gunicorn ?
R : Configurez le fichier de configuration Gunicorn en spécifiant le nombre de Workers et de threads par Worker.

Q : Quels sont les bénéfices de l’utilisation d’un environnement virtuel ?
R : Les environnements virtuels isolent les dépendances du projet, évitant les conflits et assurant la cohérence entre les environnements de développement.