# 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 à la fois les distributions des librairies utilisées, ainsi que des scripts de création des environements virtuels.
### sbin
Contient les scripts 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 supportant 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 un fichier de configuration minimal sur le serveur web à partir des informations renseignées dans le fichier config.py de l'étape précédente.
4- Sur le serveur distant:
* édition du fichier de configuration `<remote_src_path>/theend/config.py`.
* configuration du serveur web
* du process uwsgi et de leur communication.
Il est recommandé d'avoir un outil 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 `supervisor`:
[program:theend]
command=<path to virtualenv>/bin/uwsgi --yaml /etc/uwsgi/theend.yml
directory=<path to src 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 src folder>/theend
module: django_wsgi
pythonpath: <path to src 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 la commande `update_lib` permet de mettre à jour les packages python individuellement:
fab update_lib:<version>,<package>
où package est l'un des intitulés de package contenus dans le fichier `virtualenv/web/res/res_create_env.py`.