---
title: "Веб-слојот на Cloudflare Workers"
description: "Извршете намален веб-слој на Quire на Cloudflare Workers."
image: "https://docs.quirelms.com/og.png"
---

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

# Веб-слојот на Cloudflare Workers

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

Дизајнот е `docs/architecture/23-ops.md` оддел 6. Workers извршуваат намален веб-слој. Паритетот на функции на Workers е надвор од опфатот (PRD оддел 12): она што оваа цел не може да го прави е одбиено при стартување, по име.

## Состојба во ова издание <!--quire:status-in-this-release-->

Конфигурацијата е поставена (`apps/web/wrangler.jsonc`, претходната поставка `cloudflare-module` на Nitro, мостот Hyperdrive и проверките при стартување). Worker бара складирање компатибилно со S3 за R2 (`QUIRE_STORAGE_DRIVER=s3`), драјвер во реално време низ барања (`QUIRE_REALTIME_DRIVER=durable_objects` или `centrifugo`), споделен кеш (`QUIRE_CACHE_DRIVER=postgres` или `valkey`) и давател за е-пошта преку HTTP. Без нив Worker-от одбива да стартува и неговиот дневник го наведува секоја поставка. Драјверот Durable Objects е клиент на realtime Worker-от во `apps/realtime-worker` (еден Durable Object по канал за расфрнување, присуство и историја, еден по лице за прекини); деплојувајте го покрај него, како подолу, или користете Centrifugo.

## Делови <!--quire:the-pieces-->

| Дел | На Cloudflare |
| --- | --- |
| `web` | Worker со `nodejs_compat` |
| Postgres | Надворешен, достапен преку Hyperdrive: `HYPERDRIVE` за улогата на апликацијата, `REPORT_HYPERDRIVE` за улогата за извештаи на таа иста физичка база. Веб-слојот ја копира секоја низа за поврзување во `DATABASE_URL` и `QUIRE_REPORT_DATABASE_URL` при стартување |
| Датотеки | R2, преку неговото S3 API (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`); врзувањето `FILES` го прикачува bucket-от |
| Позадински работи | pg-boss преку Hyperdrive кога работата мора да се нареди со запис. Со `QUIRE_QUEUE_DRIVER=cloudflare` на придружениот работник, лесните работи (неизредени известувања и испораки на веб-куки) минуваат низ Cloudflare Queues наместо тоа, така што Postgres не се допирува за нив. Придружениот работник ги извршува двата |
| Realtime | Realtime Worker-от, `apps/realtime-worker`, со Durable Objects |
| `worker`, `scheduler`, `collab`, `content`, ClamAV, Gotenberg, ffmpeg | Придружен домаќин со контејнери. Worker не може да ги извршува |
| Tracing | Workers observability, овозможено во `wrangler.jsonc` |

`REPORT_HYPERDRIVE` ја обезбедува улогата за извештаи за физичката база на податоци наведена со `HYPERDRIVE`. Оваа цел не опслужува закупци врзани за дополнителни физички бази, како што е опишано подолу.

## Што оваа цел не може да прави <!--quire:what-this-target-cannot-do-->

Одбиено при стартување, со наведен секој проблем одеднаш:

- **Нема SMTP.** Користете давател преку HTTP во `QUIRE_EMAIL_PROVIDER_CONFIG`.
- **Нема локален диск.** `QUIRE_STORAGE_DRIVER` мора да наведува складирање на објекти.
- **Нема realtime или кеш внатре во процесот.** Workers не споделуваат меморија меѓу барањата, така што `QUIRE_REALTIME_DRIVER=inprocess` и `QUIRE_CACHE_DRIVER=memory` се одбиени.
- **Нема ClamAV, Gotenberg или ffmpeg во Worker-от.** `CLAMAV_URL`, `GOTENBERG_URL` и `FFMPEG_PATH` поставени на Worker-от се одбиени; поставете ги на придружениот работник наместо тоа.
- **Нема организации со посебна база на податоци.** Врзувањата Hyperdrive на Worker-от се фиксни при деплојување, така што организација со сопствена база добива јасна страница „недостапно овде“. Опслужете ја од Compose или Vercel.

И уште една работа што не е одбиена, но мора да се знае: **предрендерирањето и инкременталната статичка регенерација не работат на Workers**, без оглед на тоа што вели документацијата на фрејмворкот. Секоја патека се рендерира по барање.

На оваа цел држете ги трансакциите кратки и никогаш не држте една преку мрежен повик: Hyperdrive го ресетира состојбата на сесијата кога поврзувањето се враќа во базенот, така што контекстот на закупецот се поставува по трансакција.

## Деплојување <!--quire:deploying-->

1. Создадете ги ресурсите:
   ```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
   ```
   Ги ставете двата Hyperdrive идентификатори во `apps/web/wrangler.jsonc`.
2. Поставете ги тајните, една по една со `bun run --bun wrangler secret put <NAME>` од `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`. Обичните поставки (`QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_DATABASE_ID`, `S3_ENDPOINT`, `S3_BUCKET`, `QUIRE_COLLAB_URL`) одат во `vars`.
3. Изградете и деплојувајте од `apps/web`:
   ```sh
   NITRO_PRESET=cloudflare-module bun run build
   bun run --bun wrangler deploy
   ```
4. Деплојувајте го realtime Worker-от, со `QUIRE_REALTIME_WORKER_SECRET` на веб-слојот и неговиот токен-секрет како `QUIRE_REALTIME_TOKEN_SECRET` (веб-слојот ги потпишува realtime-токените со својот `QUIRE_REALTIME_TOKEN_SECRET` или со `QUIRE_SECRET_KEY` кога тоа не е поставено, затоа користете го она што го користи тој) и поставете го `QUIRE_REALTIME_WORKER_URL` на веб-слојот на неговата адреса:
   ```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. За лесни работи на Cloudflare Queues, создадете една редица за секоја лесна редица и поставете ги овие на придружениот работник (API-токен со читање и запишување на 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
   ```
   `QUIRE_QUEUE_DRIVER=cloudflare`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_QUEUES_TOKEN` и `QUIRE_QUEUE_PREFIX` ако не е `quire-`.
6. Извршете го придружениот домаќин како во [Vercel-водичот](/mk/ops/vercel/), чекор 3. Миграциите се извршуваат таму, пред секоја Worker-дистрибуција.

Одбиена конфигурација се прикажува во `bun run --bun wrangler tail` како „The web tier did not start on cloudflare“, проследена со секоја поставка што треба да се промени.

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