Autodeploy Obelica Docs
Forgejo Actions runner account-level dedicato al deploy automatico della documentazione
Stato
Autodeploy configurato il 2026-06-17 per il repo:
bona/obelica-docsLa configurazione finale usa un solo runner account-level dell'utente bona, dedicato al deploy docs tramite label unica:
obelica-docs-deployIl runner non e' repo-scoped nel database Forgejo, perche' e' stato registrato con registration token globale/account di bona. Resta comunque dedicato operativamente a obelica-docs perche' solo questo workflow deve usare la label obelica-docs-deploy.
Perche account-level ma dedicato
Il runner puo' accedere a:
/opt/obelica;- Docker socket host;
- script deploy;
- compose runtime di
obelica-docs.
Questo accesso e' privilegiato. Per ridurre il rischio operativo:
- la label
obelica-docs-deploynon deve essere riutilizzata in altri repo; - il workflow deploy docs e' l'unico autorizzato a usarla;
- il runner resta privato sul server;
- Forgejo resta locale su
127.0.0.1:3333.
Incidente risolto 2026-07-03: credenziali git del runner
Tutti i deploy Actions dal 2026-06-26 al 2026-07-03 (task 65-68, 70)
fallivano con lo stesso pattern: git fetch chiedeva Username for 'http://127.0.0.1:3333': in interattivo e moriva per timeout (exit 124)
dopo 120 secondi. Nessuna notifica: i fallimenti erano visibili solo nei log
del runner, e i deploy reali avvenivano a mano.
Causa: il runner gira con HOME=/data (volume
/opt/obelica/infra/forgejo-runner/obelica-docs/data), quindi non vede il
~/.git-credentials dell'utente bona sul host. Nel suo HOME non era mai
stato creato un credential store.
Fix applicato: creati /data/.gitconfig (credential.helper = store) e
/data/.git-credentials con il token scoped server-git-ops-20260703
(scope write:repository), permessi 600. Verificato con workflow_dispatch:
task 71 verde, container ricreato dall'autodeploy.
Nota di manutenzione: alla prossima rotazione del token va aggiornato
anche il file del runner, non solo ~/.git-credentials del host.
Gap ancora aperto: nessun alert sui deploy Actions falliti.
Componenti
| Componente | Path |
|---|---|
| Runner compose | /opt/obelica/infra/forgejo-runner/obelica-docs/docker-compose.yml |
| Runner image | /opt/obelica/infra/forgejo-runner/obelica-docs/Dockerfile |
| Runner config | /opt/obelica/infra/forgejo-runner/obelica-docs/data/runner-config.yml |
| Runner registration | /opt/obelica/infra/forgejo-runner/obelica-docs/data/.runner |
| Deploy script | /opt/obelica/infra/scripts/deploy-obelica-docs.sh |
| Runner check script | /opt/obelica/infra/scripts/check-actions-runner.sh |
| Workflow | .forgejo/workflows/deploy.yml |
| Server checkout | /opt/obelica/repos/obelica-docs |
| Server checkout origin | /opt/obelica/data/forgejo/app/git/repositories/bona/obelica-docs.git |
Flusso
push su main
-> Forgejo Actions
-> runner obelica-docs-deploy
-> /opt/obelica/infra/scripts/deploy-obelica-docs.sh
-> /opt/obelica/infra/bin/obelica deploy docs
-> git fetch origin main dal bare repo locale Forgejo
-> git merge --ff-only origin/main
-> docker compose build
-> docker compose up -d --no-build
-> container check obelica-docs
-> smoke test http://127.0.0.1:3334/docsScript deploy
Dal 2026-06-24 lo script deploy e' un wrapper sottile intorno al deploy centralizzato Rust.
Lo script:
- usa lock file per evitare deploy concorrenti;
- entra in
/opt/obelica; - esegue
/opt/obelica/infra/bin/obelica deploy docs.
La logica di git, build, restart, verifica container, smoke test e timeout vive
nel modulo Rust deploy, configurato tramite:
/opt/obelica/infra/config/deploy-apps.tsvQuesto evita di mantenere una seconda procedura shell separata per le docs.
Comandi runner
Check operativo:
/opt/obelica/infra/scripts/check-actions-runner.shStato:
cd /opt/obelica/infra/forgejo-runner/obelica-docs
docker compose psLog:
docker logs forgejo-runner-obelica-docs --tail=200Restart manuale runner:
cd /opt/obelica/infra/forgejo-runner/obelica-docs
docker compose restart forgejo-runner-obelica-docsTest manuale deploy
docker exec forgejo-runner-obelica-docs /opt/obelica/infra/scripts/deploy-obelica-docs.shRemote del checkout server
Il checkout server in /opt/obelica/repos/obelica-docs deve usare come origin
il bare repository locale di Forgejo:
git -C /opt/obelica/repos/obelica-docs remote -vOutput atteso:
origin /opt/obelica/data/forgejo/app/git/repositories/bona/obelica-docs.git (fetch)
origin /opt/obelica/data/forgejo/app/git/repositories/bona/obelica-docs.git (push)Motivo: il runner non deve usare http://127.0.0.1:3333/... per il fetch del
checkout server, perche' Forgejo richiede autenticazione HTTP e un git fetch
non interattivo puo' restare appeso in attesa di credenziali.
Correzione:
git -C /opt/obelica/repos/obelica-docs remote set-url origin \
/opt/obelica/data/forgejo/app/git/repositories/bona/obelica-docs.gitQuesta regola vale solo per il checkout deploy server. I push di sviluppo devono continuare a passare da Forgejo HTTP/UI/SSH, non dal bare repo.
Test autodeploy
Da un checkout locale:
git pull --rebase origin main
git commit --allow-empty -m "test: verify forgejo runner"
git push origin mainSul server:
docker logs forgejo-runner-obelica-docs --tail=100
/opt/obelica/infra/scripts/check-actions-runner.shComportamento atteso:
- la run viene creata da Forgejo;
- il runner prende il job entro pochi secondi;
- nei log compare
task X repo is bona/obelica-docs; - il deploy termina con smoke test 200.
Run arancione che non parte
Sintomo:
Forgejo mostra la run pending/arancione, ma il job non inizia.Verifica:
/opt/obelica/infra/scripts/check-actions-runner.sh
docker logs forgejo-runner-obelica-docs --tail=200Recovery manuale:
cd /opt/obelica/infra/forgejo-runner/obelica-docs
docker compose restart forgejo-runner-obelica-docsQuesto riavvia solo il runner forgejo-runner-obelica-docs. Non riavvia Forgejo, Postgres, Traefik o l'app obelica-docs.
Note storiche
Durante il bootstrap sono stati creati runner repo-scoped e un watchdog temporaneo. Il comportamento non era corretto: i job restavano pending finche' il runner non rifaceva Declare dopo un restart.
La configurazione stabile e' stata ottenuta registrando manualmente un runner account-level per bona con file .runner. Il test workflow_dispatch successivo ha confermato assegnazione del job in circa 2 secondi senza watchdog.
I runner precedenti risultano marcati come deleted in Forgejo e non vanno riutilizzati.
Regole
- Non riusare la label
obelica-docs-deployin altri repo. - Non montare altri path host senza aggiornare questa pagina.
- Non mettere token runner nel repo.
- Non committare
/opt/obelica/infra/forgejo-runner/obelica-docs/data/.runner. - Se il runner viene compromesso, ruotare il registration token e ricreare
.runner.