રચના docs/architecture/23-ops.md ના વિભાગ 6 માં છે. Workers ઘટાડેલું વેબ સ્તર
ચલાવે છે. Workers પર તમામ સુવિધાઓ હોવી આ કાર્યક્ષેત્રમાં નથી (PRD વિભાગ 12): આ
target જે કરી શકતું નથી તેનો શરૂ થતી વખતે નામ સાથે ઇનકાર થાય છે.
આ રિલીઝની સ્થિતિ
ગોઠવણી તૈયાર છે (apps/web/wrangler.jsonc, cloudflare-module Nitro preset,
Hyperdrive bridge અને startup ચકાસણીઓ). Worker ને R2 માટે S3-compatible storage
(QUIRE_STORAGE_DRIVER=s3), requests વચ્ચે realtime driver
(QUIRE_REALTIME_DRIVER=durable_objects અથવા centrifugo), shared cache
(QUIRE_CACHE_DRIVER=postgres અથવા valkey) અને HTTP email provider જોઈએ. તે વિના
Worker શરૂ થવાનો ઇનકાર કરે છે અને તેના log માં દરેક setting નું નામ આવે છે.
Durable Objects driver apps/realtime-worker માંના realtime Worker નો client છે
(fan-out, presence અને history માટે દરેક channel દીઠ એક Durable Object; disconnects
માટે વ્યક્તિ દીઠ એક); નીચે પ્રમાણે તેને સાથે deploy કરો અથવા Centrifugo વાપરો.
ઘટકો
ઘટક
Cloudflare પર
web
nodejs_compat ધરાવતો Worker
Postgres
Hyperdrive મારફતે જોડાયેલ બાહ્ય ડેટાબેઝ: application role માટે HYPERDRIVE, એ જ ભૌતિક database પર report role માટે REPORT_HYPERDRIVE. શરૂ થાય ત્યારે web tier દરેક connection string ને DATABASE_URL અને QUIRE_REPORT_DATABASE_URL માં નકલ કરે છે
Files
R2, તેની S3 API મારફતે (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); FILES binding bucket જોડે છે
Background jobs
લખાણ સાથે જ job queue થવી જરૂરી હોય ત્યારે Hyperdrive ઉપર pg-boss. સાથી worker પર QUIRE_QUEUE_DRIVER=cloudflare હોય ત્યારે હળવી jobs (ક્રમ વિનાના notification અને webhook deliveries) Cloudflare Queues મારફતે જાય છે, તેથી Postgres ને તેમના માટે poll કરાતો નથી. સાથી worker બંને ચલાવે છે
REPORT_HYPERDRIVE, HYPERDRIVE દ્વારા નામ અપાયેલા ભૌતિક ડેટાબેઝ માટે report role
આપે છે. નીચે સમજાવ્યા મુજબ આ target વધારાના ભૌતિક ડેટાબેઝ પર નિશ્ચિત tenants ને
સેવા આપતું નથી.
આ target શું કરી શકતું નથી
શરૂઆત વખતે જ ઇનકાર થાય છે અને બધી સમસ્યાઓ એકસાથે યાદીબદ્ધ થાય છે:
SMTP નથી.QUIRE_EMAIL_PROVIDER_CONFIG માં HTTP provider વાપરો.
સ્થાનિક disk નથી.QUIRE_STORAGE_DRIVER એ object storage દર્શાવવું જોઈએ.
In-process realtime કે cache નથી. Workers requests વચ્ચે memory વહેંચતા નથી,
તેથી QUIRE_REALTIME_DRIVER=inprocess અને QUIRE_CACHE_DRIVER=memory નકારાય છે.
Worker માં ClamAV, Gotenberg કે ffmpeg નથી. Worker પર સેટ કરેલા CLAMAV_URL,
GOTENBERG_URL અને FFMPEG_PATH નકારાય છે; તેના બદલે સાથી worker પર સેટ કરો.
સમર્પિત database ધરાવતી organisations નથી. Worker ના Hyperdrive bindings
deploy વખતે જ નક્કી થાય છે, તેથી પોતાનો database ધરાવતી organisation માટે
“unavailable here” પાનું દેખાય છે. તેને Compose અથવા Vercel પરથી સેવા આપો.
અને એક વાતનો ઇનકાર થતો નથી, પણ જાણવી જરૂરી છે: framework documentation કંઈ પણ કહે,
Workers પર prerendering અને incremental static regeneration કામ કરતાં નથી. દરેક
route દરેક request પર render થાય છે.
આ target પર transactions ટૂંકા રાખો અને network call દરમિયાન તેને ખુલ્લા ક્યારેય ન
રાખો: connection pool માં પાછું જાય ત્યારે Hyperdrive session state reset કરે છે,
એટલે tenant context દરેક transaction માટે સેટ થાય છે.
Deploy કરવું
Resources બનાવો:
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
બંને Hyperdrive ids ને apps/web/wrangler.jsonc માં મૂકો.
bun run --bun wrangler secret put <NAME> વડે એક પછી એક secrets સેટ કરો, 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 માં મૂકો.
apps/web માંથી build અને deploy કરો:
NITRO_PRESET=cloudflare-module bun run buildbun run --bun wrangler deploy
વેબ સ્તરનું QUIRE_REALTIME_WORKER_SECRET અને તેનો token secret
QUIRE_REALTIME_TOKEN_SECRET તરીકે વાપરી realtime Worker deploy કરો (વેબ સ્તર
પોતાના QUIRE_REALTIME_TOKEN_SECRET વડે realtime tokens સહી કરે છે, અથવા તે unset
હોય તો QUIRE_SECRET_KEY વડે; તેથી તે જે વાપરે તે મૂકો), અને વેબ સ્તર પર
QUIRE_REALTIME_WORKER_URL ને તેના સરનામા પર સેટ કરો:
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
Cloudflare Queues પર હળવી jobs માટે દરેક light queue માટે એક queue બનાવો અને આ
સેટિંગ્સ સાથી worker પર મૂકો (Queues માટે read અને write અધિકાર ધરાવતું API token):
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, અને QUIRE_QUEUE_PREFIX જો quire- ન હોય તો.
Vercel guide ના પગલા 3 મુજબ સાથી host ચલાવો. દરેક Worker deployment
પહેલાં ત્યાં migrations ચાલે છે.
નકારાયેલી ગોઠવણી bun run --bun wrangler tail માં “The web tier did not start on cloudflare”
તરીકે દેખાય છે અને ત્યારબાદ બદલવાની દરેક setting આવે છે.