Outils pour utilisateurs

Outils du site


commun:mise_a_jour_des_images_docker

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
commun:mise_a_jour_des_images_docker [2026/08/01 10:16] – créée francoiscommun:mise_a_jour_des_images_docker [2026/09/19 08:41] (Version actuelle) – francois
Ligne 1: Ligne 1:
 ====== Mises à jour des images Docker ====== ====== Mises à jour des images Docker ======
  
-Dernière mise à jour : août 2026+Dernière mise à jour : septembre 2026
  
 Stratégie de gestion des versions d'images Docker sur le serveur **cahute** (192.168.1.9) : tags épinglés + notification des mises à jour via **Diun** + application manuelle. Objectif : maîtriser ce qui tourne, éviter les mises à jour surprises (notamment Nextcloud et les montées de version majeure). Stratégie de gestion des versions d'images Docker sur le serveur **cahute** (192.168.1.9) : tags épinglés + notification des mises à jour via **Diun** + application manuelle. Objectif : maîtriser ce qui tourne, éviter les mises à jour surprises (notamment Nextcloud et les montées de version majeure).
Ligne 9: Ligne 9:
 Trois règles : Trois règles :
  
-  - **Tags épinglés** : chaque service utilise une version précise (ex. ''v1.13.2''), jamais un tag flottant (''latest'', ''stable''). On sait exactement ce qui tourne et on peut reproduire. +  - **Tags épinglés** : chaque service utilise une version précise (ex. ''v2.4.0''), jamais un tag flottant (''latest'', ''stable''). On sait exactement ce qui tourne et on peut reproduire. 
-  - **Diun notifie** : le conteneur Diun vérifie chaque jour les registres et envoie un email quand une nouvelle version d'une image surveillée est disponible. **Il n'applique rien lui-même.**+  - **Diun notifie** : le conteneur Diun vérifie chaque jour les registres et envoie un email quand un **nouveau tag** apparaît dans le dépôt d'une image surveillée. **Il n'applique rien lui-même.**
   - **Application manuelle** : à réception d'une notif, on modifie le tag dans le ''docker-compose.yml'', on relance, on vérifie.   - **Application manuelle** : à réception d'une notif, on modifie le tag dans le ''docker-compose.yml'', on relance, on vérifie.
  
Ligne 16: Ligne 16:
  
 **Contrepartie** : une version épinglée fige aussi ses failles jusqu'à la prochaine mise à jour manuelle. D'où l'importance de traiter les notifs Diun sans trop tarder. **Contrepartie** : une version épinglée fige aussi ses failles jusqu'à la prochaine mise à jour manuelle. D'où l'importance de traiter les notifs Diun sans trop tarder.
 +
 +===== Piège : tag épinglé = ''watchRepo'' obligatoire =====
 +
 +Par défaut, Diun ne surveille que **le tag exact** du conteneur qui tourne. Or le digest d'un tag épinglé (''v10.6.6'') ne change jamais : Diun répond ''unchanged'' tous les jours et **n'envoie jamais rien**, même quand une v10.7 sort.
 +
 +C'est ce qui s'est produit d'août à septembre 2026 : aucune notif en six semaines, alors que quatre images avaient des versions plus récentes (dont deux majeures).
 +
 +**Correctif** : le bloc ''defaults: watchRepo: true'' dans ''diun.yml'' (voir plus bas). Diun liste alors les tags du dépôt et notifie à l'apparition d'un nouveau.
 +
 +Symptôme à reconnaître dans les logs : <code>Jobs completed added=0 failed=0 skipped=0 unchanged=6 updated=0</code> tous les jours sans exception, avec des images épinglées → ''watchRepo'' manquant.
  
 ===== Versions épinglées (référence) ===== ===== Versions épinglées (référence) =====
  
-État validé en août 2026. Ces valeurs sont dans les ''docker-compose.yml'' respectifs.+État validé le 19 septembre 2026. Ces valeurs sont dans les ''docker-compose.yml'' respectifs.
  
