---
title: "A Quire telepítése Docker Compose használatával"
description: "A Quire telepítése saját infrastruktúrára Docker Compose segítségével."
image: "https://docs.quirelms.com/og.png"
---

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

# A Quire telepítése Docker Compose használatával

<span id="installing-quire-with-docker-compose"></span>

Ez a teljes termék egyetlen hoston: az LMS, a háttérben végzett munka, a realtime és közös szerkesztési szolgáltatások, valamint a profilok mögött működő opcionális szolgáltatások. A kialakítást a `docs/architecture/23-ops.md` 2. szakasza ismerteti.

További célkörnyezetek: a [Vercel](/hu/ops/vercel/) és a [Cloudflare Workers](/hu/ops/cloudflare/) csak a webes réteget futtatják. A frissítéseket az [upgrade.md](/hu/ops/upgrade/), a mentéseket és a visszaállítási próbát a [backup-restore.md](/hu/ops/backup-restore/) ismerteti.

## Amire szüksége lesz <!--quire:what-you-need-->

- Docker Engine 27 vagy újabb, legalább 2.30-as Compose pluginnel.
- 4 CPU-mag és 8 GB memória az alapértelmezett stackhez; 8 mag és 16 GB a `--profile full` profilhoz (a ClamAV aláírásai önmagukban körülbelül 1,5 GB memóriát foglalnak).
- DNS-név a webes réteghez, és egy második a nem megbízható tartalomhoz. Külön hostnévnek kell lenniük: a SCORM-csomagok és feltöltött HTML-fájlok a tartalomoriginen futnak, hogy soha ne olvashassák az LMS sütijeit.
- Helyi teszthez az `lvh.me` és `*.localhost` név feloldása 127.0.0.1 címre; a `docker/.env.example` ezeket használja. A stack saját `proxy` szolgáltatása helyi hitelesítésszolgáltatóval, HTTPS-en szolgálja ki mindkettőt, ezért mást nem kell telepíteni (lásd a „TLS” részt).
- A hoston a 80-as és 443-as port legyen szabad (`QUIRE_PROXY_HTTP_PORT` és `QUIRE_PROXY_HTTPS_PORT` módosítja őket).

## Első indítás <!--quire:first-run-->

```sh
QUIRE_APP_ORIGIN=https://learn.example.org \
QUIRE_CONTENT_ORIGIN=https://content.example-content.org \
QUIRE_SETUP_ADMIN_EMAIL=you@example.org \
  docker/scripts/init-env.sh
docker compose -f docker/compose.yaml up -d --build
docker compose -f docker/compose.yaml logs init
```

A `docker/scripts/init-env.sh` a `docker/.env` fájlt a `docker/.env.example` sablonból készíti el, és minden titkot létrehoz (adatbázisjelszavak, aláíró- és master kulcsok, tartalomindítási kulcspár), valamint az audit-ellenőrzőpont aláírókulcsát a `docker/secrets/audit-signing-key.pem` fájlba, amelyet a Compose titokként csatol a workerekhez. Csak `sh`, `awk` és `openssl` szükséges hozzá, és nem ír felül meglévő `docker/.env` fájlt. Mindkét fájlról készítsen másolatot a hoston kívül: `QUIRE_MASTER_KEY` nélkül a visszaállított adatbázis nem tudja visszafejteni a tárolt hitelesítő adatokat. Ha kézzel szeretné kitölteni a fájlt, futtassa a `cp docker/.env.example docker/.env` parancsot; a fájl leírja, hogyan kell előállítani az egyes titkokat.

Mindkét originnak `https`-nek kell lennie: éles környezetben a tartalomszolgáltatás nem fogad sima http-t, és nem osztozhatnak ugyanazon regisztrálható tartományon. A `proxy` szolgáltatás fejezi be a TLS-kapcsolatot mindkettőhöz (lásd a „TLS” részt); az `init-env.sh` elutasítja a `http://` origint.

A stack kötött sorrendben indul, és minden lépés megvárja az előzőt:

