---
title: "Fampetrahana Quire amin'ny Docker Compose"
description: "Mampetraha Quire eo amin'ny fitaovinao manokana amin'ny Docker Compose."
image: "https://docs.quirelms.com/og.png"
---

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

# Fampetrahana Quire amin'ny Docker Compose

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

Ity ny rindrina feno amin'ny mpandray anjara iray: ny LMS, ny asany anaty, ny serivisy mivantana sy fanoratana miaraka, ary serivisy safidy rehetra ao amin'ny profile. Ny drafitra dia ao amin'ny `docs/architecture/23-ops.md` singa 2.

Sehatra hafa: ny [Vercel](/mg/ops/vercel/) sy ny [Cloudflare Workers](/mg/ops/cloudflare/) dia miasa amin'ny sehatra ve-dalana ihany. Ao amin'ny [upgrade.md](/mg/ops/upgrade/) ny fanavaozana, ary ao amin'ny [backup-restore.md](/mg/ops/backup-restore/) ny backup sy ny fandinihan'ny famerenana.

## Inona ilaina <!--quire:what-you-need-->

- Docker Engine 27 na ambony kokoa miaraka amin'ny plugin Compose 2.30 na ambony kokoa.
- 4 core CPU sy 8 GB fizotra ho an'ny stack fototra; 8 core sy 16 GB amin'ny `--profile full` (ny ClamAV irery dia misy akaiky 1.5 GB famantarana).
- Anarana DNS ho an'ny sehatra ve-dalana iray sy hafa ho an'ny votoaty tsy antoka. Tokony samy mpandray anjara izy roa: ny pakety SCORM sy ny HTML nampidirina dia miasa ao amin'ny loharanon'ny votoaty ka tsy afaka mamaky ny cookie an'ny LMS mihitsy.
- Ho an'ny fandinihana anaty, `lvh.me` sy `*.localhost` dia mifantoha amin'ny 127.0.0.1, izay ampiasan'ny `docker/.env.example`. Ny serivisy `proxy` manokan'ny stack dia mome roa amin'ny https amin'ny alàlan'ny mpandray anjaran'ny serivera anaty, ka tsy misy hafa apetraka (jereo ny "TLS").
- Samy feno ny 80 sy 443 ao amin'ny mpandray anjara (`QUIRE_PROXY_HTTP_PORT` sy `QUIRE_PROXY_HTTPS_PORT` no manova azy).

## Fandraisana voalohany <!--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
```

`docker/scripts/init-env.sh` dia manoratra `docker/.env` avy amin'ny `docker/.env.example` misy ny teny miafina tsirairay natao (tenimialàn'ny data-by, kiteny marinana sy lehibe, sampan-panjakan'ny fanombohana votoaty) ary ny kiteny marinana fitsarin'ny fetran'ny fanamarinana ao amin'ny `docker/secrets/audit-signing-key.pem`, izay apetrakain'i Compose eo amin'ny mpandray asa ho teny miafina. Mila `sh`, `awk` ary `openssl` ihany izy, ary tsy manoratra amin'ny anatiny ny `docker/.env` efa misy. Akarao ny karatra roa avy amin'ny mpandray anjara: tsy afaka manala ny mombamomba alefa voatahiriny ny data-by mamerina raha tsy misy `QUIRE_MASTER_KEY`. Hanoratra anaty ilay rakitra manokana, `cp docker/.env.example docker/.env`; misy fomba namoronana ny teny miafina tsirairay ao amin'ny rakitra.

Tsy maintsy `https` ny loharano roa: manakana ny http tsotra amin'ny fiasa ny serivisy votoaty, ary tsy maintsy samy anaran-tsehatra azo resahaina. Ny serivisy `proxy` no mamaritra TLS ho an'ny roa (jereo ny "TLS"); ny `init-env.sh` no manakana loharano `http://`.

Manomboka amin'ny filaharana voafaritra ny stack, ary miandry ny taloha ny dingana tsirairay:

