fr:rapports:2023:06-19
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
fr:rapports:2023:06-19 [2023/11/06 14:50] – créée hgo | fr:rapports:2023:06-19 [2023/11/23 13:43] (Version actuelle) – hgo | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | # 2023/06/19 (migration) : Mobilizon | + | # 2023/06/19 (atelier) : Ansible |
- | * [Réunion précédente](https:// | + | * [Réunion précédente](https:// |
- | * [Pad de la réunion](https:// | + | * [Pad de la réunion](https:// |
- | + | ||
- | Heure de début : 14h | + | |
Présences : | Présences : | ||
Ligne 24: | Ligne 22: | ||
## Anciens TODOs | ## Anciens TODOs | ||
+ | - Demander à Alyve pour récupérer la gestion des DNS (elle est sur Matrix et Mastodon) -> demande du transfert du domaine -> en cours | ||
+ | - Rajouter la gestion du SMTP dans le playbook -> Célo a fait des trucs | ||
+ | - Rajouter la config pour l'IPv6 dans la BDD : https:// | ||
- Préparation de la migration de Mobilizon, càd copier les données de mobilizon.be et les placer sur la nouvelle VM | - 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' | + | - Tester le redémarrage de la VM |
- | ## Configuration | + | ## Configuration |
### GeoCoder | ### GeoCoder | ||
+ | |||
+ | Sur mobilizon.be, | ||
+ | |||
+ | D' | ||
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. | 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. | ||
Ligne 35: | Ligne 40: | ||
### SMTP | ### 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 ?) | + | Il reste encore à configurer Mobilizon pour envoyer des mails. |
- | ### Préparation de la migration | + | On peut regarder comment c'est fait sur mobilizon.be |
- | On va devoir récupérer un dump de la base de données de mobilizon.be | + | Sur le serveur, cela se trouve dans le dossier `live/ |
+ | ``` | ||
+ | config :mobilizon, Mobilizon.Web.Email.Mailer, | ||
+ | ``` | ||
- | Il nous faudra aussi les médias | + | On réutilise la config SMTP, mais on la changera sans doute plus tard quand on aura les accès au nom de domaine |
- | Pour savoir combien d' | + | ### Postgis |
- | On voit que la taille des dossiers fait 2Gb à tout casser. | + | Il faut qu'on installe le plugin `postgresql-13-postgis` sur tous les hosts postgresql, car sinon la base de données de Mobilizon se casse la figure lorsqu' |
- | 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' | + | On doit faire une boucle dans le rôle ansible, car la directive |
- | On vérifie que la config haproxy (ici, c'est dans le dossier | + | On peut utiliser |
- | On va d' | + | On utilise la directive `loop` pour parcourir la liste des serveurs postgresql définis dans la variable `postgresql_patroni_hosts`, et pour chaque serveur dans la liste on délègue la tâche vers celui-ci: |
- | + | ```yaml | |
- | On active notre virtualenv: | + | delegate_to: |
- | ``` | + | loop: "{{ postgresql_patroni_hosts }}" |
- | source env/ | + | loop_control: |
+ | loop_var: postgresql_host | ||
``` | ``` | ||
- | On lance le playbook | + | Le problème, c'est qu'il y a deux cas différents. Lorsque |
- | ``` | + | |
- | ansible-playbook playbooks/ | + | |
- | ``` | + | |
- | Comme ça se passe bien, on lance sur l'autre haproxy : | + | Une première possibilité est d' |
- | ``` | + | ```yaml |
- | ansible-playbook playbooks/ | + | - name: Installation de la dépendance postgresql pour postgis |
+ | ansible.builtin.package: | ||
+ | name: | ||
+ | | ||
+ | state: present | ||
+ | delegate_to: | ||
+ | loop: "{{ postgresql_patroni_hosts }}" | ||
+ | loop_control: | ||
+ | loop_var: postgresql_host | ||
+ | when: postgresql_patroni_hosts | length > 0 | ||
``` | ``` | ||
- | Là on a une erreur lors de la création du certificat. Pas grave, on relance | + | Puis une seconde fois pour le cas où la liste est vide et où la tâche n'a pas été appliquée, en spécifiant de ne faire cette opération que lorsque la liste est vide : |
- | Ensuite, on met l'IP de Neutrinet dans notre `/ | + | |
- | ``` | + | ```yaml |
- | 80.67.181.20 mobilizon.be | + | - name: Installation de la dépendance postgresql pour postgis |
+ | ansible.builtin.package: | ||
+ | name: | ||
+ | - postgresql-{{ postgresql_major_version }}-postgis | ||
+ | state: present | ||
+ | delegate_to: | ||
+ | when: postgresql_patroni_hosts | length == 0 | ||
``` | ``` | ||
- | Pour le moment, on n'a rien. | + | (On note l' |
- | On doit encore lancer le playbook Mobilizon pour adapter le nom de domaine dans la config Caddy: | + | L' |
- | ``` | + | |
- | ansible-playbook playbooks/ | + | |
+ | ```yaml | ||
+ | - name: Installation de la dépendance postgresql pour postgis | ||
+ | ansible.builtin.package: | ||
+ | name: | ||
+ | | ||
+ | state: present | ||
+ | delegate_to: | ||
+ | loop: "{{ postgresql_patroni_hosts if (postgresql_patroni_hosts | length > 0) else [inventory_hostname] }}" | ||
+ | loop_control: | ||
+ | loop_var: postgresql_host | ||
``` | ``` | ||
- | On remarque une erreur 502, c'est Mobilizon qui se casse la figure… | + | Dans la directive `loop`, on dit : « Prend la liste définie dans la variable `postgresql_patroni_hosts`, |
- | Ça marche ! | + | Dans ce genre de situation, soit on privilégie la lisibilité, |
- | 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 :grimacing: | + | En général, on utilise plutôt les `if` / `else` dans des templates, et on évite de les utiliser dans les tâches. Donc on va partir sur la solution plus verbeuse. |
- | On supprime | + | ### Connexion base de données en IPv6 |
+ | |||
+ | On doit rajouter l' | ||
+ | |||
+ | ```ruby | ||
+ | config | ||
+ | adapter: Ecto.Adapters.Postgres, | ||
+ | socket_options: | ||
``` | ``` | ||
- | mobilizon_version: | ||
- | ``` | ||
- | Attention à bien modifier la variable à la fois dans l' | ||
- | Malheureusement, | + | ### SSH agent |
+ | |||
+ | On configure le SSH agent pour qu'il arrête de nous embêter avec les clés SSH et les mots de passe dans tous les sens: | ||
+ | |||
+ | https:// | ||
- | Pour cela, on supprime d' | + | Il faut sans doute créer |
``` | ``` | ||
- | sudo -u postgres dropdb mobilizon-be | + | mkdir -p ~/ |
``` | ``` | ||
- | Et on recrée | + | On crée la config `ssh-agent.service`: |
``` | ``` | ||
- | sudo -u postgres createdb mobilizon-be | + | [Unit] |
+ | Description=SSH key agent | ||
+ | |||
+ | [Service] | ||
+ | Type=simple | ||
+ | Environment=SSH_AUTH_SOCK=%t/ | ||
+ | ExecStart=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=default.target | ||
``` | ``` | ||
- | Ensuite, on donne les privilèges à l'utilisateur mobilizon-be: | + | Avec l'option `-t` on peut définir la durée de validité des clés SSH, c'est pratique pour ne pas avoir une dizaine de clés actives à la fin de la journée. |
+ | |||
+ | Lorsque la config a été créée, on fait: | ||
``` | ``` | ||
- | sudo -u postgres psql mobilizon-be | + | systemctl start --user ssh-agent |
- | GRANT ALL PRIVILEGES ON DATABASE " | + | systemctl enable --user ssh-agent |
``` | ``` | ||
- | On vérifie que les extensions sont les mêmes que sur mobilizon.be avec la commande | + | Dans la config |
- | + | ||
- | Dans notre cas, on doit rajouter les trois extensions: | + | |
``` | ``` | ||
- | CREATE EXTENSION | + | export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ |
- | CREATE EXTENSION " | + | |
- | CREATE EXTENSION " | + | |
``` | ``` | ||
- | Enfin, on fait un dump de la base de données de mobilizon.be: | + | Enfin, on ouvre un nouveau terminal et on vérifie que le ssh-agent tourne: |
``` | ``` | ||
- | pg_dump | + | ssh-add -l |
``` | ``` | ||
- | Que l'on copie sur la VM mobilizon. | ||
- | Et on restaure | + | On rajoute également |
``` | ``` | ||
- | psql -h haproxy-00.patata.louise.neutri.net -U mobilizon-be < 2023-09-25.mobilizon_prod.sql | + | AddKeysToAgent |
``` | ``` | ||
- | On doit à présent copier les données d' | + | ### Tests du playbook |
- | Pour se faciliter | + | On a pu lancer le playbook en local via molécule, maintenant on va le lancer sur la VM mobilizon.patata.louise.neutri.net qu'on avait créé le mois passé. |
+ | |||
+ | Ensuite, on lance manuellement un backup borgmatic, | ||
+ | |||
+ | On vérifie qu'on a bien sauvegardé la clé Borg qui se trouve dans `/root/.config/ | ||
+ | |||
+ | On supprime la base de donnée : | ||
``` | ``` | ||
- | Host mobilizon.be | + | sudo -u postgres dropdb |
- | User mobilizon | + | |
- | IdentityFile / | + | |
- | AddressFamily inet | + | |
``` | ``` | ||
- | A noter qu' | + | Il nous dit que quelqu'un est en train d' |
- | Et on fait le rsync: | + | Ensuite, |
+ | |||
+ | Maintenant, on lance le playbook commun pour provisionner à nouveau la VM | ||
+ | |||
+ | Pour faire un restore des backups, voir la doc: https:// | ||
+ | |||
+ | |||
+ | ~~Par contre, pour le moment on n'a pas encore la config borgmatic de Mobilizon… Il faut donc lancer | ||
``` | ``` | ||
- | rsync -az mobilizon.be: | + | ansible-playbook playbooks/apps/mobilizon.yml -t borgmatic_config -l mobilizon --diff |
``` | ``` | ||
- | Et on modifie | + | En fait on n'a pas besoin de cette étape :) |
+ | |||
+ | ~~Lorsque c'est fait,~~ on peut restaurer | ||
``` | ``` | ||
- | chown mobilizon-be: /var/lib/mobilizon/ | + | borgmatic extract |
``` | ``` | ||
- | 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' | + | On doit préciser où le backup doit être restaurer (sinon il le fait par défaut |
- | On décide de d' | + | Il faut encore restaurer |
- | Pour se faire, | + | Il y a une commande magique de borgmatic pour faire ça, mais malheureusement il faut que le client postgresql soit installé (ou du monis le paquet `pg_restore`). On va d' |
+ | |||
+ | On crée la base de données: | ||
``` | ``` | ||
- | sudo systemctl stop mobilizon | + | sudo -u postgres createdb |
``` | ``` | ||
- | On fait pareil sur la VM. | + | Ensuite |
- | + | ||
- | 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:// | + | sudo -u postgres pg_restore |
- | mkdir / | + | |
- | tar xvf / | + | |
- | ln -sf /var/www/mobilizon-be/ | + | |
- | chown mobilizon-be: | + | |
``` | ``` | ||
- | Et on applique la migration: | + | Et enfin, |
``` | ``` | ||
- | bin/ | + | sudo -u postgres psql mobilizon-neutrinet-be` |
``` | ``` | ||
- | Comme ça se passe bien, on fait de même pour la 3.0.1, et on démarre mobilizon | + | On lance le playbook qui rajoute Caddy et le client Posgresql mais ne fait pas grand chose d' |
- | On fait un dernier rsync pour avoir les derniers uploads: | + | Par contre, on remarque qu'on a des problèmes de permissions sur les fichiers de Mobilizon (ex: /var/www/mobilizon-neutrinet-be appartient à root). |
- | ``` | + | |
- | rsync -az mobilizon.be:/ | + | |
- | chown mobilizon-be: / | + | |
- | ``` | + | |
- | Le delete permet d' | + | |
- | Maintenant, on fait nos tests: | + | En fait, c'est parce que borgmatic restaure les fichiers avant la création de l' |
- | - Création d'un évènement: | + | Néanmoins, il semble que même lorsque pg_restore (lié au client postgresql) est installé, la restauration |
- | - Ajout d'un admin: ça marche, on a juste eu peur avec quelques erreurs | + | |
- | - Envoi de mail: on a dû un peu changer | + | |
- | - 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. | + | ### Geolix |
- | 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, | + | Il y a un machin, ça s'appelle Geolix |
- | 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' | + | https:// |
- | On a rajouté un dossier `/var/ | + | Au passage, on découvre la doc des CÉMÉA qui a l'air super complète \o/ |
- | TODO: | + | https:// |
- | - Gérer les mails chez Neutrinet | + | Cela permet de montrer des évènements en se basant sur la localisation de l'IP. En fait, c'est à la fin de la doc de mobilizon : https:// |
- | - Tester | + | |
- | - 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:// | + | |
+ | Donc si l'IP est sur Bruxelles, on verra tous les évènements de Neutrinet en premier. | ||
+ | |||
+ | On doit juste télécharger la base de données: https:// | ||
+ | |||
+ | Et la décompresser. | ||
+ | |||
+ | Il y a moyen de mettre en place un cronjob pour mettre à jour cette base de données (voir doc des CÉMÉA), mais on le fera plus tard... | ||
+ | |||
+ | TODO: Mettre en place un cronjob avec l' | ||
+ | |||
+ | ### 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 `/ | ||
+ | |||
+ | TODO: | ||
+ | |||
+ | - Tester avec un dump de la db, une copie des uploads, et voir si on peut se connecter. | ||
+ | - Tester l' | ||
+ | - Tester la création d'un évènement avec localisation (geocoder) | ||
## Gopass | ## Gopass | ||
Ligne 229: | Ligne 288: | ||
## Prochaine réunion | ## Prochaine réunion | ||
- | Prochain atelier | + | TODO: Mettre en place un cronjob avec l' |
+ | |||
+ | |||
+ | Prochain atelier | ||
Lieu : Chez Célo | Lieu : Chez Célo |
fr/rapports/2023/06-19.1699278654.txt.gz · Dernière modification : 2023/11/06 14:50 de hgo