Python

Présentation

L’hébergement Python exploite le serveur WSGI Gunicorn. Pour l’utiliser, il est nécessaire de demander l’activation de celui-ci sur un ou plusieurs répertoires web de votre compte d’hébergement. Gunicorn tentera alors d’accéder à un fichier nommé .wsgi/<NOM_REPERTOIRE>.py qui devra contenir le code Python nécessaire au chargement de l’application Python.

Bien que quelques bibliothèques Python soient disponibles sur le système, il est vivement recommandé d’utiliser l’outil virtualenv et d’installer vos propres versions de bibliothèques à l’aide de l’outil pip. Cela permettra de conserver le même environnement d’exécution de votre application, même en cas de mise-à-jour du système du serveur.

Important : Lors du déploiement d’une nouvelle version d’une application, il est nécessaire de demander la relance de l’ensemble des worker Gunicorn en exécutant la commande gunicorn-restart.

Tutorial

Cet exemple décrit le déploiement d’une application Django nommée myapp sur un compte d’hébergement Oopss nommé example, sur le serveur example.oopss.org. Le répertoire web par défaut htdocs a été préalablement configuré pour exécuter le langage Python.

Se connecter au compte :

ssh example@example.oopss.org

Créer un virtualenv dans lequel seront installés les bibliothèques Python nécessaires pour l’application :

mkvirtualenv myapp

L’arborescence correspondante sera créée dans le répertoire .virtualenv/myapp.

Activer ce virtualenv :

workon myapp

Installer les packages Python nécessaires au bon fonctionnement de votre application (ici Django 1.6.5) :

pip install Django==1.6.5

Installer les fichiers sources de l’application dans un emplacement au choix, par exemple app/myapp/.

Installer les fichiers statiques (CSS, JS, images) dans le répertoire htdocs. Si une requête HTTP correspond à l’emplacement d’un fichier présent dans ce répertoire, celui-ci sera servi directement par le serveur web, sans que la requête soit traité par Gunicorn. Le gain de performance est appréciable.

L’application étant hébergée dans le répertoire web par défaut (htdocs), créer un fichier .wsgi/htdocs.py qui contiendra le code nécessaire au chargement de votre application WSGI (exemple pour Django) :

import os, sys

# Ajout du chemin vers le virtualenv
sys.path.append('/srv/www/example/.virtualenvs/myapp/lib/python2.7/site-packages/')

# Ajout du chemin vers l'application
sys.path.append('/srv/www/example/app/myapp')

# Voir https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Enfin, relancer les processus Gunicorn :

gunicorn-restart

La relance des processus Gunicorn et les éventuelles erreurs sont alors visibles dans le fichier de log .gunicorn/htdocs.log.