1. Mahomby ny `postgres`. Amin'ny fiaingana voalohany dia metrahana ny tenimialàna ny scriptiny (`docker/postgres/init/90-passwords.sh`).
2. Mampiasa ny fiovana rehetra sy mamorona filaharan'ny asa ao amin'ny data-by fifehezana sy data-by mpanjifa manokana tsirairay ny `migrate`, manamarina fa mifankahazo izy rehetra, ary mivoaka (docs/ops/upgrade.md). Miasa ny fiovana isaky ny fiaingana ary idempotenty, ka ny fanavaozana dia sary vaovao sy fanakorontana.
3. Ny `init` (`apps/web/src/first-run.ts`) dia mitadika ny data-by an'ny fampiharana amin'ny `QUIRE_DATABASE_ID` ary, raha nosetina ny `QUIRE_SETUP_ADMIN_EMAIL`, dia mamorona ny organizasa voalohany sy ny mpikarakarany. Aseho indray amin'ny `docker compose logs init` ny adiresy fidirana sy ny tenimialàna natao.
4. Manomboka ny `web`, `content`, `worker`, `scheduler`, `collab` ary `centrifugo`.
5. Manomboka ny `proxy` rehefa mahomby ny `web` sy `content`.

Sokafy `https://demo.` arahin'ny anaran'ny rindrinao (ny log an'ny `init` dia mampiseho ny adiresy fidirana marina), ary miditra. Amin'ny fampidirana anaty, manankatoavana aloha ny mpandray anjaran'ny fanamarinana an'ny proxy (jereo ny "TLS"). Ovao ny tenimialàna natao amin'`/account/security`.

Ny rindrina tsy misy teny miafina ilaina dia tsy manomboka ary manambara ao amin'ny log ny filàlana very. Tsy manomboka raha tsy voatsara tanteraka na inona na inona.

## Serivisy sy profile <!--quire:services-and-profiles-->

| Serivisy | Profile | Inona no asany |
| --- | --- | --- |
| postgres | foana | Ny data-by (PostgreSQL 18 amin'ny pgvector, natao avy amin'ny `docker/postgres.Dockerfile`), misy WAL arsivina avy amin'ny fiaingana voalohany |
| migrate, init | foana | Indray ihany: fiovana, avy eo fandraisana voalohany |
| web | foana | Ny LMS, ao amin'ny `QUIRE_HTTP_PORT` (8080) |
| content | foana | Ny loharanon'ny votoaty tsy antoka, ao amin'ny `QUIRE_CONTENT_PORT` (8081) |
| worker | foana | Asa anaty: mailaka, tatitra, fanitsakitsahana rakitra, webhook |
| scheduler | foana | Asa manaraka: mitadika ny fandaminana 64 an'ny runtime ary manome azy ireo ho an'ny mpandray asa; olona iray mitondra isaky ny fotoana |
| collab | foana | Websocket fanoratana miaraka, ao amin'ny `QUIRE_COLLAB_HTTP_PORT` (1234) |
| centrifugo | foana | Fanzarana mivantana, ao amin'ny `QUIRE_REALTIME_PORT` (8000) |
| proxy | foana | Caddy, varavarankely TLS ao amin'ny 80 sy 443 (jereo ny "TLS") |
| valkey | `cache` | Cache sy fetra fotoana |
| clamav | `scan` | Fanadihadiana rindrina mamimono ny tahirina |
| gotenberg | `preview` | Jereo Office ho PDF, famoronana taratasy fanamarinana |
| imgproxy | `images` | Svoatsindry sy novana |
| transcoder | `video` | Ny sary an'ny mpandray asa misy ffmpeg LGPL ihany, ho an'ny endriky ny video |
| seaweedfs | `storage` | Tahirin-entana mifanaraka amin'ny S3 ao amin'io mpandray anjara io |
| otelcol | `observability` | Mpangataka OpenTelemetry |
| mailpit | `devmail` | Maka mailaka rehetra mitohy, ho fanandramana Quire |
| backup | `backup` | Backup fototra indray ihany; jereo ny backup-restore.md |
| backup-scheduler, backup-offsite | `backup` | Backup fototra isaky ny `QUIRE_BACKUP_INTERVAL_HOURS`, ary sary mampiasa avy any ivelany misy fandinihana famaritana isan-kerinandro |
| h5p | `h5p` | Ny sary fitaovana H5P LTI 1.3 omenao ao amin'ny `QUIRE_H5P_IMAGE`, ao amin'ny `QUIRE_H5P_PORT` (8090); jereo ny "Manampy mpanome H5P" |

Manomboka serivisy safidy rehetra ny `--profile full` afa-tsiny ny `backup` sy ny `h5p`. Manomboka iray amin'ny `docker compose -f docker/compose.yaml --profile scan up -d`. Na dia tsy misy serivisy safidy koa dia mbola miasa ny Quire ary milaza ny tsy misy: raha tsy misy mpandrika dia tahirizina tsy jerena ny tahirina ary fantatrin'ny mpikarakara; raha tsy misy Gotenberg dia mamela famakarana fa tsy fijerena ny rakitra; raha tsy misy transcoder dia mijery toy ny rakitra voalohany ny video.

Misy ao amin'ny `docker/third-party-containers.yaml` ny sary tsirairay an'ny ankapobeny ary ny adininy momba ny laisazy.

### Manampy mpanome H5P <!--quire:connecting-an-h5p-provider-->

Tsy mampiditra na mampiasa runtime na sidecar H5P ny Quire (ADR 0019). Raha mampiasa H5P ianao, omeo ny fampidirana H5P fandraisanao manokana na mitondra H5P manokana samy hafa amin'ny Quire. Hiresaka io mpanome io ho fitaovana ivelany LTI 1.3 ary ampio ny votoatry amin'ny fampianarana ho asa fitaovana. Mifandray naoty sy fandrosoan'ny asa/fanintinana amin'ny alàlan'ny LTI Assignment and Grade Services (AGS) ny Quire. Raha manalefa hevitry ny xAPI koa ny mpanome, metrahao izany ho an'ny tahirin'ny hevitry ny xAPI an'i Quire; tsy manalefa hevitry ny xAPI ny fandanimbana naoty/fandrosoana AGS. Mampiseho ho mila fifandraisana fitaovana LTI ny asa H5P ao amin'ny fampidirana Moodle. Miankina amin'ny mpanome ny runtime H5P, fanoratana, tahiry votoaty ary tantaran'ny fanandrasany.

Hanana H5P manokana ao amin'io mpandray anjara io, metrahana `QUIRE_H5P_IMAGE` amin'ny sary any ary apetraho ny profile `h5p`. Asehon'i Compose azy ao amin'ny `QUIRE_H5P_PORT` (8090) ary mitahiry ny daty ao amin'ny volume `h5p-data`; ny sary, ary ny adiny momba azy, dia anao.

## Filàlana <!--quire:settings-->

Mamaky ny `docker/.env` isaky ny rindrina. Ny modely, `docker/.env.example`, dia mizara ny filàlana tsirairay amin'ny fototry. Ny vondrona:

### Adiresy <!--quire:addresses-->

| Filàlana | Hevitra |
| --- | --- |
| `QUIRE_APP_ORIGIN` | Ny adiresy mamorona an'ny LMS, toy ny `https://learn.example.com` |
| `QUIRE_CONTENT_ORIGIN` | Ny loharanon'ny votoaty, mpandray anjara hafa |
| `QUIRE_PLATFORM_DOMAINS` | Anaran-tsehatra misy ny organisasy, misaraka amin'ny virgula |
| `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` | `compose` eto. Jereo ny torolalana hafa ho an'ny `vercel` sy `cloudflare` |
| `QUIRE_TRUSTED_PROXY_CIDRS` | Proxy izay sambain'ny `X-Forwarded-For` azy |

### Teny miafina <!--quire:secrets-->

| Filàlana | Hevitra |
| --- | --- |
| `QUIRE_SECRET_KEY` | Manamarina session sy token. 64 litera hexa |
| `QUIRE_MASTER_KEY` | Manapaka mombamomba alefa toy ny teny miafina SSO sy webhook. 32 octet, base64. Mila sanda mitovy ny sehatra ve-dalana sy ny mpandray asa. Fanavaozana: [key-rotation.md](/mg/ops/key-rotation/) |
| `QUIRE_MASTER_KEY_VERSION` | Ny etiketan'ny version an'ny kiteny lehibe, `v1` raha tsy nosetina. Ampio azy rehefa manavao |
| `QUIRE_MASTER_KEY_RETIRED` | Ny kiteny lehibe taloha mbola ilaina hamakiana ny nataony, toy ny `v1=<base64>`. Esory aorian'ny fanavaozana vita tsy misy tsy voavaha |
| `QUIRE_COLLAB_SIGNING_KEY` | Zarain'ny web sy collab hanamarinana token fanoratana |
| `QUIRE_BACKUP_SIGNING_KEY` | Manamarina backup fampianarana (azo safidina) |

Tazomina kalitao `QUIRE_MASTER_KEY` amin'ny toerana tsy eo amin'io mpandray anjara io. Tsy afaka manala ny mombamomba alefa misy azy ny data-by mamerina aminy.

### Data-by <!--quire:database-->

| Filàlana | Hevitra |
| --- | --- |
| `POSTGRES_PASSWORD` | Ny superuser, ampiasain'ny container sy ny backup |
| `QUIRE_DB_APP_PASSWORD`, `QUIRE_DB_MIGRATOR_PASSWORD`, `QUIRE_DB_REPORT_PASSWORD`, `QUIRE_DB_AUDIT_PASSWORD` | Tenimialàn'ny andraikitra, nosetina amin'ny fiaingana voalohany |
| `DATABASE_URL` | Ny andraikin'ny fampiharana. Mampifandray ny fiarovana isakin-tseza ny fanontaniana rehetra ataony |
| `DATABASE_MIGRATOR_URL`, `QUIRE_MIGRATION_URL` | Ny andraikin'ny mpanova, ho an'ny `migrate` sy `init` |
| `QUIRE_SUPERUSER_URL` | Ampiasaina amin'ny fandraisana voalohany ihany |
| `QUIRE_REPORT_DATABASE_URL` | Ny andraikin'ny tatitra tsy miankina, ho an'ny tatitra sy ny mpamorona tatitra |
| `QUIRE_AUDIT_DATABASE_URL` | Ny andraikin'ny fitsarana, ho an'ny konsolin'ny fitsarana sy ny foanana SIEO |
| `QUIRE_DATABASE_ID` | UUID iray, voafaritra mandritra ny fiainan'ny fampidirana |

Ampiasaina ny tenimialàn'ny andraikitra amin'ny fotoana voamoronana ny volume data ihany. Hanova azy avy eo, ampiasao `ALTER ROLE` avy eo manavao ny URL mifanaraka.

Ampiasaina ny `QUIRE_REPORT_DATABASE_URL` ho an'ny data-by ara-batana nosetina amin'ny `DATABASE_URL`. Ho an'ny data-by ara-batana voasoratra hafa, metrahana ny fifanarahan'ny `quire_report` manokany ao amin'ny tontolo web sy worker, avy eo soraty ny anaran'ny teny tontolo ao amin'ny seza **Reporting environment variable** amin'ny endrika `env:NAME`. Tokony mitondra amin'ny data-by mitovy amin'ny fifanarany fifandraisana ny famaritana, amin'ny toerana azo atao ny replica-ny mamaky. Manaraka ny mpanjifa mankany amin'ny fifanarahan'ny tatitra an'ny data-by manokany ny sehatra tatitra rehetra: ny mpamorona tatitra sy ny tatitra voatahiry, ny fandefasana mirakina, ny foanana tatitra, ny statistika, lakon'ny fitsarana, ny loharanon'ny fitsarana REST ary ny fitadiavan'ny mpanampy. Tsy mampiasa URL tatritry ny data-by hafa na iray aminy mihitsy. Raha tsy misy fifanarahan'ny tatitra ny data-by, dia ao amin'ny fifanarahan'ny fampiharana manokany ny data-by no miasa ny tatitra mahazatra, fa ny statistika sy ny famakarana fitsarana rehetra dia acomina sy milaza izany, satria tsy afaka mamaky ny rindrin'ny fitsarana ny andraikin'ny fampiharana.

### Mpitondra <!--quire:drivers-->

| Filàlana | Ity version ity | Fanamarihana |
| --- | --- | --- |
| `QUIRE_STORAGE_DRIVER` | `local` (fototra), `s3` na `azure` | Ny `local` dia mitahiry ny rakitra ao amin'ny volume `files`. Ny `s3` dia mampirakitra AWS S3, R2, fampifandrehana GCS ary tahirin-entana S3 hafa, misy fakana multipart azo atomoyina |
| `QUIRE_REALTIME_DRIVER` | `inprocess` (fototra), `sse`, `centrifugo` na `durable_objects` | Mety ny `inprocess` ho an'ny container ve-dalana iray; ampiasao `centrifugo` na `sse` raha maro |
| `QUIRE_CACHE_DRIVER` | `memory` (fototra), `postgres` na `valkey` | Isaky ny rindrina ny `memory`; ampiasao `valkey` na `postgres` ka mijanona ny fetra fotoana manerana ny container |
| `QUIRE_VIDEO_DRIVER` | `ffmpeg` (fototra) na `progressive_mp4` | Na mpanome fandraisana: Cloudflare Stream, Mux na Bunny, amin'ny kitiny |
| `QUIRE_IMAGE_DRIVER` | `noop` (fototra), `imgproxy` na `cloudflare` | Ny `noop` dia mome ny sary rehetra amin'ny habeny voalohany. Mila ny `imgproxy` ny profile `images` sy ny filàlana ambany; ny `cloudflare` dia ampiasaina Cloudflare Images |
| `QUIRE_MEETING_PROVIDER` | `bbb`, `zoom`, `teams`, `meet`, `jitsi` na `in_process` | Ny fototry ny serivera ho an'ny resaka mivantana. Raha tsy setina, dia milaza ny resaka mivantana fa tsy voametrahana, mandraaka fifandraisana kaonty manokana ny organisasa ao amin'ny Fampifandraisana, Mpanome seza mivantana. Foana manjaka amin'ny sanda io ny kaonty manokan'ny organisasa. Ny filàlana manokan'ny samy mpanome (`BBB_URL` sy `BBB_SECRET`, ny teny tontolo `ZOOM_*`, `TEAMS_*`, `GOOGLE_MEET_*` ary `JITSI_*`) dia ampiasaina ho an'ny mpanome nosoratra eto ihany |
| `QUIRE_MEETING_REGIONS` | Lisit-piry misaraka anarana: `eu`, `uk`, `us` | Ahoana no manao resaka ny mpanome fototry ny serivera. Raha tsy setina, tsy jerena amin'ny organisasa voafehy faritra izy, toy ny taloha. Manambara ny faritriny amin'ny pejy manokany ny kaonty manokan'ny organisasa |

Acomina amin'ny fiaingan'ny sehatra ve-dalana ny sandan'ny mpitondra tsy ahitana ity version ity, misy ny filàlana anarana, fa tsy soloina ho fototra amin'ny fomba tsy hita.

### Sary <!--quire:images-->

Mangataka sary amin'ny habeny efatra voafaritra amin'ny alàlan'ny `/api/files/{id}/image/{size}` ny pejy, izay mijery ny fahafahana mitovy amin'ny rakitra mihitsy ary avy eo mamerina mankany amin'ny serivisy sary. Afaka mangataka `QUIRE_IMAGE_SPECS_PER_HOUR` (2000 amin'ny fototra) fifandraisana sary sy habeny vaovao isaky ny ora ny samy organisasa; tsy ifidana ny habeny efa natao tamin'io ora io. Ampiasao `valkey` na `postgres` ho an'ny `QUIRE_CACHE_DRIVER` raha mihoatra ny container ve-dalana iray ny misy, ka mijanona ny fetra eo aminy.

