Přejít k obsahu

Webová vrstva na Cloudflare Workers

Provozujte omezenou webovou vrstvu Quire na Cloudflare Workers.

Zobrazit jako Markdown

Architektura je popsána v části 6 dokumentu docs/architecture/23-ops.md. Workers provozují omezenou webovou vrstvu. Plná parita funkcí na Workers není cílem (PRD, část 12): co tento cíl neumí, se při spuštění odmítne a pojmenuje.

Stav v této verzi

Konfigurace je připravena (apps/web/wrangler.jsonc, předvolba Nitro cloudflare-module, bridge Hyperdrive a kontroly při spuštění). Worker potřebuje úložiště kompatibilní se S3 pro R2 (QUIRE_STORAGE_DRIVER=s3), realtime ovladač pro požadavky (QUIRE_REALTIME_DRIVER=durable_objects nebo centrifugo), sdílenou cache (QUIRE_CACHE_DRIVER=postgres nebo valkey) a e-mailového poskytovatele přes HTTP. Bez nich Worker odmítne spuštění a v protokolu pojmenuje všechna chybějící nastavení. Ovladač Durable Objects je klientem realtime Workeru v apps/realtime-worker (jeden Durable Object na kanál zajišťuje fan-out, presence a historii; jeden na uživatele obsluhuje odpojení). Nasaďte ho souběžně podle pokynů níže, nebo použijte Centrifugo.

Součásti

Součást Na Cloudflare
web Worker s nodejs_compat
Postgres Externě, dostupný přes Hyperdrive: HYPERDRIVE pro aplikační roli, REPORT_HYPERDRIVE pro reportovací roli ve stejné fyzické databázi. Při spuštění webová vrstva zkopíruje každý připojovací řetězec do DATABASE_URL a QUIRE_REPORT_DATABASE_URL
Soubory R2 přes jeho API S3 (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); vazba FILES připojuje bucket
Úlohy na pozadí pg-boss přes Hyperdrive, když je třeba úlohu zařadit současně se zápisem. Pokud doprovodný worker používá QUIRE_QUEUE_DRIVER=cloudflare, lehké úlohy (neuspořádaná oznámení a doručování webhooků) se místo toho posílají přes Cloudflare Queues, takže se kvůli nim neprohledává Postgres. Doprovodný worker spouští oba typy
Realtime Realtime Worker apps/realtime-worker s Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Doprovodný hostitel kontejnerů. Worker je spustit neumí
Trasování Workers observability zapnutá v wrangler.jsonc

REPORT_HYPERDRIVE poskytuje reportovací roli pro fyzickou databázi označenou HYPERDRIVE. Tento cíl neobsluhuje tenanty připnuté k dalším fyzickým databázím, jak je popsáno níže.

Co tento cíl neumí

Při spuštění odmítne všechny problémy najednou:

  • Bez SMTP. Použijte HTTP poskytovatele v QUIRE_EMAIL_PROVIDER_CONFIG.
  • Bez místního disku. QUIRE_STORAGE_DRIVER musí označovat objektové úložiště.
  • Bez realtime nebo cache v procesu. Workers nesdílejí paměť mezi požadavky, proto se odmítají QUIRE_REALTIME_DRIVER=inprocess a QUIRE_CACHE_DRIVER=memory.
  • Worker neumí ClamAV, Gotenberg ani ffmpeg. Pokud jsou v Workeru nastavené CLAMAV_URL, GOTENBERG_URL nebo FFMPEG_PATH, konfigurace se odmítne; nastavte je na doprovodném workeru.
  • Žádné organizace s vyhrazenou databází. Vazby Hyperdrive Workeru jsou pevně dané při nasazení, takže organizace s vlastní databází dostane jasnou stránku „zde nedostupné“. Provozujte ji na Compose nebo Vercelu.

Ještě jedna věc se neodmítá, ale je důležité o ní vědět: prerenderování a přírůstkové generování statických stránek na Workers nefungují, bez ohledu na dokumentaci frameworku. Každá cesta se vykresluje při každém požadavku.

Transakce v tomto cíli udržujte krátké a nikdy je neotevírejte přes síťové volání: Hyperdrive při vrácení připojení do poolu resetuje stav relace, proto se kontext tenanta nastavuje v každé transakci.

Nasazení

  1. Vytvořte prostředky:
    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-files
    bun run --bun wrangler queues create quire-jobs
    Vložte obě ID Hyperdrive do apps/web/wrangler.jsonc.
  2. Jednotlivě nastavte tajné údaje příkazem bun run --bun wrangler secret put <NAME> ze složky 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. Obyčejná nastavení (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) patří do vars.
  3. Sestavte a nasaďte z apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. Nasaďte realtime Worker s hodnotou QUIRE_REALTIME_WORKER_SECRET z webové vrstvy a jeho tokenovým tajným klíčem v QUIRE_REALTIME_TOKEN_SECRET. Webová vrstva podepisuje realtime tokeny vlastním QUIRE_REALTIME_TOKEN_SECRET, případně QUIRE_SECRET_KEY, pokud první proměnná není nastavená; použijte tedy stejnou hodnotu jako ona. Na webové vrstvě nastavte QUIRE_REALTIME_WORKER_URL na adresu Workeru:
    cd apps/realtime-worker
    bun run --bun wrangler secret put QUIRE_REALTIME_WORKER_SECRET
    bun run --bun wrangler secret put QUIRE_REALTIME_TOKEN_SECRET
    bun run --bun wrangler deploy
  5. Pro lehké úlohy v Cloudflare Queues vytvořte frontu pro každou lehkou frontu a nastavte ji na doprovodném workeru (token API s oprávněním číst a zapisovat fronty):
    bun run --bun wrangler queues create quire-events-notifications
    bun run --bun wrangler queues create quire-events-notifications-dead
    bun run --bun wrangler queues create quire-events-webhooks
    bun run --bun wrangler queues create quire-events-webhooks-dead
    Nastavte QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN a QUIRE_QUEUE_PREFIX, pokud nepoužíváte quire-.
  6. Doprovodného hostitele spusťte podle 3. kroku příručky k Vercelu. Migrace se tam spouštějí před každým nasazením Workeru.

Odmítnutá konfigurace se v bun run --bun wrangler tail zobrazí jako „The web tier did not start on cloudflare“ a vypíše všechna nastavení, která je třeba změnit.

Navigace

Začněte psát a hledejte…

↑↓ procházení↵ vybratEsc zavřít