---
title: "Stàlaich Quire le Docker Compose"
description: "Stàlaich Quire air an structar agad fhèin le Docker Compose."
image: "https://docs.quirelms.com/og.png"
---

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

# Stàlaich Quire le Docker Compose

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

'S e seo am bathar slàn air aon aoigh: an LMS, obair a' chùl-raoin, seirbheisean fìor-ùine is deasachaidh cho-obrachail, agus gach seirbheis roghainneil a tha air cùl pròifil. Tha an dealbhadh ann an earrann 2 de `docs/architecture/23-ops.md`.

Targaidean eile: chan eil [Vercel](/gd/ops/vercel/) agus [Cloudflare Workers](/gd/ops/cloudflare/) a’ ruith ach an t-sreath-lìn. Tha ùrachaidhean ann an [upgrade.md](/gd/ops/upgrade/), agus cùl-taicean is an deuchainn ath-nuadhachaidh ann an [backup-restore.md](/gd/ops/backup-restore/).

## Na tha a dhìth ort <!--quire:what-you-need-->

- Docker Engine 27 no nas ùire leis a’ phlugan Compose 2.30 no nas ùire.
- 4 coirean CPU agus 8 GB de chuimhne airson a’ chàirn bhunaiteach; 8 coirean agus 16 GB le `--profile full` (tha mu 1.5 GB de shoidhnichean aig ClamAV leis fhèin).
- Ainm DNS airson an t-sreath-lìn agus dàrna tè airson susbaint neo-earbsach. Feumaidh iad a bhith nan diofar aoighean: ruithidh pasganan SCORM agus HTML a chaidh a luchdadh suas air tùs an t-susbaint gus nach urrainn dhaibh briosgaidean an LMS a leughadh.
- Airson deuchainn ionadail, tha `lvh.me` agus `*.localhost` a’ fuasgladh gu 127.0.0.1, mar a tha `docker/.env.example` a’ cleachdadh. Tha seirbheis `proxy` a’ chàirn a’ frithealadh an dà chuid thairis air https le ùghdarras teisteanais ionadail, agus mar sin cha tèid dad eile a stàladh (faic “TLS”).
- Feumaidh puirt 80 agus 443 a bhith saor air an aoigh (`QUIRE_PROXY_HTTP_PORT` agus `QUIRE_PROXY_HTTPS_PORT` gan gluasad).

## A’ chiad ruith <!--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
```

Sgrìobhaidh `docker/scripts/init-env.sh` `docker/.env` bho `docker/.env.example`, leis gach dìomhaireachd air a gineadh (faclan-faire stòr-dàta, iuchraichean-soidhnidh is maighstir, paidhir iuchrach cur-air-bhog an t-susbaint), agus an iuchair-soidhnidh puing-sgrùdaidh aig `docker/secrets/audit-signing-key.pem`, a chuireas Compose suas dhan luchd-obrach mar dhìomhaireachd. Chan fheum e ach `sh`, `awk` agus `openssl`, agus diùltas e `docker/.env` a tha ann mar-thà a sgrìobhadh thairis air. Dèan lethbhreac dhen dà fhaidhle far an aoigh: às aonais `QUIRE_MASTER_KEY` chan urrainn do stòr-dàta ath-nuadhaichte na teisteanasan stòraichte aige a dhì-chrioptachadh. Gus am faidhle a lìonadh le làimh, ruith `cp docker/.env.example docker/.env`; tha am faidhle ag innse mar a ghineas tu gach dìomhaireachd.

Feumaidh an dà thùs a bhith `https`: diùltas seirbheis an t-susbaint http lom ann an riochdachadh, agus chan fhaod an aon àrainn chlàraichte a bhith aca. Bidh seirbheis `proxy` a’ crìochnachadh TLS airson an dà chuid (faic “TLS”); diùltas `init-env.sh` tùs `http://`.

Tòisichidh an càrn ann an òrdugh suidhichte, agus feithidh gach ceum gus am bi am fear roimhe deiseil:

1. Bidh `postgres` fallain. Aig a’ chiad tòiseachadh a-riamh suidhichidh an sgriobt tòiseachaidh aige (`docker/postgres/init/90-passwords.sh`) faclan-faire nan ceithir dreuchdan.
2. Cuiridh `migrate` gach imrich an sàs agus tòisichidh e ciudha nan obraichean ann an stòr-dàta smachd agus anns gach stòr-dàta neach-gabhail sònraichte, nì e cinnteach gu bheil iad uile ag aontachadh agus an uair sin sguiridh e (docs/ops/upgrade.md).
   Ruithidh imrichean aig gach tòiseachadh agus tha iad idempotent, agus mar sin ’s e ìomhaigh ùr agus ath-thòiseachadh a th’ ann an ùrachadh.