| Filàlana | Mpitondra | Fanamarihana |
| --- | --- | --- |
| `IMGPROXY_URL` | `imgproxy` | Ny adiresy alefan'ny mpanakafy mankany amin'ny imgproxy, ohatra `https://images.example.org`. Ny profile `images` dia mampiseho azy ao amin'ny `QUIRE_IMAGES_PORT` (8082) |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `imgproxy` | Fehezanteny hexa, ny sanda mitovy ampiasain'ny imgproxy amin'ny fiaingana. Ataovy tsirairay amin'ny `openssl rand -hex 32`. Manamarina ny adiresy sary tsirairay azy ireo ny Quire, ka tsy manao sary tsy nangatan'i Quire ny imgproxy |
| `QUIRE_IMAGE_SOURCE_ORIGIN` | `imgproxy` amin'ny tahirin-rakitra anaty | Ahoana no maka ny sary voalohany ny imgproxy. Metrahana ny Compose `http://web:3000`. Amin'ny tahirin-rakitra `s3` na `azure` dia avy ao amin'ny bucket ny imgproxy ary tsy ampiasaina io |
| `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_IMAGES_TOKEN`, `CLOUDFLARE_IMAGES_ACCOUNT_HASH` | `cloudflare` | Token API misy fahafahana manova Images, ary ny anaran'ny kaonty avy amin'ny Images, Developer resources. Apetraho ny endrika mihintsana ho an'ny kaonty |
| `CLOUDFLARE_IMAGES_SIGNING_KEY` | `cloudflare` | Azo safidina. Raha setina, dia miafina ny sary ary isaky ny adiresy dia marinina ary mety. Raha tsy misy, dia mamorona ny sary amin'ny adiresy avy amin'ny `QUIRE_SECRET_KEY` izay tsy azon'ny olona manohy |

