GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer Django avec PostgreSQL et Nginx sur Ubuntu 16.04

Django est un framework web open source gratuit basé sur Python. Il s'agit d'un framework Web python de haut niveau avec un modèle d'architecture MVT (Model-View-Template). Django est maintenu par la Django Software Foundation (DSF). Le framework web Django est rapide, il aide les développeurs à créer des applications rapidement (RAD).

Dans ce tutoriel, je vais vous montrer comment installer le framework Web Django et le configurer pour utiliser une base de données PostgreSQL pour le développement. Nous exécuterons Nginx en tant que proxy inverse pour le framework Web Django pour des raisons de rapidité et de sécurité. Django fonctionnera sous le serveur HTTP python WSGI 'Gunicorn', nous gérerons et contrôlerons 'Gunicorn' avec 'Supervisor' comme système de contrôle de processus.

Prérequis

  • Ubuntu 16.04
  • Privilèges racine

Étape 1 - Installer Django, Virtualenv et Gunicorn

J'utiliserai python3 comme version Python par défaut pour le système. Nous allons installer python3 et pip3 sur Ubuntu 16.04. Pip3 est un système de gestion de packages pour installer et gérer des packages logiciels écrits en python.

Connectez-vous à votre serveur en tant qu'utilisateur root sur le terminal ou par SSH (comme je le fais ici) et mettez à jour le référentiel Ubuntu :

ssh [email protected]
sudo apt-get update

Installez python3 et pip3 avec cette commande apt :

sudo apt-get install python3-pip python3-dev

Créez un nouveau lien symbolique pour la commande pip3 afin de pouvoir l'utiliser comme "pip" au lieu de "pip3" et mettez-le à jour :

ln -s /usr/bin/pip3 /usr/bin/pip
pip install --upgrade pip

Ensuite, installez les packages python requis avec la commande pip. Je vais installer Django, Virtualenv et Gunicorn ici :

pip install django virtualenv gunicorn

Étape 2 - Installer et configurer PostgreSQL

Nous utiliserons PostgreSQL comme base de données pour notre projet Django. Installez PostgreSQL avec cette commande apt.

sudo apt-get install postgresql postgresql-contrib libpq-dev

Lorsque l'installation est terminée, installez le nouveau package python nommé 'psycopg2' avec pip. C'est l'adaptateur de base de données python-postgreSQL.

pip install psycopg2

Accédez maintenant à l'utilisateur postgres et ouvrez le shell PostgreSQL avec la commande psql :

su - postgres
psql

Définissez un nouveau mot de passe pour l'utilisateur postgres avec la commande ci-dessous :

\password postgres
Enter new password:

Ensuite, créez une nouvelle base de données et un nouvel utilisateur/rôle pour le projet django dans PostgreSQL. Je vais créer de nouvelles bases de données nommées 'django_db' avec l'utilisateur/rôle 'python_dev'. Tapez la commande ci-dessous sur le shell PostgreSQL.

CREATE USER python_dev WITH PASSWORD 'aqwe123';
CREATE DATABASE django_db OWNER python_dev;

Voir la liste et le rôle de la base de données :

\list

Étape 3 - Démarrer un nouveau projet Django

Démarrez le premier projet Django avec le nom 'hello_django'. Nous n'allons pas utiliser les privilèges root pour le projet, j'utiliserai un utilisateur Linux normal 'natsume' pour le projet. N'hésitez pas à utiliser un nom d'utilisateur différent qui décrit votre projet.

Créer un nouvel utilisateur

Créez un nouvel utilisateur Linux avec la commande ci-dessous :

useradd -m -s /bin/bash natsume
passwd natsume

-m =Créer automatiquement le répertoire personnel.
-s =Définir le shell par défaut pour l'utilisateur.

Créer un nouveau Virtualenv et installer Django

Connectez-vous à l'utilisateur natsume :

su - natsume

Créez un nouvel environnement virtuel dans le répertoire 'myproject' pour notre projet Django avec python3 comme version python par défaut.