3. Clàraidh `init` (`apps/web/src/first-run.ts`) stòr-dàta na h-aplacaid fo `QUIRE_DATABASE_ID` agus, ma tha `QUIRE_SETUP_ADMIN_EMAIL` suidhichte, cruthaichidh e a’ chiad bhuidheann agus an rianaire aice. Clò-bhualar seòladh clàraidh a-steach agus facal-faire gineadh aon turas ann an `docker compose logs init`.
4. Tòisichidh `web`, `content`, `worker`, `scheduler`, `collab` agus `centrifugo`.
5. Tòisichidh `proxy` nuair a bhios `web` agus `content` fallain.

Fosgail `https://demo.` agus an uair sin àrainn na h-aplacaid agad (tha an log `init` a’ clò-bhualadh dearbh sheòladh a’ chlàraidh a-steach) agus clàraich a-steach. Air stàladh ionadail, earb ris an ùghdarras teisteanais aig an neach-ionaid an toiseach (faic “TLS”). Atharraich am facal-faire gineadh aig `/account/security`.

Diùltas pròiseas a thòisicheas gun dìomhaireachd riatanach tòiseachadh agus ainmichidh e an roghainn a tha a dhìth san log aige. Cha tòisich dad le rèiteachadh leth-choileanta.

## Seirbheisean is pròifilean <!--quire:services-and-profiles-->

| Seirbheis | Pròifil | Na nì i |
| --- | --- | --- |
| postgres | an-còmhnaidh | An stòr-dàta (PostgreSQL 18 le pgvector, air a thogail bho `docker/postgres.Dockerfile`), le WAL air a thasgadh on chiad tòiseachadh |
| migrate, init | an-còmhnaidh | Aon turas: imrichean, agus an uair sin a’ chiad ruith |
| web | an-còmhnaidh | An LMS, air `QUIRE_HTTP_PORT` (8080) |
| content | an-còmhnaidh | Tùs airson susbaint neo-earbsach, air `QUIRE_CONTENT_PORT` (8081) |
| worker | an-còmhnaidh | Obraichean cùl-raoin: post-d, aithisgean, giullachd fhaidhlichean agus webhooks |
| scheduler | an-còmhnaidh | Obraichean ath-chuairteach: clàraichidh e na 64 clàran-ama rè-ruith agus bheir e iad don neach-obrach; aon cheannard aig àm |
| collab | an-còmhnaidh | WebSocket deasachaidh cho-obrachail, air `QUIRE_COLLAB_HTTP_PORT` (1234) |
| centrifugo | an-còmhnaidh | Craoladh fìor-ùine, air `QUIRE_REALTIME_PORT` (8000) |
| proxy | an-còmhnaidh | Caddy, an doras TLS aghaidh air puirt 80 agus 443 (faic “TLS”) |
| valkey | `cache` | Tasgadan agus crìochan reata |
| clamav | `scan` | Sganadh luchdachadh suas airson bathar-bog droch-rùnach |
| gotenberg | `preview` | Ro-sheallaidhean Office gu PDF agus toirt theisteanasan gu buil |
| imgproxy | `images` | Ìomhaighean ath-mheudachadh is tionndaidh |
| transcoder | `video` | Ìomhaigh neach-obrach le ffmpeg fon chead LGPL a-mhàin, airson dreachan bhidio |
| seaweedfs | `storage` | Stòradh nithean co-chòrdail ri S3 air an aoigh seo |
| otelcol | `observability` | Neach-cruinneachaidh OpenTelemetry |
| mailpit | `devmail` | Glacaidh e gach post-d a-mach airson Quire fheuchainn |
| backup | `backup` | Cùl-taic bunasach aon-turais; faic backup-restore.md |
| backup-scheduler, backup-offsite | `backup` | Cùl-taic bunasach gach `QUIRE_BACKUP_INTERVAL_HOURS`, lethbhreacan crioptaichte far an aoigh agus deuchainn dearbhaidh gach seachdain |
| h5p | `h5p` | Ìomhaigh inneil H5P LTI 1.3 a bheir thu seachad ann an `QUIRE_H5P_IMAGE`, air `QUIRE_H5P_PORT` (8090); faic “A’ ceangal solaraiche H5P” |