Mitahiry ny sary manokany isaky ny sary voalohany alefany ny Cloudflare Images. Rehefa esorina rakitra, dia manala io sary io aloha ny mpandray asa talohan'ny voalohany.

### Filaharana asa <!--quire:queue-->

Mampiasa pg-boss ao amin'ny data-by Postgres mitovy ny asa anaty, ka tsy misy serivisy filaharan'ny asa hiasa na zavatra hametrahana. Alaina ao anaty ny transaction mitovy amin'ny fanovana nanoratra azy ny asa, ka tsy afaka very iray na handefa iray roa ny fahasimbonana. Ny `QUIRE_QUEUE_DRIVER` dia `pgboss` eto, izay fototry; ny `vercel` sy `cloudflare` dia manova ny fandefasana fanambarana maivana sy webhook ihany mankany amin'ny filaharana manokan'ny serivera, ary misy lazain'ny torolalana Vercel sy Cloudflare ny fombany sy ny fomba fidiran'ny sehatra ve-dalany.

### Mailaka <!--quire:email-->

Metrahana iray amin'ireto:

- `QUIRE_EMAIL_PROVIDER_CONFIG`: JSON misy anaran'ny mpanome HTTP sy ny mombamomba alefa, toy ny `{"provider":"postmark","token":"..."}`. Manohana ny Postmark, Amazon SES, Mailgun, SendGrid ary Resend.
- `QUIRE_SMTP_URL`: `smtp://user:password@host:587`. Io sehatra io ihany; ny sehatra tsy misy serivera dia manakana ny SMTP.

