GNU/Linux >> Tutoriels Linux >  >> Panels >> Panels

Comment configurer Django avec Postgres, Nginx et Gunicorn sur Ubuntu 20.04

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.


Panels
  1. Installez Django CMS sur Ubuntu 12.04 avec MariaDB, Gunicorn et Nginx

  2. Installer et configurer NodeBB avec Redis et Nginx sur Ubuntu 12.04

  3. Comment installer PHP 7.4 avec Nginx sur Ubuntu 20.04

  4. Comment configurer une application nodejs simple avec nginx et pm2 sur le serveur ubuntu

  5. Comment installer Node.js avec NVM et Nginx sur Ubuntu 22.04

Comment installer Magento 2 avec Nginx et Letsencrypt sur Ubuntu 18.04

Comment installer Gitlab avec PostgreSQL et Nginx sur Ubuntu 15.04

Comment installer Drupal 8 avec Nginx, PHP-FPM et SSL sur Ubuntu 15.10

Comment installer Django avec PostgreSQL et Nginx sur Ubuntu 16.04

Comment configurer l'environnement de développement Django sur Ubuntu 18.04

Configurer Django avec Postgres, Nginx et Gunicorn sur Ubuntu 18.04