Tòisichidh `--profile full` gach seirbheis roghainneil ach `backup` agus `h5p`. Tòisich fear le `docker compose -f docker/compose.yaml --profile scan up -d`. Obraichidh Quire às aonais seirbheis roghainneil agus innsidh e dè tha a dhìth: mura h-eil sganair ann, thèid luchdachadh suas a stòradh gun sganair agus thèid innse dhan rianaire; às aonais Gotenberg, faodar faidhlichean a luchdadh a-nuas seach an ro-shealladh; às aonais transcoder, cluichidh bhidio mar am faidhle tùsail.

Tha gach ìomhaigh treas-phàrtaidh agus na dleastanasan ceadachais aice air an liostadh ann an `docker/third-party-containers.yaml`.

### A’ ceangal solaraiche H5P <!--quire:connecting-an-h5p-provider-->

Chan eil Quire a’ fighe a-steach no a’ cur inneal-ruith no sidecar H5P air falbh (ADR 0019). Ma chleachdas tu H5P, faigh fo-sgrìobhadh aoigheachd agad fhèin no obraich eisimpleir H5P fèin-aoigheachd air leth bho Quire. Clàraich an solaraiche mar inneal LTI 1.3 taobh a-muigh agus cuir an t-susbaint aige ri cùrsaichean mar ghnìomhan inneil. Bidh Quire ag iomlaid ìrean agus adhartas gnìomh/rangachaidh tro LTI Assignment and Grade Services (AGS). Ma chuireas an solaraiche aithrisean xAPI cuideachd, rèitich sin air leth airson stòr aithrisean xAPI Quire; cha chuir iomlaid ìre/adhartais AGS aithrisean xAPI. Tha ion-phortaidhean Moodle ag aithris gu bheil ceangal inneil LTI a dhìth air gnìomhan H5P. Bidh an solaraiche fhathast an urra ris an inneal-ruith H5P, sgrìobhadh, banca susbaint agus eachdraidh oidhirpean aige fhèin.

Gus eisimpleir fèin-aoigheachd agad fhèin a ruith air an aoigh seo, suidhich `QUIRE_H5P_IMAGE` dhan ìomhaigh aige agus tòisich pròifil `h5p`. Foillsichidh Compose e air `QUIRE_H5P_PORT` (8090) agus cumaidh e dàta san leabhar `h5p-data`; ’s ann leat fhèin a tha an ìomhaigh agus na dleastanasan a thig na cois.

## Roghainnean <!--quire:settings-->

Leughaidh gach pròiseas `docker/.env`. Tha an teamplaid `docker/.env.example` a’ liostadh gach roghainn agus a luach bunaiteach. Seo na buidhnean:

### Seòlaidhean <!--quire:addresses-->

| Roghainn | Brìgh |
| --- | --- |
| `QUIRE_APP_ORIGIN` | Seòladh poblach an LMS, mar `https://learn.example.com` |
| `QUIRE_CONTENT_ORIGIN` | Tùs an t-susbaint, air aoigh eile |
| `QUIRE_PLATFORM_DOMAINS` | Àrainnean nam buidhnean, air an sgaradh le cromagan |
| `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` an seo. Faic na stiùiridhean eile airson `vercel` agus `cloudflare` |
| `QUIRE_TRUSTED_PROXY_CIDRS` | Luchd-ionaid a thathar a’ creidsinn an `X-Forwarded-For` aca |

### Dìomhaireachdan <!--quire:secrets-->

| Roghainn | Brìgh |
| --- | --- |
| `QUIRE_SECRET_KEY` | Soidhnichidh e seiseanan is tòcanan. 64 caractar hex |
| `QUIRE_MASTER_KEY` | Paisgidh e teisteanasan stòraichte, mar dìomhaireachdan SSO is webhook. 32 baidht, base64. Feumaidh an aon luach a bhith aig an t-sreath-lìn agus an neach-obrach. Cuairteachadh: [key-rotation.md](/gd/ops/key-rotation/) |
| `QUIRE_MASTER_KEY_VERSION` | Leubail tionndaidh na h-iuchrach-mhaighstir, `v1` mura h-eil e suidhichte. Meudaich e nuair a chuairticheas tu |
| `QUIRE_MASTER_KEY_RETIRED` | Iuchraichean maighstir nas sine a tha fhathast a dhìth airson na sheulaich iad a leughadh, mar `v1=<base64>`. Thoir air falbh iad nuair a thig cuairteachadh gu crìch gun luach gun fhuasgladh |
| `QUIRE_COLLAB_SIGNING_KEY` | Co-roinnte eadar web agus collab gus tòcanan deasachaidh a shoidhneadh |
| `QUIRE_BACKUP_SIGNING_KEY` | Soidhnichidh e cùl-taicean chùrsaichean (roghainneil) |

