README.md 10.1 KB
Newer Older
1
# Playbook Citoyen
Nicolas Joyard's avatar
Nicolas Joyard committed
2

Nicolas Joyard's avatar
Nicolas Joyard committed
3
Ce projet contient un playbook et des rôles ansible pour les applications de Regards Citoyens.
Nicolas Joyard's avatar
Nicolas Joyard committed
4 5 6

## Prérequis

7
Ce playbook suppose :
Nicolas Joyard's avatar
Nicolas Joyard committed
8

9 10 11
* L'utilisation de la version 2.0 (ou plus récente) d'ansible
* L'existence sur les machines cible D'un utilisateur 'rcdeploy' qui peut exécuter des commandes en `sudo` sans mot de passe.
* Pour l'activation de SSL sur les vhosts Apache, la présence d'une chaine de certificats complête et de la clé privée du serveur sur les machines distantes.
Nicolas Joyard's avatar
Nicolas Joyard committed
12

13
Les applications seront hébergées dans le répertoire `/srv`, chacune avec un utilisateur dédié, sans mot de passe.
Nicolas Joyard's avatar
Nicolas Joyard committed
14

Nicolas Joyard's avatar
Nicolas Joyard committed
15
### Vérification
Nicolas Joyard's avatar
Nicolas Joyard committed
16 17 18 19 20 21 22

Pour vérifier le fonctionnement d'ansible et la connexion aux cibles, exécuter depuis la racine de ce repository :

    ansible all --private-key=CLEPRIVEE -m ping

Ansible doit répondre avec un "ping: pong" pour chaque cible.

Nicolas Joyard's avatar
Nicolas Joyard committed
23
### Exécution
Nicolas Joyard's avatar
Nicolas Joyard committed
24 25 26

    ansible-playbook --private-key=CLEPRIVEE site.yml

27 28 29 30 31
## Groupes de serveurs

Les groupes de serveurs suivants sont définis :

* `all_servers` : contient toutes les machines ; y seront exécutés les rôles `apache`, `common` et `munin-node` ;
Nicolas Joyard's avatar
Nicolas Joyard committed
32
* `gitlab_server` : contient le serveur hébergeant gitlab ; le rôle `gitlab` y est exécuté ;
Nicolas Joyard's avatar
Nicolas Joyard committed
33
* `lfdl_server` : contient le serveur hébergeant La Fabrique de la Loi ; le rôle `lafabrique` y est exécuté ;
Nicolas Joyard's avatar
Typo  
Nicolas Joyard committed
34
* `munin_master` : contient le serveur maître Munin ; le rôle `munin-master` y est exécuté ;
35
* `piwik_server`: contient le serveur hébergeant Piwik ; le rôle `piwik` y est exécuté ;
36 37
* `pad_server` : contient le serveur hébergeant le pad ; le rôle `pad` y est exécuté ;
* `parlapi_server`: contient le serveur hébergeant ParlAPI ; le rôle `parlapi` y est exécuté.
38

Nicolas Joyard's avatar
Nicolas Joyard committed
39
*Note :* les groupes nommés `*_server` (au singulier) ainsi que `munin_master` sont normalement destinés à ne contenir qu'une machine, mais fonctionnent aussi bien avec plusieurs serveurs.
40 41 42

---

Nicolas Joyard's avatar
Nicolas Joyard committed
43 44
## Rôles applicatifs

Nicolas Joyard's avatar
Nicolas Joyard committed
45 46
Ces rôles permettent l'installation des applications créées par Regards Citoyens.

Nicolas Joyard's avatar
Nicolas Joyard committed
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
### lafabrique

*Dépend de : common, apache*

Ce rôle installe la fabrique de la loi.

*Variables :*

* `lafabrique_home` (`/srv/lafabrique`) : homedir pour l'user lafabrique
* `lafabrique_domain` (`www.lafabriquedelaloi.fr`) : domaine
* `lafabrique_api_repo` (`git://github.com/regardscitoyens/the-law-factory-parser.git`) : repo git pour l'api
* `lafabrique_api_branch` (`master`) : branche git pour l'api
* `lafabrique_www_repo` (`git://github.com/regardscitoyens/the-law-factory.git`) : repo git pour le frontend
* `lafabrique_www_branch` (`css-refactor`) : branche git pour le frontend
* `lafabrique_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas utilisé sur le vhost
Nicolas Joyard's avatar
Nicolas Joyard committed
62
* `lafabrique_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
Nicolas Joyard's avatar
Nicolas Joyard committed
63 64
* `lafabrique_ssl_key` (non défini): chemin *distant* vers la clé privée serveur pour le certificat SSL

65 66 67 68 69 70 71
#### Pour ajouter un texte manuellement

