---
title: "De web tier op Cloudflare Workers"
description: "Draai in beheinde web tier fan Quire op Cloudflare Workers."
image: "https://docs.quirelms.com/og.png"
---

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

# De web tier op Cloudflare Workers

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

It ûntwerp stiet yn `docs/architecture/23-ops.md` seksje 6. Workers draaie in beheinde
web tier. Gelykweardigens fan funksjes op Workers falt bûten de omfang (PRD seksje 12):
wat dizze target net kin, wurdt by it starten mei de namme neamd wegere.

## Steat yn dizze release <!--quire:status-in-this-release-->

De konfiguraasje is oanwêzich (`apps/web/wrangler.jsonc`, de Nitro-preset
`cloudflare-module`, de Hyperdrive-brêge en startkontrôles). In Worker hat S3-kompatibele
opslach foar R2 nedich (`QUIRE_STORAGE_DRIVER=s3`), in realtime-driver foar ferskate
fersiken (`QUIRE_REALTIME_DRIVER=durable_objects` of `centrifugo`), in dielde cache
(`QUIRE_CACHE_DRIVER=postgres` of `valkey`) en in HTTP-e-mailprovider. Sûnder dy
ynstellingen wegeret de Worker te begjinnen en neamt it logboek elk probleem.
De Durable Objects-driver is in client fan de realtime Worker yn `apps/realtime-worker`
(ien Durable Object per kanaal foar fan-out, oanwêzigens en skiednis, ien per persoan
foar ferbinings dy't fuortfalle); set dy njonken de web tier yn, lykas hjirûnder, of brûk Centrifugo.

## De ûnderdielen <!--quire:the-pieces-->

| Underdiel | Op Cloudflare |
| --- | --- |
| `web` | In Worker mei `nodejs_compat` |
| Postgres | Ekstern fia Hyperdrive: `HYPERDRIVE` foar applikaasjerol, `REPORT_HYPERDRIVE` foar rapportrol op deselde fysike database. By it starten kopiearret de web tier elke ferbiningsrige nei `DATABASE_URL` en `QUIRE_REPORT_DATABASE_URL` |
| Bestannen | R2 fia de S3 API (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`); de `FILES`-binding keppelt de bucket |
| Eftergrûntaken | pg-boss fia Hyperdrive as in taak tegearre mei in skriuwaksje op de wachtrige moat. Mei `QUIRE_QUEUE_DRIVER=cloudflare` op de begeliedende worker geane lichte taken (net-oardere meidielingen en webhookleveringen) fia Cloudflare Queues, sadat Postgres dêr net foar poallet wurdt. De begeliedende worker draait beide |
| Realtime | De realtime Worker, `apps/realtime-worker`, mei Durable Objects |
| `worker`, `scheduler`, `collab`, `content`, ClamAV, Gotenberg, ffmpeg | In begeliedende containerhost. In Worker kin se net útfiere |
| Tracing | Workers-observability, ynskeakele yn `wrangler.jsonc` |

`REPORT_HYPERDRIVE` leveret de rapportrol foar de fysike database dy't `HYPERDRIVE` neamt.
Dizze target betsjinnet gjin tenants dy't oan ekstra fysike databases fêstset binne, sa't
hjirûnder beskreaun wurdt.

## Wat dizze target net kin <!--quire:what-this-target-cannot-do-->

Wurdt by it starten wegere, mei alle problemen tagelyk neamd:

- **Gjin SMTP.** Brûk in HTTP-provider yn `QUIRE_EMAIL_PROVIDER_CONFIG`.
- **Gjin lokale skiif.** `QUIRE_STORAGE_DRIVER` moat objektopslach oanjaan.
- **Gjin realtime of cache yn it proses.** Workers diele gjin ûnthâld tusken fersiken,
  dus `QUIRE_REALTIME_DRIVER=inprocess` en `QUIRE_CACHE_DRIVER=memory` wurde wegere.
- **Gjin ClamAV, Gotenberg of ffmpeg yn de Worker.** `CLAMAV_URL`, `GOTENBERG_URL` en
  `FFMPEG_PATH` ynsteld op de Worker wurde wegere; set se yn op de begeliedende worker.
- **Gjin organisaasjes mei tawijde databases.** Hyperdrive-bindings fan in Worker steane
  fêst by ynset, dus krijt in organisaasje mei eigen database in dúdlike side
  "hjir net beskikber". Betsjinje dy fan Compose of Vercel ôf.

En ien ding dat net wegere wurdt, mar datst witte moatst: **prerenderjen en inkrementele
statyske fernijing wurkje net op Workers**, wat de raamwurkdokumintaasje ek seit. Elke
rûte wurdt per fersyk renderd.

Hâld op dizze target transaksjes koart en lit se nea oer in netwurkoprop hinne iepen stean:
Hyperdrive set sesjesteat werom as in ferbining nei de pool giet, dus tenant-kontekst wurdt
per transaksje ynsteld.

## Ynsette <!--quire:deploying-->

1. Meitsje de boarnen oan:
   ```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
   ```
   Set de twa Hyperdrive-ID's yn `apps/web/wrangler.jsonc`.
2. Stel de geheimen ien foar ien yn mei `bun run --bun wrangler secret put <NAME>` út `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`.
   Gewoane ynstellingen (`QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`,
   `QUIRE_PLATFORM_DOMAINS`, `QUIRE_DATABASE_ID`, `S3_ENDPOINT`, `S3_BUCKET`,
   `QUIRE_COLLAB_URL`) komme yn `vars`.
3. Bou en set yn út `apps/web`:
   ```sh
   NITRO_PRESET=cloudflare-module bun run build
   bun run --bun wrangler deploy
   ```
4. Set de realtime Worker yn mei de `QUIRE_REALTIME_WORKER_SECRET` fan de web tier en
   syn tokengeheim as `QUIRE_REALTIME_TOKEN_SECRET` (de web tier ûndertekenet realtimetokens
   mei eigen `QUIRE_REALTIME_TOKEN_SECRET`, of mei `QUIRE_SECRET_KEY` as dy net ynsteld is;
   brûk dus deselde wearde as dy brûkt wurdt). Set `QUIRE_REALTIME_WORKER_URL` op de web tier
   nei syn adres:
   ```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. Om lichte taken fia Cloudflare Queues út te fieren, meitsje ien queue per lichte taak en
   set de folgjende yn op de begeliedende worker (in API-token mei lêzen en skriuwen fan Queues):
   ```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
   ```
   Stel `QUIRE_QUEUE_DRIVER=cloudflare`, `CLOUDFLARE_ACCOUNT_ID`,
   `CLOUDFLARE_QUEUES_TOKEN` en `QUIRE_QUEUE_PREFIX` yn as it net `quire-` is.
6. Draai de begeliedende host lykas yn stap 3 fan de [Vercel-hantlieding](/fy/ops/vercel/).
   Migrations rinne dêr foar elke Worker-ynset.

By wegere konfiguraasje lit `bun run --bun wrangler tail` sjen: "The web tier did not start on cloudflare",
folge troch elke ynstelling dy't feroare wurde moat.

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