-^ Service ^ Image ^ Tag épinglé ^ Stack ^ +^ Service ^ Image ^ Tag épinglé ^ Stack ^ Remarque ^ 
-| Homepage | ghcr.io/gethomepage/homepage | v1.13.2 | surveillance | +| Homepage | ghcr.io/gethomepage/homepage | v2.4.0 | surveillance | v1 → v2 : authentification intégrée optionnelle (''HOMEPAGE_AUTH_ENABLED''), non activée | 
-| Uptime-Kuma | louislam/uptime-kuma | 1.23.17 | surveillance | +| Uptime-Kuma | louislam/uptime-kuma | 2.5.5 | surveillance | v1 → v2 : **migration de base irréversible** (voir Points d'attention) | 
-| Dozzle | amir20/dozzle | v10.6.6 | surveillance | +| Dozzle | amir20/dozzle | v11.1.0 | surveillance | v11 : nouvelle interface, reconnexion forcée une fois | 
-| lldap | lldap/lldap | v0.6.3-alpine | lldap | +| lldap | lldap/lldap | v0.6.3-alpine | lldap | Label Diun spécifique (tags ''-alpine'') | 
-| Diun | crazymax/diun | 4.29.0 | diun |+| Diun | crazymax/diun | 4.33.0 | diun | | 
 +| Imaginary | nextcloud/aio-imaginary | épinglé par digest | imaginary | ⚠️ **Non surveillé par Diun** (tags non semver) — à traiter |
  
 ===== Stack Diun ===== ===== Stack Diun =====
  
   * Compose : ''/mnt/stockage/docker/compose/diun/docker-compose.yml''   * Compose : ''/mnt/stockage/docker/compose/diun/docker-compose.yml''
-  * Config : ''/mnt/stockage/docker/compose/diun/diun.yml'' (contient les identifiants SMTP en clair → ''chmod 600'')+  * Config : ''/mnt/stockage/docker/compose/diun/diun.yml''
   * Données : ''/mnt/stockage/docker/data/diun'' (base de suivi des images)   * Données : ''/mnt/stockage/docker/data/diun'' (base de suivi des images)
   * Réseau Docker : ''diun_net''   * Réseau Docker : ''diun_net''
Ligne 40: Ligne 51:
 services: services:
   diun:   diun:
-    image: crazymax/diun:4.29.0+    image: crazymax/diun:4.33.0
     container_name: diun     container_name: diun
     command: serve     command: serve
Ligne 63: Ligne 74:
   schedule: "0 8 * * *"          # vérification quotidienne à 8h00   schedule: "0 8 * * *"          # vérification quotidienne à 8h00
   firstCheckNotif: false   firstCheckNotif: false
 +
 +defaults:
 +  watchRepo: true                # surveille les nouveaux tags du dépôt, pas seulement le tag courant
 +  maxTags: 10                    # les 10 tags les plus récents (limite les requêtes au registre)
 +  sortTags: semver
 +  includeTags:
 +    - ^v?\d+\.\d+\.\d+$          # versions stables uniquement (écarte latest, beta, -rc…)
  
 providers: providers:
Ligne 70: Ligne 88:
 notif: notif:
   mail:   mail:
-    host: mail.infomaniak.com +    host: 172.20.0.1             # relais SMTP local de cahute 
-    port: 587                    # 587 = STARTTLS, 465 = SSL/TLS +    port: 25 
-    ssl: false                   # true si port 465+    ssl: false
     insecureSkipVerify: false     insecureSkipVerify: false
-    username: "beafrancois@beafrancois.fr" 
-    password: "<mot de passe SMTP>" 
     from: "beafrancois@beafrancois.fr"     from: "beafrancois@beafrancois.fr"
     to: "beafrancois@beafrancois.fr"     to: "beafrancois@beafrancois.fr"
 </code> </code>
  
-**Note SMTP (Infomaniak)** : le champ ''from'' doit être une adresse réellement autorisée sur le compte, sinon l'envoi est refusé. On réutilise l'adresse du compte authentifié.+**Note SMTP** : Diun passe par le relais mail local (''172.20.0.1:25''), sans identifiants. Plus aucun secret dans ''diun.yml''.
  
-**Note ''watchByDefault''** : Diun surveille automatiquement tout conteneur qui tourne, sans label à ajouter. Il lit les tags **réellement en cours d'exécution**, pas les fichiers compose — un conteneur doit donc être recréé après épinglage pour que Diun surveille le bon tag.+**Note ''watchByDefault''** : Diun surveille automatiquement tout conteneur qui tourne, sans label à ajouter. Il lit les tags **réellement en cours d'exécution**, pas les fichiers compose. 
 + 
 +**Note ''includeTags''** : la regex par défaut ne retient que les tags ''X.Y.Z'' ou ''vX.Y.Z''. Une image dont les tags ont un suffixe (''-alpine'') ou un autre format doit recevoir un label spécifique, sinon elle n'est pas suivie. 
 + 
 +==== Exception par conteneur : lldap ==== 
 + 
 +lldap tourne sur la variante ''-alpine''. Label ajouté dans ''/mnt/stockage/docker/compose/lldap/docker-compose.yml'', au même niveau que ''image:'' : 
 + 
 +<code yaml> 
 +services: 
 +  lldap: 
 +    image: lldap/lldap:v0.6.3-alpine 
 +    labels: 
 +      - "diun.include_tags=^v\\d+\\.\\d+\\.\\d+-alpine$" 
 +</code> 
 + 
 +Un label n'est pris en compte qu'après recréation du conteneur (''docker compose up -d'').
  
 ===== Procédure : appliquer une mise à jour ===== ===== Procédure : appliquer une mise à jour =====
Ligne 89: Ligne 121:
  
   - **Identifier** le service et la nouvelle version dans le mail.   - **Identifier** le service et la nouvelle version dans le mail.
-  - **Consulter le changelog** upstream (surtout Nextcloud, lldap : vérifier s'il y a des étapes de migration ou des breaking changes).+  - **Consulter le changelog** upstream, surtout pour une **version majeure** : étapes de migration, breaking changes. 
 +  - **Sauvegarder les données** si le changelog annonce une migration : <code bash> 
 +docker stop <conteneur> 
 +cp -a /mnt/stockage/docker/data/<nom> /root/ir/<nom>-data.bak 
 +</code>
   - **Éditer** le tag dans le ''docker-compose.yml'' de la stack concernée : <code>nano /mnt/stockage/docker/compose/<stack>/docker-compose.yml</code> Remplacer l'ancienne version par la nouvelle sur la ligne ''image:''.   - **Éditer** le tag dans le ''docker-compose.yml'' de la stack concernée : <code>nano /mnt/stockage/docker/compose/<stack>/docker-compose.yml</code> Remplacer l'ancienne version par la nouvelle sur la ligne ''image:''.
-  - **Appliquer** : <code bash>+  - **Appliquer** (un service à la fois) : <code bash>
 cd /mnt/stockage/docker/compose/<stack> cd /mnt/stockage/docker/compose/<stack>
-docker compose up -d+docker compose up -d <service>
 </code> Docker télécharge la nouvelle image et recrée uniquement le conteneur modifié. </code> Docker télécharge la nouvelle image et recrée uniquement le conteneur modifié.
   - **Vérifier** que le service tourne et répond : <code bash>   - **Vérifier** que le service tourne et répond : <code bash>
 docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}' docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}'
-docker compose logs --tail 30 <service>+docker logs --tail 30 <conteneur>
 </code> </code>
   - **Mettre à jour** la table « Versions épinglées » de cette page.   - **Mettre à jour** la table « Versions épinglées » de cette page.
-  - En cas de problème, **revenir en arrière** : remettre l'ancien tag dans le compose et relancer ''docker compose up -d''.+  - **Nettoyer** l'ancienne image : ''docker rmi <image>:<ancien tag>''. Conserver la sauvegarde de données quelques jours. 
 +  - En cas de problème, **revenir en arrière** : remettre l'ancien tag dans le compose et relancer ''docker compose up -d''. Si une migration de base a eu lieu, restaurer d'abord la sauvegarde de données. 
 + 
 +Ordre conseillé quand plusieurs mises à jour sont en attente : du moins risqué au plus risqué (mineures d'abord, majeures avec migration en dernier).
  
 ===== Commandes utiles ===== ===== Commandes utiles =====
Ligne 106: Ligne 145:
 <code bash> <code bash>
 # Forcer une vérification Diun immédiate (sans attendre 8h) # Forcer une vérification Diun immédiate (sans attendre 8h)
-docker restart diun && docker logs diun --tail 20+docker restart diun && sleep 15 && docker logs diun --since 1m
  
-# Voir les images surveillées et le résultat de la dernière analyse+# Voir le résultat de la dernière analyse
 docker logs diun --tail 30 docker logs diun --tail 30
  
 # Lister les versions réellement en cours d'exécution # Lister les versions réellement en cours d'exécution
 docker ps --format '{{.Names}}\t{{.Image}}' docker ps --format '{{.Names}}\t{{.Image}}'
 +
 +# Lister les images présentes (repérer les anciennes à supprimer)
 +docker images --format '{{.Repository}}:{{.Tag}}  {{.Size}}'
  
 # Connaître la version d'une image qui tourne (si label présent) # Connaître la version d'une image qui tourne (si label présent)
Ligne 121: Ligne 163:
  
   * **Nextcloud est bare-metal**, pas dans Docker — il n'est pas surveillé par Diun. Ses mises à jour se gèrent séparément (''occ upgrade''), une version majeure à la fois.   * **Nextcloud est bare-metal**, pas dans Docker — il n'est pas surveillé par Diun. Ses mises à jour se gèrent séparément (''occ upgrade''), une version majeure à la fois.
-  * Recréer ''uptime-kuma'' (lors d'une mise à jour) le redémarre : les monitors de surveillance (''gitea-ioc-watch'', ''cpu-load-watch'') clignotent brièvement puis repassent au vert au prochain heartbeat cron (~5 min). +  * **Imaginary n'est pas surveillé** : épinglé par digest et tags non semver. Tant qu'aucune règle Diun dédiée n'existe, vérifier manuellement de temps en temps. 
-  * Les fichiers de config contenant des secrets (''diun.yml'') doivent rester en ''chmod 600''. +  * **Uptime-Kuma v1 → v2** (septembre 2026) : migration irréversible de la base (agrégation des heartbeats). Procédure : arrêt, sauvegarde de ''data/uptime-kuma'', changement de tag, puis **ne jamais interrompre** la migration, même si les logs semblent figés (vérifier l'activité via la date de ''kuma.db-wal'' et ''docker stats''). Base de 246 Mo au moment de la migration. Image standard, pas ''-rootless''. 
-  * Sauvegardes des compose avant modification : conservées dans ''/root/ir/'' pour les stacks touchées lors de la mise en place.+  * Après l'activation de ''watchRepo'', le premier passage de Diun découvre tous les tags d'un coup (''added=44'') : effet ponctuel, normal. 
 +  * Au démarrage de Diun, si le DNS n'est pas encore disponible (reboot du serveur ou du routeur), le premier passage échoue (''failed=6'', ''server misbehaving''). Sans gravité : le passage suivant de 8h fonctionne. 
 +  * Recréer ''uptime-kuma'' le redémarre : les monitors push (''gitea-ioc-watch'', ''cpu-load-watch'') clignotent brièvement puis repassent au vert au prochain heartbeat cron (~5 min). 
 +  * ''docker rmi'' ne supprime réellement une image que si plus aucun tag ne pointe dessus : penser aux vieux tags ''latest'' / ''stable'' qui retiennent d'anciennes images. 
 +  * Sauvegardes avant modification : conservées dans ''/root/ir/''.
commun/mise_a_jour_des_images_docker.1785579406.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki