Прескокни до содржината

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

Извршете намален веб-слој на Quire на Cloudflare Workers.

Прикажи како Markdown

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

Состојба во ова издание

Конфигурацијата е поставена (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.

Делови

Дел На 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. Оваа цел не опслужува закупци врзани за дополнителни физички бази, како што е опишано подолу.

Што оваа цел не може да прави

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

  • Нема 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 го ресетира состојбата на сесијата кога поврзувањето се враќа во базенот, така што контекстот на закупецот се поставува по трансакција.

Деплојување

  1. Создадете ги ресурсите:
    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:
    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 на веб-слојот на неговата адреса:
    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):
    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-водичот, чекор 3. Миграциите се извршуваат таму, пред секоја Worker-дистрибуција.

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

Навигација

Внесете текст за пребарување…

↑↓ навигација↵ избериEsc затвори