Django est un framework web open-source écrit en Python. Il s'agit d'un framework Web tout-en-un populaire et l'un des meilleurs choix pour de nombreux développeurs. Django offre de nombreux avantages, tels que l'architecture MVT (Model View Template), le panneau d'administration automatique et le puissant support de base de données ORM (Object Relational Mapping). Il offre également des outils de débogage impressionnants pour les développeurs. Dans ce didacticiel, nous allons vous montrer comment installer Django avec PostgreSQL comme stockage de base de données au lieu de SQLite par défaut, Nginx comme proxy inverse et Gunicorn comme serveur d'applications sur Ubuntu 20.04.
Prérequis
- Un VPS Ubuntu 20.04
- Accès SSH avec privilèges root
Étape 1. Connectez-vous au serveur
Tout d'abord, connectez-vous à votre serveur Ubuntu 20.04 via SSH en tant qu'utilisateur root :
ssh root@IP_Address -p Port_number
Vous devrez remplacer 'IP_Address' et 'Port_number' par l'adresse IP et le numéro de port SSH respectifs de votre serveur. De plus, remplacez "root" par le nom d'utilisateur du compte administrateur si nécessaire.
Avant de commencer, vous devez vous assurer que tous les packages du système d'exploitation Ubuntu installés sur le serveur sont à jour. Vous pouvez le faire en exécutant les commandes suivantes :
# apt update -y # apt upgrade -y
Étape 2. Créer un utilisateur système
Une fois connecté à Ubuntu 20.04 en tant que root, nous allons créer un nouvel utilisateur système et lui accorder les privilèges sudo. Nous utiliserons également cet utilisateur pour terminer cette installation. Dans ce tutoriel, nous allons créer un nouvel utilisateur système appelé "maître", vous pouvez choisir n'importe quel nom d'utilisateur que vous aimez.
# adduser master
Une fois créé, exécutons cette commande pour ajouter le nouvel utilisateur au groupe sudo. Dans Ubuntu, les utilisateurs membres du groupe sudo sont autorisés à exécuter des commandes sudo.
# usermod -aG sudo master
Nous ajouterons également le maître d'utilisateur à notre groupe www-data
# usermod -aG www-data master
Maintenant, nous pouvons nous connecter en tant que nouvel utilisateur "maître"
# su - master
Étape 3. Installer les packages
Pour commencer, nous allons installer chaque package requis à partir du référentiel. Pour installer Nginx, PostgreSQL, Python depuis le dépôt, nous pouvons exécuter cette commande :
$ sudo apt install postgresql postgresql-contrib python3-pip python3-dev libpq-dev nginx -y
Étape 4. Ajouter une base de données et un utilisateur de base de données
Lors de l'installation de PostgreSQL, un utilisateur système nommé postgres a été créé en tant qu'utilisateur administratif par défaut. Nous devons utiliser cet utilisateur pour nous connecter au shell PostgreSQL et effectuer des tâches administratives.
$ sudo -u postgres psql
On vous demandera votre mot de passe "maître" et le shell ressemblera à ceci :
postgres=#
Dans le shell postgreSQL, exécutez les commandes suivantes :
postgres=# CREATE USER djangouser WITH PASSWORD 'm0d1fyth15';
postgres=# CREATE DATABASE djangodb;
Ensuite, nous devons également changer l'encodage en UTF-8, le fuseau horaire et le schéma de base de données default_transaction_isolation.
postgres=# ALTER ROLE djangouser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE djangouser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE djangouser SET timezone TO 'UTC';
La dernière partie, nous accordons les privilèges à la nouvelle base de données puis quittons le shell PostgreSQL.
postgres=# GRANT ALL PRIVILEGES ON DATABASE djangodb TO djangouser;
postgres=# \q
Étape 5. Créer un environnement virtuel Python
Django peut être installé de plusieurs façons, dans cet article nous allons vous montrer comment l'installer dans un environnement virtuel python.
$ sudo -H pip3 install --upgrade pip
$ sudo -H pip3 install virtualenv
Une fois terminé, créons un nouveau répertoire pour l'installation de Django puis entrons dans le nouveau répertoire
$ mkdir django && cd $_
Après avoir entré le répertoire 'django', nous pouvons exécuter cette commande pour créer un nouvel environnement virtuel.
$ virtualenv djangoenv
Comme on le voit sur l'image, le nouvel environnement virtuel est créé dans le répertoire 'djangoenv'. Pour installer Django, Gunicorn et Psycopg2 dans l'environnement virtuel, nous devons d'abord l'activer.
$ source djangoenv/bin/activate
En exécutant la commande ci-dessus, votre shell ressemblera à ceci :
(djangoenv) master@ubuntu20:~/django$
Dans le shell, exécutez cette commande pour installer Django.
(djangoenv) master@ubuntu20:~/django$ pip install django gunicorn psycopg2
Une fois terminé, vous devriez voir une sortie comme celle-ci :
Installing collected packages: sqlparse, backports.zoneinfo, asgiref, psycopg2, gunicorn, django
Successfully installed asgiref-3.4.1 backports.zoneinfo-0.2.1 django-4.0 gunicorn-20.1.0 psycopg2-2.9.2 sqlparse-0.4.2
Tous les composants requis pour démarrer un projet Django doivent être installés dans l'environnement virtuel.
Étape 6. Créer un projet Django
Dans l'étape précédente, nous avons créé un répertoire ~/django
ou dans ce cas /home/master/django
. Nous allons créer un projet django dans ce répertoire, nous pouvons exécuter cette commande pour installer le projet django dans ~/django
. La commande doit être exécutée pendant que nous sommes dans l'environnement virtuel.
(djangoenv) master@ubuntu20:~/django$ django-admin startproject djangoproject ~/django
La commande ci-dessus installera le projet django dans ~/django/djangoproject
. Si vous répertoriez le répertoire, vous verrez manage.py
, djangoenv
, et djangoproject
dans votre ~/django
.
Maintenant, puisque nous voulons utiliser PostgreSQL comme stockage de base de données, nous devons modifier la configuration.
$ nano ~/django/djangoproject/settings.py
Ajoutez cette ligne en haut de votre settings.py
import os
Et remplacez les informations de base de données existantes par les suivantes.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'djangodb', 'USER': 'djangouser', 'PASSWORD': 'm0d1fyth15', 'HOST': 'localhost', 'PORT': '', } }
Assurez-vous que le nom d'utilisateur et le mot de passe de la base de données correspondent à celui que nous avons créé à l'étape précédente. Toujours dans le même fichier settings.py, trouvez ALLOWED_HOSTS puis vous pouvez ajouter l'adresse IP de votre serveur, les noms de domaine, les noms de sous-domaine. Les entrées doivent être séparées par une virgule et énumérées entre guillemets.
ALLOWED_HOSTS = ['123.123.123.123', 'domain.com', 'sub.domain.com']
Ensuite, trouvez la configuration des fichiers statiques de Django. Les modifications sont nécessaires pour rendre vos fichiers statiques Django accessibles via nginx et pour empêcher nginx de renvoyer des messages d'erreur 404. Ajoutez cette ligne après STATIC_URL ='/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
N'oubliez pas d'enregistrer les modifications puis de quitter.
Ensuite, il est temps de migrer le schéma de base de données initial vers notre base de données PostgreSQL, exécutons ces commandes.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py makemigrations
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py migrate
Ensuite, créez un superutilisateur.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py createsuperuser
Il vous sera demandé de créer un nom d'utilisateur, de fournir une adresse e-mail et le mot de passe du nom d'utilisateur. Vous voudrez enregistrer les informations sur cet utilisateur administratif et ce mot de passe car vous les utiliserez pour vous connecter au backend de Django.
Pour le dernier, exécutez la commande ci-dessous pour collecter les fichiers statiques.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py collectstatic
Vous devrez confirmer l'action en y répondant par oui, puis vous verrez cette sortie après confirmation :
128 static files copied to '/home/master/django/static'
Désactivez l'environnement virtuel pour quitter.
(djangoenv) master@ubuntu20:~/django$ deactivate
Étape 7. Créer un fichier Gunicorn Systemd
Pour gérer le service Gunicorn, nous allons créer un fichier d'unité systemd dans /etc/systemd/system/gunicorn.service.
$ sudo nano /etc/systemd/system/gunicorn.service
Collez ces lignes
[Unit] Description=gunicorn daemon After=network.target [Service] User=master Group=www-data WorkingDirectory=/home/master/django ExecStart=/home/master/django/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/master/django/djangoproject.sock djangoproject.wsgi:application [Install] WantedBy=multi-user.target
Enregistrez le fichier puis quittez. Ensuite, rechargez systemd et démarrez gunicorn.
$ sudo systemctl daemon-reload
$ sudo systemctl start gunicorn
Pour vérifier si gunicorn est en cours d'exécution ou non, exécutez cette commande :
$ sudo systemctl status gunicorn
Étape 8. Configurer Nginx
Gunicorn est en cours d'exécution et nous sommes maintenant prêts à configurer nginx pour qu'il agisse comme un proxy inverse pour notre projet Django. Créons un bloc de serveur nginx pour Django et supprimons le bloc de serveur par défaut nginx.
$ sudo rm /etc/nginx/sites-enabled/default $ sudo nano /etc/nginx/conf.d/django.conf
Collez ces lignes dans /etc/nginx/conf.d/django.conf
server { listen 80; server_name 123.123.123.123; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { alias /home/master/django/static/; } location /.well-known { alias /home/master/django/; } location / { include proxy_params; proxy_pass http://unix:/home/master/django/djangoproject.sock; } }
Avant d'enregistrer les fichiers, assurez-vous de remplacer 123.123.123.123
avec l'adresse IP réelle de votre serveur et le chemin du socket est correct. Ensuite, recherchez toute erreur et redémarrez nginx pour recharger la nouvelle configuration.
$ sudo nginx -t $ sudo systemctl restart nginx
À ce stade, vous devriez pouvoir accéder à votre projet Django sur http://YOUR_SERVER_IP_ADDRESS
et l'URL d'administration sur http://YOUR_SERVER_IP_ADDRESS/admin
à l'aide de votre navigateur Web préféré.
Étape 9. Installer le certificat SSL
Cette étape est facultative mais fortement recommandée. À l'ère moderne, les sites Web devraient fonctionner en HTTPS au lieu de HTTP. Cette étape vous guidera tout au long de l'installation de SSL à partir de Let's Encrypt.
$ sudo apt install certbot python3-certbot-nginx -y
Une fois installé, modifiez le bloc de serveur de votre site Web Django et remplacez le nom_serveur par votre domaine ou sous-domaine réel pointé vers l'adresse IP de votre serveur. Assurez-vous que l'enregistrement DNS du domaine ou du sous-domaine pointe déjà vers votre serveur avant d'émettre le certificat SSL.
Ouvrez /etc/nginx/conf.d/django.conf
et modifiez cette partie
server { listen 80; server_name 123.123.123.123;
à
server { listen 80; server_name yourdomain.com;
Assurez-vous de remplacer yourdomain.com
avec votre vrai nom de domaine. Enregistrez le fichier puis quittez et rechargez Nginx.
$ sudo systemctl reload nginx
Maintenant, nous sommes prêts à installer le certificat SSL, exécutez cette commande :
$ sudo certbot
Vous devrez fournir votre adresse e-mail, accepter les conditions d'utilisation de Let's Encrypt et indiquer si vous souhaitez ou non partager votre adresse e-mail avec l'Electronic Frontier Foundation. Ensuite, vous devez choisir les noms pour lesquels vous souhaitez activer HTTPS. Choisissez votre site Web Django en tapant le numéro et en appuyant sur ENTRÉE. Let's encrypt installera le certificat et il vous demandera si vous souhaitez configurer la redirection HTTP vers HTTPS ou non, vous pouvez choisir la redirection, puis certbot créera la redirection et rechargera Nginx si tout va bien.
Maintenant, vous devriez pouvoir accéder à votre site Django en mode HTTPS sur https://yourdomain.com
.
Voilà, vous avez appris à configurer Django avec PostgreSQL, Nginx et Gunicorn.
Bien sûr, vous n'avez pas besoin de configurer Django avec PostgreSQL, Nginx et Gunicorn sur Ubuntu 20.04 si vous utilisez l'un de nos services d'hébergement VPS Django, auquel cas vous pouvez simplement demander à nos administrateurs Linux experts de configurer Django avec PostgreSQL , Nginx et Gunicorn sur Ubuntu 20.04 VPS pour vous. Ils sont disponibles 24h/24 et 7j/7 et prendront immédiatement en charge votre demande.
PS. Si vous avez aimé cet article sur la configuration de Django avec PostgreSQL, Nginx et Gunicorn sur Ubuntu 20.04, partagez-le avec vos amis sur les réseaux sociaux en utilisant les boutons ci-dessous ou laissez simplement une réponse dans les sections commentaires. Merci.