From 20f9398bd4700c965c031d19a899132174805315 Mon Sep 17 00:00:00 2001 From: william Date: Tue, 15 Sep 2026 19:39:39 +0200 Subject: [PATCH] Phase 4 (CI) : securise le job deploy (token registre, cle SSH) - docker login sur le serveur distant : passe le token via --password-stdin (echo | docker login ...) plutot qu'en argument -p, meme methode que build-and-push - un -p en argument reste visible via ps sur le serveur tant que le process tourne. - Nouvelle etape "Nettoyage de la cle SSH" (if: always()) : supprime ~/.ssh/deploy_key en fin de job, meme si une etape precedente a echoue. rm -f (jamais rm nu) : sortie 0 que le fichier ou meme le dossier ~/.ssh parent soit deja absent, verifie empiriquement - ne peut jamais faire echouer ce nettoyage ni masquer un echec anterieur. Le runner semble deja jetable (docker volume rm observe dans les logs d'un autre job de ce meme workflow), mais jamais verifie directement pour deploy (jamais execute sur dev, reserve a main) - nettoyage explicite plutot qu'une inference par analogie pour une cle privee. djLint (H021, styles inline) volontairement saute pour ce commit - meme backlog assume que les commits Phase 3/4 precedents, aucun rapport avec ce changement. Co-Authored-By: Claude Sonnet 5 --- .gitea/workflows/deploy.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 642f4120..1e7fec1c 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -205,8 +205,19 @@ jobs: cd "${{ secrets.DEPLOY_PATH }}" echo "REGISTRY_IMAGE=${{ secrets.REGISTRY_IMAGE }}" > .env echo "IMAGE_TAG=${{ gitea.sha }}" >> .env - docker login "${{ secrets.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" -p "${{ secrets.REGISTRY_TOKEN }}" + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "${{ secrets.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" --password-stdin docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -d docker image prune -f ' + + - name: Nettoyage de la cle SSH + # if: always() - meme si les etapes precedentes ont echoue, la cle + # privee posee ci-dessus (~/.ssh/deploy_key) ne doit jamais rester + # sur le disque du job. Le runner semble deja jetable (voir + # "docker volume rm .../JOB--..." dans les logs des autres + # jobs de ce meme workflow), mais jamais verifie directement pour + # CE job (jamais execute sur dev, reserve a main) - ne pas se fier + # uniquement a une inference par analogie pour une cle privee. + if: always() + run: rm -f ~/.ssh/deploy_key