შიგთავსზე გადასვლა

ვებ-დონე Cloudflare Workers-ზე

შემცირებული Quire ვებ-დონის გაშვება Cloudflare Workers-ზე.

Markdown-ად ნახვა

დიზაინია docs/architecture/23-ops.md მე-6 სექცია. Workers აწარმოებენ შემცირებულ ვებ-დონეს. ფუნქციური პარიტეტი Workers-ზე არეალის გარეთაა (PRD მე-12 სექცია): ის, რისი გაკეთებაც ამ სამიზნეს არ შეუძლია, გაშვებისას უარყოფილია, სახელით.

სტატუსი ამ რელიზში

კონფიგურაცია ადგილზეა (apps/web/wrangler.jsonc, cloudflare-module Nitro წინასწარ დაყენებული, Hyperdrive ხიდი და გაშვების შემოწმებები). Worker-ს სჭირდება S3-თავსებადი საცავი R2-სთვის (QUIRE_STORAGE_DRIVER=s3), რეალურ დროში დრაივერი მოთხოვნებში (QUIRE_REALTIME_DRIVER=durable_objects ან centrifugo), გაზიარებული ქეში (QUIRE_CACHE_DRIVER=postgres ან valkey) და HTTP ელფოსტის პროვაიდერი. მათ გარეშე Worker-ი გაშვებაზე უარს ამბობს და მისი ჟურნალი ასახელებს თითოეულ პარამეტრს. Durable Objects დრაივერი არის რეალურ დროში Worker-ის კლიენტი apps/realtime-worker-ში (ერთი Durable Object არხზე გაშლისთვის, დასწრებისთვის და ისტორიისთვის, ერთი ადამიანზე გათიშვებისთვის); გაშალეთ ის გვერდით, როგორც ქვემოთ, ან გამოიყენეთ Centrifugo.

ნაწილები

ნაწილი Cloudflare-ზე
web Worker-ი nodejs_compat-ით
Postgres გარე, მიღწეული Hyperdrive-ით: HYPERDRIVE აპლიკაციის როლისთვის, REPORT_HYPERDRIVE ანგარიშის როლისთვის იმავე ფიზიკურ მონაცემთა ბაზაზე. ვებ-დონე აკოპირებს თითოეულ შეერთების სტრიქონს DATABASE_URL-სა და QUIRE_REPORT_DATABASE_URL-ში გაშვებისას
ფაილები R2, მისი S3 API-ით (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); FILES მიბმა აერთებს ბაკეტს
ფონური სამუშაოები pg-boss Hyperdrive-ზე, როცა სამუშაო ჩაწერასთან ერთად უნდა დადგეს რიგში. QUIRE_QUEUE_DRIVER=cloudflare-ით თანმხლებ worker-ზე მსუბუქი სამუშაოები (ურიგო შეტყობინებებისა და ვებჰუკის მიწოდებები) ამის ნაცვლად Cloudflare რიგებით მიდის, ასე რომ Postgres მათთვის არ იკითხება. თანმხლები worker-ი ორივეს აწარმოებს
რეალურ დროში რეალურ დროში Worker-ი, apps/realtime-worker, Durable Objects-ით
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg თანმხლები კონტეინერების ჰოსტი. Worker-ს მათი გაშვება არ შეუძლია
ტრასირება Workers დაკვირვება, ჩართული wrangler.jsonc-ში

REPORT_HYPERDRIVE აწვდის ანგარიშის როლს ფიზიკური მონაცემთა ბაზისთვის, დასახელებულს HYPERDRIVE-ით. ეს სამიზნე არ ემსახურება მოიჯარეებს, მიბმულს დამატებით ფიზიკურ მონაცემთა ბაზებზე, როგორც ქვემოთ არის აღწერილი.

რისი გაკეთება არ შეუძლია ამ სამიზნეს

უარყოფილია გაშვებისას, ყველა პრობლემით ერთბაშად ჩამოთვლილი:

  • SMTP არ არის. გამოიყენეთ HTTP პროვაიდერი QUIRE_EMAIL_PROVIDER_CONFIG-ში.
  • ლოკალური დისკი არ არის. QUIRE_STORAGE_DRIVER-მა ობიექტების საცავი უნდა დაასახელოს.
  • რეალურ დროში ან ქეში პროცესში არ არის. Workers არ აზიარებენ მეხსიერებას მოთხოვნებს შორის, ამიტომ QUIRE_REALTIME_DRIVER=inprocess და QUIRE_CACHE_DRIVER=memory უარყოფილია.
  • ClamAV, Gotenberg ან ffmpeg Worker-ში არ არის. CLAMAV_URL, GOTENBERG_URL და FFMPEG_PATH, დაყენებული Worker-ზე, უარყოფილია; დააყენეთ ისინი თანმხლებ worker-ზე.
  • გამოყოფილი მონაცემთა ბაზის ორგანიზაციები არ არის. Worker-ის Hyperdrive მიბმები ფიქსირდება გაშვებისას, ასე რომ ორგანიზაცია საკუთარი მონაცემთა ბაზით იღებს ნათელ „აქ მიუწვდომელია“ გვერდს. მოემსახურეთ მას Compose-დან ან Vercel-დან.

და ერთი რამ, რაც არ უარყოფილია, მაგრამ უნდა იცოდეთ: წინასწარი რენდერი და ინკრემენტული სტატიკური რეგენერაცია Workers-ზე არ მუშაობს, რასაც არ უნდა ამბობდეს ფრეიმვორკის დოკუმენტაცია. ყოველი მარშრუტი მოთხოვნაზე რენდერდება.

ამ სამიზნეზე ტრანზაქციები მოკლე იქონიეთ და არასდროს გეჭიროთ ერთი ქსელის ზარის განმავლობაში: Hyperdrive აბრუნებს სესიის მდგომარეობას, როცა შეერთება პულში ბრუნდება, ასე რომ მოიჯარის კონტექსტი ტრანზაქციაზე დგება.

გაშვება

  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 id ჩადეთ 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-ი ვებ-დონის QUIRE_REALTIME_WORKER_SECRET-ით და მისი ტოკენის საიდუმლოთი, როგორც QUIRE_REALTIME_TOKEN_SECRET (ვებ-დონე ხელს აწერს რეალურ დროში ტოკენებს საკუთარი 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 რიგებზე შექმენით ერთი რიგი თითო მსუბუქ რიგზე და დააყენეთ ეს თანმხლებ worker-ზე (API ტოკენი რიგების წაკითხვითა და ჩაწერით):
    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-ში ჩნდება, როგორც „ვებ-დონე cloudflare-ზე არ გაშვებულა“, რასაც მოჰყვება თითოეული შესაცვლელი პარამეტრი.

ნავიგაცია

ძიებისთვის აკრიფეთ…

↑↓ ნავიგაცია↵ არჩევაEsc დახურვა