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 |
include /etc/nginx/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 |
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. } |
Code : | Sélectionner tout |
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 } } |
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 |
1 2 | sudo /etc/init.d/nginx restart gunicorn jiyuu.wsgi:application --bind=127.0.0.1:8000 --daemon |
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.