Skip to content

Mise à jour Docker

Depuis mai 2026, les mises à jour Docker sont gérées par Renovate + Forgejo Actions (GitOps). L'ancienne procédure manuelle ne s'applique plus qu'aux cas exceptionnels.

Pipeline GitOps (standard)

Renovate (cron 06h00)
  → scan homelab/infra (git.ncls.ltd)
  → PR sur docker-compose.yml si nouvelle version disponible

Review + merge (ou auto-merge après 3 jours pour minor/patch)
  → Push sur main

deploy.yml (Forgejo Actions)
  → SSH root@192.168.1.21
  → git pull /mnt/lxc-data
  → pct push NNN /mnt/lxc-data/deploy.sh /tmp/lxc_deploy.sh
  → pct exec NNN -- bash /tmp/lxc_deploy.sh /opt/docker
    (compose racine + tous les sous-répertoires {app}/docker-compose.yml)

Règles Renovate (renovate.json5)

Type de mise à jour Comportement
Patch / Minor (ex: 4.39.154.39.16) Auto-merge après 3 jours de stabilité (minimumReleaseAge: "3 days")
Major (ex: 4.x5.x) PR créée, label needs-review, reviewer nico — merge manuel requis
Images :latest, :lts, :alpine Ignorées par Renovate (désactivé dans renovate.json5)
zensical/zensical PR créée, label needs-review (breaking changes attendus en 0.x)
LXC 107 (107-forge) Exclu du deploy automatique — voir ci-dessous

Suivi des PRs Renovate

Accéder à git.ncls.ltd/homelab/infra/pulls.

Cas particulier — LXC 107 (Forge)

Le runner Forgejo tourne dans son propre container. Le redéployer via deploy.yml tuerait le job en cours. Procédure manuelle obligatoire :

pct exec 107 -- bash -c 'cd /opt/docker && docker compose pull && docker compose up -d --remove-orphans'

Déclenchement manuel du deploy

Pour forcer le redéploiement d'un LXC sans modifier une image :

# Depuis /mnt/lxc-data — toucher le compose file pour déclencher le workflow
cd /mnt/lxc-data
# Éditer le compose concerné (ex: changer une variable env, ajouter un commentaire)
git add 100-media/docker-compose.yml
git commit -m "chore: force redeploy lxc100"
git push

Ou directement sur le LXC :

pct exec NNN -- bash -c 'cd /opt/docker && docker compose pull && docker compose up -d --remove-orphans'

Cup vs Renovate — comprendre les 33 updates

Cup peut afficher des mises à jour que Renovate ne propose pas. Ce n'est pas un bug — les deux outils ont des périmètres différents :

Catégorie Cup Renovate
Images semver épinglées (ex: 4.39.15) ✅ Détecte la nouvelle version ✅ Ouvre une PR
Images :latest, :lts, :edge, :alpine ✅ Détecte le changement de digest ❌ Intentionnellement ignoré
Images :latest non-semver sans équivalent épinglable ✅ Voit le container ❌ Aucune version à bumper
Major versions ✅ Détecte ✅ PR avec needs-review (pas d'auto-merge)
zensical/zensical ✅ Détecte ⚠️ PR créée, needs-review

En pratique : la majorité des "updates" Cup sont des mises à jour de digest sur des tags non-semver. Elles sont intentionnellement ignorées par Renovate car il n'y a pas de version à bumper. Ces images restent en dehors du pipeline GitOps et ne sont mises à jour que manuellement si nécessaire.

Rollback

Si une image déployée cause un problème :

# Sur le LXC concerné
pct exec NNN -- bash -c 'cd /opt/docker && docker compose down'

# Éditer le compose dans /mnt/lxc-data pour rétrograder la version
# (ou via Forgejo : revenir à un commit antérieur)

pct exec NNN -- bash -c 'cd /opt/docker && docker compose up -d'

Ou via git pour revenir à l'état précédent et redéployer :

cd /mnt/lxc-data
git revert HEAD --no-edit
git push  # déclenche deploy.yml automatiquement