Lewati ke konten

Web tier di Cloudflare Workers

Jalankan web tier Quire dengan kemampuan terbatas di Cloudflare Workers.

Desainnya ada di docs/architecture/23-ops.md, bagian 6. Workers menjalankan web tier dengan kemampuan terbatas. Kesetaraan fitur pada Workers berada di luar cakupan (PRD bagian 12): hal yang tidak dapat dilakukan target ini ditolak saat mulai dengan menyebutkan namanya.

Status rilis ini

Konfigurasi sudah tersedia (apps/web/wrangler.jsonc, preset Nitro cloudflare-module, jembatan Hyperdrive, dan pemeriksaan saat mulai). Worker memerlukan penyimpanan yang kompatibel dengan S3 untuk R2 (QUIRE_STORAGE_DRIVER=s3), driver realtime lintas permintaan (QUIRE_REALTIME_DRIVER=durable_objects atau centrifugo), cache bersama (QUIRE_CACHE_DRIVER=postgres atau valkey), dan penyedia email HTTP. Tanpanya, Worker menolak mulai dan log menyebut setiap pengaturan. Driver Durable Objects menggunakan Worker realtime di apps/realtime-worker sebagai klien (satu Durable Object per kanal untuk distribusi, kehadiran, dan riwayat; satu per orang untuk pemutusan koneksi); deploy bersamanya seperti di bawah atau gunakan Centrifugo.

Komponen

Komponen Di Cloudflare
web Worker dengan nodejs_compat
Postgres Eksternal, diakses melalui Hyperdrive: HYPERDRIVE untuk peran aplikasi dan REPORT_HYPERDRIVE untuk peran laporan pada basis data fisik yang sama. Saat mulai, web tier menyalin setiap string koneksi ke DATABASE_URL dan QUIRE_REPORT_DATABASE_URL
Berkas R2 melalui API S3 (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); binding FILES menghubungkan bucket
Pekerjaan latar belakang pg-boss melalui Hyperdrive saat pekerjaan perlu dimasukkan ke antrean bersama penulisan. Jika worker pendamping memakai QUIRE_QUEUE_DRIVER=cloudflare, pekerjaan ringan (notifikasi tanpa urutan dan pengiriman webhook) dialihkan ke Cloudflare Queues sehingga Postgres tidak disurvei untuk pekerjaan itu. Worker pendamping menjalankan keduanya
Realtime Worker realtime, apps/realtime-worker, dengan Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Host container pendamping. Worker tidak dapat menjalankannya
Pelacakan Workers observability, diaktifkan dalam wrangler.jsonc

REPORT_HYPERDRIVE menyediakan peran laporan untuk basis data fisik yang disebut HYPERDRIVE. Target ini tidak melayani tenant yang dipatok ke basis data fisik tambahan, seperti dijelaskan di bawah.

Hal yang tidak dapat dilakukan target ini

Saat mulai, semua masalah berikut langsung dicantumkan dan konfigurasi ditolak:

  • Tidak ada SMTP. Gunakan penyedia HTTP melalui QUIRE_EMAIL_PROVIDER_CONFIG.
  • Tidak ada disk lokal. QUIRE_STORAGE_DRIVER harus menyebut penyimpanan objek.
  • Tidak ada realtime atau cache dalam proses. Workers tidak berbagi memori antarpermintaan, sehingga QUIRE_REALTIME_DRIVER=inprocess dan QUIRE_CACHE_DRIVER=memory ditolak.
  • Worker tidak menjalankan ClamAV, Gotenberg, atau ffmpeg. CLAMAV_URL, GOTENBERG_URL, dan FFMPEG_PATH yang ditetapkan pada Worker ditolak; tetapkan pada worker pendamping.
  • Organisasi dengan basis data khusus tidak didukung. Binding Hyperdrive Worker tetap saat deployment, sehingga organisasi dengan basis data sendiri mendapat halaman “unavailable here”. Layani dari Compose atau Vercel.

Ada satu hal yang tidak ditolak, tetapi harus diketahui: prerendering dan regenerasi statis inkremental tidak berfungsi di Workers, apa pun kata dokumentasi framework. Setiap route dirender untuk setiap permintaan.

Pada target ini, pertahankan transaction tetap singkat dan jangan membiarkannya terbuka selama panggilan jaringan: Hyperdrive mengatur ulang status sesi saat koneksi kembali ke pool, jadi konteks tenant ditetapkan per transaction.

Deployment

  1. Buat sumber daya:
    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
    Masukkan kedua ID Hyperdrive ke apps/web/wrangler.jsonc.
  2. Tetapkan rahasia satu per satu dengan bun run --bun wrangler secret put <NAME> dari apps/web: QUIRE_SECRET_KEY, QUIRE_MASTER_KEY, QUIRE_EMAIL_PROVIDER_CONFIG, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, QUIRE_COLLAB_SIGNING_KEY, dan QUIRE_REALTIME_WORKER_SECRET. Pengaturan biasa (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) dimasukkan ke vars.
  3. Build dan deploy dari apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. Deploy Worker realtime menggunakan QUIRE_REALTIME_WORKER_SECRET milik web tier dan rahasia tokennya sebagai QUIRE_REALTIME_TOKEN_SECRET. Web tier menandatangani token realtime dengan QUIRE_REALTIME_TOKEN_SECRET sendiri atau QUIRE_SECRET_KEY jika yang pertama tidak diatur; gunakan nilai yang dipakainya. Tetapkan QUIRE_REALTIME_WORKER_URL di web tier ke alamat Worker:
    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. Untuk pekerjaan ringan melalui Cloudflare Queues, buat satu antrean untuk tiap antrean ringan dan atur nilainya pada worker pendamping (token API dengan izin baca dan tulis 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
    Tetapkan QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN, dan QUIRE_QUEUE_PREFIX jika bukan quire-.
  6. Jalankan host pendamping seperti langkah 3 di panduan Vercel. Migration dijalankan di sana sebelum setiap deployment Worker.

Konfigurasi yang ditolak terlihat di bun run --bun wrangler tail sebagai “The web tier did not start on cloudflare”, diikuti setiap pengaturan yang harus diubah.

Navigasi

Ketik untuk mencari…

↑↓ navigasi↵ pilihEsc tutup