Comment utiliser Python sur un Hébergement Web Gandi

L’instance Hébergement Web Python vous permet de publier des applications web écrites en Python facilement et à moindre coût.

Prérequis

  • Connaissance du langage de codage Python et du protocole WSGI.

  • Votre application doit avoir un point d’entrée WSGI.

  • Vous devez être habitué à Git

Support des versions

Lors de la création d’une nouvelle instance Python, vous avez actuellement quatre options :

  • 2.7 (inclut le support 3.2)

  • 3.6

  • 3.7

  • 3.8

Si vous avez sélectionné un hébergement Python 2.7, pour basculer entre les versions 2.7 et 3.2 afin d’exécuter votre application, voir « Choix de la version Python » ci-dessous.

Utilisation de base

Votre application Python doit contenir au moins un fichier nommé wsgi.py, qui doit lui-même contenir l’objet de l’application, conformément à la convention PEP spécifié ici : https://www.python.org/dev/peps/pep-0333/#the-application-framework-side

Domaines

Un nom de domaine est mis à disposition à des fins de test lorsque l’instance est créée. Vous pouvez lier un certain nombre de noms de domaine et de sous-domaines. Tous pointeront vers la même base de code d’application.

Exemple

Directory layout

.
└──  wsgi.py

wsgi.py:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    body = ['<!DOCTYPE html><html><meta charset="utf-8">',
            '<title>It works</title><h1>It works!</h1>']
    return [line.encode('utf-8') for line in body]

Dépendances des applications

Les dépendances de votre application doivent pouvoir être installées avec pip, et doivent être spécifiées dans un fichier nommé requirements.txt.

Pour que les dépendances soient automatiquement installées, vous devez déployer le code avec Git.

Lorsque vous développez votre application sur une machine locale, installez les dépendances avec pip install. Ensuite, lorsque votre application est prête à entrer en production, exécutez la commande suivante localement pour générer un fichier contenant toutes les dépendances :

$ pip freeze > requirements.txt

Cette commande remplira le fichier requirements.txt avec des modules et dépendances basés sur ceux que vous avez installés dans votre environnement de développement. Vous devez utiliser Git pour livrer et pousser ce fichier vers l’instance pour qu’il soit utilisé. Les dépendances seront installées lorsque vous déployez l’application avec SSH.

Pour plus d’informations sur le déploiement de votre application avec git+SSH, consultez le guide git.

Sélection de la version Python

Note

Cette section ne s’applique qu’aux instances Python 2.7 / 3.2.

Il est possible de choisir la version de Python que vous voulez utiliser pour exécuter votre application parmi les versions disponibles que nous offrons. Pour ce faire, vous devrez spécifier la version de Python que vous voulez utiliser dans un fichier gandi.yml à la racine de votre projet, dans le champ python :

gandi.yml

python:
  version: 3.2

L’exemple ci-dessus forcera l’utilisation de Python 3.2. Si le fichier existe mais qu’il n’y a pas de champ python, ou dans le cas où le format yaml n’est pas valide, la version par défaut sera utilisée. Si une valeur invalide est spécifiée, votre application ne démarrera pas et un message d’erreur sera affiché dans les journaux de déploiement de votre application et dans les journaux de démarrage de votre instance.

Note

Ce fichier, comme tous les autres fichiers composant votre projet, doit être suivi par Git et poussé vers votre dépôt distant Hébergement Web avant d’émettre la commande de déploiement.

Fichiers statiques

Placez tout votre contenu statique dans des répertoires nommés /static/ ou /media/, afin que le serveur HTTPD Apache puisse les récupérer.

Journaux

La sortie d’erreur standard de votre application sera écrite dans les fichiers suivants sur le disque de votre instance :

  • depuis la console SSH : /srv/data/var/log/www/uwsgi.log

  • depuis le sFTP : /lamp0/var/log/www/uwsgi.log.

Vous pouvez utiliser ces fichiers pour contrôler le bon démarrage de votre application.

Vous avez également la possibilité de configurer le logger pour qu’il réponde à vos besoins. Ajoutez un fichier appelé logging.ini à la racine du projet pour le faire.

Pour plus d’informations, voir :

  • http:​//docs.python.org/2/library/logging.config.html#configuration-file-format

  • http:​//docs.python.org/2/library/logging.html

Exemples

Exemple d’application Flask

https://github.com/crito/minitwit

Disposition des répertoires

.
└──  minitwit.py
└──  requirements.txt
└──  static/
└──  templates/
└──  wsgi.py

wsgi.py:

from minitwit import app as application

requirements.txt:

flask

Exemple Django

Disposition des répertoires

.
├── 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 activer la prise en charge des caractères spéciaux dans uwsgi, par exemple dans les noms de fichiers, ajoutez les instructions suivantes au fichier uwsgi.py :

os.environ['LC_ALL']="en_US.UTF-8"
os.environ['LC_LANG']="en_US.UTF-8"