Cùm lethbhreac de `QUIRE_MASTER_KEY` ann an àite eile seach an aoigh seo. Chan urrainn do stòr-dàta ath-nuadhaichte às aonais a theisteanasan a dhì-chrioptachadh.

### Stòr-dàta <!--quire:database-->

| Roghainn | Brìgh |
| --- | --- |
| `POSTGRES_PASSWORD` | An t-àrd-chleachdaiche, air a chleachdadh leis a’ shoitheach agus cùl-taicean |
| `QUIRE_DB_APP_PASSWORD`, `QUIRE_DB_MIGRATOR_PASSWORD`, `QUIRE_DB_REPORT_PASSWORD`, `QUIRE_DB_AUDIT_PASSWORD` | Faclan-faire dreuchd, suidhichte aig a’ chiad tòiseachadh |
| `DATABASE_URL` | Dreuchd na h-aplacaid. Tha tèarainteachd ìre-shreathan a’ buntainn ri gach iarrtas a nì i |
| `DATABASE_MIGRATOR_URL`, `QUIRE_MIGRATION_URL` | Dreuchd imrich, airson `migrate` agus `init` |
| `QUIRE_SUPERUSER_URL` | Air a chleachdadh aig a’ chiad ruith a-mhàin |
| `QUIRE_REPORT_DATABASE_URL` | Dreuchd aithisgean le leughadh a-mhàin, airson aithisgean is an togadair aithisgean |
| `QUIRE_AUDIT_DATABASE_URL` | Dreuchd sgrùdaidh, airson consol sgrùdaidh agus às-phortadh SIEM |
| `QUIRE_DATABASE_ID` | UUID sam bith, suidhichte fad beatha an stàlaidh |

Cha chuirear faclan-faire dreuchd an sàs ach nuair a chruthaichear leabhar an stòr-dàta an toiseach. Gus fear atharrachadh nas anmoiche, cleachd `ALTER ROLE` agus ùraich an URL fhreagarrach an uair sin.

Thèid `QUIRE_REPORT_DATABASE_URL` a chleachdadh airson an stòr-dàta fiosaigeach a tha `DATABASE_URL` a’ rèiteachadh. Airson stòr-dàta fiosaigeach clàraichte sam bith eile, suidhich an URL ceangail `quire_report` aige fhèin ann an àrainneachdan web agus worker, agus cuir ainm a’ chaochladair ann an raon **Caochladair àrainneachd aithisgean** an stòr-dàta sin mar `env:NAME`. Feumaidh an t-iomradh sealltainn dhan aon stòr-dàta ri ceangal na h-aplacaid aige, mas fheàrr ri mac-samhail le leughadh a-mhàin. Leanaidh gach uachdar aithisgean an neach-gabhail gu ceangal aithisgean an stòr-dàta aige fhèin: togadair aithisgean agus aithisgean sàbhailte, lìbhrigeadh clàraichte, às-phortadh aithisgean, anailiseachd, log sgrùdaidh, goireasan sgrùdaidh REST agus lorg sgrùdaidh an neach-cuideachaidh. Cha toir gin dhiubh iasad uair sam bith de URL aithisgean stòr-dàta eile. Mura h-eil ceangal aithisgean aig stòr-dàta, ruithidh aithisgean àbhaisteach air a cheangal aplacaid fhèin; thèid anailiseachd agus gach leughadh sgrùdaidh a dhiùltadh leis an adhbhar, oir chan urrainn do dhreuchd na h-aplacaid sreath an sgrùdaidh a leughadh.

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