mkdir myproject
virtualenv --python=python3 myproject/

Allez dans le répertoire 'myproject' et activez le virtualenv.

cd myproject/
source bin/activate

Ensuite, installez Django, gunicorn et psycopg2 avec la commande pip dans cet environnement.

pip install django gunicorn psycopg2

Démarrer un nouveau projet avec PostgreSQL

Démarrez le projet Django 'hello_django' avec la commande django-admin ci-dessous :

django-admin startproject hello_django

Il va créer un nouveau répertoire 'hello_django', aller dans ce répertoire et modifier le fichier de configuration 'setting.py' avec vim.

cd hello_django/
vim hello_django/settings.py

Modifiez les paramètres de la base de données à la ligne 76 avec la configuration ci-dessous :

        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django_db',
        'USER': 'python_dev',
        'PASSWORD': 'aqwe123',
        'HOST': 'localhost',
        'PORT': '',

A la fin du fichier, configurez l'url statique en ajoutant la ligne de configuration STATIC_ROOT ci-dessous :

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Enregistrez et quittez.

Ensuite, migrez la base de données vers notre base de données postgreSQL et créez un nouvel utilisateur administrateur. Collectez ensuite tous les fichiers statiques dans le répertoire statique qui est automatiquement créé lorsque nous exécutons la commande.

python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic

Assurez-vous qu'il n'y a pas d'erreur et effectuez un test du serveur de projet django avec la commande runserver.

python manage.py runserver 0.0.0.0:8080

Ouvrez votre navigateur Web et visitez l'adresse IP du serveur sur le port 8080, dans mon cas http://192.168.1.115:8080. Vous verrez la page par défaut de Django.

Appuyez sur Ctrl + c pour quitter.

Étape 4 - Configurer le projet Django avec Gunicorn

Gunicorn ou Green Unicorn est un serveur HTTP python WSGI dérivé du projet Ruby Unicorn. Il prend en charge divers frameworks Web et est facile à configurer.

Allez dans le répertoire 'myproject' et activez l'environnement virtuel pour le répertoire d'accueil de l'utilisateur natsume.

cd ~/myproject/
source bin/activate

Créez un nouveau fichier 'gunicorn_start' dans le répertoire bin avec vim :

vim bin/gunicorn_start

Collez la configuration ci-dessous :

#!/bin/bash

# Project Name
NAME="hello_django"                       

# Django Project Directory
DJANGODIR=/home/natsume/myproject/hello_django          

# Run gunicorn on the socket file
SOCKFILE=/home/natsume/myproject/hello_django/run/gunicorn.sock

# Gunicorn running as user and group
USER=natsume
GROUP=natsume

# Workers
NUM_WORKERS=3

#Module Setting
#replace hello_django with your project name
DJANGO_SETTINGS_MODULE=hello_django.settings
DJANGO_WSGI_MODULE=hello_django.wsgi

echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-

Enregistrez et quittez.

Rendez le fichier exécutable avec la commande chmod.

chmod u+x bin/gunicorn_start

Étape 5 - Installer et configurer le superviseur

Supervisor est un système de contrôle de processus pour les systèmes d'exploitation Linux. Il vous permet de configurer, de surveiller et de contrôler un certain nombre de processus sous Linux. Supervisor est basé sur python, nous pouvons l'installer depuis le référentiel python pypi avec la commande pip ou l'installer depuis le référentiel ubuntu avec apt.

Je vais installer le superviseur avec cette commande apt :

sudo apt-get install supervisor

Le superviseur a un fichier de configuration par défaut dans le répertoire '/ect/supervisor/'. Allez dans ce répertoire et créez une nouvelle configuration pour notre projet Django afin que nous puissions le contrôler avec le superviseur.

cd /etc/supervisor/conf.d/
vim hello-django.conf

Collez la configuration du superviseur ci-dessous :

[program:hello_django]
command = sh /home/natsume/myproject/bin/gunicorn_start
user = natsume
stdout_logfile = /home/natsume/myproject/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

