Langkau ke kandungan

Lapisan web pada Cloudflare Workers

Jalankan lapisan web Quire yang terkurang pada Cloudflare Workers.

Reka bentuknya ialah docs/architecture/23-ops.md seksyen 6. Workers menjalankan satu lapisan web yang terkurang. Kesetaraan ciri pada Workers di luar skop (PRD seksyen 12): apa yang sasaran ini tidak boleh lakukan ditolak semasa ia bermula, mengikut nama.

Status dalam keluaran ini

Konfigurasi telah sedia (apps/web/wrangler.jsonc, pratetap Nitro cloudflare-module, jambatan Hyperdrive dan semakan permulaan). Sebuah Worker memerlukan storan serasi S3 untuk R2 (QUIRE_STORAGE_DRIVER=s3), satu pemandu masa nyata merentas permintaan (QUIRE_REALTIME_DRIVER=durable_objects atau centrifugo), satu cache dikongsi (QUIRE_CACHE_DRIVER=postgres atau valkey) dan satu pembekal e-mel HTTP. Tanpanya, Worker enggan bermula dan lognya menamakan setiap tetapan. Pemandu Durable Objects ialah klien kepada Worker masa nyata dalam apps/realtime-worker (satu Durable Object setiap saluran untuk pengedaran, kehadiran dan sejarah, satu setiap orang untuk putusan sambungan); lepaskannya bersama, seperti di bawah, atau gunakan Centrifugo.

Komponen

Komponen Pada Cloudflare
web Sebuah Worker dengan nodejs_compat
Postgres Luar, dicapai melalui Hyperdrive: HYPERDRIVE untuk peranan aplikasi, REPORT_HYPERDRIVE untuk peranan laporan pada pangkalan data fizikal yang sama. Lapisan web menyalin setiap string sambungan ke dalam DATABASE_URL dan QUIRE_REPORT_DATABASE_URL semasa ia bermula
Fail R2, melalui API S3-nya (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); pengikat FILES melampirkan baldi tersebut
Tugas latar belakang pg-boss melalui Hyperdrive apabila tugas mesti dijadualkan dengan satu tulisan. Dengan QUIRE_QUEUE_DRIVER=cloudflare pada pekerja pasangan, tugas ringan (penghantaran notis dan webhook tanpa pesanan) sebaliknya melalui Cloudflare Queues, jadi Postgres tidak dikerjakan untuknya. Pekerja pasangan menjalankan kedua-duanya
Masa nyata Worker masa nyata, apps/realtime-worker, dengan Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Sebuah hos bekas teman. Sebuah Worker tidak boleh menjalankannya
Penjejakan Kobservabiliti Workers, dihidupkan dalam wrangler.jsonc

REPORT_HYPERDRIVE menyediakan peranan laporan untuk pangkalan data fizikal yang dinamakan oleh HYPERDRIVE. Sasaran ini tidak melayani penyewa yang disemat pada tambahan pangkalan data fizikal, seperti yang diterangkan di bawah.

Apa yang sasaran ini tidak boleh lakukan

Ditolak semasa bermula, dengan setiap masalah disenaraikan serentak:

  • Tiada SMTP. Gunakan satu pembekal HTTP dalam QUIRE_EMAIL_PROVIDER_CONFIG.
  • Tiada cakera setempat. QUIRE_STORAGE_DRIVER mesti menamakan storan objek.
  • Tiada masa nyata atau cache dalam proses. Workers tidak berkongsi memori antara permintaan, jadi QUIRE_REALTIME_DRIVER=inprocess dan QUIRE_CACHE_DRIVER=memory ditolak.
  • Tiada ClamAV, Gotenberg atau ffmpeg dalam Worker. CLAMAV_URL, GOTENBERG_URL dan FFMPEG_PATH yang ditetapkan pada Worker ditolak; tetapkannya pada pekerja pasangan sebaliknya.
  • Tiada organisasi pangkalan data khusus. Pengikat Hyperdrive sebuah Worker tetap semasa pelepasan, jadi sebuah organisasi dengan pangkalan datanya sendiri mendapat satu halaman “tidak tersedia di sini” yang jelas. Layaninya daripada Compose atau Vercel.

Dan satu perkara yang tidak ditolak tetapi mesti diketahui: prerendering dan regenerasi statik berperingkat tidak berfungsi pada Workers, apa sahaja yang dinyatakan oleh dokumentasi rangka kerja. Setiap laluan dirender mengikut permintaan.

Pada sasaran ini, kekalkan transaksi pendek dan jangan sekali-kali memegang satu transaksi merentas satu panggilan rangkaian: Hyperdrive menetapkan semula keadaan sesi apabila satu sambungan kembali ke kumpulan, jadi konteks penyewa ditetapkan setiap transaksi.

Melepaskan

  1. Cipta 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-dua ID Hyperdrive ke dalam apps/web/wrangler.jsonc.
  2. Tetapkan rahsia, satu demi satu dengan bun run --bun wrangler secret put <NAME> daripada 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. Tetapan biasa (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) pergi ke dalam vars.
  3. Bina dan lepaskan daripada apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. Lepaskan Worker masa nyata, dengan QUIRE_REALTIME_WORKER_SECRET milik lapisan web dan rahsia tokennya sebagai QUIRE_REALTIME_TOKEN_SECRET (lapisan web menandatangani token masa nyata dengan QUIRE_REALTIME_TOKEN_SECRETnya sendiri, atau dengan QUIRE_SECRET_KEY apabila yang itu tidak ditetapkan, jadi gunakan mana-mana yang ia gunakan), dan tetapkan QUIRE_REALTIME_WORKER_URL pada lapisan web ke alamatnya:
    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 tugas ringan pada Cloudflare Queues, cipta satu giliran setiap giliran ringan dan tetapkan ini pada pekerja pasangan (token API dengan 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
    QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN, dan QUIRE_QUEUE_PREFIX jika bukan quire-.
  6. Jalankan hos pasangan seperti dalam panduan Vercel, langkah 3. Migrasi berjalan di sana, sebelum setiap pelepasan Worker.

Satu konfigurasi yang ditolak dipaparkan dalam bun run --bun wrangler tail sebagai “The web tier did not start on cloudflare”, diikuti oleh setiap tetapan yang perlu diubah.

Navigasi

Taip untuk mencari…

↑↓ navigasi↵ pilihEsc tutup