Table des matières
Instance Python
Pré-requis
- Connaissance du langage Python et du protocole WSGI
- Votre application doit avoir un point d'entrée WSGI
- Connaissance de Git
Support des versions
L'instance Python supporte les deux versions de Python suivantes : 3.6 et 2.7. Pour choisir la version de Python à utiliser pour exécuter votre application, voir Sélection de la version de Python.
Utilisation basique
Votre application Python doit être composée d'au moins un fichier nommé wsgi.py contenant l'objet application, tel que spécifié dans la convention PEP, disponible à l'adresse suivante : http://www.python.org/dev/peps/pep-0333/#the-application-framework-side
Les Vhosts
Contrairement aux instances PHP, par exemple, l'ajout d'un site via l'interface de Gandi n'impliquera pas la création d'un nouveau répertoire sur l'instance afin d'y déposer les sources de son applicatif. Sur les instances Python, il n'y a qu'un seul vhost nommé 'default', dans lequel vous pourrez déposer les codes sources de vos applicatifs. Il est possible d'exécuter uniquement une instance de votre applicatif sur l'instance Simple Hosting, celle-ci devra prendre en charge la répartition des hôtes virtuels associé à votre instance Simple Hosting, dans le cas où vous souhaitez gérer plusieurs sites sur une seule et même instance Simple Hosting.
Il sera tout de même nécessaire d'ajouter le site à l'instance via l'interface de Gandi, en suivant la procédure indiquée à l'adresse http://wiki.gandi.net/fr/simple/shs-dns_config/instance
Exemple simple :
Directory layout
.
└── wsgi.py
wsgi.py:
def application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) return ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works', '</title><h1>It works!</h1>']
Dépendances de l'application
Les dépendances de vos applications doivent être installables avec 'pip' et être spécifiées dans un fichier nommé 'requirements.txt'. Pour que les dépendances soient installés automatiquement, il sera nécessaire d'effectuer le déploiement avec Git. Lors du développement de votre applicatif en local, vous installez les modules et dépendances avec 'pip install'. Puis, lorsque votre application est prête à passer en production, éxecutez la commande suivante en local afin de générer un fichier contenant toutes les dépendances de votre applicatif.
$ pip freeze > requirements.txt
Cette commande remplira le fichier 'requirements.txt' des modules et dépendances en fonction de ceux que vous avez installé sur votre environnement de développement. Ce fichier est ensuite à placer sur l'instance Simple Hosting, à la racine du répertoire 'default', pour que les dépendances soient installées automatiquement lors du déploiement de l'application. Ce fichier doit être commit et push sur l'instance via Git pour être pris en compte.
Pour de plus amples informations :
http://www.pip-installer.org/en/latest/cookbook.html#requirements-files
Pour le déploiement de votre application avec Git, référez vous à notre documentaion disponible à l'adresse http://wiki.gandi.net/fr/simple/git#deployer_son_code
Sélection de la version de Python
Il est possible de choisir la version de Python pour exécuter votre application parmi celles disponibles. Pour cela, il suffit de spécifier dans le fichier “gandi.yml“ situé à la racine de votre projet, la version de Python que vous souhaitez en utilisant le champ “python“.
gandi.yml
python: version: 3.6
L'exemple ci dessus forcera l'utilisation de Python 3.6. Les versions disponibles sont “2.7“ et “3.6“.
Si une valeur non correcte est spécifiée, votre application ne sera pas démarrée et un message d'erreur sera visible dans les logs du déploiement de votre application et dans les logs du démarrage de votre instance.
Fichiers Statiques
Tous les fichiers statiques doivent être placés sous les répertoires '/static/' et '/media/' qui seront servis par le serveur Apache HTTPD.
Logs
La sortie standard ainsi que les erreurs liées à l’exécution de l'applicatif sont stockés dans les fichiers suivants sur le disque de donnée de votre instance :
- via la console SSH : /srv/data/var/log/www/uwsgi.log
- via SFTP: /lamp0/var/log/www/uwsgi.log
Vous pourrez notamment vérifier si votre application a démarré correctement.
Vous pouvez également ajouter un fichier nommé 'logging.ini' à la racine du répertoire 'default' afin de configurer les loggers de l'application. Pour plus d'informations :
Exemples
Exemple d'application avec Flask
https://github.com/mitsuhiko/flask/tree/master/examples/minitwit
Directory layout
.
├── minitwit.py
├── requirements.txt
├── static/
├── templates/
└── wsgi.py
wsgi.py:
from minitwit import app as application
requirements.txt:
flask
Exemple d'application avec Django
Directory layout
.
├── media/
├── cms/
│ ├── manage.py
│ └── cms/
│ ├── init.py
│ ├── settings.py
│ ├── templates/
│ └── urls.py
├── requirements.txt
├── static/
└── wsgi.py
wsgi.py:
import sys import os import os.path sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'cms'))) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cms.settings') from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
requirements.txt:
django-cms
Encodage des caractères
Pour que uwsgi accepte l'encodage des caractères spéciaux (é;è;ê;…), contenus notamment dans le nom du fichier, ajoutez ces déclarations dans le fichier uwsgi.py
os.environ['LC_ALL']="en_US.UTF-8" os.environ['LC_LANG']="en_US.UTF-8"