Ny mandefa ny `QUIRE_MAIL_FROM`. Ho fanandramana Quire, apetraho ny profile `devmail`, metrahana `QUIRE_SMTP_URL=smtp://mailpit:1025`, ary vakio ny mailaka ao amin'ny `http://localhost:8025`.

### Serivisy safidy <!--quire:optional-services-->

| Filàlana | Amin'ny profile |
| --- | --- |
| `CLAMAV_URL=tcp://clamav:3310` | `scan` |
| `GOTENBERG_URL=http://gotenberg:3000` | `preview` |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `images` |
| `VALKEY_URL=redis://valkey:6379` | `cache` |
| `QUIRE_OPENSEARCH_URL` na `QUIRE_MEILISEARCH_URL` | Fitadiavana ivelany; fanontaniana feno amin'ny Postery raha tsy izany |
| `QUIRE_BREACH_CHECK_PROVIDER=off`, `QUIRE_BREACH_CHECK_URL` | Fanadihadiana tenimialàna voafadika. Apetraka amin'ny toe-javatra fototra amin'ny `api.pwnedpasswords.com` (fanantarana hash 5 litera ihany no alefa); ny `off` dia manesaka azy, ary ny URL dia mankany amin'ny API range iainao |

### Fahitana <!--quire:observability-->