1. A `postgres` egészséges állapotba kerül. Első indításkor az init szkript (`docker/postgres/init/90-passwords.sh`) beállítja a négy szerepkör jelszavát.
2. A `migrate` alkalmazza az összes migrációt, és előkészíti a feladatsort a vezérlőadatbázisban és minden dedikált tenant-adatbázisban, ellenőrzi, hogy megegyeznek-e, majd kilép (lásd docs/ops/upgrade.md). A migrációk minden indításkor lefutnak és idempotensek, ezért frissítéshez új lemezkép és újraindítás kell.
3. Az `init` (`apps/web/src/first-run.ts`) bejegyzi az alkalmazás adatbázisát a `QUIRE_DATABASE_ID` alatt; ha a `QUIRE_SETUP_ADMIN_EMAIL` be van állítva, létrehozza az első szervezetet és rendszergazdáját is. A bejelentkezési címet és a létrehozott jelszót egyszer írja ki a `docker compose logs init` naplóba.
4. Elindul a `web`, `content`, `worker`, `scheduler`, `collab` és `centrifugo`.
5. A `proxy` akkor indul, amikor a `web` és `content` egészséges.

Nyissa meg az alkalmazás domainjéhez hozzáfűzött `https://demo.` címet (az `init` napló kiírja a pontos bejelentkezési címet), majd jelentkezzen be. Helyi telepítésnél előbb bízzon meg a proxy hitelesítésszolgáltatójában (lásd „TLS”). Módosítsa a létrehozott jelszót a `/account/security` oldalon.

A szükséges titok nélkül induló folyamat nem indul el, és a naplóban megnevezi a hiányzó beállítást. A rendszer nem indul el félig konfigurált állapotban.

## Szolgáltatások és profilok <!--quire:services-and-profiles-->

| Szolgáltatás | Profil | Feladat |
| --- | --- | --- |
| postgres | mindig | Adatbázis (PostgreSQL 18 pgvectorral, a `docker/postgres.Dockerfile` alapján), WAL-archiválással az első indítástól |
| migrate, init | mindig | Egyszeri: migrációk, majd első indítás |
| web | mindig | LMS a `QUIRE_HTTP_PORT` porton (8080) |
| content | mindig | Nem megbízható tartalom originen a `QUIRE_CONTENT_PORT` porton (8081) |
| worker | mindig | Háttérfeladatok: e-mail, jelentések, fájlfeldolgozás, webhookok |
| scheduler | mindig | Ismétlődő feladatok: regisztrálja a 64 futásidejű ütemezést és átadja a workernek; egyszerre egy vezető |
| collab | mindig | Közös szerkesztési websocket a `QUIRE_COLLAB_HTTP_PORT` porton (1234) |
| centrifugo | mindig | Realtime továbbítás a `QUIRE_REALTIME_PORT` porton (8000) |
| proxy | mindig | Caddy, TLS belépési pont a 80-as és 443-as porton (lásd „TLS”) |
| valkey | `cache` | Gyorsítótár és sebességkorlátok |
| clamav | `scan` | Feltöltések kártevő-ellenőrzése |
| gotenberg | `preview` | Office-fájlok előnézete PDF-ként, tanúsítványok renderelése |
| imgproxy | `images` | Képek átméretezése és átalakítása |
| transcoder | `video` | Worker-lemezkép LGPL-licencű ffmpeg-gel videóváltozatok készítéséhez |
| seaweedfs | `storage` | S3-kompatibilis objektumtároló ezen a hoston |
| otelcol | `observability` | OpenTelemetry-gyűjtő |
| mailpit | `devmail` | A Quire kipróbálásához fogadja a kimenő leveleket |
| backup | `backup` | Egyszeri alapmentés; lásd: backup-restore.md |
| backup-scheduler, backup-offsite | `backup` | Alapmentés minden `QUIRE_BACKUP_INTERVAL_HOURS` időközönként, valamint titkosított külső másolatok heti ellenőrzési próbával |
| h5p | `h5p` | Az Ön által a `QUIRE_H5P_IMAGE` változóban megadott H5P LTI 1.3-eszköz lemezképe a `QUIRE_H5P_PORT` porton (8090); lásd: „H5P-szolgáltató csatlakoztatása” |

