Μετάβαση στο περιεχόμενο

Ο web tier στο Cloudflare Workers

Εκτελέστε έναν περιορισμένο web tier του Quire στο Cloudflare Workers.

Προβολή ως Markdown

Το σχέδιο περιγράφεται στην ενότητα 6 του docs/architecture/23-ops.md. Τα Workers εκτελούν έναν περιορισμένο web tier. Η ισοτιμία λειτουργιών στα Workers είναι εκτός πεδίου εφαρμογής (ενότητα 12 του PRD): ό,τι δεν μπορεί να κάνει αυτός ο προορισμός απορρίπτεται κατά την εκκίνηση και κατονομάζεται.

Κατάσταση σε αυτή την έκδοση

Η διαμόρφωση είναι έτοιμη (apps/web/wrangler.jsonc, το preset Nitro cloudflare-module, η γέφυρα Hyperdrive και οι έλεγχοι εκκίνησης). Ένα Worker χρειάζεται αποθήκευση συμβατή με S3 για το R2 (QUIRE_STORAGE_DRIVER=s3), πρόγραμμα οδήγησης realtime μεταξύ αιτημάτων (QUIRE_REALTIME_DRIVER=durable_objects ή centrifugo), κοινόχρηστη cache (QUIRE_CACHE_DRIVER=postgres ή valkey) και πάροχο email μέσω HTTP. Χωρίς αυτά, το Worker αρνείται να ξεκινήσει και το αρχείο καταγραφής ονομάζει κάθε ρύθμιση που λείπει. Το πρόγραμμα οδήγησης Durable Objects είναι πελάτης του realtime Worker στο apps/realtime-worker (ένα Durable Object ανά κανάλι για διανομή, παρουσία και ιστορικό και ένα ανά άτομο για αποσυνδέσεις)· αναπτύξτε το παράλληλα όπως περιγράφεται παρακάτω ή χρησιμοποιήστε Centrifugo.

Τα επιμέρους μέρη

Μέρος Στο Cloudflare
web Worker με nodejs_compat
Postgres Εξωτερικά, προσπελάζεται μέσω Hyperdrive: HYPERDRIVE για τον ρόλο εφαρμογής, REPORT_HYPERDRIVE για τον ρόλο αναφορών στην ίδια φυσική βάση δεδομένων. Κατά την εκκίνηση, ο web tier αντιγράφει κάθε συμβολοσειρά σύνδεσης στα DATABASE_URL και QUIRE_REPORT_DATABASE_URL
Αρχεία R2 μέσω του API S3 (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com)· η σύνδεση FILES προσαρτά τον κάδο
Εργασίες παρασκηνίου pg-boss μέσω Hyperdrive όταν η εργασία πρέπει να μπει σε ουρά μαζί με εγγραφή. Με QUIRE_QUEUE_DRIVER=cloudflare στον συνοδευτικό worker, οι απλές εργασίες (μη ταξινομημένες παραδόσεις ειδοποιήσεων και webhooks) περνούν αντί γι’ αυτό από τα Cloudflare Queues, ώστε να μη γίνεται polling της Postgres. Ο συνοδευτικός worker εκτελεί και τα δύο
Realtime Το realtime Worker apps/realtime-worker με Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Συνοδευτικός host κοντέινερ. Ένα Worker δεν μπορεί να τα εκτελέσει
Tracing Workers observability, ενεργοποιημένο στο wrangler.jsonc

Το REPORT_HYPERDRIVE παρέχει τον ρόλο αναφορών για τη φυσική βάση δεδομένων που κατονομάζεται από το HYPERDRIVE. Αυτός ο προορισμός δεν εξυπηρετεί μισθωτές που έχουν δεσμευτεί σε πρόσθετες φυσικές βάσεις δεδομένων, όπως περιγράφεται παρακάτω.

Τι δεν μπορεί να κάνει αυτός ο προορισμός

Οι ρυθμίσεις απορρίπτονται κατά την εκκίνηση και παρατίθενται όλα τα προβλήματα μαζί:

  • Δεν υποστηρίζεται SMTP. Χρησιμοποιήστε πάροχο HTTP στο QUIRE_EMAIL_PROVIDER_CONFIG.
  • Δεν υπάρχει τοπικός δίσκος. Το QUIRE_STORAGE_DRIVER πρέπει να κατονομάζει αποθήκευση αντικειμένων.
  • Δεν υποστηρίζεται realtime ή cache εντός διεργασίας. Τα Workers δεν μοιράζονται μνήμη μεταξύ αιτημάτων, επομένως απορρίπτονται τα QUIRE_REALTIME_DRIVER=inprocess και QUIRE_CACHE_DRIVER=memory.
  • Δεν εκτελούνται ClamAV, Gotenberg ή ffmpeg στο Worker. Τα CLAMAV_URL, GOTENBERG_URL και FFMPEG_PATH απορρίπτονται όταν ορίζονται στο Worker· ορίστε τα στον συνοδευτικό worker.
  • Δεν υποστηρίζονται οργανισμοί με αποκλειστική βάση δεδομένων. Οι συνδέσεις Hyperdrive ενός Worker παραμένουν σταθερές μετά την ανάπτυξη, επομένως ένας οργανισμός με δική του βάση λαμβάνει σαφή σελίδα «μη διαθέσιμο εδώ». Εξυπηρετήστε τον από Compose ή Vercel.

Υπάρχει και κάτι που δεν απορρίπτεται αλλά πρέπει να γνωρίζετε: το prerendering και η σταδιακή στατική αναγέννηση δεν λειτουργούν στα Workers, όσα κι αν λέει η τεκμηρίωση του framework. Κάθε διαδρομή αποδίδεται σε κάθε αίτημα.

Σε αυτόν τον προορισμό κρατήστε τις συναλλαγές σύντομες και μην κρατάτε μία ενεργή κατά τη διάρκεια κλήσης δικτύου: το Hyperdrive επαναφέρει την κατάσταση της συνεδρίας όταν η σύνδεση επιστρέφει στο pool, επομένως το πλαίσιο μισθωτή ορίζεται ανά συναλλαγή.

Ανάπτυξη

  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 στο 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. Δημιουργήστε το build και αναπτύξτε από το apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. Αναπτύξτε το realtime Worker με το QUIRE_REALTIME_WORKER_SECRET του web tier και το μυστικό token του ως QUIRE_REALTIME_TOKEN_SECRET (ο web tier υπογράφει realtime tokens με το δικό του QUIRE_REALTIME_TOKEN_SECRET ή, αν αυτό δεν έχει οριστεί, με το QUIRE_SECRET_KEY· χρησιμοποιήστε λοιπόν ό,τι χρησιμοποιεί ο web tier). Ορίστε το QUIRE_REALTIME_WORKER_URL στον web tier ώστε να δείχνει στη διεύθυνσή του:
    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 δημιουργήστε μία ουρά ανά απλή ουρά και ορίστε τα παρακάτω στον συνοδευτικό 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. Εκτελέστε τον συνοδευτικό host όπως στο βήμα 3 του οδηγού Vercel. Οι μεταναστεύσεις εκτελούνται εκεί πριν από κάθε ανάπτυξη Worker.

Μια απορριφθείσα διαμόρφωση εμφανίζεται στο bun run --bun wrangler tail ως «The web tier did not start on cloudflare», ακολουθούμενο από κάθε ρύθμιση που πρέπει να αλλάξει.

Πλοήγηση

Πληκτρολογήστε για αναζήτηση…

↑↓ περιήγηση↵ επιλογήEsc κλείσιμο