U disignu hè in a sezzione 6 di docs/architecture/23-ops.md. Workers esegue un nivellu
web riduttu. A parità di funzioni nant’à Workers ùn face micca parte di u scopu (PRD sezzione 12): ciò
ch’ellu ùn pò fà stu target hè ricusatu à l’avviu, per nome.
Statu in sta versione
A cunfigurazione hè pronta (apps/web/wrangler.jsonc, u preset Nitro
cloudflare-module, u ponte Hyperdrive è i cuntrolli à l’avviu). Un Worker hà bisognu d’un almacenamentu cumpatibile cù S3 per R2
(QUIRE_STORAGE_DRIVER=s3), d’un driver in tempu reale trà dumande
(QUIRE_REALTIME_DRIVER=durable_objects o centrifugo), d’una cache spartuta
(QUIRE_CACHE_DRIVER=postgres o valkey) è d’un fornitore di posta HTTP.
Senza elli, u Worker ricusa d’avvià è u so registru nomina ogni paràmetru.
U driver Durable Objects hè un cliente di u Worker in tempu reale in
apps/realtime-worker (un Durable Object per canale per a distribuzione, a presenza
è a storia, unu per persona per e disconnessioni); distribuite lu accantu cum’è quì sottu,
o aduprate Centrifugo.
I cumpunenti
Cumpunente
Nant’à Cloudflare
web
Un Worker cù nodejs_compat
Postgres
Esternu, accessu via Hyperdrive: HYPERDRIVE per u rollu di l’applicazione, REPORT_HYPERDRIVE per u rollu di rapportu nantu à a stessa basa fisica. U nivellu web copia ogni stringa di cunnessione in DATABASE_URL è QUIRE_REPORT_DATABASE_URL à l’avviu
Schedarii
R2, via a so API S3 (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); u binding FILES attacca u bucket
Travaglii in sfondu
pg-boss sopra Hyperdrive quandu u travagliu deve esse accodatu cù una scrittura. Cù QUIRE_QUEUE_DRIVER=cloudflare nant’à u worker cumpagnu, i travaglii ligeri (cunsigne è cunsegne webhook senza ordine) passanu invece per Cloudflare Queues, dunque Postgres ùn hè micca interrugatu per elli. U worker cumpagnu esegue i dui
In tempu reale
U Worker in tempu reale, apps/realtime-worker, cù Durable Objects
Un host di cuntainer cumpagnu. Un Worker ùn li pò eseguisce
Tracciamentu
Osservabilità Workers, attivata in wrangler.jsonc
REPORT_HYPERDRIVE furnisce u rollu di rapportu per a basa fisica indicata
da HYPERDRIVE. Stu target ùn serve tenant fissati à altre
basi fisiche, cum’è discrittu quì sottu.
Ciò ch’ellu ùn pò fà stu target
Ricusatu à l’avviu, cù tutti i prublemi elencati inseme:
Nisun SMTP. Aduprate un fornitore HTTP in QUIRE_EMAIL_PROVIDER_CONFIG.
Nisun discu lucale.QUIRE_STORAGE_DRIVER deve indicà un almacenamentu d’ogetti.
Nisuna cache o funzione in tempu reale in prucessu. Workers ùn spartenu micca memoria trà
dumande, dunque QUIRE_REALTIME_DRIVER=inprocess è
QUIRE_CACHE_DRIVER=memory sò ricusati.
Nisun ClamAV, Gotenberg o ffmpeg in u Worker.CLAMAV_URL,
GOTENBERG_URL è FFMPEG_PATH stabiliti nant’à u Worker sò ricusati; stabiliteli nant’à
u worker cumpagnu invece.
Nisuna urganizazione cù basa di dati dedicata. I binding Hyperdrive d’un Worker sò
fissati à a distribuzione, dunque un’urganizazione cù a so propria basa vede una pagina chjara
«micca dispunibule quì». Servitela da Compose o Vercel.
È una cosa chì ùn hè micca ricusata ma ci vole à sapela: a previsualizazione anticipata è
rigenerazione statica incrementale ùn funzionanu micca nant’à Workers, qualunque sia a
ducumentazione di u framework. Ogni strada hè resa per dumanda.
Nant’à stu target, tenite e transazzioni corte è ùn ne mantenite mai una durante una chjama
à a rete: Hyperdrive ristabilisce u statu di sessione quandu una cunnessione torna à u pool,
dunque u cuntestu di tenant hè stabilitu per ogni transazzione.
Distribuzione
Create e risorse:
bun run --bun wrangler hyperdrive create quire-app --connection-string="postgres://quire_app:...@db.example.com:5432/quire"bun run --bun wrangler hyperdrive create quire-report --connection-string="postgres://quire_report:...@db.example.com:5432/quire"bun run --bun wrangler r2 bucket create quire-filesbun run --bun wrangler queues create quire-jobs
Mettite i dui ID Hyperdrive in apps/web/wrangler.jsonc.
Stabilite i sicreti, unu à volta cù bun run --bun wrangler secret put <NAME> da
apps/web: QUIRE_SECRET_KEY, QUIRE_MASTER_KEY,
QUIRE_EMAIL_PROVIDER_CONFIG, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY,
QUIRE_COLLAB_SIGNING_KEY, QUIRE_REALTIME_WORKER_SECRET. I paràmetri nurmali
(QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS,
QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) vanu in
vars.
Custruite è distribuite da apps/web:
NITRO_PRESET=cloudflare-module bun run buildbun run --bun wrangler deploy
Distribuite u Worker in tempu reale, cù QUIRE_REALTIME_WORKER_SECRET di u nivellu web
è u so sicretu di gettone cum’è QUIRE_REALTIME_TOKEN_SECRET (u nivellu web firma
gettoni in tempu reale cù u so propiu QUIRE_REALTIME_TOKEN_SECRET, o cù
QUIRE_SECRET_KEY quandu ùn hè micca stabilitu; aduprate dunque quellu chì usa), è stabilite
QUIRE_REALTIME_WORKER_URL nant’à u nivellu web à u so indirizzu:
cd apps/realtime-workerbun run --bun wrangler secret put QUIRE_REALTIME_WORKER_SECRETbun run --bun wrangler secret put QUIRE_REALTIME_TOKEN_SECRETbun run --bun wrangler deploy
Per i travaglii ligeri in Cloudflare Queues, create una fila per ogni fila ligera è
stabilite i paràmetri annantu à u worker cumpagnu (un gettone API cù permessi di lettura è
scrittura per Queues):
bun run --bun wrangler queues create quire-events-notificationsbun run --bun wrangler queues create quire-events-notifications-deadbun run --bun wrangler queues create quire-events-webhooksbun run --bun wrangler queues create quire-events-webhooks-dead
QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID,
CLOUDFLARE_QUEUES_TOKEN, è QUIRE_QUEUE_PREFIX s’ellu ùn hè micca quire-.
Eseguite l’host cumpagnu cum’è discrittu in a guida Vercel, passu 3.
E migrazioni si facenu quì, prima di ogni distribuzione Worker.
Una cunfigurazione ricusata apparisce in bun run --bun wrangler tail cum’è «The web tier did
not start on cloudflare», seguitatu da ogni paràmetru da cambià.