Le carnet de bord

Les vraies pannes, les choix d'architecture et les pièges — appris en cassant des trucs, puis en les réparant. Pas de tutoriel hors-sol : ce qui tourne réellement sur le cluster.

14 juillet 2026 · 6 min

Le jour où un parseur d'options a crié ma clé privée

Sortir ~57 secrets du texte clair : Bitwarden Secrets Manager devient la source de vérité, le cluster reçoit des fichiers rendus, la rotation tient en trois commandes. Un chantier discipliné — comparaisons par empreinte, jamais une valeur affichée — jusqu'à ce qu'un `--` manquant fasse recracher une clé RSA entière par un message d'erreur. Troisième leçon de la série : un secret ne doit jamais approcher un parseur d'options.

securitesecretsbitwardendocker-swarmconfig-as-code
3 juillet 2026 · 8 min

Surveiller les releases de mes dépendances — sans tout réinventer

Une trentaine d'images à garder à jour, un service hébergé qui le fait déjà très bien : je l'ai branché sur ma propre tuyauterie (dashboard Grafana + push ntfy), puis j'ai fini par piloter tout le compte depuis un YAML versionné. En chemin, un bug de pagination Grafana, un choix d'authentification assumé — et un tiret qui a corrompu une clé API en silence.

grafanan8nntfyautomatisationobservabiliteconfig-as-code
20 juin 2026 · 4 min

Intégrer son DNS au cluster — sans y mettre le résolveur

Mon DNS de LAN est devenu un citoyen de première classe de l'infra : config versionnée, métriques, alertes, accès SSO. Mais son moteur tourne dehors, sur sa propre machine — délibérément. Pourquoi on ne met pas le sol à l'intérieur du bâtiment.

dnsadguardconfig-as-codeobservabiliteautheliaarchitecture
20 juin 2026 · 5 min

La couche données ne tient plus à un seul nœud : Patroni, et tout se met à flotter

Le billet précédent finissait sur un aveu : control-plane et ingress en HA, mais les bases restaient épinglées à un seul Pi. Voici le chantier livré — chaque base en cluster Patroni, chaque app rendue mobile, et trois drills (déplacement, crash rpi51, crash rpi52) pour le prouver. Avec les surprises : le gros chantier S3 qui n'existait pas, et une fausse panne que je me suis infligée tout seul.

postgrespatronihaute-disponibilitedocker-swarmhomelab
20 juin 2026 · 4 min

Vaultwarden était « down ». En fait, c'était le DNS qui mentait.

Pendant un drill de déplacement de nœud, mon gestionnaire de mots de passe semblait HS. Une heure de débogage plus tard : le cluster allait parfaitement bien. Le coupable était une vieille réécriture DNS qui pointait vers un NAS éteint — atteinte par un domaine de recherche que j'avais oublié.

dnsadguarddebugdocker-swarmipv6reseau
17 juin 2026 · 4 min

Le monitoring avait des angles morts (dont mon canal d'alerte)

La triptyque métriques/logs/traces tournait, mais quatre cibles n'étaient pas surveillées — dont six bases Postgres et le tunnel d'ingress. En les branchant, je suis tombé sur un piège réseau Swarm, et surtout sur une vérité gênante : on ne peut pas s'alerter de la panne de son propre canal d'alerte.

observabiliteprometheusgrafanapostgresqlalertingdocker-swarm
17 juin 2026 · 5 min

Trois managers : le quorum n'est pas la HA de tes données

Mon vrai point unique de défaillance, c'était un manager Swarm unique qui portait aussi tout l'ingress. Promouvoir les 3 Pi en managers + passer l'ingress en actif/actif l'a réglé — mais ça m'a forcé à distinguer trois choses qu'on confond : quorum du control-plane, HA de l'ingress, et disponibilité des données. Avec, au passage, deux pièges Swarm.

docker-swarmhaute-disponibilitetraefikrafthomelab
16 juin 2026 · 3 min

Déployer un site statique sans confier les clés R2 à GitHub

GitHub Actions construit, mais ne touche jamais au stockage de prod. n8n (côté homelab) récupère l'artefact et déploie. Et pourquoi le node Compression de n8n a tué la première version.

ci-cdn8ngithub-actionscloudflare-r2docker-swarm
16 juin 2026 · 3 min

GlusterFS pour dé-pinner mes Postgres ? Le calcul qui dit non

Un 3e nœud arrive, et l'envie de ne plus épingler les bases à une machine. GlusterFS semblait la réponse. Le chiffrage dit l'inverse — et explique pourquoi 'pinner' n'est pas un aveu d'échec.

docker-swarmpostgresqlstockagehaute-disponibilitearchitecture
15 juin 2026 · 3 min

Servir un site depuis R2 : trois pièges et un 404 qui ment

Mettre www.zebbox.net en ligne depuis un bucket Cloudflare R2 via nginx-s3-gateway. Une zone mémoire trop petite, un resolver qui part en IPv6, et un 404 systématique causé par un :443 dans la signature.

cloudflare-r2nginxs3debuggingarm64
11 juin 2026 · 2 min

Authelia OIDC : le piège du {{ }} dans un commentaire YAML

Brancher le premier client OIDC sur Authelia, livrer la clé d'émetteur sans la committer, et le bug surprise où un {{ }} laissé dans un commentaire casse toute la config templatée.

autheliaoidcssogotcha
10 juin 2026 · 2 min

Quand start-first et un volume partagé se battent pour un socket

Un déploiement applicatif qui crash-loop au démarrage sur Swarm, à cause d'un socket supervisord dans un volume partagé pendant le chevauchement start-first. Diagnostic et correctif tmpfs.

docker-swarmrolloutdebugging