# Haute disponiblité Ce chapitre présente des moyens permettant d'ajouter de la redondance en vue de garantir la disponibilité d'une installation de Publik. La charge des opérations est dès lors répartie sur plusieurs machines; et le service est maintenu en cas de panne d'un des composants. ## Pré-requis Se référer aux pré-requis généraux, avec les différences suivantes: * 2 machines hôtes identiques (ici nommées *web1* et *web2*) disposant des ressources suivantes: * CPU 8 cœurs * 32Go de mémoire vive * 100Go d'espace disque * Debian 10 installé en architecture amd64 (installation minimale) * un service frontal HAProxy (géré par le client) * un service de base de données PostgreSQL disposant de 200Go d'espace (cluster géré par le client) * un service de partage de fichiers NFS disposant de 200Go d'espace (cluster géré par le client) ## Installation des composants ### Création des utilisateurs avec UID identiques sur web1 et web2 Lors de partage de fichiers sur un réseau (NFS par exemple), il faut que les UID des utilisateurs Unix concernés soient les mêmes sur les deux machines web1 et web2. Nous fournissons un script pour faire cela : publik-create-users Alternativement vous pouvez utiliser : #!/bin/sh uid=2102 for user in hobo authentic-multitenant wcs passerelle combo fargo chrono bijoe 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:2102:2102:hobo daemon,,,:/var/lib/hobo:/bin/false authentic-multitenant:x:2103:2103:authentic2-multitenant daemon,,,:/var/lib/authentic2-multitenant:/bin/false wcs:x:2104:2104:wcs daemon,,,:/var/lib/wcs:/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 chrono:x:2109:2109:chrono daemon,,,:/var/lib/chrono:/bin/false bijoe:x:2110:2110:bijoe daemon,,,:/var/lib/bijoe:/bin/false ### Vue générale Avant l'installation des modules, il faut pour chacun d'eux (sauf w.c.s.) configurer l'accès au PostgreSQL; par exemple, dans */etc/combo/settings.d/macollectivite.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' Suivre ensuite les instructions pour une installation mono-machine. Ensuite déplacer les éléments de configuration vers le partage de fichiers : * 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 *web2* nous pointons les fichiers partagés à l'aide de 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 : * Configuration: `/srv/nfs/publik/etc`, * Données des tenants: `/srv/nfs/publik/var/lib/` * Données statiques: `/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 *www-data* doit être identique. Préparer 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 Préparer la configuration des autres composants: 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/* . 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-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.* ## 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 qui ont besoin de */srv/nfs* : Combo, Fargo, Passerelle, authentic2-multitenant, hobo, hobo-agent, wcs.