Django Instructions de déploiement Django. Nginx + Gunicorn + Superviseur sur Linux (Ubuntu)


Exemple

Trois outils de base.

  1. nginx - un serveur HTTP et un proxy inversé open source, haute performance et gratuit, avec de hautes performances;
  2. gunicorn - 'Green Unicorn' est un serveur HTTP WSGI Python pour UNIX (nécessaire pour gérer votre serveur);
  3. supervisor - un système client / serveur qui permet à ses utilisateurs de surveiller et de contrôler un certain nombre de processus sur des systèmes d'exploitation de type UNIX. Utilisé lorsque votre application ou le système tombe en panne, redémarre votre caméra django / celery / celery, etc.

Pour que ce soit simple, supposons que votre application se trouve dans ce répertoire: /home/root/app/src/ et nous allons utiliser root utilisateur root (mais vous devez créer un utilisateur séparé pour votre application). De plus, notre environnement virtuel sera situé dans /home/root/app/env/ path.

NGINX

Commençons par nginx. Si nginx n'est pas déjà sur la machine, installez-le avec sudo apt-get install nginx . Plus tard, vous devez créer un nouveau fichier de configuration dans votre répertoire nginx /etc/nginx/sites-enabled/yourapp.conf . S'il existe un fichier nommé default.conf , supprimez-le.

Code ci-dessous dans un fichier de configuration nginx, qui essaiera d'exécuter votre service en utilisant un fichier de socket; Plus tard, il y aura une configuration de gunicorn. Le fichier Socket est utilisé ici pour communiquer entre nginx et gunicorn. Cela peut aussi être fait avec les ports.

# your application name; can be whatever you want
upstream yourappname {
    server        unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}

server {
    # root folder of your application
    root        /home/root/app/src/;
 
    listen        80;
    # server name, your main domain, all subdomains and specific subdomains
    server_name   yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
 
    charset       utf-8;

    client_max_body_size                        100m;
 
    # place where logs will be stored;
    # folder and files have to be already located there, nginx will not create
    access_log        /home/root/app/src/logs/nginx-access.log; 
    error_log         /home/root/app/src/logs/nginx-error.log;
    
    # this is where your app is served (gunicorn upstream above)
    location / {
        uwsgi_pass  yourappname;
        include     uwsgi_params; 
    }

    # static files folder, I assume they will be used
    location /static/ {
        alias         /home/root/app/src/static/;
    }
 
    # media files folder
    location /media/ {
        alias         /home/root/app/src/media/;
    }

}

GUNICORN

Maintenant, notre script GUNICORN, qui sera responsable de l'exécution de l'application django sur le serveur. La première chose à faire est d'installer gunicorn dans un environnement virtuel avec pip install gunicorn .

#!/bin/bash

ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3 
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi  
echo "Starting $NAME as `whoami`"
 
# Activate the virtual environment
cd $DJANGODIR

source /home/root/app/env/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 Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name root \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-

afin de pouvoir exécuter le script de démarrage gunicorn, il doit avoir le mode d'exécution activé pour

sudo chmod u+x /home/root/app/src/gunicorn_start

maintenant vous pourrez démarrer votre serveur ./gunicorn_start utilisant simplement ./gunicorn_start


SUPERVISEUR

Comme indiqué au début, nous voulons que notre application soit redémarrée en cas d’échec d’un superviseur. Si superviseur pas encore sur le serveur, installez avec le sudo apt-get install supervisor .

Au premier installez le superviseur. Ensuite, créez un fichier .conf dans votre répertoire principal /etc/supervisor/conf.d/your_conf_file.conf

contenu du fichier de configuration:

[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true

Bref bref, [program:youappname] est requis au début, ce sera notre identifiant. Le fichier stdout_logfile est également un fichier dans lequel les journaux seront stockés, à la fois l’accès et les erreurs.

Cela fait, nous devons dire à notre superviseur que nous venons d'ajouter un nouveau fichier de configuration. Pour ce faire, il existe différents processus pour différentes versions d'Ubuntu.

Pour Ubuntu version 14.04 or lesser , lancez simplement ces commandes:

sudo supervisorctl reread -> relit tous les fichiers de configuration du catalogue des superviseurs, cela devrait s'imprimer: votre nomappli: disponible

sudo supervisorctl update -> met à jour le superviseur pour les fichiers de configuration nouvellement ajoutés; devrait imprimer votre nomapplication: groupe de processus ajouté

Pour Ubuntu 16.04 Exécuter:

sudo service supervisor restart

et pour vérifier si votre application fonctionne correctement, exécutez simplement

sudo supervisorctl status yourappname

Cela devrait afficher:

yourappname RUNNING pid 18020, uptime 0:00:50

Pour obtenir une démonstration en direct de cette procédure, naviguez sur cette vidéo .