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

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

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
Dernière modification: le 20/03/2014 à 16:31 par William D. (Gandi)