|
10
|
1 |
# Repo pour le projet nouvelles ecritures The END |
|
|
2 |
|
|
11
|
3 |
## contenu du projet |
|
|
4 |
|
|
|
5 |
### virtualenv |
|
|
6 |
|
|
|
7 |
Ce répertoire contient toutes les ressources python utilisées pour construire les environements virtuels ([virtualenv](http://www.virtualenv.org)). |
|
13
|
8 |
Il y à la fois les distributions des librairies utilisées, ainsi que des scripts de création des environements virtuels. |
|
11
|
9 |
|
|
|
10 |
### sbin |
|
|
11 |
|
|
13
|
12 |
Contient les scripts de synchronisation et de publication. Ces script sont des script [Fabric](http://fabfile.org). |
|
11
|
13 |
|
|
|
14 |
### web |
|
|
15 |
|
|
|
16 |
Contient le contenu effectif à publier sur le serveur web. |
|
|
17 |
Il est divisé en 2 partie: |
|
|
18 |
- un répertoire "static", contenant les fichiers statiques du site. |
|
|
19 |
- un répertoire "theend" contenant la partie dynamique du site. |
|
|
20 |
|
|
|
21 |
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. |
|
|
22 |
|
|
13
|
23 |
Nous recommandont l'utilisation de serveur applicatif supportant WSGI, comme [uWSGI](http://projects.unbit.it/uwsgi/). |
|
11
|
24 |
|
|
|
25 |
|
|
|
26 |
## Procédure de déploiement: |
|
|
27 |
|
|
|
28 |
Le processus de déploiement se base sur la notion de version/tag. |
|
|
29 |
|
|
|
30 |
1- creation et activation du virtualenv ce synchronisation |
|
|
31 |
|
|
|
32 |
cd virtualenv/sync |
|
|
33 |
python create_python_env.py |
|
|
34 |
python project-boot.py <path to venv> |
|
|
35 |
source <path to venv>/bin/activate |
|
|
36 |
|
|
|
37 |
2- Creation de l'environement virtuel sur le serveur distant |
|
|
38 |
|
|
|
39 |
cd sbin/sync |
|
|
40 |
cp config.py.tmpl config.py |
|
|
41 |
vi config.py |
|
|
42 |
fab create_virtualenv:<Version> |
|
|
43 |
|
|
|
44 |
3- Synchronisation des fichiers statiques et dynamiques sur le serveur distant |
|
|
45 |
cd sbin/sync |
|
|
46 |
fab sync_web:<Version> |
|
|
47 |
|
|
13
|
48 |
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. |
|
11
|
49 |
|
|
13
|
50 |
4- Sur le serveur distant: |
|
22
|
51 |
* édition du fichier de configuration `<remote_src_path>/theend/config.py`. |
|
13
|
52 |
* configuration du serveur web |
|
|
53 |
* du process uwsgi et de leur communication. |
|
|
54 |
|
|
|
55 |
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. |
|
|
56 |
Voici un exemple de fichier de configuration `supervisor`: |
|
11
|
57 |
|
|
|
58 |
[program:theend] |
|
|
59 |
command=<path to virtualenv>/bin/uwsgi --yaml /etc/uwsgi/theend.yml |
|
22
|
60 |
directory=<path to src folder> |
|
11
|
61 |
user=www-data |
|
|
62 |
autostart=true |
|
|
63 |
autorestart=true |
|
|
64 |
redirect_stderr=true |
|
|
65 |
stopsignal=QUIT |
|
|
66 |
|
|
|
67 |
|
|
|
68 |
et voici le fichier de configuration uwsgi: |
|
|
69 |
|
|
|
70 |
uwsgi: |
|
|
71 |
master: 1 |
|
|
72 |
socket: /var/run/uwsgi/theend.sock |
|
|
73 |
virtualenv: <path to virtualenv> |
|
|
74 |
processes: 5 |
|
|
75 |
logto: /var/log/uwsgi/theend.log |
|
22
|
76 |
chdir: <path to src folder>/theend |
|
11
|
77 |
module: django_wsgi |
|
22
|
78 |
pythonpath: <path to src folder> |
|
11
|
79 |
|
|
|
80 |
On peut remarquer ici qu'on utilise les socket unix pour faire communiquer le serveur web et le serveur uwsgi. |
|
|
81 |
|
|
|
82 |
## Procédure de mise à jour |
|
|
83 |
|
|
|
84 |
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. |
|
|
85 |
|
|
13
|
86 |
À noter que la commande `update_lib` permet de mettre à jour les packages python individuellement: |
|
|
87 |
|
|
11
|
88 |
fab update_lib:<version>,<package> |
|
13
|
89 |
où package est l'un des intitulés de package contenus dans le fichier `virtualenv/web/res/res_create_env.py`. |