| Roghainn | Luachan san tionndadh seo | Notaichean |
| --- | --- | --- |
| `QUIRE_STORAGE_DRIVER` | `local` (bunaiteach), `s3` no `azure` | Cumaidh `local` faidhlichean anns an leabhar `files`. Tha `s3` a’ còmhdach AWS S3, R2, eadar-obrachadh GCS agus stòran eile a tha co-chòrdail ri S3, le luchdachadh suas ioma-phàirt a ghabhas ath-thòiseachadh |
| `QUIRE_REALTIME_DRIVER` | `inprocess` (bunaiteach), `sse`, `centrifugo` no `durable_objects` | Tha `inprocess` freagarrach airson aon soitheach-lìn; cleachd `centrifugo` no `sse` ma tha grunnan ann |
| `QUIRE_CACHE_DRIVER` | `memory` (bunaiteach), `postgres` no `valkey` | Tha `memory` gach pròiseas fa leth; cleachd `valkey` no `postgres` gus am bi crìochan reata a’ buntainn thar shoithichean |
| `QUIRE_VIDEO_DRIVER` | `ffmpeg` (bunaiteach) no `progressive_mp4` | No solaraiche aoigheachd: Cloudflare Stream, Mux no Bunny, leis na h-iuchraichean aca |
| `QUIRE_IMAGE_DRIVER` | `noop` (bunaiteach), `imgproxy` no `cloudflare` | Bidh `noop` a’ frithealadh gach ìomhaigh aig meud tùsail. Feumaidh `imgproxy` pròifil `images` agus na roghainnean gu h-ìosal; cleachdaidh `cloudflare` Cloudflare Images |
| `QUIRE_MEETING_PROVIDER` | `bbb`, `zoom`, `teams`, `meet`, `jitsi` no `in_process` | Solaraiche bunaiteach an àrd-ùrlair airson seiseanan beò. Mura h-eil e suidhichte, innsidh seiseanan beò nach eil iad rèitichte gus an ceangail buidheann cunntas fhèin fo Amalachadh, Solaraiche seiseanan beò. Bidh cunntas buidhne fhèin an-còmhnaidh nas làidire na an luach seo. Chan eil roghainnean solaraiche fa leth (`BBB_URL` agus `BBB_SECRET`, na caochladairean `ZOOM_*`, `TEAMS_*`, `GOOGLE_MEET_*` agus `JITSI_*`) air an leughadh ach airson an t-solaraiche a tha ainmichte an seo |
| `QUIRE_MEETING_REGIONS` | Liosta `eu`, `uk`, `us` le cromagan | Far a bheil solaraiche bunaiteach an àrd-ùrlair a’ pròiseasadh choinneamhan. Mura h-eil i suidhichte, cha tèid a coimeas ri buidheann a tha ceangailte ri roinn, mar roimhe. Cuiridh cunntas buidhne fhèin na roinnean aige air an duilleag aige |

Thèid luach draibhear nach eil san tionndadh seo a dhiùltadh nuair a thòisicheas an t-sreath-lìn, leis an roghainn air ainmeachadh, seach a chur na àite gu sàmhach leis a’ bhun-roghainn.

### Ìomhaighean <!--quire:images-->

Iarraidh duilleagan ìomhaighean aig ceithir meudan suidhichte tro `/api/files/{id}/image/{size}`; nì seo sgrùdadh air an aon chothrom ris an fhaidhle fhèin agus an uair sin ath-sheòlaidh e dhan t-seirbheis ìomhaighean. Faodaidh gach buidheann `QUIRE_IMAGE_SPECS_PER_HOUR` (2000 mar bhun-roghainn) paidhrichean ùra de dh’ìomhaigh is meud iarraidh gach uair; chan eil meudan a chaidh a dhèanamh mar-thà san uair sin a’ cunntadh. Cleachd `valkey` no `postgres` airson `QUIRE_CACHE_DRIVER` ma tha barrachd air aon soitheach-lìn ann gus am bi a’ chrìoch coitcheann eatorra.

| Roghainn | Draibhear | Notaichean |
| --- | --- | --- |
| `IMGPROXY_URL` | `imgproxy` | Seòladh a ruigeas brabhsairean imgproxy air, mar `https://images.example.org`. Foillsichidh pròifil `images` e air `QUIRE_IMAGES_PORT` (8082) |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `imgproxy` | Sreangan hex, na h-aon luachan leis an tòisichear imgproxy. Gineadh gach tè le `openssl rand -hex 32`. Soidhnichidh Quire gach seòladh ìomhaigh leotha, agus mar sin cha toir imgproxy ìomhaigh gu buil mura h-iarr Quire sin |
| `QUIRE_IMAGE_SOURCE_ORIGIN` | `imgproxy` le stòradh ionadail | Càit an fhaigh imgproxy na tùsail. Suidhichidh Compose `http://web:3000`. Le stòradh `s3` no `azure` gheibh imgproxy bhon bhucaid iad agus cha tèid seo a chleachdadh |
| `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_IMAGES_TOKEN`, `CLOUDFLARE_IMAGES_ACCOUNT_HASH` | `cloudflare` | Tòcan API le cead deasachaidh Images agus hash cunntais bho Images, Developer resources. Cuir tionndaidhean sùbailte air dhan chunntas |
| `CLOUDFLARE_IMAGES_SIGNING_KEY` | `cloudflare` | Roghainneil. Nuair a tha e suidhichte, tha ìomhaighean prìobhaideach agus tha gach seòladh soidhnichte is a’ tighinn gu crìch. Às aonais, tha ìomhaighean poblach aig seòlaidhean a thig à `QUIRE_SECRET_KEY` nach urrainn do dhuine tomhas |

