ຂ້າມໄປຫາເນື້ອຫາ

ຊັ້ນເວັບຢູ່ Cloudflare Workers

ແລ່ນຊັ້ນເວັບ Quire ທີ່ຫຼຸດລົງຢູ່ Cloudflare Workers.

ເບິ່ງໃນຮູບແບບ Markdown

ດີຊາຍນແມ່ນ docs/architecture/23-ops.md ບົດທີ 6. Workers ແລ່ນຊັ້ນ ເວັບທີ່ຫຼຸດລົງ. ຄວາມເທົ່າທຽມຂອງລັກສະນະຢູ່ Workers ຢູ່ນອກ ເຂດແດນ (PRD ບົດທີ 12): ສິ່ງທີ່ເປົ້າໝາຍນີ້ບໍ່ສາມາດເຮັດໄດ້ ຈະຖືກປະຕິເສດເມື່ອມັນເລີ່ມ, ດ້ວຍຊື່.

ສະຖານະໃນສະບັບນີ້

ການຕັ້ງຄ່າຢູ່ໃນລະບົບແລ້ວ (apps/web/wrangler.jsonc, preset cloudflare-module ຂອງ Nitro, ຂົ້ນ Hyperdrive ແລະການກວດສອບ ການເລີ່ມ). Worker ຕ້ອງການການເກັບທີ່ເຂົ້າກັບ S3 ສຳລັບ R2 (QUIRE_STORAGE_DRIVER=s3), ແຂກຮັບຊົງ realtime ຂ້າມຄຳຮ້ອງຂໍ (QUIRE_REALTIME_DRIVER=durable_objects ຫຼື centrifugo), cache ທີ່ແບ່ງປັນ (QUIRE_CACHE_DRIVER=postgres ຫຼື valkey) ແລະ ຜູ້ໃຫ້ບໍລິການອີເມວ HTTP. ໂດຍບໍ່ມີພວກມັນ Worker ປະຕິເສດການ ເລີ່ມ ແລະບັນທຶກຂອງມັນລະບຸການຕັ້ງຄ່າແຕ່ລະອັນ. ແຂກຮັບຊົງ Durable Objects ແມ່ນ client ຂອງ Worker realtime ໃນ apps/realtime-worker (Durable Object ໜຶ່ງຕໍ່ channel ສຳລັບການ ແຈກຢາຍ, ການມີຕົວຢູ່ ແລະປະຫວັດ, ໜຶ່ງຕໍ່ຄົນສຳລັບການຕັດ ການເຊື່ອມຕໍ່); ສົ່ງມັນຄຽງຄູ່, ດັງທີ່ຂ້າງລຸ່ມ, ຫຼື ໃຊ້ Centrifugo.

ອັນລວມຕ່າງໆ

ອັນລວມ ຢູ່ Cloudflare
web Worker ກັບ nodejs_compat
Postgres ພາຍນອກ, ເຂົ້າເຖິງຜ່ານ Hyperdrive: HYPERDRIVE ສຳລັບບົດບາດແອັບພັກ, REPORT_HYPERDRIVE ສຳລັບບົດບາດລາຍງານຢູ່ຖານຂໍ້ມູນທາງກາຍະພາບດຽວກັນ. ຊັ້ນເວັບຄັດລອກ connection string ແຕ່ລະອັນເຂົ້າ DATABASE_URL ແລະ QUIRE_REPORT_DATABASE_URL ເມື່ອມັນເລີ່ມ
ໄຟລ໌ R2, ຜ່ານ S3 API ຂອງມັນ (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); binding FILES ຕິດ bucket
ງານພື້ນຫຼັງ pg-boss ເທິງ Hyperdrive ເມື່ອງານຕ້ອງຖືກບັນທຶກເຂົ້າ queue ພ້ອມການຂຽນ. ດ້ວຍ QUIRE_QUEUE_DRIVER=cloudflare ໃນ worker ເພື່ອການ ງານເບົາໆ (ການແຈ້ງເຕືອນ ແລະການສົ່ງ webhook ທີ່ບໍ່ມີລຳດັບ) ໄປຜ່ານ Cloudflare Queues ແທນ ດັ່ງນັ້ນ Postgres ບໍ່ຖືກເອີ້ນສຳລັບພວກມັນ. Worker ເພື່ອການແລ່ນທັງສອງ
Realtime Worker realtime, apps/realtime-worker, ກັບ Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg ເຊີບເວີ container ເພື່ອການ. Worker ແລ່ນພວກມັນບໍ່ໄດ້
ການຕິດຕາມ ການສັງເກດເບິ່ງຂອງ Workers, ເປີດໃນ wrangler.jsonc