Ny `OTEL_EXPORTER_OTLP_ENDPOINT` no manambara ny mpangataka alefan'ny rindrina tsirairay ny jerenojery sy ny metrika; amin'ny profile `observability` dia `http://otelcol:4318` izy, ary ny `docker/otel-collector.yaml` no toerana hanampianao ny exporter ho an'ny backend-ao. Raha setina, dia mamoaka span amin'ny alàlan'ny OTLP/HTTP (fangatahana ve-dalana, transaction data-by mpanjifa, asan'ny mpandray asa sy antso mitohy) ny sehatra ve-dalana, mpandray asa, mpandrinjaka, votoaty sy collab, ary metrika mankany amin'ny toerana mitovy isaky ny minitra (`OTEL_METRICS_EXPORTER=none` no manesaka azy). Ny `OTEL_TRACES_SAMPLER_ARG` no metrahana ny fifandanjalan'ny jerenojery. Alefa amin'ny std output amin'ny `LOG_LEVEL` ny log, ary manodidina azy ireo ny Compose. Tsy mitondra data manokana mihitsy ny jerenojery.

### Fitohanan'ny zava-mitranga ara-paritra (fijanonan'ny data ao amin'ny UE) <!--quire:regional-egress-eu-data-residency-->

Milaza fa mampiasa organisasa Eoropeana ny stack ny `QUIRE_REGION=eu`. Avy eo mifehy ny fangatahana mitohy rehetra ataon'ny organisasa voafaritra ao amin'ny UE ny mpandray asa ho an'ny lisit-pomena (21-compliance.md singa 8.1). Ny lisit-pomena dia ny mpandray anjara ambaran'ny serivisy voafaritra ho an'ny faritra (ny adiresin'ny tahirina, ny mpanome mailaka, mpanome video fandraisana, ny toerana tahirin'ny organizasa manokana, ny mpanome AI sy ny kaontin'ny mailaka), ny mpandray anjaran'ny serivisy rehetra misy fahalemena miasa, ary ny mpandray anjara lisainao ao amin'ny `QUIRE_EGRESS_ALLOW_HOSTS`. Acomina alohan'ny fandefasana ny fangatahana mankany amin'ny mpandray anjara mamorona hafa, soratina ao amin'ny rindrin'ny fitsarana an'ny organisasa amin'ny endrika `privacy/egress_refused`, ary aseho ao amin'ny Fampifanarahana, Fijanonan'ny data.