A `--profile full` minden opcionális szolgáltatást elindít, kivéve a `backup` és `h5p` profilokat. Egy profil indítása: `docker compose -f docker/compose.yaml --profile scan up -d`. Opcionális szolgáltatások nélkül is működik a Quire, és jelzi, mi hiányzik: scanner nélkül a feltöltések ellenőrzés nélkül kerülnek tárolásra, és erről értesíti a rendszergazdát; Gotenberg nélkül a fájlok előnézet helyett letölthetők; transcoder nélkül a videó az eredeti fájlként játszódik le.

A külső lemezképek és licenckötelezettségeik a `docker/third-party-containers.yaml` fájlban szerepelnek.

### H5P-szolgáltató csatlakoztatása <!--quire:connecting-an-h5p-provider-->

A Quire nem ágyaz be és nem szállít H5P-futtatókörnyezetet vagy sidecart (ADR 0019). H5P használatához biztosítson saját hosztolt előfizetést vagy külön üzemeltetett H5P-példányt. Regisztrálja a szolgáltatót külső LTI 1.3-eszközként, és adja hozzá a tartalmait a kurzusokhoz eszköztevékenységként. A Quire LTI Assignment and Grade Services (AGS) használatával cserél jegyeket és tevékenység-/értékelési haladást. Ha a szolgáltató xAPI-állításokat is küld, azt külön állítsa be a Quire xAPI állítástárához; az AGS jegy-/haladáscsere nem küld xAPI-állításokat. A H5P-tevékenységeket tartalmazó Moodle-importok jelzik, hogy LTI-eszközkapcsolat szükséges. A H5P-futtatókörnyezet, -szerkesztés, -tartalomtár és próbálkozási előzmények továbbra is a szolgáltató felelőssége.

Ha saját, önállóan üzemeltetett példányt futtat ezen a hoston, állítsa a `QUIRE_H5P_IMAGE` értékét annak lemezképére, majd indítsa el a `h5p` profilt. A Compose közzéteszi a `QUIRE_H5P_PORT` porton (8090), és a `h5p-data` kötetben tartja az adatokat; a lemezkép és a hozzá kapcsolódó kötelezettségek az Ön felelősségei maradnak.

## Beállítások <!--quire:settings-->

Minden folyamat a `docker/.env` fájlt olvassa. A sablon, `docker/.env.example`, minden beállítást és alapértékét felsorol. A csoportok:

### Címek <!--quire:addresses-->

| Beállítás | Jelentés |
| --- | --- |
| `QUIRE_APP_ORIGIN` | Az LMS nyilvános címe, például `https://learn.example.com` |
| `QUIRE_CONTENT_ORIGIN` | A tartalomorigint külön hoston kell megadni |
| `QUIRE_PLATFORM_DOMAINS` | A szervezetek tartományai, vesszővel elválasztva |
| `QUIRE_MARKETING_ORIGIN` | Optional. The marketing site, default `https://quirelms.com`. The only origin the waitlist form (`POST /api/waitlist`, `POST /waitlist`) accepts and redirects to. Comma separated; a `www.` variant is allowed only if listed |
| `QUIRE_DEPLOY_TARGET` | Itt `compose`; a többi útmutatóban `vercel` és `cloudflare` |
| `QUIRE_TRUSTED_PROXY_CIDRS` | Azok a proxyk, amelyek `X-Forwarded-For` fejlécében megbízunk |

### Titkok <!--quire:secrets-->

| Beállítás | Jelentés |
| --- | --- |
| `QUIRE_SECRET_KEY` | Munkamenetek és tokenek aláírása. 64 hexadecimális karakter |
| `QUIRE_MASTER_KEY` | Tárolt hitelesítő adatok, például SSO- és webhooktitkok becsomagolása. 32 bájt, base64. A webes réteg és a worker ugyanazt az értéket használja. Csere: [key-rotation.md](/hu/ops/key-rotation/) |
| `QUIRE_MASTER_KEY_VERSION` | A master kulcs verziócímkéje; beállítás nélkül `v1`. Cserekor növelje |
| `QUIRE_MASTER_KEY_RETIRED` | A korábbi master kulcsok, amelyekkel a csomagolt adatok még olvashatók, például `v1=<base64>`. A megoldatlan elemek nélküli csere után távolítsa el |
| `QUIRE_COLLAB_SIGNING_KEY` | A webes és collab szolgáltatás közösen írja alá a szerkesztési tokeneket |
| `QUIRE_BACKUP_SIGNING_KEY` | Kurzusmentések aláírása (nem kötelező) |

