Table des matières
2023/09/25 (migration) : Mobilizon
Météo
Moment informel durant lequel on exprime en peu de mots comment on se sent et si on a une attente forte pour la réunion. Ce n'est pas un moment de discussion mais d'expression individuelle et ce n'est pas obligatoire
Attente(s) forte(s)
Si l'une ou l'autre personne exprime une attente forte, merci de vous en occuper en priorité ou de la noter dans le hub ou dans un point approprié.
Fin: 17h30
Anciens TODOs
- Préparation de la migration de Mobilizon, càd copier les données de mobilizon.be et les placer sur la nouvelle VM
- Mettre en place un cronjob avec l'outil geoipupdate (peut se faire à la main dans un premier temps)
Configuration
GeoCoder
Pour le moment on garde Nominatim, et on verra plus tard s'il faut changer. Il faudra regarder combien de requêtes par mois sont faites vers Nominatim.
SMTP
On réutilise la config SMTP existante, mais on la changera sans doute plus tard quand on aura les accès au nom de domaine (création d'une boîte mail chez Neutrinet ?)
Préparation de la migration
On va devoir récupérer un dump de la base de données de mobilizon.be
Il nous faudra aussi les médias (uploads, etc.), qui se trouvent dans /home/mobilizon/live/uploads
.
Pour savoir combien d'espace tout cela occupe, il y a une chouette commande qui s'appelle ncdu, et qui affiche de manière “graphique” l'espace utilisé par chaque dossier.
On voit que la taille des dossiers fait 2Gb à tout casser.
On commence par vérifier que notre repo git est à jour. On fait git pull origin main
. On remarque qu'on a un conflit avec l'inventaire. VSCodium nous permet de régler les conflits assez facilement, donc pourquoi se priver ?
On vérifie que la config haproxy (ici, c'est dans le dossier haproxy_keepalived
) contient bien le nom de domaine mobilizon.be. On rajoute aussi dans la variable letsencrypt_domains_gandi
le domaine mobilizon.be.
On va d'abord tester le playbook haproxy sur celui qui n'est pas actif. Pour cela, on se rend sur un des haproxy, et on regarde qui a l'IP flottante (ou VIP pour virtual IP). Ici, on voit que c'est haproxy-02.patata.louise.neutri.net
, donc on va faire nos tests sur l'autre.
On active notre virtualenv:
source env/bin/activate
On lance le playbook haproxy:
ansible-playbook playbooks/apps/haproxy.yml -l haproxy-01.patata.louise.neutri.net --diff
Comme ça se passe bien, on lance sur l'autre haproxy :
ansible-playbook playbooks/apps/haproxy.yml -l haproxy-02.patata.louise.neutri.net --diff
Là on a une erreur lors de la création du certificat. Pas grave, on relance le playbook, c'est ça qui est chouette avec Ansible \o/
Ensuite, on met l'IP de Neutrinet dans notre /etc/hosts
pour tester:
80.67.181.20 mobilizon.be
Pour le moment, on n'a rien.
On doit encore lancer le playbook Mobilizon pour adapter le nom de domaine dans la config Caddy:
ansible-playbook playbooks/apps/mobilizon.yml -l mobilizon.patata.louise.neutri.net --diff
On remarque une erreur 502, c'est Mobilizon qui se casse la figure… On va réessayer en partant d'une VM toute neuve, car on avait fait des modifs la dernière fois.
Ça marche !
Problème : mobilizon.be est encore en version 2.0.2, alors que nous avons fait un test avec la version 3.0.1 On va donc refaire un test avec la bonne version, en espérant qu'il ne faille pas modifier le playbook
On supprime la DB, les medias, et la config, puis on relance le playbook en ayant modifier le numéro de version:
mobilizon_version: 2.0.2
Attention à bien modifier la variable à la fois dans l'inventaire et dans les variables defaults du rôle.
Malheureusement, la migration de la base de données ne fonctionne pas… On va donc essayer autrement, en partant d'un dump de la db existante sur mobilizon.be.
Pour cela, on supprime d'abord la base de donnée sur pgsql-03.patata.louise.neutri.net (qui est le serveur primaire actuellement):
sudo -u postgres dropdb mobilizon-be
Et on recrée la db:
sudo -u postgres createdb mobilizon-be
Ensuite, on donne les privilèges à l'utilisateur mobilizon-be:
sudo -u postgres psql mobilizon-be GRANT ALL PRIVILEGES ON DATABASE "mobilizon-be" to "mobilizon-be";
On vérifie que les extensions sont les mêmes que sur mobilizon.be avec la commande \dx
en étant connecté à la db.
Dans notre cas, on doit rajouter les trois extensions:
CREATE EXTENSION "postgis"; CREATE EXTENSION "pg_trgm"; CREATE EXTENSION "unaccent";
Enfin, on fait un dump de la base de données de mobilizon.be:
pg_dump -U mobilizon mobilizon_prod | gzip > $(date +%Y-%m-%d).mobilizon_prod.sql.gz
Que l'on copie sur la VM mobilizon.
Et on restaure la db à partir de ce dump:
psql -h haproxy-00.patata.louise.neutri.net -U mobilizon-be < 2023-09-25.mobilizon_prod.sql
On doit à présent copier les données d'uploads, on peut le faire avec un rsync (on aura de toute façon besoin de rsync au moment de la migration définitive, donc c'est bien de le configurer directement). On place d'abord notre clé SSH sur mobilizon.be pour pouvoir s'y connecter depuis la nouvelle VM.
Pour se faciliter la vie, on ajoute ceci dans la config du client SSH:
Host mobilizon.be User mobilizon IdentityFile /chemin/vers/la/cle/ssh AddressFamily inet
A noter qu'on a du ajouter une IPv4 à la vm qui par défaut n'a qu'une IPv6 car le VPS n'avait qu'une IPv4.
Et on fait le rsync:
rsync -az mobilizon.be:/home/mobilizon/live/uploads/ /var/lib/mobilizon/uploads/ --progress
Et on modifie les permissions:
chown mobilizon-be: /var/lib/mobilizon/uploads/ -R
Mais ça ne marche pas. On se dit que c'est peut-être lié à l'ancienne config de la version 2.0.2 qui n'est pas compatible avec les autres configurations faites via le playbook. On décide donc de tenter de faire la mise à jour vers une version plus récente 3.x.
On décide de d'abord faire une mise à jour de Mobilizon vers la 2.1.0 (pour commencer), puis vers la 3.0.1 pour voir si cela règle les problèmes qu'on a… On va le faire à la main plutôt que via le playbook, pour être sûr de faire l'ensemble des migrations nécessaires.
Pour se faire, on coupe le service mobilizon sur mobilizon.be:
sudo systemctl stop mobilizon
On fait pareil sur la VM.
On fait un dump (voir plus haut), et on recrée la db (voir plus haut).
On télécharge la release 2.1.0 de mobilizon à la main:
wget https://packages.joinmobilizon.org/2.1.0/mobilizon_2.1.0_amd64.tar.gz -P /tmp/ mkdir /var/www/mobilizon-be/mobilizon-2.1.0 tar xvf /tmp/mobilizon_2.1.0_amd64.tar.gz --strip-components=1 -C /var/www/mobilizon-be/mobilizon-2.1.0 ln -sf /var/www/mobilizon-be/mobilizon-2.1.0/ /var/www/mobilizon-be/dist chown mobilizon-be: mobilizon-2.1.0/ -R
Et on applique la migration:
bin/mobilizon_ctl migrate
Comme ça se passe bien, on fait de même pour la 3.0.1, et on démarre mobilizon sur la VM. Et ça marche \o/
On fait un dernier rsync pour avoir les derniers uploads:
rsync -az mobilizon.be:/home/mobilizon/live/uploads/ /var/lib/mobilizon/uploads/ --delete --progress chown mobilizon-be: /var/lib/mobilizon/uploads/ -R
Le delete permet d'effacer les fichiers qui auraient été supprimé depuis la dernière fois.
Maintenant, on fait nos tests:
- Création d'un évènement: https://mobilizon.be/events/9f28279e-450b-4096-9fde-34f7709bca23
- Ajout d'un admin: ça marche, on a juste eu peur avec quelques erreurs
- Envoi de mail: on a dû un peu changer la config, cf. https://github.com/framasoft/mobilizon/blob/main/UPGRADE.md
- Note: Célo n'a pas reçu de mail, mais HgO oui
On procède à la mise à jour vers 3.2.0 en testant cette fois le playbook Ansible.
Il reste quelques détails à régler. Par exemple, la base de données GeoLite2-City qui permet de proposer des évènements proche de l'utilisateur… Pour le moment, c'est pas géré par le playbook, mais Célo va y travailler. En attendant, on l'a juste copié dans /var/lib/mobilizon/geo
Autre truc bizarre, c'est les mails : mobilizon envoie des mails à HgO mais pas à Célo . Mais bon, comme on va changer la config mail pour que ce soit géré par Neutrinet, on peut-être attendre un peu avant d'investiguer
On a rajouté un dossier /var/lib/mobilizon/sitemap
parce qu'il y avait une erreur de permissions dans les logs.
TODO:
- Gérer les mails chez Neutrinet
- Tester la config mail pour Célo
- Gérer la db GeoLite2-City dans le playbook
- Mettre en place un cronjob avec l'outil geoipupdate
- Créer le dossier /var/lib/mobilizon/sitemap via Ansible
- Configurer Mobilizon pour permettre les notifications push : https://docs.joinmobilizon.org/administration/configure/push/
Gopass
- Explication du password manager
- Installation et configuration
- Explication du concept de « password store »
- Comment récupérer un mot de passe
- Comment rajouter un nouveau mot de passe
- Comment modifier un mot de passe
- Comment supprimer un mot de passe
- Ajouter et supprimer des personnes
Prochaine réunion
Prochain atelier Gopass + Keycloak: 07/10
Lieu : Chez Célo
Météo de fin
Moment informel durant lequel on exprime en peu de mots comment, à titre personnel, la réunion a été vécue que ce soit positif ou négatif. Si une ou plusieurs tension est née durant la réunion, il est peut-être nécessaire d'envisager l'une ou l'autre réunion pour y remédier.