0045. La variante pubblica del sito si pubblica su Cloudflare Workers
- Stato: Accettata
- Data: 2026-09-14
- Decisori: Team BI/ETL
- Contesto correlato: ADR-0043 (il sito), ADR-0044 (l'app e le due varianti)
Contesto
ADR-0044 ha messo la documentazione dentro l'app desktop e ha separato due varianti del sito: app, con le schede pipeline dei clienti, e public, senza nulla di specifico dei clienti. La variante pubblica si può quindi pubblicare anche fuori dall'app, perché la legga chi non ha l'app installata.
GitHub Pages sui repository privati non è disponibile con il piano dell'org, e Gruppo4D ha già un account Cloudflare.
Decisione
La variante public si pubblica come Worker di soli asset statici su Cloudflare Workers, di nome noeva-etl-docs. La procedura è nel runbook.
- Configurazione in
docs/.vitepress/wrangler.jsonc, accanto al resto del sito, e non alla radice del repository: noeva-etl non è un Worker, e unwrangler.jsoncin radice lo farebbe sembrare. Gli asset sono./dist, cioè l'output dipnpm run docs:buildnella variante pubblica;dist-app/non è mai il bersaglio. - Routing del sito statico:
not_found_handling: "404-page"(serve la 404 di VitePress) ehtml_handling: "auto-trailing-slash". Con questa impostazione Cloudflare serve/paginadapagina.htmle rimanda/pagina.htmla/paginacon un 307. Perciò la variante pubblica genera URL senza estensione (cleanUrls, viausesCleanUrlsindocs/.vitepress/lib/docs-target.ts), e ogni link è già nella forma canonica. La variante dell'app resta con.html: lì le pagine le serve Tauri, a cui si chiede il file esatto. - Deploy automatico da
maincon il workflowDocs deploy: a ogni promozione in produzione il sito pubblicato si allinea. Il workflow salta il deploy con un avviso se mancano i secretCLOUDFLARE_API_TOKENeCLOUDFLARE_ACCOUNT_ID, così non resta rosso finché l'account non è collegato. - Wrangler non è una dipendenza del progetto. Pesa oltre 100 MB (porta con sé il runtime
workerd) e allungherebbe ognipnpm install, in CI e nello stage di build Docker. Lo si lancia conpnpm dlx wrangler@4.131.2, versione fissata, in CI e nel runbook. - Accesso riservato con Cloudflare Access, policy per dominio email
gruppo4d.com. La variante pubblica non contiene nulla dei clienti, ma resta documentazione interna: runbook dell'infrastruttura, convenzioni del team, link a un repository privato. Access si configura nel dashboard, non nel repository. - Niente URL di anteprima (
preview_urls: false): si pubblica solo damain.
Alternative considerate
- Cloudflare Pages. Adatto ai siti statici quanto Workers con asset statici, che però ha un insieme di funzionalità più ampio (Cloudflare documenta la migrazione da Pages a Workers, non il contrario) e lascia aperta la strada a una logica lato server, se un giorno servisse.
- Workers Builds (build fatta da Cloudflare collegando il repository). Richiede di installare l'app GitHub di Cloudflare sull'org e sposta la build fuori dalla CI che il team già usa. Il workflow su GitHub Actions riusa lo stesso setup della CI.
wranglercome devDependency. Versione fissata dal lockfile, ma al costo di oltre 100 MB in ogni install per un comando che gira solo al deploy.- Sito aperto a tutti. Possibile, visto che la variante pubblica non contiene dati dei clienti; scartato per il materiale interno che resta. Si può riaprire togliendo la policy Access.
Conseguenze
- Positive. La documentazione è consultabile da browser senza l'app, sempre allineata a
main; il deploy non richiede passaggi a mano dopo la prima configurazione. - Costi. Una prima configurazione nel dashboard Cloudflare (Worker, Access, token) e due secret nel repository, descritte nel runbook. Un secondo workflow su
main. - Vincolo. Chi scrive documenti deve continuare a rispettare le regole della variante pubblica (ADR-0044): quello che non è in
APP_ONLYo in un blocco::: solo-appfinisce online a ogni promozione sumain.