A `QUIRE_MASTER_KEY` másolatát a hoston kívül őrizze. Nélküle a visszaállított adatbázis nem tudja visszafejteni a benne lévő hitelesítő adatokat.

### Adatbázis <!--quire:database-->

| Beállítás | Jelentés |
| --- | --- |
| `POSTGRES_PASSWORD` | Superuser, a konténer és a mentések használják |
| `QUIRE_DB_APP_PASSWORD`, `QUIRE_DB_MIGRATOR_PASSWORD`, `QUIRE_DB_REPORT_PASSWORD`, `QUIRE_DB_AUDIT_PASSWORD` | Szerepkörjelszavak, az első indításkor kerülnek beállításra |
| `DATABASE_URL` | Alkalmazásszerepkör. Minden lekérdezésére row-level security vonatkozik |
| `DATABASE_MIGRATOR_URL`, `QUIRE_MIGRATION_URL` | Migrátorszerepkör a `migrate` és `init` szolgáltatáshoz |
| `QUIRE_SUPERUSER_URL` | Csak az első indítás használja |
| `QUIRE_REPORT_DATABASE_URL` | Csak olvasható jelentési szerepkör a jelentésekhez és jelentéskészítőhöz |
| `QUIRE_AUDIT_DATABASE_URL` | Audit-szerepkör az auditkonzolhoz és SIEM-exporthoz |
| `QUIRE_DATABASE_ID` | Tetszőleges UUID, a telepítés teljes élettartamára rögzítve |

A szerepkörjelszavakat csak az adatbáziskötet első létrehozásakor alkalmazzuk. Későbbi cseréjükhöz használja az `ALTER ROLE` utasítást, majd módosítsa a hozzá tartozó URL-t.

Ha egy fizikai adatbázishoz másik, regisztrált fizikai adatbázist használ, állítsa be annak saját `QUIRE_REPORT_DATABASE_URL` és `DATABASE_URL`-hez tartozó `quire_report` URL-jét a webes és worker-környezetben, majd az adatbázis **Jelentési környezeti változó** mezőjében adja meg a környezeti változó nevét `env:NAME` alakban. Ennek ugyanarra az adatbázisra kell mutatnia, mint az alkalmazáskapcsolatnak; lehetőleg olvasási replikára. Minden jelentési felület a tenant saját adatbázisának jelentési URL-jét használja: a jelentéskészítő és a mentett jelentések, az ütemezett kézbesítések, a jelentések exportjai, az analitika, az auditnapló, a REST audit-erőforrásai és az asszisztens auditkeresése. Egyik sem használja egy másik adatbázis URL-jét. Ha nincs jelentési URL, a szokásos jelentések az adott adatbázis alkalmazás-URL-jét használják; az analitika és az auditolvasás megtagadja a hozzáférést, mert az alkalmazásszerepkör nem olvashatja az auditnaplót.

### Illesztőprogramok <!--quire:drivers-->