Créer le fichier de procédure (`dossier.csv`) et définir les deux variables suivantes :

* `lafabrique_ajout_texte`: référence courte du texte (ex: `pjl15-235` ou `pjl15-renseignement`)
* `lafabrique_ajout_dossier`: chemin vers le fichier de procédure à utiliser

72 73
---

Nicolas Joyard's avatar
Nicolas Joyard committed
74 75 76 77
## Rôles utilitaires

Ces rôles permettent l'installation de services tiers utilisés par Regards Citoyens ou par les applications.

Nicolas Joyard's avatar
Nicolas Joyard committed
78 79 80 81
*Variables communes :*

* `contact_email` (`contact@regardscitoyens.org`) : e-mail de contact utilisé dans plusieurs applications

82 83 84 85 86 87 88 89 90 91 92 93
### apache

Installe apache, active quelques modules utiles et désactive le site par défaut.

*Variables :*

* `apache_default_redirect` (`https://www.regardscitoyens.org/`) : redirection utilisée pour tout vhost inconnu (et le site par défaut)

### common

Installe des paquets utiles et crée un groupe commun 'rcapps'.

Nicolas Joyard's avatar
Nicolas Joyard committed
94
### gitlab
Nicolas Joyard's avatar
Nicolas Joyard committed
95

Nicolas Joyard's avatar
Nicolas Joyard committed
96
*Dépend de : apache, postgresql*
Nicolas Joyard's avatar
Nicolas Joyard committed
97

98
Installe Gitlab Community Edition et configure un reverse-proxy apache pour y accéder avec un vhost.
Nicolas Joyard's avatar
Nicolas Joyard committed
99

100 101 102
**Attention** : après la première exécution de ce rôle sur une cible, accéder immédiatement à l'interface Web de gitlab pour définir le mot de passe du compte admin.

Ce rôle permet aussi l'installation de `gitlab-ci-multi-runner`.  Pour ce faire, il faut exécuter le rôle une première fois pour installer Gitlab, accéder à l'administration via l'interface web pour obtenir le token de connexion, puis exécuter à nouveau le rôle en définissant la variable `gitlab_ci_token`.
Nicolas Joyard's avatar
Nicolas Joyard committed
103 104 105

*Variables :*

Nicolas Joyard's avatar
Nicolas Joyard committed
106 107 108 109 110
* `gitlab_port` (`8181`) : port d'écoute local (interface loopback uniquement)
* `gitlab_domain` (`git.regardscitoyens.org`) : domaine
* `gitlab_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas activé sur le vhost
* `gitlab_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
* `gitlab_ssl_key` (non défini) : chemin *distant* vers la clé privée serveur pour le certificat SSL
111 112 113 114
* `gitlab_storage` (`/var/lib/git`) : chemin de stockage des dépôts Git
* `gitlab_ci_token` (non défini) : token de connexion des runners CI
* `gitlab_ci_build_dir` (`/var/lib/gitlab-ci/build`) : chemin de stockage des builds gitlab-ci
* `gitlab_ci_cache_dir` (`/var/cache/gitlab-ci/build`) : chemin de stockage du cache des builds gitlab-ci
Nicolas Joyard's avatar
Nicolas Joyard committed
115

116 117 118 119 120 121 122
### munin-master

Installe munin et le configure pour récupérer les informations de tous les serveurs ayant le rôle munin-node ; met en place un vhost apache pour accéder aux logs.  Si SSL est activé, l'accès aux stats est protégé par authentification HTTP Basic.

*Variables :*

* `munin_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas activé sur le vhost
Nicolas Joyard's avatar
Nicolas Joyard committed
123
* `munin_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
124 125
* `munin_ssl_key` (non défini) : chemin *distant* vers la clé privée serveur pour le certificat SSL
* `munin_domain` (`munin.regardscitoyens.org`) : domaine pour le vhost munin
126 127
* `munin_htpassword` (non défini) : doit être défini lors de la première exécution du rôle avec SSL actif ; définit le mot de passe de l'user rcmunin pour l'authentification HTTP
* `munin_nodes` (non défini) : permet de spécifier des noeuds monitorés qui ne sont pas dans l'inventory (tous les serveurs dans le groupe `all_servers` sont automatiquement monitorés) ; voir `roles/munin-master/default/main.yml` pour plus de détails
128 129 130 131 132

### munin-node

Installe munin-node et autorise les serveurs ayant le rôle munin-master à y accéder.

Nicolas Joyard's avatar
Nicolas Joyard committed
133 134
### pad

135
*Dépend de : mariadb*
Nicolas Joyard's avatar
Nicolas Joyard committed
136 137 138 139 140

Installe etherpad-lite et configure un reverse-proxy apache pour y accéder avec un vhost ; permet aussi d'importer les données depuis un etherpad (scala).

