Deux billets le même jour, c'est fête!
Voici une recette simple pour installer, configurer et utiliser gunicorn avec apache et django.
Installer gunicorn
Pour installer gunicorn dans son environnement virtuel:
$ pip install -E /path/to/venv install gunicorn
Configurer Apache en proxy
Apache servira les fichiers statiques, et "proxisera" toutes les autres requêtes directement à gunicorn qui sera lancé en local sur le port 8080:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /path/to/django/project <Proxy *> Order deny,allow Allow from all </Proxy> # laisser apache servir les fichiers statiques ProxyPass /robots.txt ! ProxyPass /favicon.ico ! ProxyPass /static/ ! # proxiser toutes les autres requêtes vers gunicorn ProxyPass / http://localhost:8080/ # robots.txt et favicon.ico sont dans /path/to/django/project/static/ Alias /robots.txt /path/to/django/project/static/robots.txt Alias /favicon.ico /path/to/django/project/static/favicon.ico <Directory /path/to/django/project> Order deny,allow Allow from all Options -Indexes </Directory> </VirtualHost>
Pour que le tout fonctionne correctement, il faut activer les modules mod_proxy et mod_proxy_html (et en option mod_cache):
$ a2enmod proxy proxy_http cache
Puis de redémarrer le server Apache:
$ /etc/init.d/apache2 restart
Lancer gunicorn
Il suffit de se placer dans le répertoire du projet django (avec le virtualenv activé), puis de taper:
$ gunicorn_django -b localhost:8080 --workers=2
Un ordre d'idée pour le calcul des workers: un de plus que le nombre de CPUs de la machine.
Conclusion
On peut alors se créer un script (a placer dans /etc/init.d) et l'activer pour qu'il se lance automatiquement au démarrage avec la commande update-rc.d (sous Debian), ou utiliser runit (jamais testé, peut-être un futur billet?).
Encore mieux, remplacer Apache par Nginx! (jamais testé non plus, et sûrement un futur billet ;)).
On peut difficilement faire plus simple!