| Beállítás | Értékek | Jelentés |
| --- | --- | --- |
| `QUIRE_STORAGE_DRIVER` | `local` (alapértelmezett), `s3` vagy `azure` | A `local` `files` fájlokat helyez a kötetre; az `s3` támogatja az AWS S3-at, az R2-t, a GCS-kompatibilitást és más S3-kompatibilis tárolókat, valamint a megszakítható többrészes feltöltéseket. |
| `QUIRE_REALTIME_DRIVER` | `inprocess` (alapértelmezett), `sse`, `centrifugo` vagy `durable_objects` | Az `inprocess` egy webkonténerhez való; több példányhoz a `centrifugo` vagy az `sse` használható. |
| `QUIRE_CACHE_DRIVER` | `memory` (alapértelmezett), `postgres` vagy `valkey` | A `memory` folyamatonkénti; a sebességkorlátok megosztásához használja a `valkey` vagy `postgres` lehetőséget. |
| `QUIRE_VIDEO_DRIVER` | `ffmpeg` (alapértelmezett) vagy `progressive_mp4` | Vagy használja a Cloudflare Stream, Mux vagy Bunny hosztolt szolgáltatását a kulcsaival. |
| `QUIRE_IMAGE_DRIVER` | `noop` (alapértelmezett), `imgproxy` vagy `cloudflare` | A `noop` eredeti méretű kimenetet ad; az `imgproxy` szolgáltatáshoz az `images` profil és beállításai szükségesek; a `cloudflare` a Cloudflare Imagest használja. |
| `QUIRE_MEETING_PROVIDER` | `bbb`, `zoom`, `teams`, `meet`, `jitsi` vagy `in_process` | Az alapértelmezett élő alkalom szolgáltatója; ha nincs beállítva, konfigurálatlanként jelenik meg, amíg a szervezet nem csatlakoztatja saját fiókját az Integrációk, Élő alkalom szolgáltató részben. A szervezet fiókja élvez elsőbbséget. A hozzá tartozó beállításokat (`BBB_URL`, `BBB_SECRET`, `ZOOM_*`, `TEAMS_*`, `GOOGLE_MEET_*`, `JITSI_*`) csak a kiválasztott szolgáltató olvassa. |
| `QUIRE_MEETING_REGIONS` | vesszővel elválasztott `eu`, `uk`, `us` lista | Az a régió, ahol a platform alapértelmezett szolgáltatója feldolgozza az alkalmakat; ha nincs beállítva, a rendszer nem ellenőrzi a rögzített régiót, a korábbi működésnek megfelelően. A szervezet saját fiókjánál a régió az adott oldalon jelenik meg. |

Az ebben a kiadásban nem szereplő illesztőprogram-érték esetén a webes szolgáltatás induláskor elutasítja a beállítást, és megnevezi azt ahelyett, hogy alapértelmezettet választana.

### Képek <!--quire:images-->

A képeket rögzített méretben kérheti a `/api/files/{id}/image/{size}` útvonalon. A rendszer ugyanazt a hozzáférést ellenőrzi, majd átirányít. A szervezet óránként legfeljebb `QUIRE_IMAGE_SPECS_PER_HOUR` (alapértelmezés szerint 2000) új kép/méret pár feldolgozását kérheti; a már elkészültek nem számítanak bele. Egynél több webkonténer esetén használja a `valkey` vagy `postgres` lehetőséget, és állítsa be ennek megfelelően a `QUIRE_CACHE_DRIVER` értékét a gyorsítótár megosztásához.

| Beállítás | Szükséges ehhez | Jelentés |
| --- | --- | --- |
| `IMGPROXY_URL` | `imgproxy` | Az imgproxy böngészőből elérhető címe, például `https://images.example.org`; a `images` profil a `QUIRE_IMAGES_PORT` porton (8082) teszi közzé. |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `imgproxy` | Az imgproxy hexadecimális kulcsai; ugyanazok, mint az induláskor. Mindegyik előállítható az `openssl rand -hex 32` paranccsal. A Quire aláírja a képcímet, az imgproxy pedig csak a kért képeket jeleníti meg. |
| `QUIRE_IMAGE_SOURCE_ORIGIN` | `imgproxy` és helyi tárolás | Az a forrás, ahonnan az imgproxy lekéri az eredetit. A Compose `http://web:3000` értéket állít be; `s3` vagy `azure` esetén a rendszer a tárolóból kéri le, így ez a beállítás használaton kívül marad. |
| `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_IMAGES_TOKEN`, `CLOUDFLARE_IMAGES_ACCOUNT_HASH` | `cloudflare` | Images szerkesztési token és fiókkivonat az Images, Developer resources részből; engedélyezze a rugalmas változatokat. |
| `CLOUDFLARE_IMAGES_SIGNING_KEY` | `cloudflare`, nem kötelező | Ha be van állítva, a rendszer aláírt, lejáró URL-eket használ. Enélkül a nyilvános URL-ek a `QUIRE_SECRET_KEY` értékéből származnak, amelyet senki sem tud kitalálni. |

