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 Prochaine révision | Révision précédente | ||
technique:tech_team:etherpad [2021/12/19 19:44] – qduchemi | technique:tech_team:etherpad [2021/12/19 22:34] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{indexmenu_n> | ||
+ | ## Comment on met à jour Etherpad ? Et Git, c'est quoi ? | ||
+ | |||
+ | Des services libres c’est bien, des services libres à jour c’est mieux. | ||
+ | |||
+ | À ce stade, tu sais quasiment tout faire sur l' | ||
+ | |||
+ | La suite de l' | ||
+ | |||
+ | Dans cette page, on prend pour exemple la mise à jour d' | ||
+ | |||
+ | ### Questions introductives | ||
+ | |||
+ | < | ||
+ | Pourquoi faire des mises à jour ? | ||
+ | </ | ||
+ | |||
+ | Derrière un service il y a un logiciel qui fonctionne grâce à du code fait par des humains, les humains et donc les logiciels ne sont pas parfaits. On peut choisir d’ajouter des fonctionnalités, | ||
+ | |||
+ | < | ||
+ | Comment on sait qu'il y a des mises à jour à faire ? | ||
+ | </ | ||
+ | |||
+ | Un bot dans le canal [Alertes Techniques](https:// | ||
+ | |||
+ | Alternativement, | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour répondre à cette question, il faut faire un petit détour pour comprendre [[technique: | ||
+ | |||
+ | La configuration des services est gérée avec Git, un outil de gestion de versions de fichiers. Git mériterait une formation entière, alors on va seulement aborder la question en simplifiant, | ||
+ | |||
+ | < | ||
+ | Tous les services Picasoft sont gérés sur **Gitlab** à cette adresse : https:// | ||
+ | |||
+ | Vas y faire un tour ! :-D | ||
+ | </ | ||
+ | |||
+ | ### Une brève introduction à Git et Gitlab | ||
+ | |||
+ | < | ||
+ | |||
+ | Gitlab est une **forge** Git : un endroit où on stocke des documents, conçu pour la collaboration. L' | ||
+ | |||
+ | * Git permet de travailler à plusieurs sur des fichiers et d'en maintenir un **historique des modifications**. | ||
+ | * Gitlab permet de collaborer autour des documents gérés par Git : poser des questions, proposer des modifications, | ||
+ | |||
+ | </ | ||
+ | |||
+ | Regardons le [dossier des services sur Gitlab](https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Comment tu peux le constater, il y a un « dossier » par service : | ||
+ | |||
+ | * Chaque dossier est appelé **dépôt**. Chaque dépôt est complètement **indépendant** des autres. | ||
+ | * Chaque dépôt contient les fichiers nécessaires pour lancer le service en question. | ||
+ | * Les dépôts peuvent être **clonés** sur les machines. Cloné, ça veut dire copié en gardant un lien vers Gitlab. | ||
+ | |||
+ | Alors concrètement, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Par convention, on clone les dépôts sur les machines dans `/ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | Git permet de **réutiliser le travail**. D'une part, le fait de centraliser la configuration sur un dépôt public permet à des gens extérieurs à Picasoft de s' | ||
+ | |||
+ | Un exemple ? | ||
+ | |||
+ | Imagine que je mette à jour Traefik dans une nouvelle version sur `pica01`. Super, j'ai modifié des fichiers (au moins le fichier Compose, pour indiquer d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Grâce à Git, je vais pouvoir **pousser** mes modifications sur le Gitlab : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Et là, si je veux mettre à jour Traefik sur `pica02` et `monitoring`, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Avec Git, cette situation pourrait aussi se produire : deux personnes bossent sur Traefik sur deux machines différentes... | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | C'est un **conflit** : quelle version choisir au moment d' | ||
+ | |||
+ | Si tu as vaguement compris l' | ||
+ | |||
+ | ### C'est quoi les étapes pour mettre à jour Etherpad ? | ||
+ | |||
+ | < | ||
+ | |||
+ | 1. On va sur la **machine de test**. | ||
+ | 2. On va dans `/ | ||
+ | 3. On fait nos modifications et on teste que ça marche bien. | ||
+ | 4. On les **pousse** sur le dépôt Gitlab : « tout le monde » peut en profiter. | ||
+ | 5. On va sur la **machine de production**. | ||
+ | 6. Dans `/ | ||
+ | 7. Et on lance le service! :-D | ||
+ | |||
+ | < | ||
+ | La partie `3` dépend de chaque service et les opérations spécifiques sont détaillées dans la description Gitlab du service en question. Ici, on explique tout pour Etherpad! | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Bon allez là, on y va ou quoi ?! ^_^ | ||
+ | </ | ||
+ | |||
+ | ### Mise à jour et test de l' | ||
+ | |||
+ | #### Le commencement | ||
+ | |||
+ | Traditionnellement, | ||
+ | |||
+ | ``` | ||
+ | $ ssh <ton login> | ||
+ | ``` | ||
+ | |||
+ | On se rend dans le dossier `/ | ||
+ | |||
+ | ``` | ||
+ | $ cd / | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | S'il n' | ||
+ | |||
+ | ``` | ||
+ | $ git clone https:// | ||
+ | ``` | ||
+ | |||
+ | Cette URL se trouve sur le dépôt Gitlab d' | ||
+ | {{ : | ||
+ | </ | ||
+ | |||
+ | Et là, première commande Git pour être sûr qu'on a la dernière version, qui est sur Gitlab - on **tire** les modifications : | ||
+ | |||
+ | ``` | ||
+ | $ git pull | ||
+ | ``` | ||
+ | |||
+ | #### C'est organisé comment ? | ||
+ | |||
+ | ``` | ||
+ | $ tree | ||
+ | . | ||
+ | ├── CHANGELOG.md | ||
+ | ├── Dockerfile | ||
+ | ├── entrypoint.sh | ||
+ | ├── landing-page | ||
+ | │ | ||
+ | ├── README.md | ||
+ | ├── secrets | ||
+ | │ | ||
+ | │ | ||
+ | └── settings.json | ||
+ | ``` | ||
+ | |||
+ | On voit qu’il y a un fichier `Dockerfile` à la racine, il s’agit d’un bon indice que l’image du service est faite maison. Ce fichier va nous intéresser ici afin de construire une nouvelle image à la nouvelle version, c’est en effet le fichier qui contient la recette de cuisine d’une image. | ||
+ | |||
+ | On remarque aussi le fichier `docker-compose.yml`, | ||
+ | |||
+ | #### Changer la version du logiciel | ||
+ | |||
+ | On va donc éditer le `Dockerfile` ici. Pour des raisons pratiques la version utilisée est indiquée dans un argument qu’on peut ensuite réutiliser afin de n’avoir à la changer qu’une seule fois, aussi on la trouve généralement en début de fichier afin d’y avoir accès rapidement. Regardons le début du fichier : | ||
+ | |||
+ | ``` | ||
+ | $ head -n 10 Dockerfile | ||
+ | FROM node: | ||
+ | LABEL maintainer=" | ||
+ | |||
+ | ENV NODE_ENV=production | ||
+ | |||
+ | FROM base as downloader | ||
+ | |||
+ | ARG ETHERPAD_VERSION_BUILD=1.8.14 | ||
+ | |||
+ | RUN apt-get update && \ | ||
+ | ``` | ||
+ | |||
+ | On observe plusieurs instructions, | ||
+ | |||
+ | Afin de passer à une version plus récente on va simplement changer la valeur `1.8.14` en `1.8.15` ! | ||
+ | |||
+ | < | ||
+ | |||
+ | #### Changer le tag de l' | ||
+ | |||
+ | Maintenant que la recette de l’image est bien à jour, il ne faut pas oublier d’indiquer dans le fichier de configuration que l’on utilise une nouvelle version. | ||
+ | |||
+ | Pour cela il faut modifier le tag de l’image (ce qui correspond au fait à un numéro de version dans notre cas) dans le fichier `docker-compose.yml`. C'est dans l' | ||
+ | |||
+ | ```yaml | ||
+ | app: | ||
+ | image: registry.picasoft.net/ | ||
+ | build: . | ||
+ | container_name: | ||
+ | ``` | ||
+ | |||
+ | On le passe en `1.8.15`. Essentiellement, | ||
+ | |||
+ | #### Et zéééééparti pour les tests! | ||
+ | |||
+ | Alors, pour être honnête, il y a plein de choses à faire pour tester une image. Plein de petits détails chiants, un peu comme ton pull en laine qui gratte. Notamment : | ||
+ | |||
+ | - Créer des faux « secrets », quand il y a besoin de mots de passe pour lancer une base de données de test | ||
+ | - Changer les URL `picasoft.net` en `test.picasoft.net`, | ||
+ | - Supprimer les anciennes données pour éviter des « faux bugs »... | ||
+ | |||
+ | Bref ! On a fait un script qui fait tout ça pour toi. Il se trouve dans `/ | ||
+ | |||
+ | ``` | ||
+ | $ cd / | ||
+ | $ ./ | ||
+ | ``` | ||
+ | |||
+ | Tu peux ignorer les warnings, tant que la construction de l' | ||
+ | |||
+ | < | ||
+ | |||
+ | #### Pousser ses modifications | ||
+ | |||
+ | Tout marche ? C'est parti pour la mise en production ! | ||
+ | |||
+ | Première chose : pousser l' | ||
+ | |||
+ | < | ||
+ | |||
+ | ``` | ||
+ | $ docker-compose push | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | Si jamais on te dit que tu n'es pas connecté au registre, hop : | ||
+ | |||
+ | ``` | ||
+ | $ docker login registry.picasoft.net | ||
+ | ``` | ||
+ | |||
+ | Utilise les mêmes identifiants sur sur les machines. | ||
+ | </ | ||
+ | |||
+ | Deuxième chose, on va pousser nos modifications de la configuration sur le Gitlab. On retourne dans le bon dossier... | ||
+ | |||
+ | ``` | ||
+ | $ cd / | ||
+ | ``` | ||
+ | |||
+ | Tu peux vérifier les modifications que tu t' | ||
+ | |||
+ | ``` | ||
+ | $ git diff | ||
+ | ``` | ||
+ | |||
+ | Vérifie que les lignes en vert sont bien celles que tu as changées. Tu peux ensuite valider ces modifications et leur donner une description. L' | ||
+ | |||
+ | ``` | ||
+ | $ git commit -am "Mise à jour vers la version 1.8.15" | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | Si c'est la première fois que tu utilises Git sur cette machine, il va te demander ton nom et ton email. Pour ce faire... | ||
+ | |||
+ | ``` | ||
+ | $ git config --global user.name "ton nom" | ||
+ | $ git config --global user.email "ton mail" | ||
+ | ``` | ||
+ | |||
+ | Tu peux ensuite recommencer la commande `commit`. | ||
+ | </ | ||
+ | |||
+ | Pour finir, tu peux pousser ces modifications sur Gitlab (les identifiants qu'on te demande sont ceux de l'UTC !) : | ||
+ | |||
+ | ``` | ||
+ | $ git push | ||
+ | ``` | ||
+ | |||
+ | ### Mise en production - attention, chute de pierres. | ||
+ | |||
+ | C'est parti pour le grand saut, la mise en production de notre image toute fraîche ! C'est presque comme pour les tests sauf qu'on a plus rien à construire, juste à récupérer notre travail. Alors on résume ! | ||
+ | |||
+ | #### Connexion sur la machine de production | ||
+ | |||
+ | ``` | ||
+ | $ ssh <ton login> | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | Comment on sait que c'est sur `pica02` ? | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | Mais tu peux aussi regarder sur les [[technique: | ||
+ | |||
+ | #### On tire les modifications | ||
+ | |||
+ | Dans le bon dossier : | ||
+ | |||
+ | ``` | ||
+ | $ cd / | ||
+ | ``` | ||
+ | |||
+ | On récupère les modifications de Gitlab : | ||
+ | |||
+ | ``` | ||
+ | $ git pull | ||
+ | ``` | ||
+ | |||
+ | On récupère nos images : | ||
+ | |||
+ | ``` | ||
+ | $ docker-compose pull | ||
+ | ``` | ||
+ | |||
+ | Et enfin, on lance la nouvelle version ! | ||
+ | |||
+ | ``` | ||
+ | $ docker-compose up -d | ||
+ | $ docker-compose logs -f | ||
+ | ``` | ||
+ | |||
+ | On regarde si tout va bien dans les journaux, on attend un peu et on consulte `pad.picasoft.net`. Si ça fonctionne, waouh, c'est bon ! Et sinon... direction l' | ||