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.15 → 4.39.16) |
Auto-merge après 3 jours de stabilité (minimumReleaseAge: "3 days") |
Major (ex: 4.x → 5.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 :