A Cloudflare Images saját másolatot tárol; a worker az eredeti törlése előtt ezt a másolatot is törli.

### Feladatsor <!--quire:queue-->

A háttérfeladatok a pg-boss szolgáltatást használják ugyanazon a Postgres-adatbázison; nincs szükség külön feladatsor-szolgáltatásra vagy annak beállítására. A feladat ugyanabban a tranzakcióban kerül sorba, mint az azt kiváltó módosítás, így összeomláskor nem vész el és nem duplázódik meg. A `QUIRE_QUEUE_DRIVER` esetén a `pgboss` az alapértelmezett. A `vercel` és `cloudflare` értékek csak a könnyű értesítési és webhook-kézbesítéseket helyezik át a platform feladatsorába. A Vercelről és a Cloudflare-ről szóló útmutató ismerteti ezeket, illetve azt, hogyan kerülnek sorba a feladatok.

### E-mail <!--quire:email-->

Állítsa be az alábbiak egyikét:

- `QUIRE_EMAIL_PROVIDER_CONFIG`: JSON-objektum, amely megadja a HTTP-szolgáltatót és a hitelesítő adatokat, például `{"provider":"postmark","token":"..."}`. Támogatott szolgáltatók: Postmark, Amazon SES, Mailgun, SendGrid és Resend.
- `QUIRE_SMTP_URL`: például `smtp://user:password@host:587`; ez a célkörnyezet azonban SMTP-t blokkoló kiszolgáló nélküli platform. 

A feladó címét a `QUIRE_MAIL_FROM` beállítással adja meg. Teszteléshez indítsa el a `devmail` profilt, állítsa be a `QUIRE_SMTP_URL=smtp://mailpit:1025` értéket, és a leveleket a `http://localhost:8025` címen olvassa el.

### Nem kötelező szolgáltatások <!--quire:optional-services-->

| Beállítás | Jelentés |
| --- | --- |
| `CLAMAV_URL=tcp://clamav:3310` | `scan`, a feltöltések ellenőrzése |
| `GOTENBERG_URL=http://gotenberg:3000` | `preview`, előnézetek készítése |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `images`, képek feldolgozása |
| `VALKEY_URL=redis://valkey:6379` | `cache`, gyorsítótár |
| `QUIRE_OPENSEARCH_URL` vagy `QUIRE_MEILISEARCH_URL` | Külső keresés; ezek nélkül a Postgres teljes szöveges keresése működik. |
| `QUIRE_BREACH_CHECK_PROVIDER=off`, `QUIRE_BREACH_CHECK_URL` | Jelszószivárgás ellenőrzése. Alapértelmezés szerint be van kapcsolva az `api.pwnedpasswords.com` címen; csak az ötk karakteres hash-előtagot küldi el. Az `off` letiltja, az URL pedig egy Ön által üzemeltetett tartomány-API-ra mutathat. |

### Megfigyelhetőség <!--quire:observability-->

Az `OTEL_EXPORTER_OTLP_ENDPOINT` a nyomkövetéseket és metrikákat fogadó gyűjtőt nevezi meg. A `observability` profillal ez a `http://otelcol:4318`; a `docker/otel-collector.yaml` fájlban adjon hozzá háttérrendszer-exportert. Beállítása esetén a web, a worker, az ütemező, a tartalomszolgáltatás és a közös szerkesztés OTLP/HTTP-n küld szakaszokat (webes kérések, tenant-adatbázis tranzakciói, worker-feladatok és kimenő hívások), valamint percenként metrikákat. A metrikák letiltásához állítsa az `OTEL_METRICS_EXPORTER=none` értéket. Az `OTEL_TRACES_SAMPLER_ARG` adja meg a nyomkövetések mintavételezési arányát. A naplók a szabványos kimenetre kerülnek a `LOG_LEVEL` szinttel, a Compose pedig forgatja őket. A nyomkövetések nem tartalmaznak személyes adatokat.