| Filàlana | Sanda | Vokany |
| --- | --- | --- |
| `QUIRE_EGRESS_ALLOW_HOSTS` | Lisit-piry misaraka anarana mpandray anjara, na `*.example.org` ho an'ny subdomain rehetra | Mpandray anjara fanampiny afakan'ny organisasa Eoropeana. Ao amintsika ny endpoint webhook, xAPI sy SIEM, feed blogy ary mpandray anjaran'ny Amazon SES, satria safidin'ny organisasa manokany izy ireo ary tsy misy serivisy mambara azy. Ny loopback, adiresy tsy mamorona ary anarana misy andininy iray toy ny `web` na `clamav` dia ny paikadianao manokana ary tsy jerena mihitsy |

Tsy voafehy amin'ny lisit-pirin'ny mpandray anjara ny organisasa Amerikanina sy Britanika; mitazona ny fanekena faritra ny serivisy izy ireo. Metrahana ny lisitra ao amin'ny mpandray asa; ny pejy mpikarakara dia mamaky azy ao amin'ny sehatra ve-dalana hamakian'ny lisit-pomena, ka apetrao ao amin'ny `docker/.env`, izay ampiasain'ny serivisy rehetra.

Manome fahadisoana mazava sy singam-panitsarana ny fanekena ao amin'ny fampiharana, ary tsy io no fanapatoana: afaka diso ny kaody. Ny paikady no fanapatoana. Tsy manatanteraka azy ho anao ny Compose. Ho an'ny stack paritra, apetrao ny serivisy `worker` sy `web` eo amin'ny paikady `internal: true` izay lalana ivelany irery dia proxy fitohana (ohatra container Squid na tinyproxy) mahafeta ny mpandray anjara mitovy amin'ny `QUIRE_EGRESS_ALLOW_HOSTS` miaraka amin'ny mpandray anjaran'ny serivisy voafaritranao, ary metrahana `HTTPS_PROXY` ho an'ireo serivisy ireo. Mizara ny mpandray anjara marina afakan'ny fampiharana ny pejy fijanonana, ka azo ampitahaina ny lisitra roa.

## Fahasalaman'ny rindrina <!--quire:health-->

| Endpoint | Hevitra |
| --- | --- |
| `/healthz` | Fahombiazana: mamarina ny rindrina. Ampiasain'ny fanekena fahasalaman'ny Compose izany |
| `/readyz` | Fahazotoana: azo idirana ny iainana, ary napetraka na tsy ny serivisy safidy tsirairay. Orientaho eto ny mpizarazaraonao |

Mampiseho ny fahasalaman'ny serivisy tsirairay ny `docker compose -f docker/compose.yaml ps`.

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

Ao anatin'ny stack fototra ny serivisy `proxy` (Caddy, Apache-2.0, `docker/caddy/Caddyfile`). Mamaly ao amin'ny 80 sy 443 ary mitondra:

