technique:adminserv:mattermost:change_team_url

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

technique:adminserv:mattermost:change_team_url [2023/11/25 01:23] – créée qduchemitechnique:adminserv:mattermost:change_team_url [2023/11/25 01:30] (Version actuelle) qduchemi
Ligne 1: Ligne 1:
 +## Changer l'URL d'une équipe
  
 +<bootnote critical>Cette opération n'est pas supportée officiellement par Mattermost et demande une manipulation en base de données de production.</bootnote>
 +
 +<bootnote warning>Cette méthode passant par Traefik, elle ne fonctionnera pas pour les clics sur un « ancien lien » directement dans Mattermost, car tout se fait côté client. Il faut ouvrir le lien dans un nouvel onglet. C'est donc plutôt destiné aux liens externes qu'aux liens internes. Les cas d'utilisations sont limités, mais vraisemblables.</bootnote>
 +
 +Depuis que la gestion des redirections est gérée [côté Traefik](https://gitlab.utc.fr/picasoft/projets/services/traefik/-/merge_requests/2) plutôt que côté [labels Mattermost](https://gitlab.utc.fr/picasoft/projets/services/mattermost/-/commit/670ac9f3145d24292f2cb7f91550cf35070921d9), il est possible de changer l'URL d'une équipe qui le demande en toute transparence et sans interruption de service.
 +
 +Cette opération se fait en deux temps.
 +
 +### Changement en base de données
 +
 +On se connecte à la base de données sur la machine où tourne Mattermost :
 +
 +```bash
 +# Le nom du conteneur peut changer, voir le fichier Compose de Mattermost
 +docker exec -it mattermost-db bash
 +# Shell PostgreSQL avec utilisateur mattermost
 +psql -U mattermost
 +```
 +
 +Mattermost est bien fait de ce côté là : la chaîne servant à construire l'URL est stockée à un seul endroit et fait référence. Changer cette valeur est sans effet de bord, à part celui de casser les liens avant le changement (voir section suivante).
 +
 +Exemple : on souhaite changer le nom de l'équipe `rencontres-sc21` en `rencontres-scenari`. On commence par chercher l'identifiant de l'équipe :
 +
 +```sql
 +SELECT id, name FROM teams WHERE name='rencontres-sc21';
 +             id                  name        
 +----------------------------+----------------
 + u8muibe6gfdx5xqauh7u83535o | rencontres-sc21
 +```
 +
 +On met à jour ce nom :
 +
 +```sql
 +UPDATE teams SET name='rencontres-scenari' WHERE id='u8muibe6gfdx5xqauh7u83535o';
 +UPDATE 1
 +```
 +
 +<bootnote>On aurait pu directement faire un `UPDATE` avec un `WHERE` sur `name`, mais sait-on jamais, mieux vaut s'en tenir à l'identifiant, clé primaire assurée d'être unique, et vérifier qu'il n'y a pas de doublon.</bootnote>
 +
 +À partir de ce moment, l'URL `https://team.picasoft.net/rencontres-scenari` est active et correspond à l'ancienne équipe `https://team.picasoft.net/rencontres-sc21`.
 +
 +### Mettre en place une redirection
 +
 +Il faut modifier la [configuration dynamique de Traefik](https://gitlab.utc.fr/picasoft/projets/services/traefik/-/blob/master/dynamic_config/traefik_dynamic.yaml). Le mieux est de le faire directement sur la machine, afin de tester/debug.
 +
 +En effet, Mattermost utilise le middleware `mattermost`, de type [chain](https://doc.traefik.io/traefik/middlewares/http/chain/).
 +
 +<bootnote question>Middlewares ? Chain ?</bootnote>
 +
 +Pour rappel, Traefik peut appliquer des opérations entre le moment où il reçoit la requête et le moment où il la transmet à Mattermost. Ce sont des middlewares. Le type `chain` permet d'enchaîner plusieurs middlewares.
 +
 +Il suffira pour l'occasion de créer un nouveau middleware :
 +
 +```yaml
 +mm-redirect-scenari:
 +  redirectRegex:
 +    regex: "https://team.picasoft.net/rencontres-sc21(.*)"
 +    replacement: "https://team.picasoft.net/rencontres-scenari${1}"
 +    permanent: true
 +```
 +
 +<bootnote learn>
 +Astuce : pour être certain·es que ça fonctionne, tu peux tester avec un exemple sur ce [bac à sable Go](https://go.dev/play/p/mWU9p-wk2ru).
 +</bootnote>
 +
 +Il faut ensuite ajouter le middleware fraîchement créé au middleware Mattermost :
 +
 +```yaml
 +mattermost:
 +  chain:
 +    middlewares:
 +      - mm-redirect-scenari
 +```
 +
 +Et sauvegarder le fichier. Le middleware est immédiatement appliqué sans besoin de redémarrage.
 +
 +Si ça ne fonctionne pas, modifier par essai/erreur.
 +
 +<bootnote>S'aider du [[technique:adminserv:traefik:dashboard|dashboard Traefik]] en cas de doute : est-ce-que le middleware est bien pris en compte ? etc.</bootnote>
 +
 +Plus qu'à commit, pousser.