### Regionális kimenő forgalom (EU-adattárolás) <!--quire:regional-egress-eu-data-residency-->

A `QUIRE_REGION=eu` azt jelzi, hogy a stack EU-s szervezeteket szolgál ki. Az EU-régióhoz rögzített szervezeteknél a worker a kimenő kéréseket az engedélyezőlistára korlátozza (21-compliance.md, 8.1. szakasz). Az engedélyezőlista a régióban konfigurált szolgáltatások által megadott hosztokat tartalmazza: tárolási végpontok, e-mail-szolgáltató, hosztolt videó, szervezeti tárolási célpontok, AI-szolgáltatók és e-mail-fiók, aktív eltéréssel működő szolgáltatások, valamint a `QUIRE_EGRESS_ALLOW_HOSTS` értékei. A többi nyilvános hosztra irányuló kérést küldés előtt elutasítja, és az elutasítást a `privacy/egress_refused` eseménynél naplózza; az engedélyezett hosztok a Megfelelőség, Adattárolás részen láthatók.

| Beállítás | Értékek | Jelentés |
| --- | --- | --- |
| `QUIRE_EGRESS_ALLOW_HOSTS` | Hosztnevek vesszővel elválasztott listája vagy `*.example.org` az összes aldomainhez | További hosztok, amelyeket az EU-s szervezetek elérhetnek. A webhook-, xAPI- és SIEM-végpontokat, a bloghírcsatornákat és az Amazon SES hosztjait is itt adja meg, mert ezeket a szervezet választja, és egyik szolgáltatás sem deklarálja. A saját hálózat loopback- és privát címei, illetve egyszerű nevei, például `web` vagy `clamav`, nem esnek ellenőrzés alá. |

Az Egyesült Királyság és az Egyesült Államok régiói nem tartoznak a hosztlistás korlátozás alá, de a szolgáltatások régióellenőrzését ott is tartsa be. Állítsa be ezt a worker számára; a rendszergazdai felület a webes rétegtől olvassa az értéket. Helyezze a `docker/.env` fájlba, hogy minden szolgáltatás olvashassa.

Az alkalmazás ellenőrzése világos hibát és auditbejegyzést ad, de nem jelent garanciát: a kód hibás lehet. A hálózati korlátozás nyújt garanciát. A Compose ezt önmagában nem kényszeríti ki. Regionális stack esetén tegye a `worker` és `web` szolgáltatást `internal: true` hálózatra, amelynek egyetlen kifelé vezető útvonala az olyan hosztokat engedélyező kimenő proxy, amelyeket a `QUIRE_EGRESS_ALLOW_HOSTS` és a konfigurált szolgáltatások felsorolnak (például Squid vagy tinyproxy). Állítsa be a `HTTPS_PROXY` értékét. Az Adattárolás oldal felsorolja az engedélyezett hosztokat, így összevetheti őket.

## Állapotellenőrzés <!--quire:health-->

| Útvonal | Jelentés |
| --- | --- |
| `/healthz` | Életbenlét: a folyamat válaszol; a Compose ezt ellenőrzi. |
| `/readyz` | Függőségek elérhetők, és a nem kötelező szolgáltatások konfigurációs állapota megfelelő; a terheléselosztót erre irányítsa. |

A `docker compose -f docker/compose.yaml ps` paranccsal megtekintheti az állapotot.

## TLS <!--quire:tls-->

Az alapértelmezett stack `proxy` szolgáltatása a Caddy (`docker/caddy/Caddyfile`, Apache-2.0 licenc). A 80-as és 443-as porton figyel, és az alábbi útvonalakat irányítja:

| Útvonal vagy gazdanév | Cél |
| --- | --- |
| `QUIRE_PROXY_CONTENT_HOST` | `content` |
| `QUIRE_PROXY_APP_HOST`, minden tenant-aldomain és egyéni domain | `web` |
| `/_collab/` | Közös szerkesztési websocket (`collab`, `QUIRE_COLLAB_URL`) |
| `/_realtime/connection/` | `centrifugo` kliens-websocket; a szerver API-ja nincs kitéve. |
| `/_images/` | `imgproxy` (az `images` profillal; `IMGPROXY_URL`) |

