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.

Ce fichier, ainsi que tous les fichiers constituant votre projet, doit être suivi par Git et poussé sur le dépôt Git de votre Simple Hosting avant de lancer la commande deploy.

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"
Dernière modification: le 16/10/2017 à 17:33 par Alexandre L. (Gandi)