Cumaidh Cloudflare Images a lethbhreac fhèin de gach ìomhaigh thùsail a bhios e a’ frithealadh. Nuair a sguabar faidhle às, sguabaidh an neach-obrach às an lethbhreac sin ron tùsail.

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

Cleachdaidh obraichean cùl-raoin pg-boss san aon stòr-dàta Postgres, agus mar sin chan eil seirbheis ciudha ri ruith no rèiteachadh. Thèid obraichean a chur sa chiudha anns an aon ghnothach ris an atharrachadh a dh’adhbhraich iad, agus mar sin chan urrainn do thubaist fear a chall no a chur dà thuras. Is e `QUIRE_QUEUE_DRIVER` `pgboss` an seo, a luach bunaiteach; gluaisidh `vercel` agus `cloudflare` lìbhrigeadh aotrom brathan is webhook a-mhàin gu ciudha an àrd-ùrlair fhèin. Tha na stiùiridhean Vercel agus Cloudflare a’ mìneachadh nan ciudha sin agus mar a chuireas na sreathan-lìn aca obraichean annta.

### Post-d <!--quire:email-->

Suidhich fear dhiubh seo:

- `QUIRE_EMAIL_PROVIDER_CONFIG`: nì JSON ag ainmeachadh solaraiche HTTP agus na teisteanasan aige, mar `{"provider":"postmark","token":"..."}`. Tha Postmark, Amazon SES, Mailgun, SendGrid agus Resend a’ faighinn taic.
- `QUIRE_SMTP_URL`: `smtp://user:password@host:587`. An targaid seo a-mhàin; bac targaidean gun fhrithealaiche SMTP.

Is e `QUIRE_MAIL_FROM` an seòladair. Gus Quire fheuchainn, tòisich pròifil `devmail`, suidhich `QUIRE_SMTP_URL=smtp://mailpit:1025` agus leugh post-d aig `http://localhost:8025`.

### Seirbheisean roghainneil <!--quire:optional-services-->

| Roghainn | Le pròifil |
| --- | --- |
| `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` no `QUIRE_MEILISEARCH_URL` | Lorg air an taobh a-muigh; teacsa slàn Postgres air dhòigh eile |
| `QUIRE_BREACH_CHECK_PROVIDER=off`, `QUIRE_BREACH_CHECK_URL` | Sgrùdadh airson facal-faire ann am briseadh. Air mar bhun-roghainn an aghaidh `api.pwnedpasswords.com` (cha tèid ach ro-leasachan còig caractaran dhen hash); cuiridh `off` dheth e, agus tha an URL a’ comharrachadh API raoin a tha thu a’ cumail |

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

Tha `OTEL_EXPORTER_OTLP_ENDPOINT` ag ainmeachadh an neach-cruinneachaidh dhan cuir gach pròiseas tracadh is meatraigean; leis a’ phròifil `observability` ’s e `http://otelcol:4318` a th’ ann, agus ann an `docker/otel-collector.yaml` cuiridh tu às-phortaichear airson do chùl-raon. Ma tha e suidhichte, cuiridh na pròiseasan web, worker, scheduler, content agus collab raointean thairis air OTLP/HTTP (iarrtasan-lìn, gnothaichean stòr-dàta luchd-gabhail, obraichean agus gairmean a-mach) agus meatraigean chun an aon phuing gach mionaid (`OTEL_METRICS_EXPORTER=none` gan cur dheth). Suidhichidh `OTEL_TRACES_SAMPLER_ARG` a’ chuibhreann de thracan a thèid a chumail. Thèid logaichean dhan toradh àbhaisteach aig `LOG_LEVEL`, agus cuiridh Compose mun cuairt orra. Cha bhi dàta pearsanta anns na tracadh.

