Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
technique:adminserv:services_upgrade [2020/11/08 22:39] – ↷ Page déplacée de technique:adminsys:services_upgrade à technique:adminserv:services_upgrade qduchemi | technique:adminserv:services_upgrade [2020/11/08 23:01] (Version actuelle) – supprimée qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | # Attention, cette page n'est plus à jour | ||
- | |||
- | Nous utilisons maintenant un dépôt git pour versionner la plupart des services: https:// | ||
- | |||
- | --- | ||
- | |||
- | ====== Procédure d' | ||
- | |||
- | Cette procédure vaut pour mettre un jour n' | ||
- | |||
- | La page est organisée est plusieurs sections. | ||
- | |||
- | * La première est le **canevas général** applicables à tous les services. C'est ce canevas qui doit être suivi lors de tous les déploiements de nouveaux services ou lors des mises à jour. | ||
- | * La deuxième liste les **cas particuliers**, | ||
- | |||
- | ===== Préparation ===== | ||
- | Pour déployer une nouvelle version d'un service, après les tests, on se rend sur la machine de production qui fait tourner le service ('' | ||
- | * Que l'on a une backup récente de la potentielle base de données. | ||
- | * Que le service n'est pas trop utilisé. On ne fait 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' | ||
- | |||
- | ====== Principe général ====== | ||
- | |||
- | Afin de mettre une jour un service, plusieurs étapes sont nécessaires. | ||
- | |||
- | Tout d' | ||
- | * Construction de l' | ||
- | * Récupération de l' | ||
- | * Construction des images et push sur un registre privé appartenant à Picasoft. Ainsi, n' | ||
- | |||
- | La [[technique: | ||
- | |||
- | Il n'est pas nécessaire de stocker toutes les images sur le registre de Picasoft : en effet il est inutile de le surcharger avec des copies conformes à celles d' | ||
- | |||
- | L' | ||
- | |||
- | La dernière étape est la mise en production. Il faut se rendre sur la machine dans laquelle se trouve le service en question, arrêter les conteneurs concernés et en lancer avec les nouvelles images. | ||
- | |||
- | ====== Cas général ====== | ||
- | ===== Récupération des images ===== | ||
- | |||
- | La première étape consiste à obtenir l' | ||
- | |||
- | ==== Cas 1 : construction des images ==== | ||
- | |||
- | Cas d' | ||
- | |||
- | Exemple : | ||
- | <code bash> | ||
- | $ git clone <dépot où se trouve le Dockerfile> | ||
- | $ cd <dossier où se trouve le Dockerfile> | ||
- | $ docker build -t <nom à donner à l' | ||
- | </ | ||
- | |||
- | ==== Cas 2 : récupération d'une image existante ==== | ||
- | |||
- | Cas d' | ||
- | * Cas A : on fait des tests, et dans ce cas on est autorisé à récupérer une image sur un registre public (qu'on ne maîtrise pas), par exemple le [[https:// | ||
- | * Cas B : on a déjà construit et poussé une image sur notre registre privé, que l'on récupère sur la machine cible. | ||
- | |||
- | Pour télécharger ces images sur le serveur, la commande '' | ||
- | <code bash> | ||
- | # Cas A : on télécharge l' | ||
- | $ docker pull quay.io/ | ||
- | # Cas B : on télécharge l' | ||
- | docker pull registry.picasoft.net/ | ||
- | </ | ||
- | |||
- | ===== Étiquetage et registre ===== | ||
- | |||
- | Cette section n'est valable que pour les images que l'on souhaite pousser sur notre registre privé. Une image importée d'un registre public à des fins de tests n'a pas vocation à terminer sur notre registre privé, comme expliqué plus haut. | ||
- | |||
- | Il faut ensuite étiqueter les images, c' | ||
- | |||
- | Par défaut, lorsqu' | ||
- | |||
- | Le nommage et l' | ||
- | |||
- | <code bash> | ||
- | # Le nom de l' | ||
- | $ docker tag <image locale> registry.picasoft.net/< | ||
- | # Exemple, si docker images m' | ||
- | $ docker tag mattermost_docker_app registry.picasoft.net/ | ||
- | </ | ||
- | |||
- | Les nouveaux alias des images doivent à présent être visibles via un '' | ||
- | <code bash> | ||
- | # Les images ne sont pas dupliquées : ce ne sont que des alias. | ||
- | $ docker images | ||
- | REPOSITORY | ||
- | mattermost_docker_app | ||
- | registry.picasoft.net/ | ||
- | </ | ||
- | |||
- | Il faut pousser l' | ||
- | |||
- | <code bash> | ||
- | # En reprenant l' | ||
- | docker push registry.picasoft.net/ | ||
- | </ | ||
- | |||
- | Il est possible que vous obteniez une erreur d' | ||
- | |||
- | ===== Déploiement ===== | ||
- | |||
- | La dernière étape est celle du déploiement, | ||
- | |||
- | Maintenant que l' | ||
- | * Remplacement du nom et/ou du tag de l' | ||
- | * Ajout de nouveaux paramètres de configuration | ||
- | * ... | ||
- | |||
- | Docker Compose est un système d' | ||
- | |||
- | **Attention !! On utilise uniquement les images ayant pour //tag// le numéro d'une version.** | ||
- | |||
- | Pour la suite des commandes, on utilise **le nom des services** du '' | ||
- | |||
- | Prenons l' | ||
- | |||
- | <code yaml> | ||
- | # ' | ||
- | app: | ||
- | image: registry.picasoft.net/ | ||
- | container_name: | ||
- | </ | ||
- | |||
- | Supposons que l'on vienne de passer '' | ||
- | |||
- | <code yaml> | ||
- | app: | ||
- | image: registry.picasoft.net/ | ||
- | container_name: | ||
- | </ | ||
- | |||
- | *Note : si l'on est sur la machine de test et que l' | ||
- | |||
- | Si l'on ajoute un nouveau service, on peut passer cette étape. | ||
- | |||
- | Les conteneurs à mettre à jour doivent tout d' | ||
- | <code bash> | ||
- | cd / | ||
- | </ | ||
- | |||
- | Il est important de stopper les conteneurs avant de les effacer pour minimiser les risque de corruption. L' | ||
- | |||
- | En particulier, | ||
- | |||
- | Enfin, il faut créer les nouveaux conteneurs avec '' | ||
- | <code bash> | ||
- | docker-compose up -d app | ||
- | </ | ||
- | ===== Épilogue ===== | ||
- | |||
- | On s' | ||
- | - Si le '' | ||
- | - La commande '' | ||
- | |||
- | Une fois que l'on a vérifié que la nouvelle version du service tourne correctement, | ||
- | |||
- | <code bash> | ||
- | $ docker image rm registry.picasoft.net/ | ||
- | </ | ||
- | |||
- | ===== En cas de problème ===== | ||
- | |||
- | Si le déploiement n'a pas fonctionné, | ||
- | |||
- | * Changement du numéro de version dans le `docker-compose.yml` | ||
- | * Extinction des conteneurs | ||
- | * Création des conteneurs avec l' | ||
- | |||
- | ====== Cas particuliers ====== | ||
- | |||
- | ===== Wekan et Tellform ===== | ||
- | Lors de la mise à jour de Tellform et de Wekan, il faut faire attention à la validité du patch pour Tellform et du sed pour Wekan. De plus, faute de procédure d' | ||
- | |||
- | Pour Tellform, le patch se trouve dans les [[https:// | ||
- | |||
- | ==== Comment créer un patch ? ==== | ||
- | * Liste à puceDans un répertoire externe au serveur Picasoft (typiquement une machine personnelle), | ||
- | < | ||
- | * Créer une copie de ce répertoire, | ||
- | < | ||
- | * Faire les modifications nécessaires dans les fichiers appropriés, | ||
- | * Retourner dans le dossier contenant ```service_en_question``` et ```service_en_question_modif``` | ||
- | * Appliquer le patch. Attention, l' | ||
- | < | ||
- | |||
- | Le fichier contenant le patch est créé, il ne reste plus qu'à l' | ||
- | |||
- | ==== Comment appliquer ce patch ? ==== | ||
- | |||
- | * Dans le Dockerfile, intégrer le patch en le copier dans le même répertoire où il sera appliqué (/opt dans cet exemple) | ||
- | |||
- | < | ||
- | * Appliquer le patch | ||
- | |||
- | < | ||
- | ===== Mattermost ===== | ||
- | ==== Images Docker ==== | ||
- | Pour déployer Mattermost, Picasoft utilise 2 images Docker : une image pour l' | ||
- | |||
- | === Récupération du code mis à jour === | ||
- | On va récupérer le dépôt Git qui pointe sur [[https:// | ||
- | |||
- | On modifie le fichier '' | ||
- | <code yaml> | ||
- | [...] | ||
- | |||
- | app: | ||
- | build: | ||
- | context: app | ||
- | # comment out 2 following lines for team edition | ||
- | args: | ||
- | - edition=team | ||
- | - PUID=5000 | ||
- | - PGID=5000 | ||
- | [...] | ||
- | </ | ||
- | |||
- | Pour finir, on vérifie que le // | ||
- | |||
- | === Build et tag des images === | ||
- | |||
- | On lance le build avec la commande '' | ||
- | Le //build// peut durer un certain temps, une fois terminé on obtient deux images (visibles avec '' | ||
- | * `mattermost-docker_app` | ||
- | * `mattermost-docker_db` | ||
- | |||
- | On tag comme d' | ||
- | |||
- | ==== Déploiement ==== | ||
- | |||
- | On va simplement couper le conteneur de l' | ||
- | |||
- | On peut vérifier rapidement que tout s'est bien passé en se connectant sur le [[https:// | ||
- | |||
- | En cas de soucis, on relance les dernières versions fonctionnelles. 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:// | ||
- | |||
- | ==== Réindexation de la base de donnée ==== | ||
- | |||
- | Il est arrivé qu' | ||
- | |||
- | Pour corriger ce problème, une réindexation de la base de données est nécessaire. | ||
- | |||
- | **Attention avant toute opération de ce genre, veuillez effectuer une sauvegarde de la base de données** | ||
- | |||
- | <code bash> | ||
- | root@pica01: | ||
- | bash-4.3# psql -U postgres | ||
- | psql (9.4.15) | ||
- | Type " | ||
- | postgres=# \c mattermost | ||
- | You are now connected to database " | ||
- | mattermost=# | ||
- | NOTICE: | ||
- | [...] | ||
- | REINDEX | ||
- | mattermost=# | ||
- | exit | ||
- | </ | ||
- | |||
- | |||