Voir le flux RSS

Jiyuu

[Actualité] Mise en production d'un site Django, en utilisant Nginx et Gunicorn

Noter ce billet
par , 17/01/2016 à 21h27 (975 Affichages)
### toujours en mode ébauche... n'hésitez pas à me faire toutes les remarques utiles nécessaires.

Bonjour à tous,

Pré-requis (à par connaitre Python & Django) :
  • connaitre SSH ;
  • être habitué aux OS basés sur linux ;
  • avoir un serveur permettant d'utiliser Python, Django et SSH ;
  • si possible avoir un serveur de production aussi à jour que le poste servant de serveur de développement.


Après la création de votre site web avec Django, vous allez rapidement avoir besoin de mettre en production celui-ci. Pour rappel, IL NE FAUT SURTOUT PAS utiliser le serveur de développement fourni avec Django pour travailler en production. Il existe sur le marché plusieurs hébergeurs permettant de faire ceci, mais nous allons étudier ici la manière de faire sans passer par ces hébergeurs. Nous allons donc créer notre propre serveur de production.

Dans ce billet nous allons découvrir le paramétrage le plus simple pour faire fonctionner un site Django sur un serveur privé. Plusieurs fournisseurs offrent ce type de service. La seule chose que je conseille c'est de veiller à avoir un serveur de production aussi à jour que notre serveur de développement. Pour ma part je suis parti sur un serveur Archlinux.


Passons aux choses sérieuses

Nous allons utiliser Gunicorn et Nginx. Je vous invite donc à les installer si ce n'est pas déjà fait. Évidemment il est possible d'utiliser d'autres outils comme mod_wsgi et Apache. À l'heure actuelle, l'objet de ce billet n'est pas d'expliquer en profondeur l'utilité de l'un ou l'autre. Si besoin je vous invite à feuilleter les tutoriels disponibles sur
Une fois l'installation faite vous pouvez vérifier que Nginx fonctionne correctement en vous rendant sur l'adresse localhost depuis votre navigateur web.

Note : Gunicorn est l'outil (serveur) qui nous permettra de mettre en production notre site Django. Malheureusement celui-ci ne sait pas gérer les fichiers statiques, comprenez par là vos images, *.css, *.js, ... Pour cela il nous allons utiliser Nginx.


Ok, mais comment j'utilise tout ça ?
Théoriquement Nginx est livré avec une configuration de base assez simple, que vous trouverez dans le fichier /etc/nginx/nginx.conf (chemin à adapter éventuellement selon votre OS). C'est elle qui permet l'affichage de localhost. La première chose à faire est d'ajouter, le cas échéant, à la fin de nginx.conf la ligne suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
include /etc/nginx/sites-enabled/*;
Par la suite, l'idée est de créer des sous-configurations et de les activer au besoin. Pour cela, la méthode habituellement utilisé est de créer les deux dossiers sites-available et sites-enabled directement dans /etc/nginx. On va donc demander au fichier de configuration d'inclure aussi ce qui se trouve dans sites-enabled.
Donc si vous avez bien suivi :
  • sites-available : sites créés & disponibles
  • sites-enabled : sites en fonction.

La première étape est de configurer correctement votre projet afin de servir les fichiers statiques. Pour cela, je vous invite à vous référer à la documentation officielle qui explique bien les différents nuances des paramètres présents dans votre settings.py.

Une fois settings.py correctement configuré, il faut passer à la configuration de Nginx. Pour rappel, le but ici n'est pas de s'étendre sur cet outil, mais de proposer une solution simple pour installer notre site web. En ayant enlevé toutes les lignes commentées et en allant au plus simple, dans mon cas, nginx.conf correspond à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
user root;   #pour dire qui a le droit d'utiliser le script
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*; #pour inclure mes fichiers de configuration propres à chacun de mes sites.
}
Dans un second temps, nous allons créer un fichier de configuration propre à notre site (le nom importe peu) dans sites-available. Voici un exemple basique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
    listen 80;
    server_name monsupersite.fr *.monsupersite.fr; #mettez ici tous les liens devant pointer vers votre site

location / {
               proxy_pass http://127.0.0.1:8000/;
               proxy_read_timeout 300;
               proxy_redirect off;
               proxy_buffering off;
               proxy_store off;
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
 
     location /static/ {
                alias /home/monuser/www/staticFiles/; #le dossier /home/monuser/www correspond au dossier dans lequel vous aurez mis votre projet, c'est à dire tout ce qui se trouve au même niveau que manage.py
           }
}
N'oubliez pas de créer un lien symbolique de ce ficher vers sites-enabled afin de le rendre actif.

Une fois ceci fait, rendez-vous au même niveau que manage.py et lancez les commandes suivantes (à adapter selon votre projet et votre OS) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo /etc/init.d/nginx restart
gunicorn jiyuu.wsgi:application --bind=127.0.0.1:8000 --daemon
jiyuu.wsgi:application : voir settings.py pour adapter cet argument.

Note : on voit ici que l'on demande à gunicorn de lancer le serveur sur le port 127.0.0.1:8000, ce qui correspond à notre configuration dans le fichier sites-available. Vous aurez compris qu'il est ainsi possible de mettre en place plusieurs site web sur le même VPS.

Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Viadeo Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Twitter Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Google Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Facebook Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Digg Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Delicious Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog MySpace Envoyer le billet « Mise en production d'un site Django, en utilisant Nginx et Gunicorn » dans le blog Yahoo

Mis à jour 17/01/2016 à 22h47 par dourouc05

Catégories
Sans catégorie

Commentaires