services:mattermost_upgrade

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
services:mattermost_upgrade [2017/11/18 20:11] – [double guillemets] remplacés par balises <code>. Sans cette modif, si on copie-colle du code qui contient des guillemets, on aura des guillemets typographiques, pas reconnus par le terminal andresservices:mattermost_upgrade [2019/05/19 23:02] (Version actuelle) – supprimée chosty
Ligne 1: Ligne 1:
-====== Mise à jour de Mattermost ====== 
-[[https://about.mattermost.com/|Mattermost]] est le logiciel libre sur lequel se base Picasoft pour https://team.picasoft.net. Le logiciel est maintenu par la société [[https://github.com/mattermost|Mattermost Inc. sur Github]] qui propose, entre autre, [[https://github.com/mattermost/mattermost-docker|des images Docker]]. Cette documentation présente le processus pour mettre à jour les images utilisées par Picasoft, ainsi que le service en production. 
- 
-===== Images Docker ===== 
-Pour déployer Mattermost, Picasoft utilise 2 images Docker : une image pour l'application (que l'on appellera ''app'') et une image pour la base de données PostgreSQL (que l'on appellera ''db''). 
- 
-==== Récupération du code mis à jour ==== 
-Pour //builder// et pousser les images, on utilise la VM d'admin de Picasoft. Les //Dockerfiles// se trouvent dans le dossier ''/DATA/docker/Dockerfiles'', qui est un //repository// Git. Le sous-dossier ''mattermost'', qui nous intéressera ici, est lui aussi un //repository// Git qui pointe sur [[https://github.com/mattermost/mattermost-docker|l'upstream maintenue par Mattermost]]. \\ 
-On se place dans le dossier et on //pull// pour mettre à jour le //repository// Git. Si la copie locale est modifié et que le //pull// ne se fait pas automatiquement, il est possible de retirer les modifications locales pour repartir d'une base propre. 
-<code> 
-root@admin:~# cd /DATA/docker/Dockerfiles/mattermost 
-root@admin:/DATA/docker/Dockerfiles/mattermost# git reset --hard    #(optionnel) retirer les modifications locales  
-root@admin:/DATA/docker/Dockerfiles/mattermost# git pull origin master  
-Depuis https://github.com/mattermost/mattermost-docker 
- * branch            master     -> FETCH_HEAD 
-Déjà à jour. 
-root@admin:/DATA/docker/Dockerfiles/mattermost#  
-</code> 
- 
-Il faut ensuite vérifier que le fichier ''docker-compose.yml'' du //repository// est bien modifié pour permettre de //builder// la version libre de Mattermost. Normalement, les lignes suivantes ne doivent pas être commentées : 
-<code> 
-[...] 
- 
-  app: 
-    build: 
-      context: app 
-      # comment out 2 following lines for team edition 
-      args: 
-        - edition=team 
- 
-[...] 
-</code> 
-ENV MM_VERSION=4.3.0 
- 
-Pour finir, on vérifie que le //repository// va bien //builder// la version que l'on souhaite de Mattermost. On peux vérifier avec la commande suivante: <code>cat app/Dockerfile | grep "ENV MM_VERSION"</code> Si ce n'est pas la dernière version, alors il faut ouvrir une PR sur l'upstream pour demander la mise à jour. 
- 
-==== Build et tag des images ==== 
-Lorsque le dossier est prêt, on //build// très simplement les images à l'aide de ''docker-compose'' : 
-<code> 
-docker-compose build 
-</code> 
-Le //build// peut durer un certain temps, une fois terminé on obtient trois images : ''mattermost_app'', ''mattermost_db'' et ''mattermost_web''. On peut les voir à l'aide de la commande ''docker images'' : 
-<code> 
-root@admin:/DATA/docker/Dockerfiles/mattermost# docker images 
-REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE 
-mattermost_web                                  latest              bd616f47c38b        3 seconds ago       109MB 
-mattermost_app                                  latest              e0bdbeb94060        3 seconds ago       303MB 
-mattermost_db                                   latest              724ed4c6030a        3 seconds ago       451MB 
-</code> 
-On ignore l'image ''mattermost_web'', nous ne l'utilisons pas pour Picasoft car nous avons notre propre reverse-proxy (Traefik). On peut la supprimer avec ''docker rmi mattermost_web''. 
- 
-On va maintenant ajouter des //tags// à nos images ''app'' et ''db'' pour ensuite les pousser sur le //registry// Docker de Picasoft. On va utiliser, pour chaque image, les tags ''latest'' et ''X.Y.Z'' (correspondant au numéro de version de Mattermost). On renomme les images pour les pousser sur le //registry// de Picasoft, elles auront donc la forme ''registry.picasoft.net:5000/NOMIMAGE:TAG''. \\ 
-Par exemple, si nous venons de //builder// la version ''4.3.0'' de Mattermost, on va lancer les commandes suivantes : 
-<code> 
-# Tag de l'image app 
-docker tag mattermost_app registry.picasoft.net:5000/pica-mattermost:latest 
-docker tag mattermost_app registry.picasoft.net:5000/pica-mattermost:4.3.0 
-# Tag de l'image db 
-docker tag mattermost_db registry.picasoft.net:5000/pica-mattermost-db:latest 
-docker tag mattermost_db registry.picasoft.net:5000/pica-mattermost-db:4.3.0 
-# On pousse tout sur le registry 
-docker push registry.picasoft.net:5000/pica-mattermost:latest 
-docker push registry.picasoft.net:5000/pica-mattermost:4.3.0 
-docker push registry.picasoft.net:5000/pica-mattermost-db:latest 
-docker push registry.picasoft.net:5000/pica-mattermost-db:4.3.0 
-</code> 
- 
-Nos images sont prêtes et à jour dans le //registry//. On termine par un petit ménage des images Docker en local de la VM //admin//, maintenant qu'elles sont poussées ce n'est plus utile de les conserver : 
-<code> 
-docker rmi mattermost_app 
-docker rmi mattermost_db 
-docker rmi registry.picasoft.net:5000/pica-mattermost:latest 
-docker rmi registry.picasoft.net:5000/pica-mattermost:4.3.0 
-docker rmi registry.picasoft.net:5000/pica-mattermost-db:latest 
-docker rmi registry.picasoft.net:5000/pica-mattermost-db:4.3.0 
-</code> 
-On quitte ensuite la VM //admin//. 
- 
-===== Déploiement ===== 
-==== Préparation ==== 
-Pour déployer notre nouvelle version, on se rend maintenant sur la machine de production qui fait tourner Mattermost (normalement, ''pica01''). Bien entendu, on ne fait pas une mise à jour n'importe comment, il faut s'assurer :  
-  * que l'on a une backup récente de la base de données. C'est normalement le cas puisqu'elles sont automatiques; 
-  * que Mattermost n'est pas trop utilisé. On ne fais pas un déploiement à 19H, la coupure va déranger tout le monde; 
-  * que les autres bénévoles sont au courant de la mise à jour. Même si la coupure de service est courte, un.e sysadmin qui voit que le service est tombé va s'affoler pour rien :) 
- 
-Bref on ne se lance que lorsque l'on est prêt. Pour commencer il faut modifier les images Docker qui sont utilisées par les conteneurs de Mattermost et de sa base de données. Cela se passe dans le fichier ''/DATA/docker/docker-compose.yml'' de la machine, dans les services ''mattermost'' et ''mattermost-db''. Il suffit simplement de changer le numéro de version de l'image. **Attention !! On utilise uniquement les images ayant pour //tag// le numéro d'une version. On utilise JAMAIS ''latest'' pour éviter de tout casser, et en plus c'est plus clair comme cela.** 
- 
-Lorsque c'est prêt, on //pull// les nouvelles images Docker sur la machine. On n'est pas obligé de le faire manuellement, ''docker-compose'' se chargera de le faire au redémarrage des conteneurs. Cependant cela permet de réduire le downtime, puisque l'image sera déjà en local au moment du redémarrage (on économise le temps de //pull//). 
-<code> 
-docker pull registry.picasot.net:5000/pica-mattermost:4.3.0 
-docker pull registry.picasot.net:5000/pica-mattermost-db:4.3.0 
-</code> 
- 
-==== Mise à jour ==== 
-Lorsque tout est bien prêt et que l'on a prévu les collègues, on peut enfin opérer à la bascule sur la nouvelle version. En pratique, on va simplement couper les conteneurs de l'application Mattermost, puis de sa base de données. On relance ensuite directement les deux services (dans l'ordre inverse), qui vont donc démarrer sur les nouvelles images. \\ 
-Pour être sûr que tout se passe vite, sans typo ou autre problème, on peut faire tout ceci en une seule commande : 
-<code> 
-cd /DATA/docker/ && docker rm -f mattermost-app && sleep 1 && docker rm -f mattermost-db \ 
-&& docker-compose up -d mattermost-db && sleep 5 && docker-compose up -d mattermost 
-</code> 
- 
-Normalement tout s'enchaine bien et les services repartent sur les nouvelles images. On peut vérifier rapidement en se connectant sur le [[https://team.picasoft.net|Mattermost de Picasoft]], que ça tourne bien. Dans le menu, l'onglet "À Propos" permet de vérifier la version du serveur. \\ 
-Il est **fortement recommandé** de regarder les //logs// des conteneurs (''docker logs mattermost-app'' et ''docker logs mattermost-db'') pour regarder si il n'y a pas de grosse erreur pouvant indiquer un dysfonctionnement. 
- 
-En cas de soucis, on remet les anciennes images dans le ''docker-compose.yml'' puis on relance la commande ci-dessus pour revenir en arrière. Si cela crash toujours, on fait un rollback de la base de données. \\ 
-Si tout va bien, on fait un petit message sur le channel Général pour annoncer que la MAJ s'est bien passée, en ajoutant un petit lien vers le [[https://docs.mattermost.com/administration/changelog.html|changelog de Mattermost]]. On pense aussi à nettoyer les anciennes images Docker de la machine ''pica01'', comme sur la VM ''admin''. 
  
  • services/mattermost_upgrade.1511032289.txt.gz
  • (modification externe)