### Trafaig a-mach roinneil (còmhnaidh dàta an EU) <!--quire:regional-egress-eu-data-residency-->

Tha `QUIRE_REGION=eu` ag ràdh gu bheil an càrn a’ frithealadh bhuidhnean Aonaidh na h-Eòrpa. Cuiridh an neach-obrach liosta-cheadaichte an sàs air gach iarrtas a-mach a nithear airson buidheann a tha ceangailte ris an EU (21-compliance.md earrann 8.1). Tha an liosta nan aoighean a dh’ainmicheas seirbheisean rèitichte airson na roinne (puing-crìche stòraidh, solaraiche post-d, solaraiche bhidio aoigheachd, targaidean stòraidh na buidhne fhèin, solaraichean AI is cunntas post-d), aoighean seirbheis sam bith fo lagachadh gnìomhach, agus na h-aoighean a chuireas tu ann an `QUIRE_EGRESS_ALLOW_HOSTS`. Diùltar iarrtas gu aoigh poblach sam bith eile mus tèid a chur; thèid an diùltadh a sgrìobhadh ann an sreath sgrùdaidh na buidhne mar `privacy/egress_refused`, agus nochdaidh e fo Gèilleadh, Còmhnaidh dàta.

| Roghainn | Luachan | Buaidh |
| --- | --- | --- |
| `QUIRE_EGRESS_ALLOW_HOSTS` | Liosta ainmean-aoigheachd le cromagan, no `*.example.org` airson gach fo-àrainn | Aoighean a bharrachd a ruigeas buidheann EU. Bu chòir puingean-crìche webhook, xAPI is SIEM, biadhan bhlogaichean agus aoighean Amazon SES a bhith an seo, oir ’s e roghainnean na buidhne fhèin a th’ annta agus chan ainmich seirbheis sam bith iad. Buinidh loopback, seòlaidhean prìobhaideach agus ainmean le aon leubail mar `web` no `clamav` dhan lìonra agad fhèin agus cha tèid an sgrùdadh a-riamh |

Chan eil liosta aoighean air buidhnean na RA no na SA; cumaidh iad na sgrùdaidhean roinn-seirbheise. Suidhich an liosta air an neach-obrach; leughaidh duilleag an rianaire i air an t-sreath-lìn gus an liosta cheadaichte a shealltainn, agus mar sin cuir ann an `docker/.env` i, a leughas gach seirbheis.

Bheir sgrùdadh na h-aplacaid mearachd shoilleir agus inntrigeadh sgrùdaidh, ach chan e am barantas a th’ ann: faodaidh còd a bhith ceàrr. ’S e an lìonra am barantas. Chan eil Compose ga chur an gnìomh dhut. Airson càrn roinneil, cuir na seirbheisean `worker` agus `web` air lìonra `internal: true` aig nach eil ach aon shlighe a-mach tro neach-ionaid egress (mar eisimpleir soitheach Squid no tinyproxy) a cheadaicheas na h-aon aoighean ri `QUIRE_EGRESS_ALLOW_HOSTS` agus aoighean nan seirbheisean rèitichte; suidhich `HTTPS_PROXY` dha na seirbheisean sin. Tha duilleag còmhnaidh a’ liostadh nan dearbh aoighean a tha ceadaichte leis an aplacaid, agus mar sin faodar an dà liosta a choimeas.

## Slàinte <!--quire:health-->

| Puing-crìche | Brìgh |
| --- | --- |
| `/healthz` | Beòthachd: tha am pròiseas a’ freagairt. Cleachdaidh sgrùdaidhean Compose e |
| `/readyz` | Deisealachd: ruigear eisimeileachdan agus innsidh e a bheil gach seirbheis roghainneil rèitichte. Stiùir an cothromaiche luchd an seo |

Tha `docker compose -f docker/compose.yaml ps` a’ sealltainn slàinte gach seirbheise.

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

Tha seirbheis `proxy` (Caddy, Apache-2.0, `docker/caddy/Caddyfile`) sa chàrn bhunaiteach. Freagraidh i air puirt 80 agus 443 agus stiùiridh i:

| Aoigh no slighe | A’ dol gu |
| --- | --- |
| `QUIRE_PROXY_CONTENT_HOST` | `content` |
| `QUIRE_PROXY_APP_HOST`, gach fo-àrainn neach-gabhail agus raon gnàthaichte | `web` |
| `/_collab/` air na h-aoighean sin | `collab` (websocket, `QUIRE_COLLAB_URL`) |
| `/_realtime/connection/` air na h-aoighean sin | WebSocket cliant `centrifugo`; cha bhi API an fhrithealaiche fosgailte idir |
| `/_images/` air na h-aoighean sin | `imgproxy`, le pròifil `images` (`IMGPROXY_URL`) |

