---
title: "Ο web tier στο Cloudflare Workers"
description: "Εκτελέστε έναν περιορισμένο web tier του Quire στο Cloudflare Workers."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/el/llms.txt
> Use this file to discover all available pages before exploring further.

# Ο web tier στο Cloudflare Workers

<span id="the-web-tier-on-cloudflare-workers"></span>

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

## Κατάσταση σε αυτή την έκδοση <!--quire:status-in-this-release-->

Η διαμόρφωση είναι έτοιμη (`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.

## Τα επιμέρους μέρη <!--quire:the-pieces-->

| Μέρος | Στο 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`. Αυτός ο προορισμός δεν εξυπηρετεί μισθωτές που έχουν δεσμευτεί σε πρόσθετες φυσικές βάσεις δεδομένων, όπως περιγράφεται παρακάτω.

## Τι δεν μπορεί να κάνει αυτός ο προορισμός <!--quire:what-this-target-cannot-do-->

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

- **Δεν υποστηρίζεται 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, επομένως το πλαίσιο μισθωτή ορίζεται ανά συναλλαγή.

## Ανάπτυξη <!--quire:deploying-->

1. Δημιουργήστε τους πόρους:
   ```sh
   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`:
   ```sh
   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 ώστε να δείχνει στη διεύθυνσή του:
   ```sh
   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):
   ```sh
   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](/el/ops/vercel/). Οι μεταναστεύσεις εκτελούνται εκεί πριν από κάθε ανάπτυξη Worker.

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

Source: https://docs.quirelms.com/el/ops/cloudflare/index.mdx
