Génère le jeton de l'updater au lieu de le faire saisir - #28
Merged
Conversation
Le bouton « Appliquer maintenant » demandait de choisir une valeur au hasard, de la coller dans le .env du serveur et de relancer la pile. C'est une contrainte pour rien : ce jeton n'autorise qu'une demande de redémarrage entre deux conteneurs de la même machine. L'entrypoint le génère désormais au premier démarrage et le conserve dans le volume de configuration, comme les autres secrets. Watchtower remplace la valeur de WATCHTOWER_HTTP_API_TOKEN par le contenu du fichier quand elle désigne un fichier existant : les deux conteneurs partagent donc le même jeton sans que personne n'ait de valeur à saisir. Renseigner la variable dans le .env continue d'imposer une valeur. Le conteneur `updater-token`, lancé par le même profil, exécute l'entrypoint puis s'arrête : il garantit que le fichier existe avant que l'updater ne le lise, sans faire dépendre l'updater de la santé de l'application, dont il est justement le moyen de rétablissement. Deux correctifs découverts en vérifiant le tout sur une pile réelle : - Watchtower 1.7.1 s'adresse au démon Docker en API 1.25, que les moteurs récents refusent (« client version 1.25 is too old », minimum 1.40) : aucune mise à jour n'avait lieu. DOCKER_API_VERSION corrige ce point. - Les fichiers temporaires des secrets étaient nommés d'après le PID, or tous les conteneurs démarrent leur entrypoint en PID 1 : deux conteneurs lancés en même temps sur un volume vierge s'écrasaient mutuellement et pouvaient retenir des secrets différents. mktemp et une création par lien dur les font converger — vérifié avec six conteneurs simultanés. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Le bouton Appliquer maintenant demandait de choisir une valeur au hasard, de la coller dans le
.envdu serveur et de relancer la pile. C'est une contrainte pour rien : ce jeton n'autorise qu'une demande de redémarrage entre deux conteneurs de la même machine.Ce qui change
L'entrypoint génère le jeton au premier démarrage et le conserve dans le volume de configuration, comme les autres secrets. Watchtower remplace la valeur de
WATCHTOWER_HTTP_API_TOKENpar le contenu du fichier quand elle désigne un fichier existant : les deux conteneurs partagent donc le même jeton sans que personne n'ait de valeur à saisir. Renseigner la variable dans le.envcontinue d'imposer une valeur.Le conteneur
updater-token, lancé par le même profilautoupdate, exécute l'entrypoint puis s'arrête. Il garantit que le fichier existe avant que l'updaterne le lise, sans faire dépendre l'updaterde la santé de l'application — dont il est justement le moyen de rétablissement.Deux correctifs découverts en vérifiant sur une pile réelle
client version 1.25 is too old. Minimum supported API version is 1.40).DOCKER_API_VERSIONcorrige ce point ; 1.41 est acceptée par tous les démons depuis Docker 20.10.mktempet une création par lien dur (ln, qui échoue si la cible existe) les font converger.Vérifications
Menées avec un démon Docker réel, l'image publiée et le vrai
compose.yaml:docker compose up -d, sans.envni jeton saisiupdater-tokensort en 0 avant le démarrage de l'updaterPOST /v1/updatedepuis le conteneur applicatifUpdates triggered by HTTP API request.côté updaterWATCHTOWER_HTTP_API_TOKENimposé dans l'environnementupdater, fichier réalignéDOCKER_API_VERSIONabsenteupdaterne joint pas le démon, aucune mise à jourtsc --noEmit,npm run lintetnext buildpassent.Côté serveur
Une seule commande, une seule fois :
compose.yamlvit sur le serveur et n'est pas mis à jour par l'updater.Generated by Claude Code