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
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
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-filesbun run --bun wrangler queues create quire-jobs
Masukkan kedua-dua ID Hyperdrive ke dalam apps/web/wrangler.jsonc.
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.
Bina dan lepaskan daripada apps/web:
NITRO_PRESET=cloudflare-module bun run buildbun run --bun wrangler deploy
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-workerbun run --bun wrangler secret put QUIRE_REALTIME_WORKER_SECRETbun run --bun wrangler secret put QUIRE_REALTIME_TOKEN_SECRETbun run --bun wrangler deploy
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-notificationsbun run --bun wrangler queues create quire-events-notifications-deadbun run --bun wrangler queues create quire-events-webhooksbun 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-.
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.