From 6bba445e131aed4e341c0beada053a70ffd2a0f8 Mon Sep 17 00:00:00 2001 From: Christophe Siraut Date: Tue, 19 Dec 2017 11:37:32 +0100 Subject: [PATCH] split documentation for inclusion in Combo --- exploitation-1.md | 6 + exploitation-2.md | 52 ++ exploitation-3.md | 46 ++ exploitation-4.md | 60 +++ exploitation-5.md | 15 + exploitation.md | 256 --------- installation-1.md | 5 + installation-2.md | 74 +++ installation-3.md | 98 ++++ installation-4.md | 92 ++++ installation-5.md | 558 ++++++++++++++++++++ installation-6.md | 202 +++++++ installation-7.md | 193 +++++++ installation.md | 1272 --------------------------------------------- 14 files changed, 1401 insertions(+), 1528 deletions(-) create mode 100644 exploitation-1.md create mode 100644 exploitation-2.md create mode 100644 exploitation-3.md create mode 100644 exploitation-4.md create mode 100644 exploitation-5.md delete mode 100644 exploitation.md create mode 100644 installation-1.md create mode 100644 installation-2.md create mode 100644 installation-3.md create mode 100644 installation-4.md create mode 100644 installation-5.md create mode 100644 installation-6.md create mode 100644 installation-7.md delete mode 100644 installation.md diff --git a/exploitation-1.md b/exploitation-1.md new file mode 100644 index 0000000..6c95eaa --- /dev/null +++ b/exploitation-1.md @@ -0,0 +1,6 @@ +Notice d’exploitation +===================== + +Ce document constitue la notice l’exploitation d’un système Publik +standard. Des adaptations sont naturellement à envisager en fonction des +besoins particuliers. diff --git a/exploitation-2.md b/exploitation-2.md new file mode 100644 index 0000000..46dccb9 --- /dev/null +++ b/exploitation-2.md @@ -0,0 +1,52 @@ +# Pilotage + +## Pilotage du frontal HTTP + +C'est le service Nginx qui gère les requêtes HTTP, son pilotage se fait +de façon classique : + + # service nginx stop + + # service nginx start + + # service nginx restart + +À noter que lorsqu'un service Publik est coupé, Nginx renvoie des +erreurs *502 Bad Gateway*. HAProxy réagit alors en tentant la requête +sur l'autre machine. Si l'autre répond aussi 502, HAProxy peut afficher +un message de maintenance. + +### Pilotage des services de Publik + +Tous les services sont pilotables avec le système *service* fourni par +Debian. + +Liste des services Publik en place : + +- *hobo* : système de déploiement et de provisionning +- *authentic2-multitenant* : gestion d'identité et websso +- *combo* : CMS des portails usager et agent +- *wcs* : moteur de démarches (formulaires et workflows) +- *passerelle* : hub de webservices +- *fargo* : porte-document +- *supervisor* (cas particulier pour le pilotage de hobo-agent, + sous-service hobo qui sera bientôt piloté directement par systemd) + +Pour exemple, pilotage du service combo (portails) : + + # service combo stop + + # service combo start + + # service combo restart + +S'agissant d'une installation dual, ces actions doivent être effectuées +sur les deux machines. + +Attention : si un service de Publik est démarré ou redémarré alors que +PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il +faudra redemander le démarrage explicitement. + +Note: la migration de tous les composants de Publik vers systemd est en +cours et sera terminé avant fin 2017. + diff --git a/exploitation-3.md b/exploitation-3.md new file mode 100644 index 0000000..18deb5f --- /dev/null +++ b/exploitation-3.md @@ -0,0 +1,46 @@ +# Journal des événements (logs) + +L’historique des événements applicatifs est accessible via l'outil +*journalctl*. Par exemple pour suivre les événements de combo : + + # journalctl -fu combo + +Pour suivre l'ensemble des composants : + + # journalctl -f -u combo -u authentic2-multitenant -u wcs -u fargo -u +hobo -u supervisor + +Les logs HTTP sont ceux de nginx, fichiers textes rangés par service +dans */var/log/nginx :* + + /var/log/nginx/authentic2-multitenant-access.log + + /var/log/nginx/authentic2-multitenant-error.log + + /var/log/nginx/bijoe-access.log + + /var/log/nginx/bijoe-error.log + + /var/log/nginx/combo-access.log + + /var/log/nginx/combo-error.log + + /var/log/nginx/fargo-access.log + + /var/log/nginx/fargo-error.log + + /var/log/nginx/hobo-access.log + + /var/log/nginx/hobo-error.log + + /var/log/nginx/passerelle-access.log + + /var/log/nginx/passerelle-error.log + + /var/log/nginx/wcs-access.log + + /var/log/nginx/wcs-error.log + +Exemple pour suivre ce qui concerne combo : + + # tail -f /var/log/nginx/combo-\*.log diff --git a/exploitation-4.md b/exploitation-4.md new file mode 100644 index 0000000..a1ebd6b --- /dev/null +++ b/exploitation-4.md @@ -0,0 +1,60 @@ +# Mises-à-jour des composants + +## Fréquence des mises-à-jour + +Entr'ouvert livre une nouvelle version de Publik les soirs des 2ème et +4ème jeudi de chaque mois. L'installation peut être faite aussitôt, mais +nous conseillons à des hébergeurs tiers non infogérés par Entr'ouvert de +faire la mise à jour le mardi suivant. + +La mise à jour provoque une courte indisponibilité du système : elle +doit être faite sur des heures de faible affluence. Pour information, +Entr'ouvert effectue ces mises à jour autour de 22 ou 23h le jeudi soir, +en attendant une baisse de la fréquentation visible dans les logs nginx. + +## Déroulé en installation double (load-balancing) + +S'agissant d'une installation double (load-balancing entre web1 et +web2), la procédure générale à suivre est : + +1. arrêt du frontal nginx sur web2 ⇒ HAProxy envoie tout sur web1, +2. vérifier que PostgreSQL est bien fonctionnel, +3. mise à jour de web1 (procédure ci-dessous), +4. vérification du fonctionnement du site (parcours de 3 ou 4 URLs), +5. mise à jour de web2, +6. relance du frontal nginx sur web2, +7. vérification du fonctionnement du site (parcours de 3 ou 4 URLs). + +Attention : si un service de Publik est redémarré alors que PostgreSQL +n'est pas disponible, ce démarrage ne fonctionnera pas. Il faudra +redemander le démarrage explicitement. Ceci signifie qu'il est très +fortement conseillé de faire la mise à jour de Publik indépendamment de +celle de PostgreSQL. Entr'ouvert conseille de faire la mise à jour de +PostgreSQL **avant** les composants de Publik. + +Les composants de Publik sont livrés sous forme de paquet Debian, leur +mise à jour suit la procédure classique : + + # apt update + # apt upgrade + +Il est cependant possible qu'une nouvelle version demande l'installation +d'une nouvelle dépendance, dans ce cas « *apt upgrade* » refusera la +mise à jour et il faudra la forcer par : + + # apt full-upgrade + +En cas de doute, contacter + +## Mise à jour PostgreSQL + +La mise à jour de PostgreSQL peut être faite à chaud selon les +procédures Debian normales. Durant la mise à jour, les services ne +fonctionneront pas (réponses 5xx) et HAProxy délivrera une erreur « +maintenance ». Dès le redémarrage de PostgreSQL, les services Publik +rétabliront les connexions vers le serveur SQL et le système sera à +nouveau utilisable. + +Attention : si un service de Publik est démarré ou redémarré alors que +PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il +faudra redemander le démarrage explicitement. diff --git a/exploitation-5.md b/exploitation-5.md new file mode 100644 index 0000000..c49a6a6 --- /dev/null +++ b/exploitation-5.md @@ -0,0 +1,15 @@ +# Support + +Les moyens de contact pour le support sont : + +- l'extranet projet avec le gestionnaire de demandes (accès réservé) : + [https://dev.entrouvert.org/projects/ma](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[c](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[ollectivite](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[/issues](https://dev.entrouvert.org/projects/nanterre-rsu/issues), +- la liste de discussion projet (abonnements sur demande) : + [ma](mailto:nanterre-rsu@listes.entrouvert.com)[collectivite](mailto:nanterre-rsu@listes.entrouvert.com)[@listes.entrouvert.com](mailto:nanterre-rsu@listes.entrouvert.com), +- le courriel spécifique support pour macollectivite (génère + automatiquement une demande) : + [support-ma](mailto:support-nanterre-rsu@entrouvert.com)[collectivite](mailto:support-nanterre-rsu@entrouvert.com)[@entrouvert.com](mailto:support-nanterre-rsu@entrouvert.com), +- le courriel support générique d'Entr'ouvert : + . + + diff --git a/exploitation.md b/exploitation.md deleted file mode 100644 index 7950928..0000000 --- a/exploitation.md +++ /dev/null @@ -1,256 +0,0 @@ -Notice d’exploitation -===================== - -Ce document constitue la notice l’exploitation d’un système Publik -standard. Des adaptations sont naturellement à envisager en fonction des -besoins particuliers. - -Rappels -------- - -Vous trouverez une documentation complète et spécifique à l’architecture -et à l’installation de Publik dans les documents intitulés : *Publik – -Architecture technique* et *Publik – Installation*. Les notes qui -suivent en donnent un aperçu. - -### Architecture - -Une infrastructure type de Publik est composée des machines suivantes : - -- un service frontal de répartition de charge (*proxy),* -- deux serveurs d'application (*web1* et *web2),* -- un serveur de base de données *sql* (Postgres), -- un serveur de fichier (partage NFS). - -Une requête Publik chemine par les services suivants : - -- proxy : - - - reçoit la requête et la transmet vers un serveur d’application, - - est en charge de la terminaison SSL (et dispose de certificat - qui couvre l'ensemble des systèmes), - - est en charge de la répartition de la charge et la la tolérance - aux pannes - -- web1 et web2 : - - - ont des installations identiques au niveau logiciel, - - disposent des composants Publik, - - interrogent la base de donnée et transfèrent les fichiers en - fonction des niveaux d’accès des utilisateurs. - -- Postgres - - - enregistre et restitue les données des applications, - - il est courant d’utiliser une installation à deux machines - identiques avec une réplication de type master/slave. - -- NFS - - - fournit l’interface de stockage pour les fichiers partagés. - -Liste des modules applicatifs potentiels de Publik : - -- Authentic : gestion des identités, IdP (*identity provider*), -- Combo : CMS pour portails usager et agent (porte d’entrée de - Publik), -- w.c.s. : formulaires et workflows, -- Passerelle : connecteurs vers systèmes tiers, -- Fargo : porte-documents, -- Corbo : diffusion de messages, -- Chrono : prise de rendez-vous, -- Welco : interface de saisie (multi-canal), -- Hobo : système de déploiement et de provisionning, -- Bijoe : élaboration et production de rapports statistiques, -- Chrono : gestion d'inscriptions et rendez-vous - -### Structure d’une brique - -Une brique Entrouvert est un paquet Debian standard issu d’un module -Python standard. C’est un logiciel libres dont vous pouvez obtenir et -modifier les sources selon vos besoins. Les fichiers d’installation sont -posés dans /var/lib/mabrique, et les fichiers de configuration sont -placés dans /etc/mabrique. Les services et les journaux des briques sont -pilotés par systemd. - -Pour certaines briques nous créons un lien symbolique depuis -/var/lib/mabrique/documents vers un montage NFS. - -Notice d'exploitation ---------------------- - -### Pilotage du frontal HTTP - -C'est le service Nginx qui gère les requêtes HTTP, son pilotage se fait -de façon classique : - -\# service nginx stop - -\# service nginx start - -\# service nginx restart - -À noter que lorsqu'un service Publik est coupé, Nginx renvoie des -erreurs *502 Bad Gateway*. HAProxy réagit alors en tentant la requête -sur l'autre machine. Si l'autre répond aussi 502, HAProxy peut afficher -un message de maintenance. - -### Pilotage des services de Publik - -Tous les services sont pilotables avec le système *service* fourni par -Debian. - -Liste des services Publik en place : - -- *hobo* : système de déploiement et de provisionning -- *authentic2-multitenant* : gestion d'identité et websso -- *combo* : CMS des portails usager et agent -- *wcs* : moteur de démarches (formulaires et workflows) -- *passerelle* : hub de webservices -- *fargo* : porte-document -- *supervisor* (cas particulier pour le pilotage de hobo-agent, - sous-service hobo qui sera bientôt piloté directement par systemd) - -Pour exemple, pilotage du service combo (portails) : - -\# service combo stop - -\# service combo start - -\# service combo restart - -S'agissant d'une installation dual, ces actions doivent être effectuées -sur les deux machines. - -Attention : si un service de Publik est démarré ou redémarré alors que -PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il -faudra redemander le démarrage explicitement. - -Note: la migration de tous les composants de Publik vers systemd est en -cours et sera terminé avant fin 2017. - -### Journaux des événements (logs) - -L’historique des événements applicatifs est accessible via l'outil -*journalctl*. Par exemple pour suivre les événements de combo : - -\# journalctl -fu combo - -Pour suivre l'ensemble des composants : - -\# journalctl -f -u combo -u authentic2-multitenant -u wcs -u fargo -u -hobo -u supervisor - -Les logs HTTP sont ceux de nginx, fichiers textes rangés par service -dans */var/log/nginx :* - -/var/log/nginx/authentic2-multitenant-access.log - -/var/log/nginx/authentic2-multitenant-error.log - -/var/log/nginx/bijoe-access.log - -/var/log/nginx/bijoe-error.log - -/var/log/nginx/combo-access.log - -/var/log/nginx/combo-error.log - -/var/log/nginx/fargo-access.log - -/var/log/nginx/fargo-error.log - -/var/log/nginx/hobo-access.log - -/var/log/nginx/hobo-error.log - -/var/log/nginx/passerelle-access.log - -/var/log/nginx/passerelle-error.log - -/var/log/nginx/wcs-access.log - -/var/log/nginx/wcs-error.log - -Exemple pour suivre ce qui concerne combo : - -\# tail -f /var/log/nginx/combo-\*.log - -### Mise à jour des composants - -#### Fréquence de mise à jour - -Entr'ouvert livre une nouvelle version de Publik les soirs des 2ème et -4ème jeudi de chaque mois. L'installation peut être faite aussitôt, mais -nous conseillons à des hébergeurs tiers non infogérés par Entr'ouvert de -faire la mise à jour le mardi suivant. - -La mise à jour provoque une courte indisponibilité du système : elle -doit être faite sur des heures de faible affluence. Pour information, -Entr'ouvert effectue ces mises à jour autour de 22 ou 23h le jeudi soir, -en attendant une baisse de la fréquentation visible dans les logs nginx. - -#### Déroulé en installation double (load-balancing) - -S'agissant d'une installation double (load-balancing entre web1 et -web2), la procédure générale à suivre est : - -1. arrêt du frontal nginx sur web2 ⇒ HAProxy envoie tout sur web1, -2. vérifier que PostgreSQL est bien fonctionnel, -3. mise à jour de web1 (procédure ci-dessous), -4. vérification du fonctionnement du site (parcours de 3 ou 4 URLs), -5. mise à jour de web2, -6. relance du frontal nginx sur web2, -7. vérification du fonctionnement du site (parcours de 3 ou 4 URLs). - -Attention : si un service de Publik est redémarré alors que PostgreSQL -n'est pas disponible, ce démarrage ne fonctionnera pas. Il faudra -redemander le démarrage explicitement. Ceci signifie qu'il est très -fortement conseillé de faire la mise à jour de Publik indépendamment de -celle de PostgreSQL. Entr'ouvert conseille de faire la mise à jour de -PostgreSQL **avant** les composants de Publik. - -Les composants de Publik sont livrés sous forme de paquet Debian, leur -mise à jour suit la procédure classique : - -\# apt update - -\# apt upgrade - -Il est cependant possible qu'une nouvelle version demande l'installation -d'une nouvelle dépendance, dans ce cas « *apt upgrade* » refusera la -mise à jour et il faudra la forcer par : - -\# apt full-upgrade - -En cas de doute, contacter - -### Mise à jour PostgreSQL - -La mise à jour de PostgreSQL peut être faite à chaud selon les -procédures Debian normales. Durant la mise à jour, les services ne -fonctionneront pas (réponses 5xx) et HAProxy délivrera une erreur « -maintenance ». Dès le redémarrage de PostgreSQL, les services Publik -rétabliront les connexions vers le serveur SQL et le système sera à -nouveau utilisable. - -Attention : si un service de Publik est démarré ou redémarré alors que -PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il -faudra redemander le démarrage explicitement. - -Support -------- - -Les moyens de contact pour le support sont : - -- l'extranet projet avec le gestionnaire de demandes (accès réservé) : - [https://dev.entrouvert.org/projects/ma](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[c](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[ollectivite](https://dev.entrouvert.org/projects/nanterre-rsu/issues)[/issues](https://dev.entrouvert.org/projects/nanterre-rsu/issues), -- la liste de discussion projet (abonnements sur demande) : - [ma](mailto:nanterre-rsu@listes.entrouvert.com)[collectivite](mailto:nanterre-rsu@listes.entrouvert.com)[@listes.entrouvert.com](mailto:nanterre-rsu@listes.entrouvert.com), -- le courriel spécifique support pour macollectivite (génère - automatiquement une demande) : - [support-ma](mailto:support-nanterre-rsu@entrouvert.com)[collectivite](mailto:support-nanterre-rsu@entrouvert.com)[@entrouvert.com](mailto:support-nanterre-rsu@entrouvert.com), -- le courriel support générique d'Entr'ouvert : - . - - diff --git a/installation-1.md b/installation-1.md new file mode 100644 index 0000000..48b1b25 --- /dev/null +++ b/installation-1.md @@ -0,0 +1,5 @@ +# Procédure d’installation + +Ce document présente installation d’un système Publik standard. Des +adaptations sont naturellement à envisager en fonction des besoins +particuliers. diff --git a/installation-2.md b/installation-2.md new file mode 100644 index 0000000..8d3a4e9 --- /dev/null +++ b/installation-2.md @@ -0,0 +1,74 @@ +# Pré-requis + +## Résolution de noms + +Avant l'installation de Publik il faut vérifier que les enregistrements +DNS sont fonctionnels; Publik nécessite autant de domaines que de +composants. + +Typiquement : + +- portail usager (composant combo) : + moncompte.macollectivite.fr, +- portail agents (composant combo) : + agents-moncompte.macollectivite.fr, +- démarches (composant wcs/wcs-au-quotidien) : + demarches-moncompte.macollectivite.fr, +- fournisseur d'identités (composant authentic) : + connexion-moncompte.macollectivite.fr, +- hub de webservice (composant passerelle) : + passerelle-moncompte.macollectivite.fr, +- porte document (composant fargo) : + portedoc-moncompte.macollectivite.fr, + +Par exemple voici à quoi pourraient ressembler les entrées d'un serveur Bind: + + publik A a.b.c.d ; addresse IP de «publik» + portail CNAME publik ; portail usage (brique: combo) + backoffice CNAME publik ; portail agent (brique: combo) + connexion CNAME publik ; fournisseur d'identités (brique: authentic) + demarches CNAME publik ; téléservices (brique: wcs) + passerelle CNAME publik ; hub de webservices (brique: passerelle) + hobo CNAME publik ; système de déploiement (brique: hobo) + +Toutes ces entrées DNS doivent pointer vers le proxy de répartition de charge +(dans le cas d'une installation avec répartition de charge). + +Par ailleurs, les serveurs applicatifs doivent impérativement avoir un +fichier */etc/hosts* consistant. + +## Certificat X509 + +Publik ne fonctionne qu'en mode HTTPS. + +Un ou plusieurs certificats x509 valides et reconnus doivent être disponibles qui couvrent tous les noms des briques qui seront installées. +Dans la suite de la documentation, un certificat est disponible : + + * clé publique certifiée : /etc/ssl/certs/cert-example.pem + * clé privée : /etc/ssl/private/cert-example.key + +HAProxy doit disposer du ou des certificats X509 valides pour chacun de +ces domaines ; les certificats doivent être reconnus par des autorités +publiques. (L’utilisation de certificats Letsencrypt est possible) + +## Horloges synchronisées + +Il est **indispensable** que les machines soient exactement à la même +heure. Les systèmes récent utilisent *systemd-timesyncd *par défaut. +*Ntp* est également possible. + +## Envois des emails + +Les serveurs applicatifs doivent disposer d'un MTA local (par exemple +*exim4-daemon-light*) avec le port SMTP ouvert et capable d'expédier des mails +vers tout Internet, en passant éventuellement par un relais. Les mails seront +envoyés avec le domaine « @macollectivite.fr ». Nous recommandons +vivement de les relayer via un smarthost officiel de votre réseau. + +## Configuration de la localisation + +Sur toutes les machines il est nécessaire de reconfigurer *locales* pour +*fr_FR.UTF-8* : + + dpkg-reconfigure locales + diff --git a/installation-3.md b/installation-3.md new file mode 100644 index 0000000..dec3636 --- /dev/null +++ b/installation-3.md @@ -0,0 +1,98 @@ +# Configuration des dépôts logiciels + +## Vue générale + +Les différents composants logiciels utilisés par Publik proviennent, par +ordre de préférence : + +- de la distribution Debian GNU/Linux stable +- des *backports* officiels Debian, disposant du suivi de sécurité par + l’équipe Debian, +- des paquets Debian fournis et maintenus par les projets *upstream,* +- de paquets Debian maintenus par Entr’ouvert qui en assure le suivi + de sécurité. + +## Configuration des dépôts logiciels + +Les machines doivent disposer des dépôts **jessie** et +**jessie-backports**. + +Ajoutons aussi les dépôts Entr'ouvert et RabbitMQ par la création de +*/etc/apt/sources.list.d/eo-prod.list :* + + deb http://deb.entrouvert.org/ jessie main + deb http://www.rabbitmq.com/debian/ testing main + +Ajoutons les clés correspondantes : + + wget -O- https://deb.entrouvert.org/entrouvert.gpg | apt-key add - + wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | apt-key add - + apt update + +Pricisons les paquets qu'on veut tirer de jessie-backports en éditant +*/etc/apt/preferences.d/backports :* + + Package: python-django + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-django-common + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: gunicorn + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-pyasn1 + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-requests + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-urllib3 + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-cryptography + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-ndg-httpsclient + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-openssl + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-jwcrypto + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-setuptools + Pin: release a=jessie-backports + Pin-Priority: 900 + + Package: python-pkg-resources + Pin: release a=jessie-backports + Pin-Priority: 900 + +## Installation des paquets de base + +Outillage utile pour l'installation et plus tard pour le support et la +maintenance : + + apt install postgresql-client # pour création utilisateurs et bases de données dans postgresql + apt install bsd-mailx # pour test de l'envoi de mails + apt install zip # pour la création du squelette de site w.c.s. + apt install curl wget # pour les tests/debug locaux + apt install ipython ltrace strace psmisc tcpdump tshark locate # pour des debug applicatifs + apt install ca-certificates-entrouvert # connexion au LDAP EO + +Composants additionnels nécessaires pour les applications : + + apt install libreoffice # pour génération de documents dans wcs + apt install publik-base-theme # système de thème diff --git a/installation-4.md b/installation-4.md new file mode 100644 index 0000000..d872674 --- /dev/null +++ b/installation-4.md @@ -0,0 +1,92 @@ +# Création des bases de données + +## Vue générale + +Chaque brique utilise une ou plusieurs bases de données PostgreSQL. Il +est courant d’utiliser une installation à deux machines identiques en +master/slave. Publik peut utiliser un système PostgreSQL existant, le +cas échéant. Publik nécessite PostgreSQL en version 9 (>9.4 recommandée). + +## Pré-requis : extensions PostgreSQL + +Vérifier que les extensions PostgreSQL sont bien activées : + + apt install postgresql-contrib + +## Création des bases + +Chaque composant Publik doit disposer : + +- d'une base de données dédiée, +- d'un accès spécifique à cette base via un usager postgreSQL dédié + (avec un mot de passe SQL à créer pour chaque composant). + +Principe pour le composant *combo :* + + CREATE USER combo PASSWORD 'indiquer-ici-le-mot-de-passe-pour-combo'; + + CREATE DATABASE combo WITH OWNER = combo TEMPLATE = template0 LC_COLLATE = 'fr_FR.UTF_8' LC_CTYPE = 'fr_FR.UTF-8'; + +Remarque : template0 et LC_COLLATE et LC_CTYPE nécessaires parce que +template1 est en en_US.UTF-8. + +La même opération doit être répétée pour chaque brique logicielle (bien +sûr à chaque fois il faut **noter le mot de passe** choisi, il sera +nécessaire par la suite) : + +- Combo +- Hobo +- Authentic +- Passerelle +- Fargo +- Bijoe +- Chrono +- Corbo +- Mandayejs +- Welco + +Une brique est spécifique : w.c.s.. Pour w.c.s., il n'y a pas besoin de +création d'une base, elle sera effectuée lors de l'instanciation. En +revanche, l'utilisateur w.c.s. sur PostgreSQL doit avoir le droit +CREATEDB, donc : + +*CREATE USER wcs PASSWORD 'indiquer-ici-le-mot-de-passe-pour-wcs' +CREATEDB;* + +## Création des utilisateurs avec UID identiques sur web1 et web2 + +Comme des fichiers vont être partagés en NFSv3, il faut que les UID des +utilisateurs Unix concernés soient les mêmes sur les deux machines web1 +et web2. + +Voici un script pour faire cela sur web1 et web2 : + + #!/bin/sh + + uid=2100 + + for user in hobo authentic-multitenant wcs wcs-au-quotidien passerelle combo fargo welco chrono corbo bijoe mandayejs + do + echo "create group $user ($uid)" + addgroup --system --gid $uid $user + echo "create user $user ($uid)" + adduser --disabled-password --system --uid $uid --gecos "$user daemon" --ingroup $user --no-create-home --home /var/lib/$user $user uid=$(($uid+1)) + done + +Résultat dans /etc/passwd: + + hobo:x:2101:2101:hobo daemon,,,:/var/lib/hobo:/bin/false + authentic-multitenant:x:2102:2102:authentic2-multitenant + daemon,,,:/var/lib/authentic2-multitenant:/bin/false + wcs:x:2103:2103:wcs daemon,,,:/var/lib/wcs:/bin/false + wcs-au-quotidien:x:2104:2104:wcs-au-quotidien + daemon,,,:/var/lib/wcs-au-quotidien:/bin/false + passerelle:x:2105:2105:passerelle + daemon,,,:/var/lib/passerelle:/bin/false + combo:x:2106:2106:combo daemon,,,:/var/lib/combo:/bin/false + fargo:x:2107:2107:fargo daemon,,,:/var/lib/fargo:/bin/false + welco:x:2108:2108:welco daemon,,,:/var/lib/welco:/bin/false + chrono:x:2109:2109:chrono daemon,,,:/var/lib/chrono:/bin/false + corbo:x:2110:2110:corbo daemon,,,:/var/lib/corbo:/bin/false + bijoe:x:2111:2111:bijoe daemon,,,:/var/lib/bijoe:/bin/false + mandayejs:x:2112:2112:mandayejs daemon,,,:/var/lib/mandayejs:/bin/false diff --git a/installation-5.md b/installation-5.md new file mode 100644 index 0000000..8657004 --- /dev/null +++ b/installation-5.md @@ -0,0 +1,558 @@ +# Installation des composants + +Publik est la somme de plusieurs composants qui communiquent entre eux +via messages et webservices. Chaque composant est un paquet Debian qui +s'installe depuis de dépôt Entr'ouvert. + +Lors de leur installation les briques s’attendent à trouver un service +postgres fonctionnel. Afin de les satisfaire nous renseignons ces +paramètres de connexion avant leur installation. + +## Installation RabbitMQ + + # apt install rabbitmq-server + +RabbitMQ sera utilisé uniquement en local (127.0.0.1) et n'a besoin +d'aucune configuration particulière. Veiller cependant à vérifier son +bon fonctionnement avant de continuer l'installation. RabbitMQ est assez +sensible à la résolution DNS (présence de la machine locale dans +/etc/hosts, par exemple) : + +Vérifier que le service tourne : + +service rabbitmq-server status + + ● rabbitmq-server.service - RabbitMQ broker + + Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled) + Active: active (running) since lun. 2017-07-17 10:09:57 CEST; 4 days + ago + Main PID: 580 (beam.smp) + Status: "Initialized" + + CGroup: /system.slice/rabbitmq-server.service + ├─ 580 /usr/lib/erlang/erts-6.2/bin/beam.smp -W w -A 64 -P 1048576 -t + 5000000 -stbt db -zdbbl 32000 -K true -- -root /usr/lib/erlang -progname + erl -- -home... + ├─ 897 /usr/lib/erlang/erts-6.2/bin/epmd -daemon + ├─1780 inet_gethost 4 + └─1781 inet_gethost 4 + +Et absence d'erreur dans les logs, qui doivent ressembler à : + + $journalctl -u rabbitmq-server.service + + -- Logs begin at lun. 2017-07-17 10:09:46 CEST, end at ven. 2017-07-21 19:55:37 CEST. -- + + juil. 17 10:09:50 web1-preprod systemd[1]: Starting RabbitMQ broker... + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: RabbitMQ 3.6.10. Copyright (C) 2007-2017 Pivotal Software, Inc. + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/ + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## Logs: /var/log/rabbitmq/rabbit@web1-preprod.log + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ###### ## /var/log/rabbitmq/rabbit@web1-preprod-sasl.log + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## + juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: Starting broker... + juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: systemd unit for activation check: "rabbitmq-server.service" + juil. 17 10:09:57 web1-preprod systemd[1]: Started RabbitMQ broker. + juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: completed with 0 plugins. + +(Note : bien sûr, ce n'est pas un composant créé par Entr'ouvert, c'est +) + +## Installation Combo + +On commence par renseigner les paramètres de connexion à la base de +donnée : + +L'accès à la base de données de Combo se décrit dans +*/etc/combo/settings.d/*.py* : + + # contenu de /etc/combo/settings.d/settings.py + + DATABASES['default']['NAME'] = 'combo' + DATABASES['default']['USER'] = 'combo' + DATABASES['default']['PASSWORD'] = 'indiquer-ici-le-mot-de-passe-pour-combo' + DATABASES['default']['HOST'] = 'sql-prod' + DATABASES['default']['PORT'] = '5432' + +Toujours dans */etc/combo/settings.d/macollectivite.py*, +nous configurons l'envoi des traces d'erreur par l'ajout de ces lignes +en fin de fichier : + + ADMINS = (('Admin EO', 'admin+prod.macollectivite.combo@entrouvert.com'),) + EMAIL_SUBJECT_PREFIX = '[prod macollectivite combo] ' + SERVER_EMAIL = ['admin+prod.](mailto:'admin+prod.maville.combo@entrouvert.com)macollectivite[.combo@entrouvert.com](mailto:'admin+prod.maville.combo@entrouvert.com)' + +On installe ensuite le logiciel *combo* en (indiquant qu'il ne faut pas +suivre la recommandation d'installer PostgreSQL) : + + # apt install combo postgresql- + +Vérification avec *service combo status* : + + service combo status -l + + ● combo.service - Combo + + Loaded: loaded (/lib/systemd/system/combo.service; enabled) + Drop-In: /etc/systemd/system/combo.service.d + └─wait-for-mnt-data.conf + Active: active (running) since jeu. 2017-07-20 23:33:44 CEST; 19h ago + Main PID: 16324 (gunicorn) + + CGroup: /system.slice/combo.service + ├─16324 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application + ├─16335 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application + ├─16336 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 + ├─16337 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application + ├─16342 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application + └─16347 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application + +## Installation Passerelle + +La procédure est la même que pour Combo + +L'accès à la base de données de Passerelle se décrit dans */etc/passerelle/settings.d/*.py* : + + # extrait de /etc/passerelle/settings.d/macollectivite.py + + DATABASES['default']['NAME'] = 'passerelle' + DATABASES['default']['USER'] = 'passerelle' + DATABASES['default']['PASSWORD'] = 'indiquer-ici-le-mot-de-passe-pour-passerelle' + DATABASES['default']['HOST'] = 'sql-prod' + DATABASES['default']['PORT'] = '5432' + +Toujours dans */etc/passerelle/settings.d/macollectivite.py*, +configuration pour l'envoi des traces d'erreur par l'ajout de ces lignes +en fin de fichier : + + ADMINS = (('Admin EO', 'admin+prod.macollectivite.passerelle@entrouvert.com'),) + EMAIL_SUBJECT_PREFIX = '[prod macollectivite passerelle] ' + SERVER_EMAIL = 'admin+prod.macollectivite.passerelle@entrouvert.com' + +Nous pouvons ensuite installer le composant : + + # apt install passerelle postgresql- + +Et vérification avec *service passerelle status* qui doit montrer +«active (running)» + +## Installation Fargo + +Reprendre la même procédure que pour les autres composants, en adaptant +le nom de la brique, c'est-à-dire : + +1. Configuration de l'accès SQL et du mail dans + */etc/fargo/settings.d/macollectivite.py* +2. Installation du composant : + + # apt install fargo postgresql- + +3. Vérification avec *service fargo status* qui doit retourner « active + (running) » + +## Installation Hobo serveur + +Reprendre la même procédure que pour les autres composants, en adaptant +le nom de la brique, c'est-à-dire : + +1. Configuration de l'accès SQL et du mail dans + */etc/hobo/settings.d/macollectivite.py* +2. Installation du composant : + + # apt install hobo postgresql- + +3. Vérification avec *service hobo status* qui doit retourner « active + (running) » + +## Installation Hobo agent + +Il s'agit d'un composant qui va écouter les ordres de déploiement (ou +provisionning) envoyés par le serveur Hobo et les exécuter sur les +autres composants. + +Installation : + + # apt install hobo-agent + +Ce démon est piloté par supervisor, ce dernier a parfois du mal à se +lancer dès la première installation. On remet donc tout à plat avec : + + service supervisor stop + service supervisor start + +Et on vérifie que hobo-agent est bien lancé par supervisor : + +service supervisor status + + ● supervisor.service - LSB: Start/stop supervisor + + Loaded: loaded (/etc/init.d/supervisor) + Active: active (running) since lun. 2017-07-17 10:09:52 CEST; 4 days ago + CGroup: /system.slice/supervisor.service + + ├─1065 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf + ├─1208 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 + └─1494 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 + +## Installation Authentic + +Le système Authentic, un peu plus ancien que les autres composants, ne +suit pas exactement les mêmes principes et les mêmes nommages. + +Le nom du paquet à installer est *authentic2-multitenant*, et on ajoute +son plugin FranceConnect *python-authentic2-auth-fc* : + + # apt install authentic2-multitenant python-authentic2-auth-fc postgresql- + +La configuration de l'accès SQL et des mails se fait dans +*/etc/authentic2-multitenant/config.py* (et non pas *settings.py* comme +pour les autres) : + + # extraits de /etc/authentic2-multitenant/config.py + DATABASES['default']['NAME'] = 'authentic' + DATABASES['default']['USER'] = 'authentic' + DATABASES['default']['PASSWORD'] = 'le-mot-de-passe-de-authentic-cree-sur-postgresql' + DATABASES['default']['HOST'] = 'sql-prod' + DATABASES['default']['PORT'] = '5432' + # ... + + ADMINS = (('Admin EO', 'admin+prod.macollectivite.authentic@entrouvert.com'),) + EMAIL_SUBJECT_PREFIX = '[prod macollectivite authentic] ' + SERVER_EMAIL = 'admin+prod.macollectivite.authentic@entrouvert.com' + +Une fois ces configurations effectués, il faut remettre le service en +place et lui demander de construire la base (update) : + + # dpkg --configure -a + # service authentic2-multitenant stop + # service authentic2-multitenant update + # service authentic2-multitenant restart + +Vérification avec *service authentic2-multitenant status* : + + # service authentic2-multitenant status + ● authentic2-multitenant.service - LSB: Authentic2 is a versatile identity provider + Loaded: loaded (/etc/init.d/authentic2-multitenant) + Active: active (running) since jeu. 2017-07-20 18:48:47 CEST; 24h ago + CGroup: /system.slice/authentic2-multitenant.service + ├─21361 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... + ├─21372 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... + ├─21377 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... + ├─21380 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... + └─25604 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... + +## Installation w.c.s. + +En pré-requis, LibreOffice est installé car w.c.s. l'utilise dans des +fonctionnalités de production de documents : + + # apt install libreoffice + +Reprendre la même procédure que pour les autres composants, en adaptant +le nom de la brique, c'est-à-dire : + +1. Configuration de l'accès SQL et du mail dans + */etc/wcs/settings.d/macollectivite.py* +2. Installation du composant : + + # apt install wcs postgresql- + +3. Vérification avec *service wcs status* qui doit retourner « active + (running) » + + + +## Installation de Nginx + + # apt install nginx + +... rien de plus. Nous installons la version de Debian 8, mais la +version jessie-backports est possible aussi si nécessaire. + +## Configuration de base + +Mise en place d'un format de log avancé (qui affiche le tenant) dans +*/etc/nginx/conf.d/log_formats.conf* : + + # /etc/nginx/conf.d/log_formats.conf + + log_format combined_full '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$host" [$request_time ms]'; + + log_format with_request_time '$remote_addr - $remote_user [$time_local] [$request_time ms] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; + +robots.txt et favicon communs dans +*/etc/nginx/includes/macollectivite-common.conf* : + + location /favicon.ico { alias /var/www/html/favicon-macollectivite.ico; } + + location /robots.txt { alias /var/www/html/robots.txt; } + +(le favicon.ico est un copie de +[http://www.](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico)macollectivite[.fr/uploads/Image/73/SIT_](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico)macollectivitemacollectivite[_603_favicon-.ico](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico), +le robots.txt interdit toute indexation) + +Pour résoudre [#18476](https://dev.entrouvert.org/issues/18476), +ajouter ce fichier : */etc/nginx/conf.d/client-max-body-size.conf* avec +ce contenu : + + client_max_body_size 200M; + +Il faut éventuellement adapter la configuration du HAProxy pour accepter +les grosses requêtes. + +## Mise en place des virtualhost (frontaux HTTP des tenants des composants Publik) + +Le soin est laissé à l'installateur de décider comment poser les +virtualhost ci-dessous dans nginx. + +Au niveau de la preprod, le modèle classique a été adopté : + +- un fichier par virtualhost dans */etc/nginx/sites-available/* +- des liens symboliques dans */etc/nginx/sites-enabled/* avec un + préfixe *10_* permettant un éventuel classement d'autres services + avant ou après. + +A noter que **ces fichiers **N**ginx de la **plate-forme de +**pré-prod**uction** peuvent être copiés** pour la plate-forme de +production, il faudra cependant veiller à la modification du +server_name du portail usagers dans le virtualhost "combo". + +### Combo + + server { + listen 80; + server_name ~^moncompte.* # portail usagers ; selon le nom du site (attention, différent de la pré-prod) + ~^agents-.*; # portail agents ; selon le nom du site + + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/combo-access.log combined_full; + error_log /var/log/nginx/combo-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/combo/tenants/$host/static/$1 + /var/lib/combo/tenants/$host/theme/static/$1 + /var/lib/combo/collectstatic/$1 + =404; + add_header Access-Control-Allow-Origin *; + } + + location ~ ^/media/(.+)$ { + alias /var/lib/combo/tenants/$host/media/$1; + } + + location / { + proxy_pass http://unix:/run/combo/combo.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } + +### Hobo + +Même modèle que Combo : + + server { + listen 80; + + server_name ~^hobo-.*; + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/hobo-access.log combined_full; + error_log /var/log/nginx/hobo-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/hobo/tenants/$host/static/$1 + /var/lib/hobo/tenants/$host/theme/static/$1 + /var/lib/hobo/collectstatic/$1 + =404; + add_header Access-Control-Allow-Origin *; + } + + location ~ ^/media/(.+)$ { + alias /var/lib/hobo/tenants/$host/media/$1; + } + + location / { + proxy_pass http://unix:/run/hobo/hobo.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + } + +### Passerelle + +Même modèle que Combo, mais aucune diffusion de /media (il s'agit de +données privées dans Passerelle). + + server { + listen 80; + + server_name ~^passerelle-.*; + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/passerelle-access.log combined_full; + error_log /var/log/nginx/passerelle-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/passerelle/tenants/$host/static/$1 + /var/lib/passerelle/tenants/$host/theme/static/$1 + /var/lib/passerelle/collectstatic/$1 + =404; + add_header Access-Control-Allow-Origin *; + } + + location / { + proxy_pass http://unix:/run/passerelle/passerelle.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } + +### fargo + +Même modèle que Combo, mais aucune diffusion de /media (il s'agit des +fichiers usagers privés dans Fargo). + + server { + listen 80; + + server_name ~^portedoc-.*; + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/fargo-access.log combined_full; + error_log /var/log/nginx/fargo-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/fargo/tenants/$host/static/$1 + /var/lib/fargo/tenants/$host/theme/static/$1 + /var/lib/fargo/collectstatic/$1 + =404; + add_header Access-Control-Allow-Origin *; + } + + location / { + proxy_pass http://unix:/run/fargo/fargo.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + } + +### Authentic + +Comme Combo, sans diffusion des /media, et en utilisant le nom du +service *authentic2-multitenant.* + + server { + listen 80; + + server_name ~^connexion-.*; + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/authentic2-multitenant-access.log combined_full; + error_log /var/log/nginx/authentic2-multitenant-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/authentic2-multitenant/tenants/$host/static/$1 + /var/lib/authentic2-multitenant/tenants/$host/theme/static/$1 + /var/lib/authentic2-multitenant/collectstatic/$1 + =404; + add_header Access-Control-Allow-Origin *; + } + + location / { + proxy_pass http://unix:/run/authentic2-multitenant/authentic2-multitenant.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } + +### w.c.s. + + server { + + listen 80; + + server_name ~^demarches-.*; + include includes/macollectivite-common.conf; + + access_log /var/log/nginx/wcs-access.log combined_full; + error_log /var/log/nginx/wcs-error.log; + + location ~ ^/static/(.+)$ { + root /; + try_files /var/lib/wcs/$host/static/$1 + /var/lib/wcs/$host/theme/static/$1 + /var/lib/wcs/collectstatic/$1 + /var/lib/wcs-au-quotidien/collectstatic/$1 + =404; + } + + location /qo { alias /usr/share/wcs/qommon/; } + location /apache-errors { alias /usr/share/auquotidien/apache-errors/; } + + location /themes { + root /; + try_files /var/lib/wcs/$host$uri + /var/lib/wcs-au-quotidien/$host$uri + /usr/share/wcs/$uri + =404; + } + + location / { + proxy_pass http://unix:/var/run/wcs/wcs.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + } + } + +## Vérification des réponses de Nginx + +Une fois les virtualhost en place, les sites doivent répondre par des +erreurs 404 : ce sont les applications de Publik qui répondent qu'elles +n'ont pas encore d'instance liés aux noms prévus. + +C'est tout de même déjà le temps de vérifier : + +- que les certificats HTTPS sont ok, +- que haproxy envoie bien sur web1, +- que les requêtes arrivent sur les bons virtualhost, par exemple pour + fargo on vérifiera que l'accès à + [https://portedoc-moncompte.](https://portedoc-moncompte.nanterre.fr/)macollectivite[.fr](https://portedoc-moncompte.nanterre.fr/) + provoque une 404 dans */var/log/nginx/fargo-access.log* et aucun + message dans */var/log/nginx/fargo-error.log* ; opération à répéter + avec tous les autres sites installés. + + diff --git a/installation-6.md b/installation-6.md new file mode 100644 index 0000000..72ea610 --- /dev/null +++ b/installation-6.md @@ -0,0 +1,202 @@ +# Déploiement des instances + +****Attention le déploiement ne doit être lancé que si TOUS les services +ont été testés et répondent des 404 aux adresses prévus +****[**https://xxx-moncompte.**](https://xxx-moncompte.nanterre.fr/)**macollectivite**[**.fr/**](https://xxx-moncompte.nanterre.fr/)**.** + +Si ce n'est pas le cas, le déploiement va échouer ; et la reprise sur +ces erreurs n'est pas toujours simple. + +## Préparation, création du fichier «recipe» + +Installation des thèmes Publik (incluant le thème pour +macollectivite) : + + apt install publik-base-theme + +Création d'un fichier de déploiement +*/srv/nfs/publik/scripts/recipe-macollectivite-prod.json* +(note : fichier déjà disponible sur l'infra de pré-prod); la ligne +"password" est à compléter le mot de passe à communiquer à Entr'ouvert : + + { + "variables": { + "hobo": "hobo-moncompte.macollectivite.fr", + "authentic": "connexion-moncompte.macollectivite.fr", + "combo": "moncompte.macollectivite.fr", + "combo_agent": "agents-moncompte.macollectivite.fr", + "passerelle": "passerelle-moncompte.macollectivite.fr", + "wcs": "demarches-moncompte.macollectivite.fr", + "fargo": "portedoc-moncompte.macollectivite.fr" + }, + "steps": [ + {"create-hobo": { + "url": "https://${hobo}/" + }}, + {"create-superuser": { + "email": "admin+macollectivite@entrouvert.com", + "password": "..." + }}, + {"create-authentic": { + "url": "https://${authentic}/", + "title": "Connexion" + }}, + {"set-idp": { }}, + {"create-combo": { + "url": "https://${combo}/", + "title": "Compte citoyen", + "template_name": "portal-user" + }}, + {"create-combo": { + "url": "https://${combo_agent}/", + "slug": "portal-agent", + "title": "Portail agent", + "template_name": "portal-agent" + }}, + {"create-wcs": { + "url": "https://${wcs}/", + "title": "Démarches", + "template_name": "modele.zip" + }}, + {"create-fargo": { + "url": "https://${fargo}/", + "title": "Porte-documents" + }}, + {"create-passerelle": { + "url": "https://${passerelle}/", + "title": "Passerelle" + }}, + {"set-theme": { + "theme": "macollectivite" + }} + ] + } + +## Lancement du déploiement + +On utilise la commande «cook» proposée par le logiciel «hobo». Cette +commande doit impérativement être exécutée par l'utilisateur «hobo», on +utilise donc *sudo -u hobo … :* + + # sudo -u hobo hobo-manage cook /srv/nfs/publik/scripts/recipe-macollectivite-prod.json -v 2 + +## Vérification du déploiement + +A la fin du déploiement, les logiciels Publik Django packagés doivent +avoir déployé les instances dans PostgreSQL (schémas visibles dans +chaque base) mais surtout crée le répertoire contenant la configuration +du site cible : + +Ce qui est visible dans la plateforme de pré-production doit l'être sur +la plate-forme de production, donc on doit voir ceci (en retirant les +*preprod-*) : + + # ls -ld /var/lib/*/tenants/* + drwxr-xr-x 3 authentic-multitenant authentic-multitenant 120 Jul 12 15:19 /var/lib/authentic2-multitenant/tenants/connexion-preprod-moncompte.macollectivite.fr + drwxr-xr-x 5 combo combo 156 Jul 21 00:25 /var/lib/combo/tenants/agents-preprod-moncompte.macollectivite.fr + drwxr-xr-x 5 combo combo 4096 Jul 20 10:38 /var/lib/combo/tenants/preprod-moncompte.macollectivite.fr + drwxr-xr-x 3 fargo fargo 107 Jul 10 18:19 /var/lib/fargo/tenants/portedoc-preprod-moncompte.macollectivite.fr + drwxr-xr-x 3 hobo hobo 81 Apr 18 10:42 /var/lib/hobo/tenants/hobo-preprod-moncompte.macollectivite.fr + drwxr-xr-x 3 passerelle passerelle 107 Jul 10 18:19 /var/lib/passerelle/tenants/passerelle-preprod-moncompte.macollectivite.fr + +w.c.s. créé directement une base de données +*wcs_demarches_moncompte_macollectivite_fr* +accompagnée de son dossier dans */var/lib/wcs-au-quotidien* + + # ls -ld /var/lib/wcs-au-quotidien/* + drwxr-xr-x 7 root root 66 Apr 13 15:55 /var/lib/wcs-au-quotidien/collectstatic + -rw------- 1 root root 50 Apr 13 15:55 /var/lib/wcs-au-quotidien/config.pck + drwxr-xr-x 22 wcs-au-quotidien wcs-au-quotidien 4096 Jul 10 18:19 /var/lib/wcs-au-quotidien/demarches-preprod-moncompte.macollectivite.fr + drwxr-xr-x 2 root root 47 Apr 13 15:59 /var/lib/wcs-au-quotidien/skeleton.invalid + drwxr-xr-x 2 root root 23 Apr 13 16:00 /var/lib/wcs-au-quotidien/skeletons + +Si un répertoire manque, le déploiement a rencontré un soucis : +contacter le support Entr'ouvert + +Si les répertoires sont présents, alors : + +- https://moncompte.macollectivite.fr : doit afficher une page "Votre installation de Combo + fonctionne (...) Le site est actuellement vide (…)", +- https://agents-moncompte.macollectivite.fr même chose, +- https://connexion-moncompte.macollectivite.fr : doit proposer une + page de connexion avec un design proche de la pré-prod, +- https://passerelle-moncompte.macollectivite.fr : doit re-diriger + vers le site connexion-moncompte précédent, +- https://hobo-moncompte.macollectivite.fr : même chose, redirection vers connexion-moncompte, +- https://portedoc-moncompte.macollectivite.fr : même chose, redirection vers connexion-moncompte, +- https://demarches-moncompte.macollectivite.fr : doit rediriger vers + https://moncompte.macollectivite.fr/. + +Si un des sites ne répond pas comme prévu : contacter le support +Entr'ouvert. + +## Configuration de la gestion des identités + +### Configuration de l'authentification LDAP + +Création d'un fichier +*/var/lib/authentic2-multitenant/tenants/connexion-moncompte.macollectivite.fr/settings.json.* + +(Conseil : prendre modèle sur le fichier identique en pré-prod et +adapter les paramètres LDAP). + + { + "ACCOUNT_ACTIVATION_DAYS": 1, + "PASSWORD_RESET_TIMEOUT_DAYS": 1, + "A2_REGISTRATION_EMAIL_IS_UNIQUE": true, + "A2_EMAIL_IS_UNIQUE": true, + "LDAP_AUTH_SETTINGS": [ + { + "realm": "mairie-macollectivite.fr", + "url": ["ldap://v-dc1.vnan.intra/", "ldap://v-dc2.vnan.intra/"], + "basedn": "OU=macollectivite,DC=vnan,DC=intra", + "binddn": "xxxxx@vnan.intra", + "bindpw": "xxxxx", + "user_filter": "(&(objectClass=user)(sAMAccountType=805306368)(|(mail=%s)(samaccountname=%s))(|(memberOf=CN=.LD_Agents_BO,OU=macollectivite,DC=vnan,DC=intra)(memberOf=CN=.LD_Agents_Publik,OU=macollectivite,DC=vnan,DC=intra)))", + "username_template": "{samaccountname[0]}@{realm}", + "update_username": true, + "active_directory": true, + "attributes": [ + "mail", + "sAMAccountName", + "cn", + "sn", + "givenName", + "userPrincipalName" + ], + "external_id_tuples": [["samaccountname"],["dn:noquote"]], + "shuffle_replicas": false, + "require_cert": "never", + "use_tls": false, + "set_mandatory_roles": ["Agent"], + "user_can_change_password": false + }, + { + "realm": "entrouvert.com", + "url": "ldaps://ldap.entrouvert.org/", + "basedn": "o=entrouvert,ou=companies,o=libre-entreprise", + "user_filter": "uid=%s", + "username_template": "{uid[0]}@{realm}", + "groupsu": ["cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise"], + "groupstaff": ["cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise"], + "group_filter": "(&(uniqueMember={user_dn})(objectClass=legroup))", + "create_group": true, + "attributes": [ "uid" ], + "set_mandatory_groups": ["LDAP Entrouvert"], + "user_can_change_password": false + } + ] + } + +Lancer un import manuel des comptes (pour ne pas attendre le cron) +avec : + + # sudo -u authentic-multitenant authentic2-multitenant-manage tenant_command sync-ldap-users -d connexion-moncompte.macollectivite.fr + +Cette commande ne doit rien afficher (ce qui signifie que tout s'est +bien déroulé), les comptes doivent être visibles dans +[https://connexion-moncompte.](https://connexion-moncompte.nanterre.fr/manage/users/)macollectivite[.fr/manage/users/](https://connexion-moncompte.nanterre.fr/manage/users/) + + + + diff --git a/installation-7.md b/installation-7.md new file mode 100644 index 0000000..e5d9fa0 --- /dev/null +++ b/installation-7.md @@ -0,0 +1,193 @@ +# Paramétrage du partage de fichiers + + +## Démarrer les services uniquement après le montage de /srv/nfs + +Ajouter pour les services liés à Publik un supplément +*RequiresMountsFor=* à la description du service + +Exemple pour Combo : + + cat /etc/systemd/system/combo.service.d/wait-for-mnt-data.conf + + [Unit] + + RequiresMountsFor=/srv/nfs + +Faire de même avec : + +- les services systemd-isés qui ont besoin de */srv/nfs* : Combo, + Fargo, Passerelle. +- les services bientôt systemd-isés (avant fin 2017, donc prévoir dès + maintenant le supplément) : authentic2-multitenant, hobo, + hobo-agent, wcs + + + +# Mise en place de l’équilibrage de la charge + + +## Vue générale + +Le principe est de déplacer vers le partage de fichier (NFS) les +éléments de configuration de web1 : + +- les répertoires de configuration */etc/xxx* des composants Publik, + copiés vers */srv/nfs/publik/etc/xxx,* +- les données */var/lib/xxx* de ces mêmes composants, copiés vers + */srv/nfs/publik/var-lib/xxx,* +- la configuration nginx ; copiés vers */srv/nfs/publik/etc/nginx/xxx* + et */srv/nfs/publik/var-www/html.* + +Sur **web1 et sur web2**, on utilise alors des liens symboliques : + +- Configuration : */etc/xxx* → */srv/nfs/publik/etc/xxx,* +- Données : */var/lib/xxx* → */srv/nfs/publik/var-lib/xxx,* +- Configuration nginx. + +### Détail des opérations + +Création des répertoires partagés : + +- configurations: */srv/nfs/publik/etc*, +- données des tenants: */srv/nfs/publik/var-lib/,* +- éléments web (favicon, robots.txt): */srv/nfs/publik/var-www/,* + +Déplacement des configurations et données des services Publik + +1. Service *wcs* + + service wcs stop + mv /etc/wcs /srv/nfs/publik/etc/ + ln -sf /srv/nfs/publik/etc/wcs /etc/wcs + mv /var/lib/wcs /srv/nfs/publik/var-lib/ + ln -sf /srv/nfs/publik/var-lib/wcs /var/lib/wcs + service wcs start + +2. Service *combo* + + service combo stop + mv /etc/combo /srv/nfs/publik/etc/ + ln -sf /srv/nfs/publik/etc/combo /etc/combo + mv /var/lib/combo /srv/nfs/publik/var-lib/ + ln -sf /srv/nfs/publik/var-lib/combo /var/lib/combo + service combo start + +3. Même procédure avec *fargo* +4. Même procédure avec *passerelle* +5. Même procédure avec *hobo* +6. Même procédure avec *authentic2-multitenant* +7. Configuration hobo-agent + + service supervisor stop + mv /etc/hobo-agent /srv/nfs/publik/etc/ + ln -sf /srv/nfs/publik/etc/hobo-agent /etc + service supervisor start + +Autres partages via NFS : + +1. Configurations nginx + + service nginx stop + mkdir /srv/nfs/publik/etc/nginx + cd /etc/nginx + mv conf.d includes sites-available sites-enabled /srv/nfs/publik/etc/nginx/ + ln -sf /srv/nfs/publik/etc/nginx/* . + service nginx start + +2. Éléments web statiques + + cd /var/www + mv html /srv/nfs/publik/var-www/ + ln -sf /srv/nfs/publik/var-www/html . + +3. APT : dépôts et préférences backports + + mkdir /srv/nfs/publik/etc/apt + cd /etc/apt + mv sources.list.d preferences.d /srv/nfs/publik/etc/apt/ + ln -sf /srv/nfs/publik/etc/apt/* . + +### Opérations sur web2 + +**Attention** : l'UID et le GUID de l'utilisateur "web" doit être +identique. + +On prépare les répertoires de configuration et de données des composants +Publik **avant** leur installation : + +1. Service wcs + + ln -sf /srv/nfs/publik/etc/wcs /etc/wcs + ln -sf /srv/nfs/publik/var-lib/wcs /var/lib/wcs + +2. Service *combo* + + ln -sf /srv/nfs/publik/etc/combo /etc/combo + ln -sf /srv/nfs/publik/var-lib/combo /var/lib/combo + +3. Même procédure avec *fargo* +4. Même procédure avec *passerelle* +5. Même procédure avec *hobo* +6. Même procédure avec *authentic2-multitenant* +7. Configuration hobo-agent + + ln -sf /srv/nfs/publik/etc/hobo-agent /etc/hobo-agent + +On utilise aussi les autres configurations partagées via NFS : + +1. Configurations nginx + + service nginx stop + cd /etc/nginx + rm -rf conf.d includes sites-available sites-enabled + ln -sf /srv/nfs/publik/etc/nginx/* . + service nginx start + +2. Éléments web statiques + + cd /var/www + rm -rf html + ln -sf /srv/nfs/publik/var-www/html . + +3. APT : dépôts et préférences backports + + cd /etc/apt + rm -rf sources.list.d preferences.d + ln -sf /srv/nfs/publik/etc/apt/* . + +On peut alors lancer l'installation des composants packagés. Attention, +lors de cette étape, toujours refuser les éventuelles demandes de +modification des fichiers de configuration (on utilise ceux partagés par +NFS) : + + apt install wcs wcs-au-quotidien + apt install combo + apt install fargo + apt install passerelle + apt install hobo + apt install authentic2-multitenant + apt install hobo-agent + +Nous comparons la liste des paquets installés entre web1 et web2 +(obtenue avec *dpkg -l*), et installons les paquets suivants : + +- python-authentic2-auth-fc, +- python-combo-plugin-macollectivite, +- publik-base-theme, +- gettext + +## Désactivation des *crons* Publik sur web2 + +Il est **très important** de désactiver les crons de Publik sur web2, +pour ne pas avoir de compétition/conflit avec ceux déjà en place sur +web1, puisqu'ils agissent sur les mêmes données. + +Il faut donc poser des # devant les lignes des crons suivants : + +- */etc/cron.d/wcs,* +- */etc/cron.d/authentic2-multitenant,* +- */etc/cron.d/passerelle,* +- */etc/cron.hourly/python-combo,* +- */etc/cron.hourly/fargo.* + diff --git a/installation.md b/installation.md deleted file mode 100644 index a9acdcf..0000000 --- a/installation.md +++ /dev/null @@ -1,1272 +0,0 @@ -Procédure d’installation -======================== - -Ce document présente installation d’un système Publik standard. Des -adaptations sont naturellement à envisager en fonction des besoins -particuliers. - -Rappel de l’architecture ------------------------- -Une infrastructure type de Publik est composée de plusieurs machines (une -installation sur machine unique reste possible): - -- un service frontal de répartition de charge (*proxy)* -- deux serveurs d'application (*web1* et *web2)* -- un serveur de base de données *sql* (Postgres) -- un serveur de fichier (partage NFS) - - -Liste des modules applicatifs potentiels de Publik : - -- Authentic : gestion des identités, IdP (*identity provider*), -- Combo : CMS pour portails usager et agent (porte d’entrée de - Publik), -- w.c.s. : formulaires et workflows, -- Passerelle : connecteurs vers systèmes tiers, -- Fargo : porte-documents, -- Corbo : diffusion de messages, -- Chrono : prise de rendez-vous, -- Welco : interface de saisie (multi-canal), -- Hobo : système de déploiement et de provisionning, -- Bijoe : élaboration et production de rapports statistiques, -- Chrono : gestion d'inscriptions et rendez-vous. - -Pré-requis ----------- - -### Résolution de noms - -Avant l'installation de Publik il faut vérifier que les enregistrements -DNS sont fonctionnels ; Publik nécessite autant de domaines que de -composants. - -Typiquement : - -- portail usager (composant combo) : - moncompte.macollectivite.fr, -- portail agents (composant combo) : - agents-moncompte.macollectivite.fr, -- démarches (composant wcs/wcs-au-quotidien) : - demarches-moncompte.macollectivite.fr, -- fournisseur d'identités (composant authentic) : - connexion-moncompte.macollectivite.fr, -- hub de webservice (composant passerelle) : - passerelle-moncompte.macollectivite.fr, -- porte document (composant fargo) : - portedoc-moncompte.macollectivite.fr, - -Par exemple voici à quoi pourraient ressembler les entrées d'un serveur Bind: - - publik A a.b.c.d ; addresse IP de «publik» - portail CNAME publik ; portail usage (brique: combo) - backoffice CNAME publik ; portail agent (brique: combo) - connexion CNAME publik ; fournisseur d'identités (brique: authentic) - demarches CNAME publik ; téléservices (brique: wcs) - passerelle CNAME publik ; hub de webservices (brique: passerelle) - hobo CNAME publik ; système de déploiement (brique: hobo) - -Toutes ces entrées DNS doivent pointer vers le proxy de répartition de charge -(dans le cas d'une installation avec répartition de charge). - -Par ailleurs, les serveurs applicatifs doivent impérativement avoir un -fichier */etc/hosts* consistant. - -### Certificat X509 - -Publik ne fonctionne qu'en mode HTTPS. - -Un ou plusieurs certificats x509 valides et reconnus doivent être disponibles qui couvrent tous les noms des briques qui seront installées. -Dans la suite de la documentation, un certificat est disponible : - - * clé publique certifiée : /etc/ssl/certs/cert-example.pem - * clé privée : /etc/ssl/private/cert-example.key - -HAProxy doit disposer du ou des certificats X509 valides pour chacun de -ces domaines ; les certificats doivent être reconnus par des autorités -publiques. (L’utilisation de certificats Letsencrypt est possible) - -### Horloges synchronisées - -Il est **indispensable** que les machines soient exactement à la même -heure. Les systèmes récent utilisent *systemd-timesyncd *par défaut. -*Ntp* est également possible. - -### Envois des emails - -Les serveurs applicatifs doivent disposer d'un MTA local (par exemple -*exim4-daemon-light*) avec le port SMTP ouvert et capable d'expédier des mails -vers tout Internet, en passant éventuellement par un relais. Les mails seront -envoyés avec le domaine « @macollectivite.fr ». Nous recommandons -vivement de les relayer via un smarthost officiel de votre réseau. - -### Configuration de la localisation - -Sur toutes les machines il est nécessaire de reconfigurer *locales* pour -*fr_FR.UTF-8* : - - dpkg-reconfigure locales - -Configuration des dépôts logiciels ----------------------------------- - -### Vue générale - -Les différents composants logiciels utilisés par Publik proviennent, par -ordre de préférence : - -- de la distribution Debian GNU/Linux stable -- des *backports* officiels Debian, disposant du suivi de sécurité par - l’équipe Debian, -- des paquets Debian fournis et maintenus par les projets *upstream,* -- de paquets Debian maintenus par Entr’ouvert qui en assure le suivi - de sécurité. - -### Configuration des dépôts logiciels - -Les machines doivent disposer des dépôts **jessie** et -**jessie-backports**. - -Ajoutons aussi les dépôts Entr'ouvert et RabbitMQ par la création de -*/etc/apt/sources.list.d/eo-prod.list :* - - deb http://deb.entrouvert.org/ jessie main - deb http://www.rabbitmq.com/debian/ testing main - -Ajoutons les clés correspondantes : - - wget -O- https://deb.entrouvert.org/entrouvert.gpg | apt-key add - - wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | apt-key add - - apt update - -Pricisons les paquets qu'on veut tirer de jessie-backports en éditant -*/etc/apt/preferences.d/backports :* - - Package: python-django - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-django-common - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: gunicorn - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-pyasn1 - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-requests - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-urllib3 - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-cryptography - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-ndg-httpsclient - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-openssl - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-jwcrypto - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-setuptools - Pin: release a=jessie-backports - Pin-Priority: 900 - - Package: python-pkg-resources - Pin: release a=jessie-backports - Pin-Priority: 900 - -### Installation des paquets de base - -Outillage utile pour l'installation et plus tard pour le support et la -maintenance : - - apt install postgresql-client # pour création utilisateurs et bases de données dans postgresql - apt install bsd-mailx # pour test de l'envoi de mails - apt install zip # pour la création du squelette de site w.c.s. - apt install curl wget # pour les tests/debug locaux - apt install ipython ltrace strace psmisc tcpdump tshark locate # pour des debug applicatifs - apt install ca-certificates-entrouvert # connexion au LDAP EO - -Composants additionnels nécessaires pour les applications : - - apt install libreoffice # pour génération de documents dans wcs - apt install publik-base-theme # système de thème - -Création des bases de données ------------------------------ - -### Vue générale - -Chaque brique utilise une ou plusieurs bases de données PostgreSQL. Il -est courant d’utiliser une installation à deux machines identiques en -master/slave. Publik peut utiliser un système PostgreSQL existant, le -cas échéant. Publik nécessite PostgreSQL en version 9 (>9.4 recommandée). - -### Pré-requis : extensions PostgreSQL - -Vérifier que les extensions PostgreSQL sont bien activées : - - apt install postgresql-contrib - -### Création des bases - -Chaque composant Publik doit disposer : - -- d'une base de données dédiée, -- d'un accès spécifique à cette base via un usager postgreSQL dédié - (avec un mot de passe SQL à créer pour chaque composant). - -Principe pour le composant *combo :* - - CREATE USER combo PASSWORD 'indiquer-ici-le-mot-de-passe-pour-combo'; - - CREATE DATABASE combo WITH OWNER = combo TEMPLATE = template0 LC_COLLATE = 'fr_FR.UTF_8' LC_CTYPE = 'fr_FR.UTF-8'; - -Remarque : template0 et LC_COLLATE et LC_CTYPE nécessaires parce que -template1 est en en_US.UTF-8. - -La même opération doit être répétée pour chaque brique logicielle (bien -sûr à chaque fois il faut **noter le mot de passe** choisi, il sera -nécessaire par la suite) : - -- Combo -- Hobo -- Authentic -- Passerelle -- Fargo -- Bijoe -- Chrono -- Corbo -- Mandayejs -- Welco - -Une brique est spécifique : w.c.s.. Pour w.c.s., il n'y a pas besoin de -création d'une base, elle sera effectuée lors de l'instanciation. En -revanche, l'utilisateur w.c.s. sur PostgreSQL doit avoir le droit -CREATEDB, donc : - -*CREATE USER wcs PASSWORD 'indiquer-ici-le-mot-de-passe-pour-wcs' -CREATEDB;* - -### Création des utilisateurs avec UID identiques sur web1 et web2 - -Comme des fichiers vont être partagés en NFSv3, il faut que les UID des -utilisateurs Unix concernés soient les mêmes sur les deux machines web1 -et web2. - -Voici un script pour faire cela sur web1 et web2 : - - #!/bin/sh - - uid=2100 - - for user in hobo authentic-multitenant wcs wcs-au-quotidien passerelle combo fargo welco chrono corbo bijoe mandayejs - do - echo "create group $user ($uid)" - addgroup --system --gid $uid $user - echo "create user $user ($uid)" - adduser --disabled-password --system --uid $uid --gecos "$user daemon" --ingroup $user --no-create-home --home /var/lib/$user $user uid=$(($uid+1)) - done - -Résultat dans /etc/passwd: - - hobo:x:2101:2101:hobo daemon,,,:/var/lib/hobo:/bin/false - authentic-multitenant:x:2102:2102:authentic2-multitenant - daemon,,,:/var/lib/authentic2-multitenant:/bin/false - wcs:x:2103:2103:wcs daemon,,,:/var/lib/wcs:/bin/false - wcs-au-quotidien:x:2104:2104:wcs-au-quotidien - daemon,,,:/var/lib/wcs-au-quotidien:/bin/false - passerelle:x:2105:2105:passerelle - daemon,,,:/var/lib/passerelle:/bin/false - combo:x:2106:2106:combo daemon,,,:/var/lib/combo:/bin/false - fargo:x:2107:2107:fargo daemon,,,:/var/lib/fargo:/bin/false - welco:x:2108:2108:welco daemon,,,:/var/lib/welco:/bin/false - chrono:x:2109:2109:chrono daemon,,,:/var/lib/chrono:/bin/false - corbo:x:2110:2110:corbo daemon,,,:/var/lib/corbo:/bin/false - bijoe:x:2111:2111:bijoe daemon,,,:/var/lib/bijoe:/bin/false - mandayejs:x:2112:2112:mandayejs daemon,,,:/var/lib/mandayejs:/bin/false - -Paramétrage du partage de fichiers ----------------------------------- - -### Démarrer les services uniquement après le montage de /srv/nfs - -Ajouter pour les services liés à Publik un supplément -*RequiresMountsFor=* à la description du service - -Exemple pour Combo : - - cat /etc/systemd/system/combo.service.d/wait-for-mnt-data.conf - - [Unit] - - RequiresMountsFor=/srv/nfs - -Faire de même avec : - -- les services systemd-isés qui ont besoin de */srv/nfs* : Combo, - Fargo, Passerelle. -- les services bientôt systemd-isés (avant fin 2017, donc prévoir dès - maintenant le supplément) : authentic2-multitenant, hobo, - hobo-agent, wcs - -Installation des composants ---------------------------- - -Publik est la somme de plusieurs composants qui communiquent entre eux -via messages et webservices. Chaque composant est un paquet Debian qui -s'installe depuis de dépôt Entr'ouvert. - -Lors de leur installation les briques s’attendent à trouver un service -postgres fonctionnel. Afin de les satisfaire nous renseignons ces -paramètres de connexion avant leur installation. Une alternative à cette -approche est de relancer la configuration du paquet (*dpkg --configure --a)* une fois les paramètres de connexion Postgres correctement -renseignés. - -A noter également que par défaut, les paquets considèrent qu'ils peuvent -fonctionner avec une base PostgreSQL locale. Quand on installe un paquet -on ajoute *postgresql-* à la fin du *apt install* afin d'éviter -l'installation d'un serveur postgres local. - -### Installation d'abord et seulement sur web1 - -****La suite de la procédure d'installation n'est à suivre que sur une -des deux machines, web1**** - -Une fois que web1 sera en place et fonctionnelle, on pourra activer la -balance de charge en installant web2. L'installation sur web2 sera -beaucoup plus simple (décrite plus bas) : les configurations et -initialisation des données (instanciations) auront déjà été faites sur -web1, il suffit de les partager sur web2. - -### Installation RabbitMQ - - # apt install rabbitmq-server - -RabbitMQ sera utilisé uniquement en local (127.0.0.1) et n'a besoin -d'aucune configuration particulière. Veiller cependant à vérifier son -bon fonctionnement avant de continuer l'installation. RabbitMQ est assez -sensible à la résolution DNS (présence de la machine locale dans -/etc/hosts, par exemple) : - -Vérifier que le service tourne : - -service rabbitmq-server status - - ● rabbitmq-server.service - RabbitMQ broker - - Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled) - Active: active (running) since lun. 2017-07-17 10:09:57 CEST; 4 days - ago - Main PID: 580 (beam.smp) - Status: "Initialized" - - CGroup: /system.slice/rabbitmq-server.service - ├─ 580 /usr/lib/erlang/erts-6.2/bin/beam.smp -W w -A 64 -P 1048576 -t - 5000000 -stbt db -zdbbl 32000 -K true -- -root /usr/lib/erlang -progname - erl -- -home... - ├─ 897 /usr/lib/erlang/erts-6.2/bin/epmd -daemon - ├─1780 inet_gethost 4 - └─1781 inet_gethost 4 - -Et absence d'erreur dans les logs, qui doivent ressembler à : - - $journalctl -u rabbitmq-server.service - - -- Logs begin at lun. 2017-07-17 10:09:46 CEST, end at ven. 2017-07-21 19:55:37 CEST. -- - - juil. 17 10:09:50 web1-preprod systemd[1]: Starting RabbitMQ broker... - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: RabbitMQ 3.6.10. Copyright (C) 2007-2017 Pivotal Software, Inc. - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/ - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## Logs: /var/log/rabbitmq/rabbit@web1-preprod.log - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ###### ## /var/log/rabbitmq/rabbit@web1-preprod-sasl.log - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: Starting broker... - juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: systemd unit for activation check: "rabbitmq-server.service" - juil. 17 10:09:57 web1-preprod systemd[1]: Started RabbitMQ broker. - juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: completed with 0 plugins. - -(Note : bien sûr, ce n'est pas un composant créé par Entr'ouvert, c'est -) - -### Installation Combo - -On commence par renseigner les paramètres de connexion à la base de -donnée : - -L'accès à la base de données de Combo se décrit dans -*/etc/combo/settings.d/*.py* : - - # contenu de /etc/combo/settings.d/settings.py - - DATABASES['default']['NAME'] = 'combo' - DATABASES['default']['USER'] = 'combo' - DATABASES['default']['PASSWORD'] = 'indiquer-ici-le-mot-de-passe-pour-combo' - DATABASES['default']['HOST'] = 'sql-prod' - DATABASES['default']['PORT'] = '5432' - -Toujours dans */etc/combo/settings.d/macollectivite.py*, -nous configurons l'envoi des traces d'erreur par l'ajout de ces lignes -en fin de fichier : - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.combo@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite combo] ' - SERVER_EMAIL = ['admin+prod.](mailto:'admin+prod.maville.combo@entrouvert.com)macollectivite[.combo@entrouvert.com](mailto:'admin+prod.maville.combo@entrouvert.com)' - -On installe ensuite le logiciel *combo* en (indiquant qu'il ne faut pas -suivre la recommandation d'installer PostgreSQL) : - - # apt install combo postgresql- - -Vérification avec *service combo status* : - - service combo status -l - - ● combo.service - Combo - - Loaded: loaded (/lib/systemd/system/combo.service; enabled) - Drop-In: /etc/systemd/system/combo.service.d - └─wait-for-mnt-data.conf - Active: active (running) since jeu. 2017-07-20 23:33:44 CEST; 19h ago - Main PID: 16324 (gunicorn) - - CGroup: /system.slice/combo.service - ├─16324 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application - ├─16335 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application - ├─16336 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 - ├─16337 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application - ├─16342 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application - └─16347 /usr/bin/python /usr/bin/gunicorn --bind unix:/run/combo/combo.sock --worker-class=sync --workers 5 --timeout=30 --name combo combo.wsgi:application - -### Installation Passerelle - -La procédure est la même que pour Combo - -L'accès à la base de données de Passerelle se décrit dans */etc/passerelle/settings.d/*.py* : - - # extrait de /etc/passerelle/settings.d/macollectivite.py - - DATABASES['default']['NAME'] = 'passerelle' - DATABASES['default']['USER'] = 'passerelle' - DATABASES['default']['PASSWORD'] = 'indiquer-ici-le-mot-de-passe-pour-passerelle' - DATABASES['default']['HOST'] = 'sql-prod' - DATABASES['default']['PORT'] = '5432' - -Toujours dans */etc/passerelle/settings.d/macollectivite.py*, -configuration pour l'envoi des traces d'erreur par l'ajout de ces lignes -en fin de fichier : - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.passerelle@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite passerelle] ' - SERVER_EMAIL = 'admin+prod.macollectivite.passerelle@entrouvert.com' - -Nous pouvons ensuite installer le composant : - - # apt install passerelle postgresql- - -Et vérification avec *service passerelle status* qui doit montrer -«active (running)» - -### Installation Fargo - -Reprendre la même procédure que pour les autres composants, en adaptant -le nom de la brique, c'est-à-dire : - -1. Configuration de l'accès SQL et du mail dans - */etc/fargo/settings.d/macollectivite.py* -2. Installation du composant : - - # apt install fargo postgresql- - -3. Vérification avec *service fargo status* qui doit retourner « active - (running) » - -### Installation Hobo serveur - -Reprendre la même procédure que pour les autres composants, en adaptant -le nom de la brique, c'est-à-dire : - -1. Configuration de l'accès SQL et du mail dans - */etc/hobo/settings.d/macollectivite.py* -2. Installation du composant : - - # apt install hobo postgresql- - -3. Vérification avec *service hobo status* qui doit retourner « active - (running) » - -### Installation Hobo agent - -Il s'agit d'un composant qui va écouter les ordres de déploiement (ou -provisionning) envoyés par le serveur Hobo et les exécuter sur les -autres composants. - -Installation : - - # apt install hobo-agent - -Ce démon est piloté par supervisor, ce dernier a parfois du mal à se -lancer dès la première installation. On remet donc tout à plat avec : - - service supervisor stop - service supervisor start - -Et on vérifie que hobo-agent est bien lancé par supervisor : - -service supervisor status - - ● supervisor.service - LSB: Start/stop supervisor - - Loaded: loaded (/etc/init.d/supervisor) - Active: active (running) since lun. 2017-07-17 10:09:52 CEST; 4 days ago - CGroup: /system.slice/supervisor.service - - ├─1065 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf - ├─1208 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 - └─1494 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 - -### Installation Authentic - -Le système Authentic, un peu plus ancien que les autres composants, ne -suit pas exactement les mêmes principes et les mêmes nommages. - -Le nom du paquet à installer est *authentic2-multitenant*, et on ajoute -son plugin FranceConnect *python-authentic2-auth-fc* : - - # apt install authentic2-multitenant python-authentic2-auth-fc postgresql- - -La configuration de l'accès SQL et des mails se fait dans -*/etc/authentic2-multitenant/config.py* (et non pas *settings.py* comme -pour les autres) : - - # extraits de /etc/authentic2-multitenant/config.py - DATABASES['default']['NAME'] = 'authentic' - DATABASES['default']['USER'] = 'authentic' - DATABASES['default']['PASSWORD'] = 'le-mot-de-passe-de-authentic-cree-sur-postgresql' - DATABASES['default']['HOST'] = 'sql-prod' - DATABASES['default']['PORT'] = '5432' - # ... - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.authentic@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite authentic] ' - SERVER_EMAIL = 'admin+prod.macollectivite.authentic@entrouvert.com' - -Une fois ces configurations effectués, il faut remettre le service en -place et lui demander de construire la base (update) : - - # dpkg --configure -a - # service authentic2-multitenant stop - # service authentic2-multitenant update - # service authentic2-multitenant restart - -Vérification avec *service authentic2-multitenant status* : - - # service authentic2-multitenant status - ● authentic2-multitenant.service - LSB: Authentic2 is a versatile identity provider - Loaded: loaded (/etc/init.d/authentic2-multitenant) - Active: active (running) since jeu. 2017-07-20 18:48:47 CEST; 24h ago - CGroup: /system.slice/authentic2-multitenant.service - ├─21361 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... - ├─21372 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... - ├─21377 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... - ├─21380 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... - └─25604 /usr/bin/python /usr/bin/gunicorn --pid /var/run/authentic2-multitenant/authentic2-multitenant.pid --user authentic-multitenant --group authentic-m... - -### Installation w.c.s. - -En pré-requis, LibreOffice est installé car w.c.s. l'utilise dans des -fonctionnalités de production de documents : - - # apt install libreoffice - -Reprendre la même procédure que pour les autres composants, en adaptant -le nom de la brique, c'est-à-dire : - -1. Configuration de l'accès SQL et du mail dans - */etc/wcs/settings.d/macollectivite.py* -2. Installation du composant : - - # apt install wcs postgresql- - -3. Vérification avec *service wcs status* qui doit retourner « active - (running) » - -Frontal nginx -------------- - -### Installation de Nginx - - # apt install nginx - -... rien de plus. Nous installons la version de Debian 8, mais la -version jessie-backports est possible aussi si nécessaire. - -### Configuration de base - -Mise en place d'un format de log avancé (qui affiche le tenant) dans -*/etc/nginx/conf.d/log_formats.conf* : - - # /etc/nginx/conf.d/log_formats.conf - - log_format combined_full '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$host" [$request_time ms]'; - - log_format with_request_time '$remote_addr - $remote_user [$time_local] [$request_time ms] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; - -robots.txt et favicon communs dans -*/etc/nginx/includes/macollectivite-common.conf* : - - location /favicon.ico { alias /var/www/html/favicon-macollectivite.ico; } - - location /robots.txt { alias /var/www/html/robots.txt; } - -(le favicon.ico est un copie de -[http://www.](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico)macollectivite[.fr/uploads/Image/73/SIT_](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico)macollectivitemacollectivite[_603_favicon-.ico](http://www.nanterre.fr/uploads/Image/73/SIT_NANTERRE_603_favicon-.ico), -le robots.txt interdit toute indexation) - -Pour résoudre [#18476](https://dev.entrouvert.org/issues/18476), -ajouter ce fichier : */etc/nginx/conf.d/client-max-body-size.conf* avec -ce contenu : - - client_max_body_size 200M; - -Il faut éventuellement adapter la configuration du HAProxy pour accepter -les grosses requêtes. - -### Mise en place des virtualhost (frontaux HTTP des tenants des composants Publik) - -Le soin est laissé à l'installateur de décider comment poser les -virtualhost ci-dessous dans nginx. - -Au niveau de la preprod, le modèle classique a été adopté : - -- un fichier par virtualhost dans */etc/nginx/sites-available/* -- des liens symboliques dans */etc/nginx/sites-enabled/* avec un - préfixe *10_* permettant un éventuel classement d'autres services - avant ou après. - -A noter que **ces fichiers **N**ginx de la **plate-forme de -**pré-prod**uction** peuvent être copiés** pour la plate-forme de -production, il faudra cependant veiller à la modification du -server_name du portail usagers dans le virtualhost "combo". - -#### Combo - - server { - listen 80; - server_name ~^moncompte.* # portail usagers ; selon le nom du site (attention, différent de la pré-prod) - ~^agents-.*; # portail agents ; selon le nom du site - - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/combo-access.log combined_full; - error_log /var/log/nginx/combo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/combo/tenants/$host/static/$1 - /var/lib/combo/tenants/$host/theme/static/$1 - /var/lib/combo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location ~ ^/media/(.+)$ { - alias /var/lib/combo/tenants/$host/media/$1; - } - - location / { - proxy_pass http://unix:/run/combo/combo.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - } - -#### Hobo - -Même modèle que Combo : - - server { - listen 80; - - server_name ~^hobo-.*; - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/hobo-access.log combined_full; - error_log /var/log/nginx/hobo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/hobo/tenants/$host/static/$1 - /var/lib/hobo/tenants/$host/theme/static/$1 - /var/lib/hobo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location ~ ^/media/(.+)$ { - alias /var/lib/hobo/tenants/$host/media/$1; - } - - location / { - proxy_pass http://unix:/run/hobo/hobo.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - } - -#### Passerelle - -Même modèle que Combo, mais aucune diffusion de /media (il s'agit de -données privées dans Passerelle). - - server { - listen 80; - - server_name ~^passerelle-.*; - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/passerelle-access.log combined_full; - error_log /var/log/nginx/passerelle-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/passerelle/tenants/$host/static/$1 - /var/lib/passerelle/tenants/$host/theme/static/$1 - /var/lib/passerelle/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/passerelle/passerelle.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - } - -#### fargo - -Même modèle que Combo, mais aucune diffusion de /media (il s'agit des -fichiers usagers privés dans Fargo). - - server { - listen 80; - - server_name ~^portedoc-.*; - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/fargo-access.log combined_full; - error_log /var/log/nginx/fargo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/fargo/tenants/$host/static/$1 - /var/lib/fargo/tenants/$host/theme/static/$1 - /var/lib/fargo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/fargo/fargo.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - } - -#### Authentic - -Comme Combo, sans diffusion des /media, et en utilisant le nom du -service *authentic2-multitenant.* - - server { - listen 80; - - server_name ~^connexion-.*; - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/authentic2-multitenant-access.log combined_full; - error_log /var/log/nginx/authentic2-multitenant-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/authentic2-multitenant/tenants/$host/static/$1 - /var/lib/authentic2-multitenant/tenants/$host/theme/static/$1 - /var/lib/authentic2-multitenant/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/authentic2-multitenant/authentic2-multitenant.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - } - -#### w.c.s. - - server { - - listen 80; - - server_name ~^demarches-.*; - include includes/macollectivite-common.conf; - - access_log /var/log/nginx/wcs-access.log combined_full; - error_log /var/log/nginx/wcs-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/wcs/$host/static/$1 - /var/lib/wcs/$host/theme/static/$1 - /var/lib/wcs/collectstatic/$1 - /var/lib/wcs-au-quotidien/collectstatic/$1 - =404; - } - - location /qo { alias /usr/share/wcs/qommon/; } - location /apache-errors { alias /usr/share/auquotidien/apache-errors/; } - - location /themes { - root /; - try_files /var/lib/wcs/$host$uri - /var/lib/wcs-au-quotidien/$host$uri - /usr/share/wcs/$uri - =404; - } - - location / { - proxy_pass http://unix:/var/run/wcs/wcs.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - } - } - -### Vérification des réponses de Nginx - -Une fois les virtualhost en place, les sites doivent répondre par des -erreurs 404 : ce sont les applications de Publik qui répondent qu'elles -n'ont pas encore d'instance liés aux noms prévus. - -C'est tout de même déjà le temps de vérifier : - -- que les certificats HTTPS sont ok, -- que haproxy envoie bien sur web1, -- que les requêtes arrivent sur les bons virtualhost, par exemple pour - fargo on vérifiera que l'accès à - [https://portedoc-moncompte.](https://portedoc-moncompte.nanterre.fr/)macollectivite[.fr](https://portedoc-moncompte.nanterre.fr/) - provoque une 404 dans */var/log/nginx/fargo-access.log* et aucun - message dans */var/log/nginx/fargo-error.log* ; opération à répéter - avec tous les autres sites installés. - -Déploiement des instances -------------------------- - -****Attention le déploiement ne doit être lancé que si TOUS les services -ont été testés et répondent des 404 aux adresses prévus -****[**https://xxx-moncompte.**](https://xxx-moncompte.nanterre.fr/)**macollectivite**[**.fr/**](https://xxx-moncompte.nanterre.fr/)**.** - -Si ce n'est pas le cas, le déploiement va échouer ; et la reprise sur -ces erreurs n'est pas toujours simple. - -### Préparation, création du fichier «recipe» - -Installation des thèmes Publik (incluant le thème pour -macollectivite) : - - apt install publik-base-theme - -Création d'un fichier de déploiement -*/srv/nfs/publik/scripts/recipe-macollectivite-prod.json* -(note : fichier déjà disponible sur l'infra de pré-prod); la ligne -"password" est à compléter le mot de passe à communiquer à Entr'ouvert : - - { - "variables": { - "hobo": "hobo-moncompte.macollectivite.fr", - "authentic": "connexion-moncompte.macollectivite.fr", - "combo": "moncompte.macollectivite.fr", - "combo_agent": "agents-moncompte.macollectivite.fr", - "passerelle": "passerelle-moncompte.macollectivite.fr", - "wcs": "demarches-moncompte.macollectivite.fr", - "fargo": "portedoc-moncompte.macollectivite.fr" - }, - "steps": [ - {"create-hobo": { - "url": "https://${hobo}/" - }}, - {"create-superuser": { - "email": "admin+macollectivite@entrouvert.com", - "password": "..." - }}, - {"create-authentic": { - "url": "https://${authentic}/", - "title": "Connexion" - }}, - {"set-idp": { }}, - {"create-combo": { - "url": "https://${combo}/", - "title": "Compte citoyen", - "template_name": "portal-user" - }}, - {"create-combo": { - "url": "https://${combo_agent}/", - "slug": "portal-agent", - "title": "Portail agent", - "template_name": "portal-agent" - }}, - {"create-wcs": { - "url": "https://${wcs}/", - "title": "Démarches", - "template_name": "modele.zip" - }}, - {"create-fargo": { - "url": "https://${fargo}/", - "title": "Porte-documents" - }}, - {"create-passerelle": { - "url": "https://${passerelle}/", - "title": "Passerelle" - }}, - {"set-theme": { - "theme": "macollectivite" - }} - ] - } - -### Lancement du déploiement - -On utilise la commande «cook» proposée par le logiciel «hobo». Cette -commande doit impérativement être exécutée par l'utilisateur «hobo», on -utilise donc *sudo -u hobo … :* - - # sudo -u hobo hobo-manage cook /srv/nfs/publik/scripts/recipe-macollectivite-prod.json -v 2 - -### Vérification du déploiement - -A la fin du déploiement, les logiciels Publik Django packagés doivent -avoir déployé les instances dans PostgreSQL (schémas visibles dans -chaque base) mais surtout crée le répertoire contenant la configuration -du site cible : - -Ce qui est visible dans la plateforme de pré-production doit l'être sur -la plate-forme de production, donc on doit voir ceci (en retirant les -*preprod-*) : - - # ls -ld /var/lib/*/tenants/* - drwxr-xr-x 3 authentic-multitenant authentic-multitenant 120 Jul 12 15:19 /var/lib/authentic2-multitenant/tenants/connexion-preprod-moncompte.macollectivite.fr - drwxr-xr-x 5 combo combo 156 Jul 21 00:25 /var/lib/combo/tenants/agents-preprod-moncompte.macollectivite.fr - drwxr-xr-x 5 combo combo 4096 Jul 20 10:38 /var/lib/combo/tenants/preprod-moncompte.macollectivite.fr - drwxr-xr-x 3 fargo fargo 107 Jul 10 18:19 /var/lib/fargo/tenants/portedoc-preprod-moncompte.macollectivite.fr - drwxr-xr-x 3 hobo hobo 81 Apr 18 10:42 /var/lib/hobo/tenants/hobo-preprod-moncompte.macollectivite.fr - drwxr-xr-x 3 passerelle passerelle 107 Jul 10 18:19 /var/lib/passerelle/tenants/passerelle-preprod-moncompte.macollectivite.fr - -w.c.s. créé directement une base de données -*wcs_demarches_moncompte_macollectivite_fr* -accompagnée de son dossier dans */var/lib/wcs-au-quotidien* - - # ls -ld /var/lib/wcs-au-quotidien/* - drwxr-xr-x 7 root root 66 Apr 13 15:55 /var/lib/wcs-au-quotidien/collectstatic - -rw------- 1 root root 50 Apr 13 15:55 /var/lib/wcs-au-quotidien/config.pck - drwxr-xr-x 22 wcs-au-quotidien wcs-au-quotidien 4096 Jul 10 18:19 /var/lib/wcs-au-quotidien/demarches-preprod-moncompte.macollectivite.fr - drwxr-xr-x 2 root root 47 Apr 13 15:59 /var/lib/wcs-au-quotidien/skeleton.invalid - drwxr-xr-x 2 root root 23 Apr 13 16:00 /var/lib/wcs-au-quotidien/skeletons - -Si un répertoire manque, le déploiement a rencontré un soucis : -contacter le support Entr'ouvert - -Si les répertoires sont présents, alors : - -- https://moncompte.macollectivite.fr : doit afficher une page "Votre installation de Combo - fonctionne (...) Le site est actuellement vide (…)", -- https://agents-moncompte.macollectivite.fr même chose, -- https://connexion-moncompte.macollectivite.fr : doit proposer une - page de connexion avec un design proche de la pré-prod, -- https://passerelle-moncompte.macollectivite.fr : doit re-diriger - vers le site connexion-moncompte précédent, -- https://hobo-moncompte.macollectivite.fr : même chose, redirection vers connexion-moncompte, -- https://portedoc-moncompte.macollectivite.fr : même chose, redirection vers connexion-moncompte, -- https://demarches-moncompte.macollectivite.fr : doit rediriger vers - https://moncompte.macollectivite.fr/. - -Si un des sites ne répond pas comme prévu : contacter le support -Entr'ouvert. - -Configuration de la gestion des identités ------------------------------------------ - -### Configuration de l'authentification LDAP - -Création d'un fichier -*/var/lib/authentic2-multitenant/tenants/connexion-moncompte.macollectivite.fr/settings.json.* - -(Conseil : prendre modèle sur le fichier identique en pré-prod et -adapter les paramètres LDAP). - - { - "ACCOUNT_ACTIVATION_DAYS": 1, - "PASSWORD_RESET_TIMEOUT_DAYS": 1, - "A2_REGISTRATION_EMAIL_IS_UNIQUE": true, - "A2_EMAIL_IS_UNIQUE": true, - "LDAP_AUTH_SETTINGS": [ - { - "realm": "mairie-macollectivite.fr", - "url": ["ldap://v-dc1.vnan.intra/", "ldap://v-dc2.vnan.intra/"], - "basedn": "OU=macollectivite,DC=vnan,DC=intra", - "binddn": "xxxxx@vnan.intra", - "bindpw": "xxxxx", - "user_filter": "(&(objectClass=user)(sAMAccountType=805306368)(|(mail=%s)(samaccountname=%s))(|(memberOf=CN=.LD_Agents_BO,OU=macollectivite,DC=vnan,DC=intra)(memberOf=CN=.LD_Agents_Publik,OU=macollectivite,DC=vnan,DC=intra)))", - "username_template": "{samaccountname[0]}@{realm}", - "update_username": true, - "active_directory": true, - "attributes": [ - "mail", - "sAMAccountName", - "cn", - "sn", - "givenName", - "userPrincipalName" - ], - "external_id_tuples": [["samaccountname"],["dn:noquote"]], - "shuffle_replicas": false, - "require_cert": "never", - "use_tls": false, - "set_mandatory_roles": ["Agent"], - "user_can_change_password": false - }, - { - "realm": "entrouvert.com", - "url": "ldaps://ldap.entrouvert.org/", - "basedn": "o=entrouvert,ou=companies,o=libre-entreprise", - "user_filter": "uid=%s", - "username_template": "{uid[0]}@{realm}", - "groupsu": ["cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise"], - "groupstaff": ["cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise"], - "group_filter": "(&(uniqueMember={user_dn})(objectClass=legroup))", - "create_group": true, - "attributes": [ "uid" ], - "set_mandatory_groups": ["LDAP Entrouvert"], - "user_can_change_password": false - } - ] - } - -Lancer un import manuel des comptes (pour ne pas attendre le cron) -avec : - - # sudo -u authentic-multitenant authentic2-multitenant-manage tenant_command sync-ldap-users -d connexion-moncompte.macollectivite.fr - -Cette commande ne doit rien afficher (ce qui signifie que tout s'est -bien déroulé), les comptes doivent être visibles dans -[https://connexion-moncompte.](https://connexion-moncompte.nanterre.fr/manage/users/)macollectivite[.fr/manage/users/](https://connexion-moncompte.nanterre.fr/manage/users/) - -Mise en place de l’équilibrage de la charge -------------------------------------------- - -### Vue générale - -Le principe est de déplacer vers le partage de fichier (NFS) les -éléments de configuration de web1 : - -- les répertoires de configuration */etc/xxx* des composants Publik, - copiés vers */srv/nfs/publik/etc/xxx,* -- les données */var/lib/xxx* de ces mêmes composants, copiés vers - */srv/nfs/publik/var-lib/xxx,* -- la configuration nginx ; copiés vers */srv/nfs/publik/etc/nginx/xxx* - et */srv/nfs/publik/var-www/html.* - -Sur **web1 et sur web2**, on utilise alors des liens symboliques : - -- Configuration : */etc/xxx* → */srv/nfs/publik/etc/xxx,* -- Données : */var/lib/xxx* → */srv/nfs/publik/var-lib/xxx,* -- Configuration nginx. - -### Détail des opérations - -Création des répertoires partagés : - -- configurations: */srv/nfs/publik/etc*, -- données des tenants: */srv/nfs/publik/var-lib/,* -- éléments web (favicon, robots.txt): */srv/nfs/publik/var-www/,* - -Déplacement des configurations et données des services Publik - -1. Service *wcs* - - service wcs stop - mv /etc/wcs /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/wcs /etc/wcs - mv /var/lib/wcs /srv/nfs/publik/var-lib/ - ln -sf /srv/nfs/publik/var-lib/wcs /var/lib/wcs - service wcs start - -2. Service *combo* - - service combo stop - mv /etc/combo /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/combo /etc/combo - mv /var/lib/combo /srv/nfs/publik/var-lib/ - ln -sf /srv/nfs/publik/var-lib/combo /var/lib/combo - service combo start - -3. Même procédure avec *fargo* -4. Même procédure avec *passerelle* -5. Même procédure avec *hobo* -6. Même procédure avec *authentic2-multitenant* -7. Configuration hobo-agent - - service supervisor stop - mv /etc/hobo-agent /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/hobo-agent /etc - service supervisor start - -Autres partages via NFS : - -1. Configurations nginx - - service nginx stop - mkdir /srv/nfs/publik/etc/nginx - cd /etc/nginx - mv conf.d includes sites-available sites-enabled /srv/nfs/publik/etc/nginx/ - ln -sf /srv/nfs/publik/etc/nginx/* . - service nginx start - -2. Éléments web statiques - - cd /var/www - mv html /srv/nfs/publik/var-www/ - ln -sf /srv/nfs/publik/var-www/html . - -3. APT : dépôts et préférences backports - - mkdir /srv/nfs/publik/etc/apt - cd /etc/apt - mv sources.list.d preferences.d /srv/nfs/publik/etc/apt/ - ln -sf /srv/nfs/publik/etc/apt/* . - -### Opérations sur web2 - -**Attention** : l'UID et le GUID de l'utilisateur "web" doit être -identique. - -On prépare les répertoires de configuration et de données des composants -Publik **avant** leur installation : - -1. Service wcs - - ln -sf /srv/nfs/publik/etc/wcs /etc/wcs - ln -sf /srv/nfs/publik/var-lib/wcs /var/lib/wcs - -2. Service *combo* - - ln -sf /srv/nfs/publik/etc/combo /etc/combo - ln -sf /srv/nfs/publik/var-lib/combo /var/lib/combo - -3. Même procédure avec *fargo* -4. Même procédure avec *passerelle* -5. Même procédure avec *hobo* -6. Même procédure avec *authentic2-multitenant* -7. Configuration hobo-agent - - ln -sf /srv/nfs/publik/etc/hobo-agent /etc/hobo-agent - -On utilise aussi les autres configurations partagées via NFS : - -1. Configurations nginx - - service nginx stop - cd /etc/nginx - rm -rf conf.d includes sites-available sites-enabled - ln -sf /srv/nfs/publik/etc/nginx/* . - service nginx start - -2. Éléments web statiques - - cd /var/www - rm -rf html - ln -sf /srv/nfs/publik/var-www/html . - -3. APT : dépôts et préférences backports - - cd /etc/apt - rm -rf sources.list.d preferences.d - ln -sf /srv/nfs/publik/etc/apt/* . - -On peut alors lancer l'installation des composants packagés. Attention, -lors de cette étape, toujours refuser les éventuelles demandes de -modification des fichiers de configuration (on utilise ceux partagés par -NFS) : - - apt install wcs wcs-au-quotidien - apt install combo - apt install fargo - apt install passerelle - apt install hobo - apt install authentic2-multitenant - apt install hobo-agent - -Nous comparons la liste des paquets installés entre web1 et web2 -(obtenue avec *dpkg -l*), et installons les paquets suivants : - -- python-authentic2-auth-fc, -- python-combo-plugin-macollectivite, -- publik-base-theme, -- gettext - -### Désactivation des *crons* Publik sur web2 - -Il est **très important** de désactiver les crons de Publik sur web2, -pour ne pas avoir de compétition/conflit avec ceux déjà en place sur -web1, puisqu'ils agissent sur les mêmes données. - -Il faut donc poser des # devant les lignes des crons suivants : - -- */etc/cron.d/wcs,* -- */etc/cron.d/authentic2-multitenant,* -- */etc/cron.d/passerelle,* -- */etc/cron.hourly/python-combo,* -- */etc/cron.hourly/fargo.* -