====== 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 [[#selection_de_la_version_de_python|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 ['It works',                 '

It works!

']
===== 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 : * http://docs.python.org/2/library/logging.config.html#configuration-file-format * http://docs.python.org/2/library/logging.html ===== 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"