Table des matières

2023/09/25 (migration) : Mobilizon

Heure de début : 14h

Présences :

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

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:

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:

Gopass

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.