REPORT_HYPERDRIVE ສະໜອງບົດບາດລາຍງານສຳລັບຖານຂໍ້ມູນທາງ ກາຍະພາບທີ່ HYPERDRIVE ລະບຸ. ເປົ້າໝາຍນີ້ບໍ່ບໍລິການ tenants ທີ່ຖືກຜູກກັບຖານຂໍ້ມູນທາງກາຍະພາບເພີ່ມເຕີມ, ດັງທີ່ອະທິບາຍ ຂ້າງລຸ່ມ.

ສິ່ງທີ່ເປົ້າໝາຍນີ້ບໍ່ສາມາດເຮັດໄດ້

ຖືກປະຕິເສດໃນຂະນະເລີ່ມ, ພ້ອມບັນຫາທຸກໆອັນລາຍຊື່ພ້ອມກັນ:

  • ບໍ່ມີ SMTP. ໃຊ້ຜູ້ໃຫ້ບໍລິການ HTTP ໃນ QUIRE_EMAIL_PROVIDER_CONFIG.
  • ບໍ່ມີດິດທ້ອງຖິ່ນ. QUIRE_STORAGE_DRIVER ຕ້ອງຊື່ການເກັບ object.
  • ບໍ່ມີ realtime ຫຼື cache ໃນຂະບວນການ. Workers ບໍ່ແບ່ງຄວາມ ຈື່ຈຳລະຫວ່າງຄຳຮ້ອງຂໍ ດັ່ງນັ້ນ QUIRE_REALTIME_DRIVER=inprocess ແລະ QUIRE_CACHE_DRIVER=memory ຖືກປະຕິເສດ.
  • ບໍ່ມີ ClamAV, Gotenberg ຫຼື ffmpeg ໃນ Worker. CLAMAV_URL, GOTENBERG_URL ແລະ FFMPEG_PATH ທີ່ຕັ້ງໃນ Worker ຖືກປະຕິເສດ; ຕັ້ງພວກມັນໃນ worker ເພື່ອການແທນ.
  • ບໍ່ມີອົງການທີ່ມີຖານຂໍ້ມູນສະເພາະ. Binding Hyperdrive ຂອງ Worker ຖືກກຳນົດໄວ້ໃນເວລາສົ່ງ ດັ່ງນັ້ນອົງການທີ່ມີຖານຂໍ້ມູນ ຂອງຕົນເອງຈະໄດ້ໜ້າ “unavailable here” ທີ່ຊັດເຈນ. ບໍລິການມັນ ຈາກ Compose ຫຼື Vercel.

ແລະ ສິ່ງໜຶ່ງທີ່ບໍ່ຖືກປະຕິເສດແຕ່ຕ້ອງຮູ້: ການສ້າງໜ້າລ່ວງໜ້າ ແລະການປັບແປງ static ເພີ່ມທະວີບໍ່ເຮັດວຽກຢູ່ Workers ເຖິງແມ່ນ ເອກະສານຂອງ framework ບອກແນວໃດ. ເສັ້ນທາງທຸກໆອັນ render ຕາມ ຄຳຮ້ອງຂໍ.

ໃນເປົ້າໝາຍນີ້ຮັກສາ transactions ສັ້ນໆ ແລະບໍ່ເຄີຍຖືກອັນໜຶ່ງ ຂ້າມການເອີ້ນເຄືອຂ່າຍ: Hyperdrive ຕັ້ງຄ່າສະຖານະເຊັນຊັນຄືນ ເມື່ອການເຊື່ອມຕໍ່ກັບມາຫາ pool ດັ່ງນັ້ນ context ຂອງ tenantຖືກ ຕັ້ງຕາມແຕ່ລະ transaction.

ການນຳສົ່ງ

  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 ids ທັງສອງເຂົ້າ 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. ສົ່ງ Worker realtime, ພ້ອມ QUIRE_REALTIME_WORKER_SECRET ຂອງຊັ້ນ ເວັບ ແລະຄວາມລັບຂອງ token ຂອງມັນເປັນ QUIRE_REALTIME_TOKEN_SECRET (ຊັ້ນເວັບລາຍລານື້ realtime tokens ດ້ວຍ 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 ສ້າງ queue ໜຶ່ງຕໍ່ light queue ແລະຕັ້ງສິ່ງເຫຼົ່ານີ້ໃນ worker ເພື່ອການ (API token ກັບສິດ ອ່ານ ແລະຂຽນ 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 ປິດ