---
title: "Webová vrstva na Cloudflare Workers"
description: "Provozujte omezenou webovou vrstvu Quire na Cloudflare Workers."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/cs/llms.txt
> Use this file to discover all available pages before exploring further.

# Webová vrstva na Cloudflare Workers

<span id="the-web-tier-on-cloudflare-workers"></span>

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 <!--quire:status-in-this-release-->

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 <!--quire:the-pieces-->

| 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í <!--quire:what-this-target-cannot-do-->

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í <!--quire:deploying-->

1. Vytvořte prostředky:
   ```sh
   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`:
   ```sh
   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:
   ```sh
   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):
   ```sh
   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](/cs/ops/vercel/). 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.

Source: https://docs.quirelms.com/cs/ops/cloudflare/index.mdx
