nginx + uwsgi + pyramid¶
Introduction¶
Le site easytan a été développé en utilisant le framework Pyramid. Au cours du développement, on peut utiliser le serveur intégré (paster ou waitress selon les version) pour tester le fonctionnnement. En production, il vaut mieux utiliser une solution plus performante comme le serveur http nginx. Toutefois ce dernier ne supporte pas les applications wsgi (Apache dispose du module mod-wsgi). C’est là qu’intervient uwsgi qui permet de faire le lien entre l’application wsgi et le serveur nginx.
Installation sous Debian Wheezy¶
On fait l’hypothèse qu’on a installé le site Pyramid dans un virtualenv
Python /home/http/ve_prod
. Pour plus de détails, voir la documentation
Pyramid. Le site est situé classiquement dans le répertoire
/home/http/ve_prod/easytan
. C’est également dans ce répertoire qu’on
trouve les fichiers development.ini
et production.ini
.
On commence par installer les paquets pour nginx et uwsgi.
aptitude install nginx-full uwsgi uwsgi-plugin-python
Configuration uwsgi¶
Le package Debian contient une configuration par défaut assez complète. Du coup,
il y a peu de choses à ajouter dans le fichier de config
/etc/uwsgi/apps-available/easytan.ini
:
[uwsgi]
virtualenv = /home/http/ve_prod
ini-paste = /home/http/ve_prod/easytan/production.ini
La première ligne pointe vers le virtualenv tandis que la seconde ligne pointe
vers le fichier de configuration souhaité, a priori production.ini
pour le serveur de production.
Configuration nginx¶
La configuration par défaut de uwsgi sous Debian crée un socket à
l’emplacement /run/uwsgi/app/easytan/socket
. Le nom du socket est crée
en fonction du nom du fichier de configuration uwsgi.
Ici, on va créer un hôte virtuel easytan avec nginx. On crée un fichier
/etc/nginx/sites-available/easytan.conf
et on fera un lien symbolique
dans /etc/nginx/sites-sites-enabled
pour activer le serveur.
Contenu du fichier /etc/nginx/sites-available/easytan.conf
:
server {
listen [::]:80;
server_name easytan.chataignon.com;
access_log /var/log/nginx/easytan.access.log;
error_log /var/log/nginx/easytan.error.log;
charset utf-8;
location / {
uwsgi_pass unix:/run/uwsgi/app/easytan/socket;
include uwsgi_params;
}
location /static {
root /home/http/ve_prod/easytan/easytan;
expires 1d;
add_header Cache-Control public;
access_log off;
}
}
C’est tout.