Bheir `init-env.sh` `QUIRE_PROXY_APP_HOST`, `QUIRE_PROXY_CONTENT_HOST`, `QUIRE_PROXY_HTTPS_PORT`, `QUIRE_COLLAB_URL` agus `IMGPROXY_URL` às an dà thùs gus nach dealachadh iad. Deasaich iad còmhla ma dh’atharraicheas tu tùs le làimh.

Tha teisteanasan an urra ri `QUIRE_PROXY_TLS`:

- `internal` (bunaiteach): ùghdarras teisteanais Caddy fhèin, airson `localhost`, `*.localhost` agus `lvh.me`. Earb ris an fhreumh aige aon turas, agus an uair sin faigh an teisteanas:

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

  Cuir `quire-local-ca.crt` ri stòr teisteanasan earbsach an t-siostaim no a’ bhrabhsair. Gabhaidh `curl` ris le `--cacert`.
- Seòladh post-d: teisteanasan ACME fèin-obrachail (Let’s Encrypt agus an uair sin ZeroSSL) airson fìor ainmean-aoigheachd. Feumaidh DNS airson an dà thùs agus gach aoigh neach-gabhail comharrachadh an seo, agus feumaidh puirt 80 agus 443 ruigsinn bhon eadar-lìon.

Thèid aoighean luchd-gabhail a chruthachadh nuair a thadhlas cuideigin orra an toiseach agus dìreach ma dhearbhas web gum buin an t-ainm don stàladh seo (`/tls-allowed`, air iarraidh air lìonra Compose). Chan eil feum air teisteanas wildcard no plugan solaraiche DNS, agus chan urrainn do choigreach a chuireas ainm gu aoigh iarraidh air teisteanasan a chruthachadh. Tha teisteanasan agus an t-ùghdarras ionadail ann an leabhar `caddy-data`; dèan cùl-taic dheth leis a’ chòrr ma chleachdas tu `internal`.

Cha chreid Web ach `X-Forwarded-For` on neach-ionaid: tha seòladh stèidhichte aig an neach-ionaid (`QUIRE_PROXY_ADDRESS`, `172.29.64.10` mar bhun-roghainn) air fo-lìon stèidhichte (`QUIRE_COMPOSE_SUBNET`), agus ainmichidh `QUIRE_TRUSTED_PROXY_CIDRS` an seòladh sin. Ma tha am fo-lìon a’ bualadh ri lìonra air an aoigh, atharraich an dà roghainn agus ruith `docker compose down` mus ruith thu `up`.

## Air cùl neach-ionaid cùil agad fhèin <!--quire:behind-your-own-reverse-proxy-->

Gus cothromaiche luchd no neach-ionaid a tha thu a’ ruith mar-thà a chleachdadh na àite, fàg `proxy` a-mach (`docker compose up -d --scale proxy=0`) agus cuir crìoch air TLS air beulaibh `web` (8080), `content` (8081), `collab` (1234, websocket) agus `centrifugo` (8000, websocket). Suidhich seòlaidhean poblach ann an `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN` agus `QUIRE_COLLAB_URL` (`wss://`), agus raon sheòlaidhean an neach-ionaid ann an `QUIRE_TRUSTED_PROXY_CIDRS`.

## Fuasgladh dhuilgheadasan <!--quire:troubleshooting-->

- Sguir `init` le “QUIRE_DATABASE_ID is not a UUID”: suidhich e le `uuidgen`.
- Bidh `web` ag ath-thòiseachadh le “did not start on compose”: tha an log a’ liostadh gach suidheachadh nach urrainn dha urram a thoirt dha agus dè chleachdas tu na àite.
- Chan eil atharrachadh facal-faire dreuchd ann an `.env` an dèidh a’ chiad tòiseachadh a’ dèanamh dad: ruithidh an sgriobt tòiseachaidh aon turas. Cleachd `ALTER ROLE`.
- Fàilligidh luchdachadh suas le mearachd sganaidh fhad ’s a tha `CLAMAV_URL` suidhichte: luchdaichidh ClamAV na soidhnichean a-nuas aig a’ chiad tòiseachadh, agus bheir seo beagan mhionaidean.

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