*Variables :*

Nicolas Joyard's avatar
Nicolas Joyard committed
141
* `etherpad_title` (`Pad Regards Citoyens`) : titre du pad
Nicolas Joyard's avatar
Nicolas Joyard committed
142 143
* `etherpad_home` (`/srv/etherpad`) : homedir pour l'user etherpad
* `etherpad_port` (`9001`) : port d'écoute local (interface loopback uniquement)
Nicolas Joyard's avatar
Nicolas Joyard committed
144
* `etherpad_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas activé sur le vhost
Nicolas Joyard's avatar
Nicolas Joyard committed
145
* `etherpad_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
Nicolas Joyard's avatar
Nicolas Joyard committed
146
* `etherpad_ssl_key` (non défini) : chemin *distant* vers la clé privée serveur pour le certificat SSL
Nicolas Joyard's avatar
Nicolas Joyard committed
147 148 149 150 151 152
* `etherpad_domain` (`pad.regardscitoyens.org`) : domaine du pad
* `etherpad_db_name` (`etherpad`) : nom de la BDD mysql
* `etherpad_db_user` (`etherpad`) : nom de l'user mysql
* `etherpad_db_pass` (`etherpad`) : mot de passe mysql
* `etherpad_import` (non défini) : chemin vers un fichier de données à importer ; il doit s'agit d'un dump SQL compressé en XZ. **Attention, toute donnée existante sera écrasée de manière irréversible si cette variable est définie.**

153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
### parlapi

*Dépend de : postgresql*

*Variables :*

* `parlapi_repo` (`git://github.com/regardscitoyens/parlapi.git`) : repository GIT à utiliser
* `parlapi_branch` (`master`) : branche GIT à utiliser
* `parlapi_home` (`/srv/parlapi`) : homedir pour l'user parlapi
* `parlapi_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas activé sur le vhost
* `parlapi_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
* `parlapi_ssl_key` (non défini) : chemin *distant* vers la clé privée serveur pour le certificat SSL
* `parlapi_domain` (`www.parlapi.fr`) : domaine
* `parlapi_db_name` (`parlapi`) : nom de la BDD mysql
* `parlapi_db_user` (`parlapi`) : nom de l'user mysql
* `parlapi_db_pass` (`parlapi`) : mot de passe mysql

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
### piwik

*Dépend de : mariadb, php*

Installe piwik et configure un reverse-proxy apache pour y accéder avec un vhost.

*Variables :*

* `piwik_url` (`http://builds.piwik.org/piwik.zip`) : URL de l'archive ZIP de la release piwik à installer.
* `piwik_home` (`/srv/piwik`) : homedir pour l'user piwik
* `piwik_ssl_cert` (non défini) : chemin *distant* vers le certificat SSL à utiliser ; s'il est indéfini, SSL ne sera pas activé sur le vhost
* `piwik_ssl_chain` (non défini) : chemin *distant* vers la chaine de certificats à utiliser
* `piwik_ssl_key` (non défini) : chemin *distant* vers la clé privée serveur pour le certificat SSL
* `piwik_domain` (`stats.regardscitoyens.org`) : domaine du pad
* `piwik_db_name` (`piwik`) : nom de la BDD mysql
* `piwik_db_user` (`piwik`) : nom de l'user mysql
* `piwik_db_pass` (`piwik`) : mot de passe mysql

188
---
Nicolas Joyard's avatar
Nicolas Joyard committed
189

190
## Rôles techniques
Nicolas Joyard's avatar
Nicolas Joyard committed
191

192
Ces rôles sont destinés à être utilisés comme dépendance d'un autre rôle.
Nicolas Joyard's avatar
Nicolas Joyard committed
193

Nicolas Joyard's avatar
Nicolas Joyard committed
194 195 196 197 198 199 200 201 202 203 204
### go

Installe go depuis la distribution binaire officielle.

*Variables :*

* `go_tgz` (`go1.6.linux-amd64.tar.gz`) : nom de l'archive tgz à télécharger
* `go_url` (`https://storage.googleapis.com/golang/{{ go_tgz }}`) : URL de l'archive tgz à télécharger
* `go_home` (`/root`) : chemin où télécharger (temporairement) l'archive
* `go_version_target` (`go version go1.6 linux/amd64`) : version attendue de go ; si `go version` renvoie autre chose, l'archive téléchargée sera installée.

Nicolas Joyard's avatar
Nicolas Joyard committed
205 206 207
### mariadb

Installe mariadb.
208 209 210 211

### php

Installe PHP ainsi que les extensions `gd`, `geoip` et `mysql-nd`.
212 213 214 215

### postgresql

Installe PostgreSQL