README.markdown
author ymh <ymh.work@gmail.com>
Thu, 30 Aug 2012 18:36:02 +0200
changeset 12 142528c37705
parent 11 1f90796f6106
parent 10 c2c1a3b30a17
child 13 cd3db02046b1
permissions -rw-r--r--
Merge with c2c1a3b30a1745cbc2d38d12d59827585f2e702c

# Repo pour le projet nouvelles ecritures The END

## contenu du projet

### virtualenv

Ce répertoire contient toutes les ressources python utilisées pour construire les environements virtuels ([virtualenv](http://www.virtualenv.org)).
Il y a à la fois les distributions des librairies utilisées, ainsi que des script de création des environerments virtuels.

### sbin

Contient les script de synchronisation et de publication. Ces script sont des script [Fabric](http://fabfile.org)

### web

Contient le contenu effectif à publier sur le serveur web.
Il est divisé en 2 partie:
  - un répertoire "static", contenant les fichiers statiques du site.
  - un répertoire "theend" contenant la partie dynamique du site.

Le répertoire statique doit être servi par un serveur web classique (apache, nginx,...). Le répertoire dynamique doit être servi par un serveur applicatif python.

Nous recommandont l'utilisation de serveur applicatif supprtant WSGI, comme [uWSGI](http://projects.unbit.it/uwsgi/).


## Procédure de déploiement:

Le processus de déploiement se base sur la notion de version/tag.

1- creation et activation du virtualenv ce synchronisation
    
    cd virtualenv/sync
    python create_python_env.py
    python project-boot.py <path to venv>
    source <path to venv>/bin/activate

2- Creation de l'environement virtuel sur le serveur distant

    cd sbin/sync
    cp config.py.tmpl config.py
    vi config.py
    fab create_virtualenv:<Version>

3- Synchronisation des fichiers statiques et dynamiques sur le serveur distant
    cd sbin/sync
    fab sync_web:<Version>

Cette commande va créer une fichier de configuration minimal sur le serveur web à partir des informations renseigné dans le fichier config.py de l'étape précédente.

4- Sur le serveur distant, édition du fichier de configuration `<remote_web_path>/theend/config.py`.
configuration du serveur web, du process uwsgi et de leur communication. Il est recommander d'avoir un outils de monitoring pour surveiller l'instance uwsgi. [supervisor](http://supervisord.org/) est un bon candidat pour ce role.
Voici un exemple de fichier de configuration:

    [program:theend]
    command=<path to virtualenv>/bin/uwsgi --yaml /etc/uwsgi/theend.yml
    directory=<path to web folder>
    user=www-data
    autostart=true
    autorestart=true
    redirect_stderr=true
    stopsignal=QUIT


et voici le fichier de configuration uwsgi:

    uwsgi:
      master: 1
      socket: /var/run/uwsgi/theend.sock
      virtualenv: <path to virtualenv>
      processes: 5
      logto: /var/log/uwsgi/theend.log
      chdir: <path to web folder>/theend
      module: django_wsgi
      pythonpath: <path to web folder>

On peut remarquer ici qu'on utilise les socket unix pour faire communiquer le serveur web et le serveur uwsgi.

## Procédure de mise à jour

La mise à jour du site se fait ensuite par la commande `sync_web` du script de synchronisation pour des changement dans la partie web et `create_virtualenv` pour les changements de resource python.

À noter que le commande `update_lib` permet de mettre à jour les packages python individuellement:
    fab update_lib:<version>,<package>
où package est l'un des intitulé de package contenu dans le fichier `virtualenv/web/res/res_create_env.py`.