---
title: "De Web-Tier op Cloudflare Workers"
description: "Féiert en reduzéierte Quire-Web-Tier op Cloudflare Workers."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/lb/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>

De Konzept ass `docs/architecture/23-ops.md` Kapitel 6. Workers féieren en reduzéierte Web-Tier. Feature-Paritéit op Workers ass ausserhalb vum Ëmfang (PRD Kapitel 12): wat dëst Ziel net ka maachen gëtt beim Start, no Numm, refuséiert.

## Status an dëser Verëffentlechung <!--quire:status-in-this-release-->

D'Konfiguratioun steet (`apps/web/wrangler.jsonc`, de `cloudflare-module` Nitro-Preset, d'Hyperdrive-Bréck an d'Kontrollen beim Start). E Worker braucht S3-kompatiblen Späicherplatz fir R2 (`QUIRE_STORAGE_DRIVER=s3`), en Realtime-Driver iwwer Demanden (`QUIRE_REALTIME_DRIVER=durable_objects` oder `centrifugo`), en gedeelte Cache (`QUIRE_CACHE_DRIVER=postgres` oder `valkey`) an en HTTP-E-Mail-Ubidder. ouni se refuséiert de Worker ze starten an seng Log nennt all Astellung. De Durable-Objects-Driver ass e Client vum Realtime-Worker an `apps/realtime-worker` (een Durable Object pro Kanal fir Verteilen, Präsenz a Geschicht, een pro Persoun fir Disconnects); depotéiert en mat dobaussen, wéi hei drënner, oder benotzt Centrifugo.

## De Stéck <!--quire:the-pieces-->

| Stéck | Op Cloudflare |
| --- | --- |
| `web` | E Worker mat `nodejs_compat` |
| Postgres | Extern, erreechbar iwwer Hyperdrive: `HYPERDRIVE` fir d'Applikatiounsroll, `REPORT_HYPERDRIVE` fir d'Reportroll op där selwechter physikalescher Datebank. De Web-Tier kopéiert all Verbindungsstring an `DATABASE_URL` an `QUIRE_REPORT_DATABASE_URL` wann en start |
| Fichieren | R2, iwwer seng S3-API (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`); d'`FILES`-Bannung setzt den Bucket drun |
| Hannergrondjoben | pg-boss iwwer Hyperdrive, wann de Job mat engem Schreiwen an d'Queue muss. Mat `QUIRE_QUEUE_DRIVER=cloudflare` op dem Begleed-Worker ginn déi liicht Joben (net sortéiert Noriichten- a Webhooks-Liwwerungen) amplaz dessen iwwer Cloudflare Queues, sou datt Postgres net dofir ofgeruff gëtt. De Begleed-Worker féiert béid aus |
| Realtime | De Realtime-Worker, `apps/realtime-worker`, mat Durable Objects |
| `worker`, `scheduler`, `collab`, `content`, ClamAV, Gotenberg, ffmpeg | En Begleedcontainer-Server. E Worker kann se net ausféieren |
| Tracing | Workers Observability, aktivéiert an `wrangler.jsonc` |

`REPORT_HYPERDRIVE` liwwert d'Reportroll fir d'physikalesch Datebank, deen `HYPERDRIVE` nennt. Dëst Ziel bedéient keng Tenanten, déi op zousätzlech physikalesch Datebanken festgeluecht sinn, wéi hei drënner beschriwwen.

## Wat dëst Deploy-Ziel net ka maachen <!--quire:what-this-target-cannot-do-->

Refuséiert beim Start, mat all Problem op eemol opgelëscht:

- **Kee SMTP.** Benotzt en HTTP-Ubidder an `QUIRE_EMAIL_PROVIDER_CONFIG`.
- **Kee lokalen Disk.** `QUIRE_STORAGE_DRIVER` muss en Objektspäicher nennen.
- **Kee Realtime oder Cache bannendrem Prozess.** Workers deelen keng
  Gedächtnis tëscht Demanden, sou datt `QUIRE_REALTIME_DRIVER=inprocess` an
  `QUIRE_CACHE_DRIVER=memory` refuséiert ginn.
- **Kee ClamAV, Gotenberg oder ffmpeg am Worker.** `CLAMAV_URL`,
  `GOTENBERG_URL` an `FFMPEG_PATH`, déi op de Worker gesat ginn, ginn
  refuséiert; setzt se amplaz dessen op de Begleed-Worker.
- **Keng Organisatiounen mat enger eegener Datebank.** D'Hyperdrive-Bannunge
  vun engem Worker sinn beim Depotéieren fix, sou datt eng Organisatioun mat
  hirer eegener Datebank eng kloer Säit "net verfügbar hei" kritt. Bedéient
  se vu Compose oder Vercel.

An eng Saach, déi net refuséiert gëtt, mä wësse misst: **Prerendering an inkrementell nei Generéierung vu statischem Inhalt funktionéieren op Workers net**, egal wat d'Dokumentatioun vum Framework seet. All Route gëtt pro Demande gerendert.

Um dëst Ziel haalt d'Transaktiounen kuerz an eng ni iwwer en Netzwierk-Uruff: Hyperdrive setzt den Sessiounszoustand zréck, wann eng Verbindung an de Pool zréchtkëmmt, sou datt de Kontext vum Tenant pro Transaktioun gesat gëtt.

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

1. Erstellt d'Ressourcen:
   ```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
   ```
   Setzt déi zwee Hyperdrive-IDs an `apps/web/wrangler.jsonc`.
2. Setzt d'Geheimnisser, eemol nom aneren mat
   `bun run --bun wrangler secret put <NAME>` vu `apps/web` aus: `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`. Gewéinlech Astellungen
   (`QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`,
   `QUIRE_DATABASE_ID`, `S3_ENDPOINT`, `S3_BUCKET`, `QUIRE_COLLAB_URL`) ginn
   an `vars`.
3. Baut a depotéiert vu `apps/web`:
   ```sh
   NITRO_PRESET=cloudflare-module bun run build
   bun run --bun wrangler deploy
   ```
4. Depotéiert de Realtime-Worker, mat `QUIRE_REALTIME_WORKER_SECRET` vum
   Web-Tier a sengem Token-Geheimnis als `QUIRE_REALTIME_TOKEN_SECRET` (de
   Web-Tier signéiert Realtime-Token mat sengem eegenem
   `QUIRE_REALTIME_TOKEN_SECRET`, oder mat `QUIRE_SECRET_KEY` wann dat net
   gesat ass, also benotzt dat wat en benotzt), a setzt
   `QUIRE_REALTIME_WORKER_URL` um Web-Tier op seng Adress:
   ```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. Fir liicht Joben op Cloudflare Queues, erstellt eng Queue pro liichter
   Queue a setzt dëst op de Begleed-Worker (en API-Token mat Queues Liesen a
   Schreiwen):
   ```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
   ```
   `QUIRE_QUEUE_DRIVER=cloudflare`, `CLOUDFLARE_ACCOUNT_ID`,
   `CLOUDFLARE_QUEUES_TOKEN`, an `QUIRE_QUEUE_PREFIX` wann net `quire-`.
6. Féiert de Begleedserver aus wéi am [Vercel-Guide](/lb/ops/vercel/), Schrëtt 3.
   Migratioune laufen do, ier all Worker-Deploys.

Eng refuséiert Konfiguratioun weist sech an `bun run --bun wrangler tail` als "The web tier did not start on cloudflare", gefolgt vun all Astellung, déi geännert gëtt.

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