Enregistrez et quittez.

Ensuite, connectez-vous à l'utilisateur natsume et créez des répertoires nécessaires pour le fichier de socket gunicorn et le fichier journal du superviseur.

su - natsume

# Directory for gunicorn sock file
mkdir -p myproject/hello_django/run/

# Directory and file for supervisor log files
mkdir -p myproject/logs/
touch myproject/logs/gunicorn_supervisor.log

Retournez à l'utilisateur root avec "exit" et démarrez Supervisor :

exit
systemctl start supervisor

Vérifiez l'état et le journal du processus :

supervisorctl
tail -f hello_django

Étape 6 - Installer et configurer Nginx pour le projet Django

Dans cette étape, nous allons installer Nginx et le configurer en tant que proxy inverse pour notre projet Django.

Installez Nginx depuis le dépôt Ubuntu :

sudo apt-get install nginx

Accédez au répertoire de configuration de l'hôte virtuel Nginx et créez un fichier d'hôte virtuel hello_django :

cd /etc/nginx/sites-available/
vim hello_django

Collez la configuration ci-dessous :

# Django running with Gunicorn Sock file
upstream hello_django_project {
    server unix:/home/natsume/myproject/hello_django/run/gunicorn.sock fail_timeout=0;
}

server {

    listen   80;
    server_name www.django-nginx.com;

    client_max_body_size 4G;

    access_log /home/natsume/myproject/logs/nginx-access.log;
    error_log /home/natsume/myproject/logs/nginx-error.log;

    location /static/ {
        alias   /home/natsume/myproject/hello_django/static/;
    }

    location /media/ {
        alias   /home/natsume/myproject/hello_django/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

    # Try to serve static files from nginx, no point in making an
    # *application* server like Unicorn/Rainbows! serve static files.
    if (!-f $request_filename) {
        proxy_pass http://hello_django_project;
        break;
        }
   

# Error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /home/natsume/myproject/hello_django/static/;
        }
    }
}

Enregistrez et quittez.

Activez l'hôte virtuel et testez la configuration Nginx.

ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
nginx -t

Assurez-vous qu'il n'y a pas d'erreur, puis redémarrez Nginx :

systemctl restart nginx

Étape 7 - Tester Django

À l'étape 5, nous avons créé un hôte virtuel pour notre projet Django avec le nom de domaine « www.django-nginx.com ». Ouvrez votre navigateur et visitez le nom de domaine que vous avez choisi pour votre projet.

www.django-nginx.com/admin/

Et vous serez redirigé vers le tableau de bord d'administration de Django.

Vérifier que tous les services que nous avons configurés fonctionnent avec la commande ci-dessous :

netstat -pl

Vous verrez le fichier pid, port et sock utilisé par tous les services.

L'installation et la configuration de Django avec PostgreSQL et Nginx sur Ubuntu 16.04 ont réussi.

  • https://www.djangoproject.com/
  • https://www.nginx.com/
  • http://gunicorn.org/
  • http://supervisord.org/

Ubuntu
  1. Comment installer Mattermost avec PostgreSQL et Nginx sur Ubuntu 16.04

  2. Comment installer MediaWiki avec Nginx sur Ubuntu 16.04

  3. Comment installer Magento 2 avec Nginx et Letsencrypt sur Ubuntu 18.04

  4. Comment installer Postgresql et phpPgAdmin sur Ubuntu 15.04

  5. Comment installer Nginx avec PHP5 et MySQL sur Ubuntu 11.10

Comment installer Redmine 3.2 avec Nginx sur Ubuntu 16.04

Comment installer OSClass avec Nginx sur Ubuntu 20.04

Comment installer Nginx avec ModSecurity sur Ubuntu 15.04

Comment installer Nextcloud 13 sur Ubuntu 16.04 avec Nginx

Comment installer et configurer PostgreSQL sur Ubuntu

Comment installer et configurer Nginx dans Ubuntu 20.04 et Ubuntu 21.04