| Anaran-tsehatra na laza | Mankany |
| --- | --- |
| `QUIRE_PROXY_CONTENT_HOST` | `content` |
| `QUIRE_PROXY_APP_HOST`, subdomain mpanjifa rehetra sy anarana manokana | `web` |
| `/_collab/` eo amin'ireo mpandray anjara ireo | `collab` (websocket, `QUIRE_COLLAB_URL`) |
| `/_realtime/connection/` eo amin'ireo mpandray anjara ireo | ny websocket client an'ny `centrifugo`; tsy mampiseho mihitsy ny API seriveriny |
| `/_images/` eo amin'ireo mpandray anjara ireo | `imgproxy`, amin'ny profile `images` (`IMGPROXY_URL`) |

Mamorona avy amin'ny loharano roa ny `init-env.sh` ny `QUIRE_PROXY_APP_HOST`, `QUIRE_PROXY_CONTENT_HOST`, `QUIRE_PROXY_HTTPS_PORT`, `QUIRE_COLLAB_URL` ary `IMGPROXY_URL`, ka tsy afaka manangana izy ireo. Ovao avy amin'ny tanana ireo raha manova loharano ianao.

Araka ny `QUIRE_PROXY_TLS` ny fanamarinana:

- `internal` (ny fototra): ny mpandray anjaran'ny fanamarinana manokan'i Caddy, ho an'ny `localhost`, `*.localhost` ary `lvh.me`. Manankatoavana ny fototry azy indray, avy eo miezaka:

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

  Ampio ny `quire-local-ca.crt` ao amin'ny trano fidirana safidy na mpanakafy. Ampiasao ny `curl` amin'ny `--cacert`.
- Adiresy mailaka: fanamarinana ACME ho azy (Let's Encrypt, avy eo ZeroSSL) ho an'ny anarana marina. Tokony mitondra eto ny DNS ho an'ny loharano roa sy ny mpandray anjara mpanjifa rehetra, ary tokony azo idirana avy any ivelany ny 80 sy 443.

Ambaraina amin'ny fangatahana ny mpandray anjara mpanjifa, amin'ny fijerena voalohany, ary raha manamarina ny web fa an'ny fampidirana io anarana io (`/tls-allowed`, angatahin'ny amin'ny paikady Compose). Tsy mila fanamarinana wildcard na plugin mpanome DNS, ary tsy afaka mangataka fanamarinana ny olona tsy fantatra mampifantoha anarana mankany amin'ny mpandray anjara. Misy ao amin'ny volume `caddy-data` ny fanamarinana sy ny mpandray anjarana anaty; backup azy miaraka amin'ny hafa raha mampiasa `internal` ianao.

Manao tsotra ny `X-Forwarded-For` avy amin'ny proxy ihany ny web: misy adiresy voafaritra (`QUIRE_PROXY_ADDRESS`, ny fototra `172.29.64.10`) ao amin'ny subnet voafaritra (`QUIRE_COMPOSE_SUBNET`), ary ny `QUIRE_TRUSTED_PROXY_CIDRS` no manambara io adiresy io. Raha mifandray amin'ny paikady an'ny mpandray anjara ny subnet, ovao roa ary alefa `docker compose down` alohan'ny `up`.

## Ao aorian'ny proxy inverseinao manokana <!--quire:behind-your-own-reverse-proxy-->

Hanambara mpizarazara na proxy efa miasa, avelao ho ivelany ny `proxy` (`docker compose up -d --scale proxy=0`) ary marinao ny TLS alohan'ny `web` (8080), `content` (8081), `collab` (1234, websocket) ary `centrifugo` (8000, websocket). Metrahana ny adiresy mamorona ao amin'ny `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN` ary `QUIRE_COLLAB_URL` (`wss://`), ary ny faritan'ny adiresin'ny proxy-ao ao amin'ny `QUIRE_TRUSTED_PROXY_CIDRS`.

## Fikarohana olana <!--quire:troubleshooting-->

- Mivoaka ny `init` amin'ny "QUIRE_DATABASE_ID is not a UUID": metrahao amin'ny `uuidgen`.
- Manomboka indray ny `web` amin'ny "did not start on compose": mizara ny log ny filàlana tsirairay tsy afaka nofan-kevitra ary ny tokony hampiasina amin'ny an'izany.
- Tsy manao na inona na inona ny fanovana tenimialàna amin'ny `.env` aorian'ny fiaingana voalohany: indray ihany no asan'ny scriptin'ny fiaingana. Ampiasao `ALTER ROLE`.
- Diso fandinihana ny fakana rehefa setina ny `CLAMAV_URL`: ny fanakafana famantarana ny ClamAV amin'ny fiaingana voalohany, izay manao minitra vitsy.

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