Az `init-env.sh` az originek alapján vezeti le a `QUIRE_PROXY_APP_HOST`, `QUIRE_PROXY_CONTENT_HOST`, `QUIRE_PROXY_HTTPS_PORT`, `QUIRE_COLLAB_URL` és `IMGPROXY_URL` értékét, hogy azok ne térhessenek el egymástól. Módosításkor hangolja össze őket.

A tanúsítványokat a `QUIRE_PROXY_TLS` beállítás határozza meg:

- `internal` (alapértelmezett): a Caddy helyi hitelesítésszolgáltatót használ a `localhost`, a `*.localhost` és az `lvh.me` esetében. Egyszer bízzon meg benne, majd futtassa ezt:

  ```sh
  docker compose -f docker/compose.yaml cp \
    proxy:/data/caddy/pki/authorities/local/root.crt ./quire-local-ca.crt
  ```

  Adja hozzá a `quire-local-ca.crt` tanúsítványt a rendszer vagy a böngésző megbízható tanúsítványaihoz; a `curl` esetében használja a `--cacert` kapcsolót.
- E-mail-cím: automatikus ACME-tanúsítványok (először Let’s Encrypt, majd ZeroSSL) valódi hosztnevekhez. Az originek és a tenant-hosztok DNS-rekordjai erre a hostra mutassanak, a portok pedig legyenek elérhetők.

A tenant-hoszt tanúsítványát igény szerint, az első látogatáskor állítja ki a rendszer, de csak akkor, ha a webes szolgáltatás a Compose-hálózaton keresztüli `/tls-allowed` végponton engedélyezi. Nincs wildcard vagy DNS-bővítmény; véletlenszerű hosztra mutatással nem lehet tanúsítványt kérni. A tanúsítványok és a hitelesítésszolgáltató adatai a `caddy-data` kötetben vannak; `internal` használat esetén ezt is mentse a többi adattal együtt.

A webes szolgáltatás csak a proxytól bízik meg az `X-Forwarded-For` fejlécben: a rögzített `QUIRE_PROXY_ADDRESS` alapértéke `172.29.64.10`, a rögzített `QUIRE_COMPOSE_SUBNET` hálózaton; a `QUIRE_TRUSTED_PROXY_CIDRS` ezt nevezi meg. Ha a hálózati tartomány ütközik, módosítsa mindkettőt, majd futtassa a `docker compose down` parancsot az `up` előtt.

## Saját fordított proxy mögött <!--quire:behind-your-own-reverse-proxy-->

Saját terheléselosztó vagy proxy használatához hagyja ki a `proxy` szolgáltatást a `docker compose up -d --scale proxy=0` paranccsal, és a TLS-t a `web` (8080), `content` (8081), `collab` (1234, websocket) és `centrifugo` (8000, websocket) előtt fejezze be. Állítsa be a `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN` és `QUIRE_COLLAB_URL` (`wss://` értékkel) nyilvános címeit, valamint a proxy címtartományát a `QUIRE_TRUSTED_PROXY_CIDRS` értékeként.

## Hibaelhárítás <!--quire:troubleshooting-->

- Az `init` ezzel lép ki: „QUIRE_DATABASE_ID is not a UUID”: állítsa be `uuidgen` segítségével.
- A `web` újraindul, és ezt írja: „did not start on compose”: a napló felsorolja a nem kezelhető beállításokat és a helyettesítőiket.
- A `.env` fájlban megváltoztatott szerepkörjelszó az első indítás után nem hat: az init csak egyszer fut le; használja az `ALTER ROLE` utasítást.
- A feltöltés vizsgálata hibát jelez a `CLAMAV_URL` használatakor: a ClamAV az első induláskor tölti le az aláírásokat, ami több percig tarthat.

Source: https://docs.quirelms.com/hu/ops/install/index.mdx
