---
title: "Web sloj na Cloudflare Workersu"
description: "Pokrenite ograničeni Quire web sloj na Cloudflare Workersu."
image: "https://docs.quirelms.com/og.png"
---

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

# Web sloj na Cloudflare Workersu

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

Dizajn je opisan u odjeljku 6 dokumenta `docs/architecture/23-ops.md`. Workers pokreće ograničeni web sloj Quirea. Potpuna jednakost funkcija na Workersu nije cilj (odjeljak 12 PRD-a): pri pokretanju se odbijaju nepodržane mogućnosti, uz navođenje razloga.

## Stanje u ovom izdanju <!--quire:status-in-this-release-->

Konfiguracija je pripremljena (`apps/web/wrangler.jsonc`, Nitro preset `cloudflare-module`, Hyperdrive most i provjere pri pokretanju). Workeru su potrebni S3-kompatibilno spremište za R2 (`QUIRE_STORAGE_DRIVER=s3`), realtime upravljački program za više zahtjeva (`QUIRE_REALTIME_DRIVER=durable_objects` ili `centrifugo`), zajednički keš (`QUIRE_CACHE_DRIVER=postgres` ili `valkey`) i HTTP pružatelj e-pošte. Bez njih Worker odbija pokretanje, a evidencija navodi svaku postavku. Durable Objects upravljački program je klijent realtime Workera u `apps/realtime-worker` (po jedan Durable Object po kanalu za širenje, prisustvo i historiju te po jedan po osobi za prekide veze); implementirajte ga uz web sloj kao u nastavku ili koristite Centrifugo.

## Komponente <!--quire:the-pieces-->

| Komponenta | Na Cloudflareu |
| --- | --- |
| `web` | Worker s `nodejs_compat` |
| Postgres | Vanjska baza dostupna kroz Hyperdrive: `HYPERDRIVE` za ulogu aplikacije i `REPORT_HYPERDRIVE` za ulogu izvještavanja na istoj fizičkoj bazi. Pri pokretanju web sloj kopira svaki niz veze u `DATABASE_URL` i `QUIRE_REPORT_DATABASE_URL` |
| Datoteke | R2 putem S3 API-ja (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`); povezivanje `FILES` priključuje spremnik |
| Pozadinski zadaci | pg-boss preko Hyperdrivea kada se zadatak mora staviti u red zajedno sa zapisom. Ako je na pratećem workeru postavljeno `QUIRE_QUEUE_DRIVER=cloudflare`, laki zadaci (nesortirana obavještenja i isporuke webhookova) idu putem Cloudflare Queuesa, pa se Postgres zbog njih ne provjerava. Prateći worker obrađuje oboje |
| Realtime | Realtime Worker `apps/realtime-worker` s Durable Objects |
| `worker`, `scheduler`, `collab`, `content`, ClamAV, Gotenberg, ffmpeg | Prateći host s kontejnerima. Worker ih ne može pokretati |
| Praćenje | Workers observability, uključen u `wrangler.jsonc` |

`REPORT_HYPERDRIVE` pruža ulogu izvještavanja za fizičku bazu navedenu u `HYPERDRIVE`. Ova platforma ne poslužuje organizacije vezane za dodatne fizičke baze, kako je opisano u nastavku.

## Šta ova platforma ne može <!--quire:what-this-target-cannot-do-->

Pri pokretanju se odbijaju sve neispravne postavke, uz prikaz svih problema:

- **Nema SMTP-a.** Koristite HTTP pružatelja u `QUIRE_EMAIL_PROVIDER_CONFIG`.
- **Nema lokalnog diska.** `QUIRE_STORAGE_DRIVER` mora označavati spremište objekata.
- **Nema realtimea ni keša unutar procesa.** Workers ne dijele memoriju između zahtjeva, pa se odbijaju `QUIRE_REALTIME_DRIVER=inprocess` i `QUIRE_CACHE_DRIVER=memory`.
- **Nema ClamAV-a, Gotenberga ni ffmpega u Workeru.** Ako su Workeru postavljeni `CLAMAV_URL`, `GOTENBERG_URL` ili `FFMPEG_PATH`, odbijaju se; umjesto toga postavite ih na pratećem workeru.
- **Nema organizacija sa zasebnim bazama.** Hyperdrive veze Workera fiksiraju se pri implementaciji, pa organizacija sa svojom bazom dobija jasnu stranicu da usluga ovdje nije dostupna. Poslužite je putem Composea ili Vercela.

Postoji i mogućnost koja se ne odbija, ali treba je imati na umu: **predrenderiranje i inkrementalno generisanje statičkih stranica ne rade na Workersu**, bez obzira na dokumentaciju okvira. Svaka ruta renderuje se pri svakom zahtjevu.

Na ovoj platformi transakcije trebaju biti kratke i ne smiju ostati otvorene tokom mrežnog poziva: Hyperdrive vraća stanje sesije na početno kada se veza vrati u pool, pa se kontekst klijenta postavlja za svaku transakciju.

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

1. Kreirajte resurse:
   ```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
   ```
   Unesite dva Hyperdrive ID-ja u `apps/web/wrangler.jsonc`.
2. Postavite tajne, jednu po jednu, naredbom `bun run --bun wrangler secret put <NAME>` iz direktorija `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`. Obične postavke (`QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_DATABASE_ID`, `S3_ENDPOINT`, `S3_BUCKET`, `QUIRE_COLLAB_URL`) unesite u `vars`.
3. Izgradite i implementirajte iz `apps/web`:
   ```sh
   NITRO_PRESET=cloudflare-module bun run build
   bun run --bun wrangler deploy
   ```
4. Implementirajte realtime Worker koristeći `QUIRE_REALTIME_WORKER_SECRET` web sloja i tajnu tokena kao `QUIRE_REALTIME_TOKEN_SECRET` (web sloj potpisuje realtime tokene svojim `QUIRE_REALTIME_TOKEN_SECRET`, ili s `QUIRE_SECRET_KEY` ako prva varijabla nije postavljena; koristite onu koju web sloj primjenjuje). Na web sloju postavite `QUIRE_REALTIME_WORKER_URL` na njegovu adresu:
   ```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. Za lake zadatke putem Cloudflare Queuesa kreirajte po jedan red za svaki laki red i postavite sljedeće na pratećem workeru (API token treba dozvole za čitanje i pisanje u 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
   ```
   Postavite `QUIRE_QUEUE_DRIVER=cloudflare`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_QUEUES_TOKEN` i `QUIRE_QUEUE_PREFIX` ako prefiks nije `quire-`.
6. Pokrenite prateći host prema 3. koraku [vodiča za Vercel](/bs/ops/vercel/). Migracije se izvršavaju tamo prije svake implementacije Workera.

Odbijena konfiguracija u `bun run --bun wrangler tail` prikazuje se kao „The web tier did not start on cloudflare“, a zatim slijedi spisak postavki koje treba promijeniti.

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