დიზაინია 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-ს მათი გაშვება არ შეუძლია
ტრასირება
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 აბრუნებს სესიის მდგომარეობას, როცა შეერთება პულში ბრუნდება,
ასე რომ მოიჯარის კონტექსტი ტრანზაქციაზე დგება.
გაშვება
შექმენით რესურსები:
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 id ჩადეთ apps/web/wrangler.jsonc-ში.
დააყენეთ საიდუმლოებები, სათითაოდ 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-ში მიდის.
ააგეთ და გაშალეთ apps/web-დან:
NITRO_PRESET=cloudflare-module bun run buildbun run --bun wrangler deploy
გაშალეთ რეალურ დროში Worker-ი ვებ-დონის QUIRE_REALTIME_WORKER_SECRET-ით
და მისი ტოკენის საიდუმლოთი, როგორც QUIRE_REALTIME_TOKEN_SECRET (ვებ-დონე ხელს აწერს
რეალურ დროში ტოკენებს საკუთარი QUIRE_REALTIME_TOKEN_SECRET-ით ან
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 რიგებზე შექმენით ერთი რიგი თითო მსუბუქ რიგზე და
დააყენეთ ეს თანმხლებ worker-ზე (API ტოკენი რიგების წაკითხვითა და
ჩაწერით):
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 სახელმძღვანელოში, ნაბიჯი 3.
მიგრაციები იქ მუშაობენ, ყოველი Worker გაშვების წინ.
უარყოფილი კონფიგურაცია bun run --bun wrangler tail-ში ჩნდება, როგორც „ვებ-დონე cloudflare-ზე არ
გაშვებულა“, რასაც მოჰყვება თითოეული შესაცვლელი პარამეტრი.