---
title: "Docker Compose ಮೂಲಕ Quire ಸ್ಥಾಪಿಸಿ"
description: "Docker Compose ಮೂಲಕ ನಿಮ್ಮ ಸ್ವಂತ ಮೂಲಸೌಕರ್ಯದಲ್ಲಿ Quire ಅನ್ನು ಸ್ಥಾಪಿಸಿ."
image: "https://docs.quirelms.com/og.png"
---

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

# Docker Compose ಮೂಲಕ Quire ಸ್ಥಾಪಿಸಿ

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

ಇದು ಒಂದೇ ಹೋಸ್ಟ್‌ನಲ್ಲಿನ ಸಂಪೂರ್ಣ ಉತ್ಪನ್ನ: LMS, ಅದರ ಹಿನ್ನೆಲೆ ಕೆಲಸ, ರಿಯಲ್‌ಟೈಮ್ ಮತ್ತು
ಸಹಯೋಗಿ ಸಂಪಾದನಾ ಸೇವೆಗಳು, ಮತ್ತು ಒಂದು profile ಹಿಂದೆ ಇರುವ ಪ್ರತಿ ಐಚ್ಛಿಕ ಸೇವೆ. ವಿನ್ಯಾಸವು
`docs/architecture/23-ops.md` ವಿಭಾಗ 2.

ಇತರ ಗುರಿಗಳು: [Vercel](/kn/ops/vercel/) ಮತ್ತು [Cloudflare Workers](/kn/ops/cloudflare/) ಕೇವಲ ವೆಬ್
ಹಂತವನ್ನು ಮಾತ್ರ ನಡೆಸುತ್ತವೆ. ಅಪ್‌ಗ್ರೇಡ್‌ಗಳು [upgrade.md](/kn/ops/upgrade/) ನಲ್ಲಿ, ಮತ್ತು ಬ್ಯಾಕಪ್‌ಗಳು
ಮತ್ತು ಮರುಸ್ಥಾಪನಾ ಡ್ರಿಲ್ [backup-restore.md](/kn/ops/backup-restore/) ನಲ್ಲಿವೆ.

## ನಿಮಗೆ ಬೇಕಾದವು <!--quire:what-you-need-->

- Compose ಪ್ಲಗಿನ್ 2.30 ಅಥವಾ ನಂತರದೊಂದಿಗೆ Docker Engine 27 ಅಥವಾ ನಂತರದ್ದು.
- ಡೀಫಾಲ್ಟ್ ಸ್ಟ್ಯಾಕ್‌ಗೆ 4 CPU ಕೋರ್‌ಗಳು ಮತ್ತು 8 GB ಮೆಮೊರಿ; `--profile full` ನೊಂದಿಗೆ
  8 ಕೋರ್‌ಗಳು ಮತ್ತು 16 GB (ClamAV ಒಂದೇ ಸುಮಾರು 1.5 GB ಸಹಿಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತದೆ).
- ವೆಬ್ ಹಂತಕ್ಕೆ ಒಂದು DNS ಹೆಸರು ಮತ್ತು ಅವಿಶ್ವಾಸ್ಯ ಸಾಮಗ್ರಿಗೆ ಎರಡನೇದು. ಅವು ಬೇರೆ ಬೇರೆ ಹೋಸ್ಟ್
  ಆಗಿರಬೇಕು: SCORM ಪ್ಯಾಕೇಜ್‌ಗಳು ಮತ್ತು ಅಪ್‌ಲೋಡ್ ಆದ HTML ಸಾಮಗ್ರಿ ಮೂಲದಲ್ಲಿ ನಡೆಯುತ್ತವೆ,
  ಆದ್ದರಿಂದ ಅವು LMS ನ ಕುಕೀಗಳನ್ನು ಎಂದಿಗೂ ಓದಲಾಗದು.
- ಸ್ಥಳೀಯ ಪರೀಕ್ಷೆಗೆ, `lvh.me` ಮತ್ತು `*.localhost` 127.0.0.1 ಗೆ ಪರಿಹರಿಸುತ್ತವೆ, ಇದನ್ನೇ
  `docker/.env.example` ಬಳಸುತ್ತದೆ. ಸ್ಟ್ಯಾಕ್‌ನ ಸ್ವಂತ `proxy` ಸೇವೆಯು ಸ್ಥಳೀಯ ಪ್ರಮಾಣಪತ್ರ
  ಪ್ರಾಧಿಕಾರದೊಂದಿಗೆ ಎರಡಕ್ಕೂ https ಮೂಲಕ ಸೇವೆ ನೀಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಬೇರೇನನ್ನೂ ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ
  ("TLS" ನೋಡಿ).
- ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಪೋರ್ಟ್ 80 ಮತ್ತು 443 ಖಾಲಿ ಇರಬೇಕು (`QUIRE_PROXY_HTTP_PORT` ಮತ್ತು
  `QUIRE_PROXY_HTTPS_PORT` ಅವುಗಳನ್ನು ಸರಿಸುತ್ತವೆ).

## ಮೊದಲ ರನ್ <!--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` ಪ್ರತಿ ರಹಸ್ಯವನೂ ರಚಿಸಿ `docker/.env` ಅನ್ನು
`docker/.env.example` ನಿಂದ ಬರೆಯುತ್ತದೆ (ಡೇಟಾಬೇಸ್ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಸಹಿ ಮತ್ತು ಮಾಸ್ಟರ್
ಕೀಗಳು, ಸಾಮಗ್ರಿ ಲಾಂಚ್ ಕೀ ಜೋಡಿ), ಮತ್ತು ಆಡಿಟ್ ಚೆಕ್‌ಪಾಯಿಂಟ್ ಸಹಿ ಕೀಯನ್ನು `docker/secrets/audit-signing-key.pem`
ನಲ್ಲಿ ಇಡುತ್ತದೆ, ಅದನ್ನು Compose ವರ್ಕರ್‌ಗಳೊಳಗೆ ರಹಸ್ಯವಾಗಿ ಮೌಂಟ್ ಮಾಡುತ್ತದೆ. ಅದಿಗೆ `sh`,
`awk` ಮತ್ತು `openssl` ಮಾತ್ರ ಬೇಕು, ಮತ್ತು ಅದು ಈಗಾಗಲೇ ಇರುವ `docker/.env` ಅನ್ನು ಮರುಬರೆಯಲು
ನಿರಾಕರಿಸುತ್ತದೆ. ಎರಡೂ ಫೈಲ್‌ಗಳನ್ನು ಹೋಸ್ಟ್‌ನಿಂದ ಹೊರಗೆ ನಕಲಿಸಿ: `QUIRE_MASTER_KEY` ಇಲ್ಲದೆ,
ಮರುಸ್ಥಾಪಿಸಲಾದ ಡೇಟಾಬೇಸ್ ತನ್ನ ಸಂಗ್ರಹಿತ ಪರಿಚಯಪತ್ರಗಳನ್ನು ಡಿಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗದು. ಬದಲಿಗೆ ಫೈಲ್
ಅನ್ನು ಕೈಯಾರಿ ತುಂಬಲು, `cp docker/.env.example docker/.env`; ಪ್ರತಿ ರಹಸ್ಯವನ್ನು ಹೇಗೆ ರಚಿಸಬೇಕು ಎಂದು
ಆ ಫೈಲ್ ಹೇಳುತ್ತದೆ.

ಎರಡೂ ಮೂಲಗಳೂ `https` ಆಗಿರಬೇಕು: ಸಾಮಗ್ರಿ ಸೇವೆಯು ಉತ್ಪಾದನೆಯಲ್ಲಿ ಸರಳ http ನಿರಾಕರಿಸುತ್ತದೆ,
ಮತ್ತು ಅವು ಒಂದೇ ನೋಂದಾಯಿಸಬಹುದಾದ ಡೊಮೇನ್ ಹಂಚಿಕೊಳ್ಳಬಾರದು. `proxy` ಸೇವೆಯು ಎರಡಕ್ಕೂ TLS
ಅಂತ್ಯಗೊಳಿಸುತ್ತದೆ ("TLS" ನೋಡಿ); `init-env.sh` ಒಂದು `http://` ಮೂಲವನ್ನು ನಿರಾಕರಿಸುತ್ತದೆ.

ಸ್ಟ್ಯಾಕ್ ನಿರ್ದಿಷ್ಟ ಕ್ರಮದಲ್ಲಿ ಆರಂಭವಾಗುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿ ಹಂತವೂ ಮೊದಲಿನದಕ್ಕಾಗಿ ಕಾಯುತ್ತದೆ:

1. `postgres` ಆರೋಗ್ಯಕರವಾಗುತ್ತದೆ. ಅತಿ ಮೊದಲ ಆರಂಭದಲ್ಲಿ ಅದರ init ಸ್ಕ್ರಿಪ್ಟ್
   (`docker/postgres/init/90-passwords.sh`) ನಾಲ್ಕು ಪಾತ್ರ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಹೊಂದಿಸುತ್ತದೆ.
2. `migrate` ಪ್ರತಿ ವಲಸೆಯನ್ನೂ ಅನ್ವಯಿಸುತ್ತದೆ ಮತ್ತು ನಿಯಂತ್ರಣ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಮತ್ತು ಪ್ರತಿ
   ಪ್ರತ್ಯೇಕ ಟೆನಂಟ್ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಕೆಲಸದ ಸರಪಳಿಯನ್ನು ಆರಂಭಿಸುತ್ತದೆ, ಅವು ಎಲ್ಲವೂ ಒಪ್ಪುತ್ತವೆ
   ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ, ನಂತರ ನಿರ್ಗಮಿಸುತ್ತದೆ (docs/ops/upgrade.md).
   ವಲಸೆಗಳು ಪ್ರತಿ ಆರಂಭದಲ್ಲಿ ನಡೆಯುತ್ತವೆ ಮತ್ತು idempotent ಆಗಿವೆ, ಆದ್ದರಿಂದ ಅಪ್‌ಗ್ರೇಡ್ ಎಂಬುದು
   ಒಂದು ಹೊಸ ಇಮೇಜ್ ಮತ್ತು ಒಂದು ಮರುಪ್ರಾರಂಭ.
3. `init` (`apps/web/src/first-run.ts`) ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು `QUIRE_DATABASE_ID`
   ಅಡಿಯಲ್ಲಿ ದಾಖಲಿಸುತ್ತದೆ ಮತ್ತು, `QUIRE_SETUP_ADMIN_EMAIL` ಹೊಂದಿಸಲ್ಪಟ್ಟಿದ್ದರೆ, ಮೊದಲ
   ಸಂಸ್ಥೆ ಮತ್ತು ಅದರ ನಿರ್ವಾಹಕರನ್ನು ರಚಿಸುತ್ತದೆ. ಸೈನ್-ಇನ್ ವಿಳಾಸ ಮತ್ತು ರಚಿಸಲಾದ
   ಪಾಸ್‌ವರ್ಡ್ ಒಮ್ಮೆ ಮಾತ್ರ ಮುದ್ರಿಸಲ್ಪಡುತ್ತವೆ, `docker compose logs init` ನಲ್ಲಿ.
4. `web`, `content`, `worker`, `scheduler`, `collab` ಮತ್ತು `centrifugo` ಆರಂಭವಾಗುತ್ತವೆ.
5. `proxy` ಆರಂಭವಾಗುತ್ತದೆ, `web` ಮತ್ತು `content` ಆರೋಗ್ಯಕರವಾದ ನಂತರ ಮಾತ್ರ.

ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಡೊಮೇನ್ ಅನ್ನು ಅನುಸರಿಸಿ `https://demo.` ತೆರೆಯಿರಿ (`init` ಲಾಗ್ ನಿಖರ
ಸೈನ್-ಇನ್ ವಿಳಾಸವನ್ನು ಮುದ್ರಿಸುತ್ತದೆ), ಮತ್ತು ಸೈನ್ ಇನ್ ಮಾಡಿ. ಸ್ಥಳೀಯ ಸ್ಥಾಪನೆಯಲ್ಲಿ, ಮೊದಲು
ಪ್ರಾಕ್ಸಿಯ ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರವನ್ನು ನಂಬಿ ("TLS" ನೋಡಿ). `/account/security` ನಲ್ಲಿ
ರಚಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಿ.

ಅಗತ್ಯವಿರುವ ರಹಸ್ಯವಿಲ್ಲದೆ ಆರಂಭವಾದ ಪ್ರಕ್ರಿಯೆಯು ಆರಂಭವಾಗಲು ನಿರಾಕರಿಸುತ್ತದೆ ಮತ್ತು ಕೊರತೆಯಿರುವ
ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ತನ್ನ ಲಾಗ್‌ನಲ್ಲಿ ಹೆಸರಿಸುತ್ತದೆ. ಅರ್ಧ-ಹೊಂದಿಸಲ್ಪಟ್ಟಂತೆ ಏನೂ ಆರಂಭವಾಗುವುದಿಲ್ಲ.

## ಸೇವೆಗಳು ಮತ್ತು profiles <!--quire:services-and-profiles-->

| ಸೇವೆ | profile | ಅದು ಏನು ಮಾಡುತ್ತದೆ |
| --- | --- | --- |
| postgres | ಯಾವಾಗಲೂ | ಡೇಟಾಬೇಸ್ (`docker/postgres.Dockerfile` ನಿಂದ ನಿರ್ಮಿಸಲಾದ pgvector ಸಹಿತ PostgreSQL 18), ಮೊದಲ ಬೂಟ್‌ನಿಂದಲೇ WAL ಆರ್ಕೈವ್ ಆಗುತ್ತದೆ |
| migrate, init | ಯಾವಾಗಲೂ | ಒಂದೇ ಬಾರಿ: ವಲಸೆಗಳು, ನಂತರ ಮೊದಲ ರನ್ |
| web | ಯಾವಾಗಲೂ | LMS, `QUIRE_HTTP_PORT` (8080) ನಲ್ಲಿ |
| content | ಯಾವಾಗಲೂ | ಅವಿಶ್ವಾಸ್ಯ ಸಾಮಗ್ರಿಯ ಮೂಲ, `QUIRE_CONTENT_PORT` (8081) ನಲ್ಲಿ |
| worker | ಯಾವಾಗಲೂ | ಹಿನ್ನೆಲೆ ಕೆಲಸಗಳು: ಇಮೇಲ್, ವರದಿಗಳು, ಫೈಲ್ ಪ್ರಕ್ರಿಯೆ, webhooks |
| scheduler | ಯಾವಾಗಲೂ | ಪುನರಾವರ್ತಿತ ಕೆಲಸಗಳು: 64 ರನ್‌ಟೈಮ್ ವೇಳಾಪಟ್ಟಿಗಳನ್ನು ನೋಂದಾಯಿಸಿ ವರ್ಕರ್‌ಗೆ ಒಪ್ಪಿಸುತ್ತದೆ; ಒಮ್ಮೆಗೆ ಒಬ್ಬ ನಾಯಕ |
| collab | ಯಾವಾಗಲೂ | ಸಹಯೋಗಿ ಸಂಪಾದನಾ websocket, `QUIRE_COLLAB_HTTP_PORT` (1234) ನಲ್ಲಿ |
| centrifugo | ಯಾವಾಗಲೂ | ರಿಯಲ್‌ಟೈಮ್ ಫ್ಯಾನ್-ಔಟ್, `QUIRE_REALTIME_PORT` (8000) ನಲ್ಲಿ |
| proxy | ಯಾವಾಗಲೂ | Caddy, ಪೋರ್ಟ್ 80 ಮತ್ತು 443 ರಲ್ಲಿನ TLS ಮುಂಭಾಗದ ಬಾಗಿಲು ("TLS" ನೋಡಿ) |
| valkey | `cache` | ಕ್ಯಾಶ್ ಮತ್ತು ದರ ಮಿತಿಗಳು |
| clamav | `scan` | ಅಪ್‌ಲೋಡ್‌ಗಳ ಮಾಲ್‌ವೇರ್ ಸ್ಕ್ಯಾನಿಂಗ್ |
| gotenberg | `preview` | Office ನಿಂದ PDF ಮುನ್ನೋಟಗಳು, ಪ್ರಮಾಣಪತ್ರ ರೆಂಡರಿಂಗ್ |
| imgproxy | `images` | ಗಾತ್ರ ಬದಲಿಸಿದ ಮತ್ತು ಪರಿವರ್ತಿಸಲಾದ ಚಿತ್ರಗಳು |
| transcoder | `video` | ಕೇವಲ LGPL ಆದ ffmpeg ಹೊಂದಿರುವ ವರ್ಕರ್ ಇಮೇಜ್, ವೀಡಿಯೋ ರೆಂಡಿಶನ್‌ಗಳಿಗಾಗಿ |
| seaweedfs | `storage` | ಈ ಹೋಸ್ಟ್‌ನಲ್ಲಿ S3-ಹೊಂದಿಕೊಳ್ಳುವ ವಸ್ತು ಸಂಗ್ರಹಣೆ |
| otelcol | `observability` | ಒಂದು OpenTelemetry ಸಂಗ್ರಾಹಕ |
| mailpit | `devmail` | ಎಲ್ಲಾ ಹೊರಹೋಗುವ ಅಂಚೆಯನ್ನು ಹಿಡಿಯುತ್ತದೆ, Quire ಪ್ರಯೋಗಿಸಲು |
| backup | `backup` | ಒಂದೇ ಬಾರಿಯ ಮೂಲ ಬ್ಯಾಕಪ್; backup-restore.md ನೋಡಿ |
| backup-scheduler, backup-offsite | `backup` | `QUIRE_BACKUP_INTERVAL_HOURS` ಗೆ ಒಂದು ಮೂಲ ಬ್ಯಾಕಪ್, ಮತ್ತು ಸಾಪ್ತಾಹಿಕ ಪರಿಶೀಲನಾ ಡ್ರಿಲ್‌ನೊಂದಿಗೆ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಆದ ಹೋಸ್ಟ್-ಹೊರಗಿನ ನಕಲುಗಳು |
| h5p | `h5p` | `QUIRE_H5P_IMAGE` ನಲ್ಲಿ ನೀವು ಒದಗಿಸುವ H5P LTI 1.3 ಸಾಧನ ಇಮೇಜ್, `QUIRE_H5P_PORT` (8090) ನಲ್ಲಿ; "H5P ಪ್ರೊವೈಡರ್ ಸಂಪರ್ಕಿಸುವುದು" ನೋಡಿ |

`--profile full` `backup` ಮತ್ತು `h5p` ಹೊರತುಪಡಿಸಿ ಪ್ರತಿ ಐಚ್ಛಿಕ ಸೇವೆಯನ್ನೂ ಆರಂಭಿಸುತ್ತದೆ.
ಒಂದನ್ನು `docker compose -f docker/compose.yaml --profile scan up -d` ನೊಂದಿಗೆ ಆರಂಭಿಸಿ.
ಐಚ್ಛಿಕ ಸೇವೆ ಇಲ್ಲದೆಯೂ Quire ಕೆಲಸ ಮಾಡುತ್ತದೆ ಮತ್ತು ಏನು ಕೊರತೆ ಇದೆ ಎಂದು ಹೇಳುತ್ತದೆ: ಸ್ಕ್ಯಾನರ್
ಇಲ್ಲದಿದ್ದರೆ ಅಪ್‌ಲೋಡ್‌ಗಳನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡದೆ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಿರ್ವಾಹಕರಿಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ;
Gotenberg ಇಲ್ಲದಿದ್ದರೆ ಫೈಲ್‌ಗಳು ಮುನ್ನೋಟದ ಬದಲಿಗೆ ಡೌನ್‌ಲೋಡ್ ನೀಡುತ್ತವೆ; ಟ್ರಾನ್ಸ್‌ಕೋಡರ್ ಇಲ್ಲದಿದ್ದರೆ
ವೀಡಿಯೋ ಮೂಲ ಫೈಲ್‌ನಂತೆ ಪ್ಲೇ ಆಗುತ್ತದೆ.

ಪ್ರತಿ ಮೂರನೇ ಪಕ್ಷದ ಇಮೇಜ್ ಮತ್ತು ಅದರ ಪರವಾನಗಿ ಬಾಧ್ಯತೆಗಳನ್ನು
`docker/third-party-containers.yaml` ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿದೆ.

### H5P ಪ್ರೊವೈಡರ್ ಸಂಪರ್ಕಿಸುವುದು <!--quire:connecting-an-h5p-provider-->

Quire H5P ರನ್‌ಟೈಮ್ ಅಥವಾ sidecar ಅನ್ನು ಅಂತರ್ಗತಪಡಿಸುವುದಿಲ್ಲ ಅಥವಾ ಒದಗಿಸುವುದಿಲ್ಲ (ADR 0019).
ನೀವು H5P ಬಳಸಿದರೆ, ನಿಮ್ಮದೇ ಹೋಸ್ಟ್ ಮಾಡಿದ ಚಂದಾದಾರಿಕೆ ಒದಗಿಸಿ ಅಥವಾ Quire ನಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ
ನಿಮ್ಮದೇ ಸ್ವ-ಹೋಸ್ಟ್ ಮಾಡಿದ H5P ಇನ್‌ಸ್ಟೆನ್ಸ್ ನಡೆಸಿ. ಆ ಪ್ರೊವೈಡರ್ ಅನ್ನು ಒಂದು LTI 1.3 ಬಾಹ್ಯ
ಸಾಧನವಾಗಿ ನೋಂದಾಯಿಸಿ ಮತ್ತು ಅದರ ಸಾಮಗ್ರಿಯನ್ನು ಸಾಧನ ಚಟುವಟಿಕೆಗಳಾಗಿ ಕೋರ್ಸ್‌ಗಳಿಗೆ ಸೇರಿಸಿ.
Quire LTI Assignment ಮತ್ತು Grade Services (AGS) ಮೂಲಕ ಅಂಕಗಳು ಮತ್ತು
ಚಟುವಟಿಕೆ/ಮೌಲ್ಯಮಾಪನ ಪ್ರಗತಿಯನ್ನು ವಿನಿಮಯ ಮಾಡುತ್ತದೆ. ಪ್ರೊವೈಡರ್ xAPI ಹೇಳಿಕೆಗಳನ್ನೂ
ಕಳುಹಿಸಿದರೆ, Quire ನ xAPI ಹೇಳಿಕೆ ಸಂಗ್ರಹಕ್ಕಾಗಿ ಅದನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಹೊಂದಿಸಿ; AGS
ಅಂಕ/ಪ್ರಗತಿ ವಿನಿಮಯವು xAPI ಹೇಳಿಕೆಗಳನ್ನು ಕಳುಹಿಸುವುದಿಲ್ಲ. Moodle ಆಮದುಗಳು H5P
ಚಟುವಟಿಕೆಗಳನ್ನು ಒಂದು LTI ಸಾಧನ ಸಂಪರ್ಕದ ಅಗತ್ಯವಿದೆ ಎಂದು ವರದಿ ಮಾಡುತ್ತವೆ. ಪ್ರೊವೈಡರ್ ತನ್ನ H5P
ರನ್‌ಟೈಮ್, ಲೇಖನ, ವಿಷಯ ಬ್ಯಾಂಕ್ ಮತ್ತು ಪ್ರಯತ್ನ ಇತಿಹಾಸದ ಜವಾಬ್ದಾರಿಯನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ.

ಈ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ನಿಮ್ಮದೇ ಸ್ವ-ಹೋಸ್ಟ್ ಇನ್‌ಸ್ಟೆನ್ಸ್ ನಡೆಸಲು, `QUIRE_H5P_IMAGE` ಅನ್ನು ಅದರ
ಇಮೇಜ್‌ಗೆ ಹೊಂದಿಸಿ ಮತ್ತು `h5p` profile ಆರಂಭಿಸಿ. Compose ಅದನ್ನು `QUIRE_H5P_PORT` (8090)
ನಲ್ಲಿ ಪ್ರಕಟಿಸುತ್ತದೆ ಮತ್ತು ಅದರ ಡೇಟಾವನ್ನು `h5p-data` ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಇಡುತ್ತದೆ; ಇಮೇಜ್ ಮತ್ತು ಅದರ
ಜೊತೆಗೆ ಬರುವ ಬಾಧ್ಯತೆಗಳು ನಿಮ್ಮದಾಗಿಯೇ ಉಳಿಯುತ್ತವೆ.

## ಸೆಟ್ಟಿಂಗ್‌ಗಳು <!--quire:settings-->

ಪ್ರತಿ ಪ್ರಕ್ರಿಯೆಯೂ `docker/.env` ಓದುತ್ತದೆ. ಮಾದರಿ, `docker/.env.example`, ಪ್ರತಿ
ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಅದರ ಡೀಫಾಲ್ಟ್‌ನೊಂದಿಗೆ ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ. ಗುಂಪುಗಳು:

### ವಿಳಾಸಗಳು <!--quire:addresses-->

| ಸೆಟ್ಟಿಂಗ್ | ಅರ್ಥ |
| --- | --- |
| `QUIRE_APP_ORIGIN` | LMS ನ ಸಾರ್ವಜನಿಕ ವಿಳಾಸ, ಉದಾಹರಣೆಗೆ `https://learn.example.com` |
| `QUIRE_CONTENT_ORIGIN` | ಸಾಮಗ್ರಿಯ ಮೂಲ, ಬೇರೆ ಹೋಸ್ಟ್ |
| `QUIRE_PLATFORM_DOMAINS` | ಸಂಸ್ಥೆಗಳು ವಾಸಿಸುವ ಡೊಮೇನ್‌ಗಳು, ಅರ್ಧಚಿಹ್ನೆಗಳಿಂದ ಬೇರ್ಪಡಿಸಲ್ಪಟ್ಟವು |
| `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`. `vercel` ಮತ್ತು `cloudflare` ಗಾಗಿ ಇತರ ಮಾರ್ಗದರ್ಶಿಗಳನ್ನು ನೋಡಿ |
| `QUIRE_TRUSTED_PROXY_CIDRS` | ಅವುಗಳ `X-Forwarded-For` ನಂಬಲ್ಪಡುವ ಪ್ರಾಕ್ಸಿಗಳು |

### ರಹಸ್ಯಗಳು <!--quire:secrets-->

| ಸೆಟ್ಟಿಂಗ್ | ಅರ್ಥ |
| --- | --- |
| `QUIRE_SECRET_KEY` | ಸೆಷನ್‌ಗಳು ಮತ್ತು ಟೋಕನ್‌ಗಳಿಗೆ ಸಹಿ ಹಾಕುತ್ತದೆ. 64 ಹೆಕ್ಸ್ ಅಕ್ಷರಗಳು |
| `QUIRE_MASTER_KEY` | SSO ಮತ್ತು webhook ರಹಸ್ಯಗಳಂತಹ ಸಂಗ್ರಹಿತ ಪರಿಚಯಪತ್ರಗಳನ್ನು ಸುತ್ತುತ್ತದೆ. 32 ಬೈಟ್‌ಗಳು, base64. ವೆಬ್ ಹಂತ ಮತ್ತು ವರ್ಕರ್‌ಗೆ ಅದೇ ಮೌಲ್ಯ ಬೇಕು. ರೊಟೇಶನ್: [key-rotation.md](/kn/ops/key-rotation/) |
| `QUIRE_MASTER_KEY_VERSION` | ಮಾಸ್ಟರ್ ಕೀಯ ಆವೃತ್ತಿ ಲೇಬಲ್, ಹೊಂದಿಸದಿದ್ದರೆ `v1`. ನೀವು ರೊಟೇಟ್ ಮಾಡಿದಾಗ ಅದನ್ನು ಏರಿಸಿ |
| `QUIRE_MASTER_KEY_RETIRED` | ಅವು ಮುಚ್ಚಿದ್ದದ್ದನ್ನು ಓದಲು ಇನ್ನೂ ಬೇಕಾದ ಹಿಂದಿನ ಮಾಸ್ಟರ್ ಕೀಗಳು, `v1=<base64>` ಆಗಿ. ಏನೂ ಬಗೆಹರಿಯದೆ ರೊಟೇಶನ್ ಮುಗಿದ ನಂತರ ತೆಗೆದುಹಾಕಿ |
| `QUIRE_COLLAB_SIGNING_KEY` | ಎಡಿಟಿಂಗ್ ಟೋಕನ್‌ಗಳಿಗೆ ಸಹಿ ಹಾಕಲು web ಮತ್ತು collab ಹಂಚಿಕೊಳ್ಳುತ್ತವೆ |
| `QUIRE_BACKUP_SIGNING_KEY` | ಕೋರ್ಸ್ ಬ್ಯಾಕಪ್‌ಗಳಿಗೆ ಸಹಿ ಹಾಕುತ್ತದೆ (ಐಚ್ಛಿಕ) |

`QUIRE_MASTER_KEY` ನ ನಕಲನ್ನು ಈ ಹೋಸ್ಟ್‌ನ ಹೊರತಾಗಿ ಎಲ್ಲೋ ಇಟ್ಟುಕೊಳ್ಳಿ. ಅದಿಲ್ಲದೆ
ಮರುಸ್ಥಾಪಿಸಲಾದ ಡೇಟಾಬೇಸ್ ಅದು ಹೊಂದಿರುವ ಪರಿಚಯಪತ್ರಗಳನ್ನು ಡಿಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗದು.

### ಡೇಟಾಬೇಸ್ <!--quire:database-->

| ಸೆಟ್ಟಿಂಗ್ | ಅರ್ಥ |
| --- | --- |
| `POSTGRES_PASSWORD` | ಸೂಪರ್‌ಯೂಸರ್, ಕಂಟೈನರ್ ಮತ್ತು ಬ್ಯಾಕಪ್‌ಗಳು ಬಳಸುತ್ತವೆ |
| `QUIRE_DB_APP_PASSWORD`, `QUIRE_DB_MIGRATOR_PASSWORD`, `QUIRE_DB_REPORT_PASSWORD`, `QUIRE_DB_AUDIT_PASSWORD` | ಪಾತ್ರ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಮೊದಲ ಆರಂಭದಲ್ಲಿ ಹೊಂದಿಸಲಾಗುತ್ತವೆ |
| `DATABASE_URL` | ಅಪ್ಲಿಕೇಶನ್ ಪಾತ್ರ. ಅದು ಮಾಡುವ ಪ್ರತಿ ಕ್ವೆರಿಗೆ ಸಾಲು-ಮಟ್ಟದ ಭದ್ರತೆ ಅನ್ವಯವಾಗುತ್ತದೆ |
| `DATABASE_MIGRATOR_URL`, `QUIRE_MIGRATION_URL` | ವಲಸಾ ಪಾತ್ರ, `migrate` ಮತ್ತು `init` ಗಾಗಿ |
| `QUIRE_SUPERUSER_URL` | ಕೇವಲ ಮೊದಲ ರನ್ ಬಳಸುತ್ತದೆ |
| `QUIRE_REPORT_DATABASE_URL` | ಓದು-ಮಾತ್ರ ವರದಿ ಪಾತ್ರ, ವರದಿಗಳು ಮತ್ತು ವರದಿ ಬಿಲ್ಡರ್ ಗಾಗಿ |
| `QUIRE_AUDIT_DATABASE_URL` | ಆಡಿಟ್ ಪಾತ್ರ, ಆಡಿಟ್ ಕನ್ಸೋಲ್ ಮತ್ತು SIEM ರಫ್ತುಗಾಗಿ |
| `QUIRE_DATABASE_ID` | ಯಾವುದೇ UUID, ಸ್ಥಾಪನೆಯ ಜೀವಿತಾವಧಿಗೆ ಸ್ಥಿರ |

ಪಾತ್ರ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಡೇಟಾಬೇಸ್ ವಾಲ್ಯೂಮ್ ಮೊದಲ ಬಾರಿ ರಚನೆಯಾದಾಗ ಮಾತ್ರ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.
ನಂತರ ಒಂದನ್ನು ಬದಲಾಯಿಸಲು, `ALTER ROLE` ಬಳಸಿ ನಂತರ ಹೊಂದಿಕೊಳ್ಳುವ URL ಅನ್ನು ನವೀಕರಿಸಿ.

`QUIRE_REPORT_DATABASE_URL` ಅನ್ನು `DATABASE_URL` ನಲ್ಲಿ ಹೊಂದಿಸಲಾದ ಭೌತಿಕ
ಡೇಟಾಬೇಸ್‌ಗಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ. ಯಾವುದೇ ಇತರ ನೋಂದಾಯಿತ ಭೌತಿಕ ಡೇಟಾಬೇಸ್‌ಗಾಗಿ, web ಮತ್ತು
worker ಪರಿಸರದಲ್ಲಿ ಅದರದೇ ಆದ `quire_report` ಸಂಪರ್ಕ URL ಹೊಂದಿಸಿ, ನಂತರ ಆ ಚರರ ಹೆಸರನ್ನು ಆ
ಡೇಟಾಬೇಸ್‌ನ **ವರದಿ ಪರಿಸರ ಚರ** ಕ್ಷೇತ್ರದಲ್ಲಿ `env:NAME` ಆಗಿ ಇಡಿ. ಉಲ್ಲೇಖವು ಅದರ ಆ್ಯಪ್
ಸಂಪರ್ಕದಂತೆಯೇ ಅದೇ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸೂಚಿಸಬೇಕು, ಆದ್ಯತೆಯಾಗಿ ಅದರ ಓದುವ ಪ್ರತಿ. ಪ್ರತಿ ವರದಿ
ಮೇಲ್ಮೈಯೂ ಟೆನಂಟ್ ಅನ್ನು ಅದರದೇ ಡೇಟಾಬೇಸ್‌ನ ವರದಿ ಸಂಪರ್ಕಕ್ಕೆ ಅನುಸರಿಸುತ್ತದೆ: ವರದಿ ಬಿಲ್ಡರ್ ಮತ್ತು
ಉಳಿಸಲಾದ ವರದಿಗಳು, ನಿಗದಿತ ಡೆಲಿವರಿಗಳು, ವರದಿ ರಫ್ತುಗಳು, ವಿಶ್ಲೇಷಣೆ, ಆಡಿಟ್ ಲಾಗ್, REST ಆಡಿಟ್
ಸಂಪನ್ಮೂಲಗಳು ಮತ್ತು ಸಹಾಯಕದ ಆಡಿಟ್ ಹುಡುಕಾಟ. ಯಾವುದೂ ಎಂದಿಗೂ ಇನ್ನೊಂದು ಡೇಟಾಬೇಸ್‌ನ ವರದಿ
URL ಸಾಲಿಗೆ ಪಡೆಯುವುದಿಲ್ಲ. ಒಂದು ಡೇಟಾಬೇಸ್‌ಗೆ ವರದಿ ಸಂಪರ್ಕ ಇಲ್ಲದಿದ್ದರೆ, ಸಾಮಾನ್ಯ ವರದಿಗಳು ಆ
ಡೇಟಾಬೇಸ್‌ನ ಸ್ವಂತ ಅಪ್ಲಿಕೇಶನ್ ಸಂಪರ್ಕದ ಮೇಲೆ ನಡೆಯುತ್ತವೆ, ಆದರೆ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪ್ರತಿ ಆಡಿಟ್
ಓದುವಿಕೆಯೂ ನಿರಾಕರಿಸಿ ಅದನ್ನು ಹೇಳುತ್ತವೆ, ಏಕೆಂದರೆ ಅಪ್ಲಿಕೇಶನ್ ಪಾತ್ರವು ಆಡಿಟ್ ಹಾದಿಯನ್ನು ಓದಲಾಗದು.

### ಚಾಲಕಗಳು <!--quire:drivers-->

| ಸೆಟ್ಟಿಂಗ್ | ಈ ಆವೃತ್ತಿ | ಟಿಪ್ಪಣಿಗಳು |
| --- | --- | --- |
| `QUIRE_STORAGE_DRIVER` | `local` (ಡೀಫಾಲ್ಟ್), `s3` ಅಥವಾ `azure` | `local` ಫೈಲ್‌ಗಳನ್ನು `files` ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಇಡುತ್ತದೆ. `s3` AWS S3, R2, GCS ಇಂಟರಾಪರೇಬಿಲಿಟಿ ಮತ್ತು ಇತರ S3-ಹೊಂದಿಕೊಳ್ಳುವ ಸಂಗ್ರಹಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಮರುಪ್ರಾರಂಭಿಸಬಹುದಾದ ಬಹು-ಭಾಗದ ಅಪ್‌ಲೋಡ್‌ಗಳೊಂದಿಗೆ |
| `QUIRE_REALTIME_DRIVER` | `inprocess` (ಡೀಫಾಲ್ಟ್), `sse`, `centrifugo` ಅಥವಾ `durable_objects` | ಒಂದು ವೆಬ್ ಕಂಟೈನರ್‌ಗೆ `inprocess` ಸರಿ; ಹಲವು ಇದ್ದಾಗ `centrifugo` ಅಥವಾ `sse` ಬಳಸಿ |
| `QUIRE_CACHE_DRIVER` | `memory` (ಡೀಫಾಲ್ಟ್), `postgres` ಅಥವಾ `valkey` | `memory` ಪ್ರತಿ ಪ್ರಕ್ರಿಯೆಗೆ; ದರ ಮಿತಿಗಳು ಕಂಟೈನರ್‌ಗಳ ನಡುವೆ ಉಳಿಯಲು `valkey` ಅಥವಾ `postgres` ಬಳಸಿ |
| `QUIRE_VIDEO_DRIVER` | `ffmpeg` (ಡೀಫಾಲ್ಟ್) ಅಥವಾ `progressive_mp4` | ಅಥವಾ ಹೋಸ್ಟ್ ಮಾಡಿದ ಪ್ರೊವೈಡರ್: ಅವರ ಕೀಗಳ ಮೂಲಕ Cloudflare Stream, Mux ಅಥವಾ Bunny |
| `QUIRE_IMAGE_DRIVER` | `noop` (ಡೀಫಾಲ್ಟ್), `imgproxy` ಅಥವಾ `cloudflare` | `noop` ಪ್ರತಿ ಚಿತ್ರವನ್ನೂ ಅದರ ಮೂಲ ಗಾತ್ರದಲ್ಲಿ ಒದಗಿಸುತ್ತದೆ. `imgproxy` ಗೆ `images` profile ಮತ್ತು ಕೆಳಗಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಅಗತ್ಯವಿದೆ; `cloudflare` Cloudflare Images ಬಳಸುತ್ತದೆ |
| `QUIRE_MEETING_PROVIDER` | `bbb`, `zoom`, `teams`, `meet`, `jitsi` ಅಥವಾ `in_process` | ಲೈವ್ ಸೆಷನ್‌ಗಳಿಗೆ ವೇದಿಕೆಯ ಡೀಫಾಲ್ಟ್. ಹೊಂದಿಸದಿದ್ದರೆ, ಲೈವ್ ಸೆಷನ್‌ಗಳು ಅವು ಹೊಂದಿಸಲ್ಪಟ್ಟಿಲ್ಲ ಎಂದು ಹೇಳುತ್ತವೆ, ಒಂದು ಸಂಸ್ಥೆಯು ಏಕೀಕರಣಗಳ ಅಡಿಯಲ್ಲಿ, ಲೈವ್ ಸೆಷನ್ ಪ್ರೊವೈಡರ್ ಕಡೆ ತನ್ನ ಸ್ವಂತ ಖಾತೆ ಸಂಪರ್ಕಿಸುವವರೆಗೂ. ಒಂದು ಸಂಸ್ಥೆಯ ಸ್ವಂತ ಖಾತೆಯು ಯಾವಾಗಲೂ ಈ ಮೌಲ್ಯಕ್ಕಿಂತ ಮೇಲುಗೈ ಸಾಧಿಸುತ್ತದೆ. ಪ್ರತಿ ಪ್ರೊವೈಡರ್‌ನ ಸ್ವಂತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು (`BBB_URL` ಮತ್ತು `BBB_SECRET`, `ZOOM_*`, `TEAMS_*`, `GOOGLE_MEET_*` ಮತ್ತು `JITSI_*` ಚರಗಳು) ಕೇವಲ ಇಲ್ಲಿ ಹೆಸರಿಸಲ್ಪಟ್ಟ ಪ್ರೊವೈಡರ್‌ಗಾಗಿ ಮಾತ್ರ ಓದಲಾಗುತ್ತದೆ |
| `QUIRE_MEETING_REGIONS` | `eu`, `uk`, `us` ನ ಅರ್ಧಚಿಹ್ನಾ ಪಟ್ಟಿ | ವೇದಿಕೆಯ ಡೀಫಾಲ್ಟ್ ಪ್ರೊವೈಡರ್ ಮೀಟಿಂಗ್‌ಗಳನ್ನು ಎಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ. ಹೊಂದಿಸದಿದ್ದರೆ, ಒಂದು ಪ್ರದೇಶಕ್ಕೆ ಬಂಧಿಸಲ್ಪಟ್ಟ ಸಂಸ್ಥೆಯೊಂದಿಗೆ ಹಿಂದಿನಂತೆ ಅದನ್ನು ಪರಿಶೀಲಿಸಲಾಗುವುದಿಲ್ಲ. ಒಂದು ಸಂಸ್ಥೆಯ ಸ್ವಂತ ಖಾತೆಯು ತನ್ನ ಪ್ರದೇಶಗಳನ್ನು ತನ್ನ ಪುಟದಲ್ಲಿ ಘೋಷಿಸುತ್ತದೆ |

ಈ ಆವೃತ್ತಿಯಲ್ಲಿ ಇಲ್ಲದ ಚಾಲಕ ಮೌಲ್ಯವನ್ನು ವೆಬ್ ಹಂತ ಆರಂಭವಾದಾಗ ಸೆಟ್ಟಿಂಗ್ ಹೆಸರಿನೊಂದಿಗೆ
ನಿರಾಕರಿಸಲಾಗುತ್ತದೆ, ಡೀಫಾಲ್ಟ್‌ನಿಂದ ಸೈಲೆಂಟ್ ಆಗಿ ಬದಲಾಯಿಸದೆ.

### ಚಿತ್ರಗಳು <!--quire:images-->

ಪುಟಗಳು `/api/files/{id}/image/{size}` ಮೂಲಕ ನಾಲ್ಕು ಸ್ಥಿರ ಗಾತ್ರಗಳಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು
ಕೇಳುತ್ತವೆ, ಇದು ಫೈಲ್‌ನದೇ ಆದ ಅದೇ ಪ್ರವೇಶವನ್ನು ಪರಿಶೀಲಿಸಿ ನಂತರ ಚಿತ್ರ ಸೇವೆಗೆ ಮರುನಿರ್ದೇಶಿಸುತ್ತದೆ.
ಪ್ರತಿ ಸಂಸ್ಥೆಯು ಗಂಟೆಗೆ `QUIRE_IMAGE_SPECS_PER_HOUR` (ಡೀಫಾಲ್ಟ್ 2000) ಹೊಸ ಚಿತ್ರ ಮತ್ತು ಗಾತ್ರ
ಜೋಡಿಗಳನ್ನು ಕೇಳಬಹುದು; ಆ ಗಂಟೆಯಲ್ಲಿ ಈಗಾಗಲೇ ರಚಿಸಲಾದ ಗಾತ್ರಗಳು ಲೆಕ್ಕಕ್ಕೆ ಬರುವುದಿಲ್ಲ. ಒಂದಕ್ಕಿಂತ
ಹೆಚ್ಚು ವೆಬ್ ಕಂಟೈನರ್‌ಗಳಿಗೆ `valkey` ಅಥವಾ `postgres` ಅನ್ನು `QUIRE_CACHE_DRIVER` ಗಾಗಿ ಬಳಸಿ, ಆಗ
ಮಿತಿಯು ಅವುಗಳ ನಡುವೆ ಉಳಿಯುತ್ತದೆ.

| ಸೆಟ್ಟಿಂಗ್ | ಚಾಲಕ | ಟಿಪ್ಪಣಿಗಳು |
| --- | --- | --- |
| `IMGPROXY_URL` | `imgproxy` | ಬ್ರೌಸರ್‌ಗಳು imgproxy ತಲುಪುವ ವಿಳಾಸ, ಉದಾಹರಣೆಗೆ `https://images.example.org`. `images` profile ಅದನ್ನು `QUIRE_IMAGES_PORT` (8082) ನಲ್ಲಿ ಪ್ರಕಟಿಸುತ್ತದೆ |
| `IMGPROXY_KEY`, `IMGPROXY_SALT` | `imgproxy` | ಹೆಕ್ಸ್ ಸ್ಟ್ರಿಂಗ್‌ಗಳು, imgproxy ಆರಂಭವಾದ ಮೌಲ್ಯಗಳದ್ದೇ. ಪ್ರತಿಯೊಂದನ್ನೂ `openssl rand -hex 32` ನೊಂದಿಗೆ ರಚಿಸಿ. Quire ಪ್ರತಿ ಚಿತ್ರ ವಿಳಾಸಕ್ಕೂ ಅವುಗಳೊಂದಿಗೆ ಸಹಿ ಹಾಕುತ್ತದೆ, ಆದ್ದರಿಂದ imgproxy Quire ಕೇಳದಿರುವುದನ್ನು ರೆಂಡರ್ ಮಾಡುವುದಿಲ್ಲ |
| `QUIRE_IMAGE_SOURCE_ORIGIN` | ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆಯೊಂದಿಗೆ `imgproxy` | imgproxy ಮೂಲಗಳನ್ನು ಎಲ್ಲಿಂದ ಪಡೆಯುತ್ತದೆ. Compose `http://web:3000` ಹೊಂದಿಸುತ್ತದೆ. `s3` ಅಥವಾ `azure` ಸಂಗ್ರಹಣೆಯೊಂದಿಗೆ imgproxy ಬಕೆಟ್‌ನಿಂದ ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಇದನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ |
| `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_IMAGES_TOKEN`, `CLOUDFLARE_IMAGES_ACCOUNT_HASH` | `cloudflare` | Images ಸಂಪಾದನಾ ಅನುಮತಿ ಹೊಂದಿರುವ ಒಂದು API ಟೋಕನ್, ಮತ್ತು Images, Developer resources ನಿಂದ ಖಾತೆ ಹ್ಯಾಶ್. ಖಾತೆಗಾಗಿ ಹೊಂದಿಕೊಳ್ಳುವ ವೇರಿಯಂಟ್‌ಗಳನ್ನು ಆನ್ ಮಾಡಿ |
| `CLOUDFLARE_IMAGES_SIGNING_KEY` | `cloudflare` | ಐಚ್ಛಿಕ. ಹೊಂದಿಸಿದಾಗ, ಚಿತ್ರಗಳು ಖಾಸಗಿಯಾಗಿರುತ್ತವೆ ಮತ್ತು ಪ್ರತಿ ವಿಳಾಸಕ್ಕೂ ಸಹಿ ಹಾಕಲ್ಪಟ್ಟು ಅವಧಿ ಮುಗಿಯುತ್ತದೆ. ಅದಿಲ್ಲದೆ, ಚಿತ್ರಗಳು ಯಾರೂ ಊಹಿಸಲಾಗದ `QUIRE_SECRET_KEY` ನಿಂದ ಉತ್ಪನ್ನವಾದ ವಿಳಾಸಗಳಲ್ಲಿ ಸಾರ್ವಜನಿಕವಾಗಿರುತ್ತವೆ |

Cloudflare Images ತಾನು ಒದಗಿಸುವ ಪ್ರತಿ ಮೂಲದ ತನ್ನದೇ ನಕಲನ್ನು ಇಟ್ಟುಕೊಳ್ಳುತ್ತದೆ. ಒಂದು ಫೈಲ್
ಅಳಿಸಲ್ಪಟ್ಟಾಗ, ವರ್ಕರ್ ಮೂಲದ ಮೊದಲು ಆ ನಕಲನ್ನು ಅಳಿಸುತ್ತದೆ.

### ಸರಪಳಿ <!--quire:queue-->

ಹಿನ್ನೆಲೆ ಕೆಲಸಗಳು ಅದೇ Postgres ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ pg-boss ಬಳಸುತ್ತವೆ, ಆದ್ದರಿಂದ ನಡೆಸಲು
ಯಾವುದೇ ಕ್ಯೂ ಸೇವೆ ಇಲ್ಲ ಮತ್ತು ಹೊಂದಿಸಲು ಏನೂ ಇಲ್ಲ. ಕೆಲಸಗಳನ್ನು ಅವುಗಳನ್ನು ಉಂಟುಮಾಡಿದ
ಬದಲಾವಣೆಯೊಂದೇ ಅದೇ ವ್ಯವಹಾರದಲ್ಲಿ ಸರಿಸಲ್ಪಡುತ್ತವೆ, ಆದ್ದರಿಂದ ಕ್ರ್ಯಾಶ್ ಒಂದನ್ನು ಕಳೆದುಕೊಳ್ಳಲು
ಅಥವಾ ಒಂದನ್ನು ಎರಡು ಬಾರಿ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಇಲ್ಲಿ `QUIRE_QUEUE_DRIVER` `pgboss`, ಅದರ
ಡೀಫಾಲ್ಟ್; `vercel` ಮತ್ತು `cloudflare` ಕೇವಲ ಹಗುರ ಅಧಿಸೂಚನೆ ಮತ್ತು webhook ಡೆಲಿವರಿಗಳನ್ನು
ವೇದಿಕೆಯ ಸ್ವಂತ ಕ್ಯೂ‌ಗೆ ಸರಿಸುತ್ತವೆ, ಮತ್ತು Vercel ಮತ್ತು Cloudflare ಮಾರ್ಗದರ್ಶಿಗಳು ಅವುಗಳನ್ನು
ಮತ್ತು ಅವುಗಳ ವೆಬ್ ಹಂತಗಳು ಹೇಗೆ ಸರಿಸುತ್ತವೆ ಎಂದು ವಿವರಿಸುತ್ತವೆ.

### ಇಮೇಲ್ <!--quire:email-->

ಒಂದನ್ನು ಹೊಂದಿಸಿ:

- `QUIRE_EMAIL_PROVIDER_CONFIG`: ಒಂದು HTTP ಪ್ರೊವೈಡರ್ ಮತ್ತು ಅದರ ಪರಿಚಯಪತ್ರಗಳನ್ನು
  ಹೆಸರಿಸುವ JSON ವಸ್ತು, ಉದಾಹರಣೆಗೆ `{"provider":"postmark","token":"..."}`. Postmark,
  Amazon SES, Mailgun, SendGrid ಮತ್ತು Resend ಬೆಂಬಲಿತ.
- `QUIRE_SMTP_URL`: `smtp://user:password@host:587`. ಕೇವಲ ಈ ಗುರಿ; ಸರ್ವರ್‌ರಹಿತ
  ಗುರಿಗಳು SMTP ನಿರ್ಬಂಧಿಸುತ್ತವೆ.

`QUIRE_MAIL_FROM` ಕಳುಹಿಸುವವರು. Quire ಪ್ರಯೋಗಿಸಲು, `devmail` profile ಆರಂಭಿಸಿ,
`QUIRE_SMTP_URL=smtp://mailpit:1025` ಹೊಂದಿಸಿ, ಮತ್ತು ಅಂಚೆಯನ್ನು `http://localhost:8025`
ನಲ್ಲಿ ಓದಿ.

### ಐಚ್ಛಿಕ ಸೇವೆಗಳು <!--quire:optional-services-->

| ಸೆಟ್ಟಿಂಗ್ | 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` ಅಥವಾ `QUIRE_MEILISEARCH_URL` | ಬಾಹ್ಯ ಹುಡುಕಾಟ; ಇಲ್ಲದಿದ್ದರೆ Postgres ಪೂರ್ಣ ಪಠ್ಯ |
| `QUIRE_BREACH_CHECK_PROVIDER=off`, `QUIRE_BREACH_CHECK_URL` | ಪಾಸ್‌ವರ್ಡ್ ಉಲ್ಲಂಘನಾ ಪರಿಶೀಲನೆ. ಡೀಫಾಲ್ಟ್ ಆಗಿ `api.pwnedpasswords.com` ವಿರುದ್ಧ ಆನ್ (ಕೇವಲ ಐದು ಅಕ್ಷರಗಳ ಹ್ಯಾಶ್ ಪೂರ್ವಪ್ರತ್ಯಯ ಮಾತ್ರ ಕಳುಹಿಸಲಾಗುತ್ತದೆ); `off` ಅದನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ಮತ್ತು URL ನೀವು ನಡೆಸುವ ಒಂದು ವ್ಯಾಪ್ತಿ API ಕಡೆಗೆ ಸೂಚಿಸುತ್ತದೆ |

### ವೀಕ್ಷಣೀಯತೆ <!--quire:observability-->

`OTEL_EXPORTER_OTLP_ENDPOINT` ಪ್ರತಿ ಪ್ರಕ್ರಿಯೆಯೂ ಟ್ರೇಸ್ ಮತ್ತು ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ಕಳುಹಿಸುವ
ಸಂಗ್ರಾಹಕವನ್ನು ಹೆಸರಿಸುತ್ತದೆ; `observability` profile ನೊಂದಿಗೆ ಅದು `http://otelcol:4318`,
ಮತ್ತು ನಿಮ್ಮ ಬ್ಯಾಕೆಂಡ್‌ಗಾಗಿ exporter ಸೇರಿಸುವ ಜಾಗ `docker/otel-collector.yaml`. ಹೊಂದಿಸಿದಾಗ
ವೆಬ್ ಹಂತ, ವರ್ಕರ್, ಶೆಡ್ಯೂಲರ್, ಸಾಮಗ್ರಿ ಮತ್ತು collab ಪ್ರಕ್ರಿಯೆಗಳು OTLP/HTTP ಮೂಲಕ span
ರಫ್ತು ಮಾಡುತ್ತವೆ (ವೆಬ್ ವಿನಂತಿಗಳು, ಟೆನಂಟ್ ಡೇಟಾಬೇಸ್ ವ್ಯವಹಾರಗಳು, ವರ್ಕರ್ ಕೆಲಸಗಳು ಮತ್ತು
ಹೊರಹೋಗುವ ಕರೆಗಳು), ಮತ್ತು ಪ್ರತಿ ನಿಮಿಷಕ್ಕೂ ಅದೇ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ ಮೆಟ್ರಿಕ್‌ಗಳು
(`OTEL_METRICS_EXPORTER=none` ಅವುಗಳನ್ನು ಆಫ್ ಮಾಡುತ್ತದೆ). `OTEL_TRACES_SAMPLER_ARG`
ಉಳಿಸಲ್ಪಡುವ ಟ್ರೇಸ್‌ಗಳ ಪ್ರಮಾಣವನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ಲಾಗ್‌ಗಳು `LOG_LEVEL` ನಲ್ಲಿ ಗುಣಮಟ್ಟದ
ಔಟ್‌ಪುಟ್‌ಗೆ ಹೋಗುತ್ತವೆ, ಮತ್ತು Compose ಅವುಗಳನ್ನು ಸುತ್ತುತ್ತದೆ. ಟ್ರೇಸ್‌ಗಳು ಎಂದಿಗೂ ವೈಯಕ್ತಿಕ
ಡೇಟಾ ಹೊತ್ತೊಯ್ಯುವುದಿಲ್ಲ.

### ಪ್ರಾದೇಶಿಕ ಹೊರಹೋಗುವಿಕೆ (EU ಡೇಟಾ ವಾಸಸ್ಥಾನ) <!--quire:regional-egress-eu-data-residency-->

`QUIRE_REGION=eu` ಸ್ಟ್ಯಾಕ್ ಯೂರೋಪಿಯನ್ ಒಕ್ಕೂಟ ಸಂಸ್ಥೆಗಳಿಗೆ ಸೇವೆ ನೀಡುತ್ತದೆ ಎಂದು ಹೇಳುತ್ತದೆ.
ನಂತರ ವರ್ಕರ್ EU ಗೆ ಬಂಧಿಸಲ್ಪಟ್ಟ ಸಂಸ್ಥೆಗಾಗಿ ಮಾಡಲಾದ ಪ್ರತಿ ಹೊರಹೋಗುವ ವಿನಂತಿಯನ್ನು
ಅನುಮತಿ ಪಟ್ಟಿಗೆ ಹಿಡಿದಿಡುತ್ತದೆ (21-compliance.md ವಿಭಾಗ 8.1). ಅನುಮತಿ ಪಟ್ಟಿಯು ಹೊಂದಿಸಲ್ಪಟ್ಟ
ಸೇವೆಗಳು ಆ ಪ್ರದೇಶಕ್ಕಾಗಿ ಘೋಷಿಸುವ ಹೋಸ್ಟ್‌ಗಳು (ಸಂಗ್ರಹಣೆ endpoint, ಇಮೇಲ್ ಪ್ರೊವೈಡರ್, ಒಂದು
ಹೋಸ್ಟ್ ಮಾಡಿದ ವೀಡಿಯೋ ಪ್ರೊವೈಡರ್, ಸಂಸ್ಥೆಯ ಸ್ವಂತ ಸಂಗ್ರಹಣೆ ಗುರಿಗಳು, AI ಪ್ರೊವೈಡರ್‌ಗಳು ಮತ್ತು
ಇಮೇಲ್ ಖಾತೆ), ಸಕ್ರಿಯ ವಿನಾಯಿತಿಯಡಿಯಲ್ಲಿನ ಯಾವುದೇ ಸೇವೆಯ ಹೋಸ್ಟ್‌ಗಳು, ಮತ್ತು
`QUIRE_EGRESS_ALLOW_HOSTS` ನಲ್ಲಿ ನೀವು ಪಟ್ಟಿ ಮಾಡುವ ಹೋಸ್ಟ್‌ಗಳು. ಯಾವುದೇ ಇತರ ಸಾರ್ವಜನಿಕ
ಹೋಸ್ಟ್‌ಗೆ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸುವ ಮೊದಲು ನಿರಾಕರಿಸಲಾಗುತ್ತದೆ, ನಿರಾಕರಣೆಯನ್ನು
`privacy/egress_refused` ಆಗಿ ಸಂಸ್ಥೆಯ ಆಡಿಟ್ ಹಾದಿಯಲ್ಲಿ ಬರೆಯಲಾಗುತ್ತದೆ, ಮತ್ತು ಅದು
ಪಾಲನೆ, ಡೇಟಾ ವಾಸಸ್ಥಾನ ಅಡಿಯಲ್ಲಿ ಪಟ್ಟಿಯಾಗುತ್ತದೆ.

| ಸೆಟ್ಟಿಂಗ್ | ಮೌಲ್ಯಗಳು | ಪರಿಣಾಮ |
| --- | --- | --- |
| `QUIRE_EGRESS_ALLOW_HOSTS` | ಹೋಸ್ಟ್ ಹೆಸರುಗಳ ಅರ್ಧಚಿಹ್ನಾ ಪಟ್ಟಿ, ಅಥವಾ ಪ್ರತಿ ಉಪ-ಡೊಮೇನ್‌ಗಾಗಿ `*.example.org` | EU ಸಂಸ್ಥೆಯು ತಲುಪಬಹುದಾದ ಹೆಚ್ಚುವರಿ ಹೋಸ್ಟ್‌ಗಳು. Webhook, xAPI ಮತ್ತು SIEM endpoints, ಬ್ಲಾಗ್ ಫೀಡ್‌ಗಳು ಮತ್ತು Amazon SES ಹೋಸ್ಟ್‌ಗಳು ಇಲ್ಲಿ ಸೇರಬೇಕು, ಏಕೆಂದರೆ ಅವು ಒಂದು ಸಂಸ್ಥೆಯ ಸ್ವಂತ ಆಯ್ಕೆ ಮತ್ತು ಯಾವುದೇ ಸೇವೆ ಅವುಗಳನ್ನು ಘೋಷಿಸುವುದಿಲ್ಲ. Loopback, ಖಾಸಗಿ ವಿಳಾಸಗಳು ಮತ್ತು `web` ಅಥವಾ `clamav` ನಂತಹ ಒಂದೇ ಲೇಬಲಿನ ಹೆಸರುಗಳು ನಿಮ್ಮದೇ ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಎಂದಿಗೂ ಪರಿಶೀಲಿಸಲ್ಪಡುವುದಿಲ್ಲ |

UK ಮತ್ತು US ಸಂಸ್ಥೆಗಳನ್ನು ಹೋಸ್ಟ್ ಪಟ್ಟಿಗೆ ಕಟ್ಟುನಿಟ್ಟಾಗಿ ಹೋಲಿಸಲಾಗುವುದಿಲ್ಲ; ಅವು ಸೇವಾ ಪ್ರದೇಶ
ಪರಿಶೀಲನೆಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತವೆ. ಪಟ್ಟಿಯನ್ನು ವರ್ಕರ್‌ನಲ್ಲಿ ಹೊಂದಿಸಿ; ಅಡ್ಮಿನ್ ಪುಟವು ಅನುಮತಿ
ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಲು ವೆಬ್ ಹಂತದಲ್ಲಿ ಅದನ್ನು ಓದುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ಪ್ರತಿ ಸೇವೆಯೂ ಓದುವ
`docker/.env` ನಲ್ಲಿ ಇಡಿ.

ಅಪ್ಲಿಕೇಶನ್ ಪರಿಶೀಲನೆಯು ಸ್ಪಷ್ಟ ದೋಷ ಮತ್ತು ಒಂದು ಆಡಿಟ್ ನಮೂದು ನೀಡುತ್ತದೆ, ಮತ್ತು ಅದು ಖಾತರಿ
ಅಲ್ಲ: ಕೋಡ್ ತಪ್ಪಾಗಿರಬಹುದು. ಖಾತರಿಯು ನೆಟ್‌ವರ್ಕ್. Compose ಅದನ್ನು ನಿಮಗಾಗಿ ಜಾರಿಗೊಳಿಸುವುದಿಲ್ಲ.
ಒಂದು ಪ್ರಾದೇಶಿಕ ಸ್ಟ್ಯಾಕ್‌ಗಾಗಿ, `worker` ಮತ್ತು `web` ಸೇವೆಗಳನ್ನು ಒಂದು `internal: true`
ನೆಟ್‌ವರ್ಕ್‌ನ ಮೇಲೆ ಇಡಿ, ಅದರ ಹೊರಗೆ ಹೋಗುವ ಏಕೈಕ ಮಾರ್ಗವು ಒಂದು ಹೊರಹೋಗುವ ಪ್ರಾಕ್ಸಿ (ಉದಾಹರಣೆಗೆ
Squid ಅಥವಾ ಒಂದು tinyproxy ಕಂಟೈನರ್) ಆಗಿದೆ, ಅದು `QUIRE_EGRESS_ALLOW_HOSTS` ನ ಅದೇ
ಹೋಸ್ಟ್‌ಗಳನ್ನು ಮತ್ತು ನಿಮ್ಮ ಹೊಂದಿಸಲ್ಪಟ್ಟ ಸೇವೆಗಳ ಹೋಸ್ಟ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಮತ್ತು ಆ
ಸೇವೆಗಳಿಗೆ `HTTPS_PROXY` ಹೊಂದಿಸಿ. ವಾಸಸ್ಥಾನ ಪುಟವು ಅಪ್ಲಿಕೇಶನ್ ಅನುಮತಿಸುವ ನಿಖರ ಹೋಸ್ಟ್‌ಗಳನ್ನು
ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ, ಆಗ ಎರಡೂ ಪಟ್ಟಿಗಳನ್ನು ಹೋಲಿಸಬಹುದು.

## ಆರೋಗ್ಯ <!--quire:health-->

| Endpoint | ಅರ್ಥ |
| --- | --- |
| `/healthz` | ಜೀವಂತತೆ: ಪ್ರಕ್ರಿಯೆ ಉತ್ತರಿಸುತ್ತದೆ. Compose ಆರೋಗ್ಯ ಪರಿಶೀಲನೆಗಳು ಇದನ್ನು ಬಳಸುತ್ತವೆ |
| `/readyz` | ಸಿದ್ಧತೆ: ಅವಲಂಬನೆಗಳು ತಲುಪಬಹುದಾಗಿವೆ, ಮತ್ತು ಪ್ರತಿ ಐಚ್ಛಿಕ ಸೇವೆಯೂ ಹೊಂದಿಸಲ್ಪಟ್ಟಿದೆ ಅಥವಾ ಇಲ್ಲ ಎಂದು ವರದಿ ಮಾಡಿದೆ. ನಿಮ್ಮ ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್ ಅನ್ನು ಇಲ್ಲಿ ಸೂಚಿಸಿ |

`docker compose -f docker/compose.yaml ps` ಪ್ರತಿ ಸೇವೆಯ ಆರೋಗ್ಯವನ್ನು ತೋರಿಸುತ್ತದೆ.

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

`proxy` ಸೇವೆ (Caddy, Apache-2.0, `docker/caddy/Caddyfile`) ಡೀಫಾಲ್ಟ್ ಸ್ಟ್ಯಾಕ್‌ನ ಭಾಗ.
ಅದು ಪೋರ್ಟ್ 80 ಮತ್ತು 443 ರಲ್ಲಿ ಉತ್ತರಿಸುತ್ತದೆ ಮತ್ತು ಮಾರ್ಗಿಸುತ್ತದೆ:

| ಹೋಸ್ಟ್ ಅಥವಾ ಮಾರ್ಗ | ಇಲ್ಲಿಗೆ ಹೋಗುತ್ತದೆ |
| --- | --- |
| `QUIRE_PROXY_CONTENT_HOST` | `content` |
| `QUIRE_PROXY_APP_HOST`, ಪ್ರತಿ ಟೆನಂಟ್ ಸಬ್‌ಡೊಮೇನ್ ಮತ್ತು ಕಸ್ಟಮ್ ಡೊಮೇನ್ | `web` |
| ಆ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ `/_collab/` | `collab` (websocket, `QUIRE_COLLAB_URL`) |
| ಆ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ `/_realtime/connection/` | `centrifugo` ನ ಕ್ಲೈಂಟ್ websocket; ಅದರ ಸರ್ವರ್ API ಎಂದಿಗೂ ಬಹಿರಂಗಪಡಿಸಲ್ಪಡುವುದಿಲ್ಲ |
| ಆ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ `/_images/` | `imgproxy`, `images` profile ನೊಂದಿಗೆ (`IMGPROXY_URL`) |

`init-env.sh` ಎರಡು ಮೂಲಗಳಿಂದ `QUIRE_PROXY_APP_HOST`, `QUIRE_PROXY_CONTENT_HOST`,
`QUIRE_PROXY_HTTPS_PORT`, `QUIRE_COLLAB_URL` ಮತ್ತು `IMGPROXY_URL` ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ,
ಆದ್ದರಿಂದ ಅವು ಬೇರೆಯಾಗಲಾಗದು. ನೀವು ಒಂದು ಮೂಲವನ್ನು ಕೈಯಾರಿ ಬದಲಾಯಿಸಿದರೆ ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ
ಸಂಪಾದಿಸಿ.

ಪ್ರಮಾಣಪತ್ರಗಳು `QUIRE_PROXY_TLS` ಅನ್ನು ಅನುಸರಿಸುತ್ತವೆ:

- `internal` (ಡೀಫಾಲ್ಟ್): Caddy ನ ಸ್ವಂತ ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರ, `localhost`, `*.localhost`
  ಮತ್ತು `lvh.me` ಗಾಗಿ. ಅದರ ಮೂಲವನ್ನು ಒಮ್ಮೆ ನಂಬಿ, ನಂತರ ಬ್ರೌಸ್ ಮಾಡಿ:

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

  `quire-local-ca.crt` ಅನ್ನು ಸಿಸ್ಟಮ್ ಅಥವಾ ಬ್ರೌಸರ್ ನಂಬಿಕೆಯ ಸ್ಟೋರ್‌ಗೆ ಸೇರಿಸಿ. `curl`
  ಅದನ್ನು `--cacert` ನೊಂದಿಗೆ ಪಡೆಯುತ್ತದೆ.
- ಒಂದು ಇಮೇಲ್ ವಿಳಾಸ: ನೈಜ ಹೋಸ್ಟ್ ಹೆಸರುಗಳಿಗಾಗಿ ಸ್ವಯಂ ACME ಪ್ರಮಾಣಪತ್ರಗಳು
  (Let's Encrypt, ನಂತರ ZeroSSL). ಎರಡೂ ಮೂಲಗಳ ಮತ್ತು ಪ್ರತಿ ಟೆನಂಟ್ ಹೋಸ್ಟ್‌ನ DNS ಇಲ್ಲಿ
  ಸೂಚಿಸಬೇಕು, ಮತ್ತು ಪೋರ್ಟ್ 80 ಮತ್ತು 443 ಇಂಟರ್‌ನೆಟ್‌ನಿಂದ ತಲುಪಬಹುದಾಗಿರಬೇಕು.

ಟೆನಂಟ್ ಹೋಸ್ಟ್‌ಗಳನ್ನು ಬೇಡಿಕೆಯ ಮೇಲೆ, ಮೊದಲ ಭೇಟಿಯಲ್ಲಿ, ಮತ್ತು web ಹೆಸರು ಈ ಸ್ಥಾಪನೆಗೆ
ಸೇರಿದೆ ಎಂದು ದೃಢೀಕರಿಸಿದಾಗ ಮಾತ್ರ ನೀಡಲಾಗುತ್ತದೆ (`/tls-allowed`, Compose ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ
ಕೇಳಲಾಗುತ್ತದೆ). ಯಾವುದೇ ವೈಲ್ಡ್‌ಕಾರ್ಡ್ ಪ್ರಮಾಣಪತ್ರ ಅಥವಾ DNS ಪ್ರೊವೈಡರ್ ಪ್ಲಗಿನ್ ಬೇಕಿಲ್ಲ, ಮತ್ತು
ಹೋಸ್ಟ್‌ನ ಕಡೆಗೆ ಹೆಸರು ಸೂಚಿಸುವ ಅಪರಿಚಿತ ವ್ಯಕ್ತಿಯು ಅದನ್ನು ಪ್ರಮಾಣಪತ್ರಗಳಿಗಾಗಿ ಕೇಳಲು ಮಾಡಲಾಗದು.
ಪ್ರಮಾಣಪತ್ರಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಪ್ರಾಧಿಕಾರವು `caddy-data` ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಇರುತ್ತವೆ; ನೀವು
`internal` ಬಳಸಿದರೆ ಉಳಿದದ್ದರ ಜೊತೆಗೆ ಅದನ್ನೂ ಬ್ಯಾಕಪ್ ಮಾಡಿ.

ವೆಬ್ ಪ್ರಾಕ್ಸಿಯಿಂದ ಮಾತ್ರ `X-Forwarded-For` ನಂಬುತ್ತದೆ: ಪ್ರಾಕ್ಸಿಗೆ ಸ್ಥಿರ ವಿಳಾಸವಿದೆ
(`QUIRE_PROXY_ADDRESS`, ಡೀಫಾಲ್ಟ್ `172.29.64.10`) ಸ್ಥಿರ ಸಬ್‌ನೆಟ್‌ನಲ್ಲಿ
(`QUIRE_COMPOSE_SUBNET`), ಮತ್ತು `QUIRE_TRUSTED_PROXY_CIDRS` ಆ ವಿಳಾಸವನ್ನು
ಹೆಸರಿಸುತ್ತದೆ. ಸಬ್‌ನೆಟ್ ಹೋಸ್ಟ್‌ನ ನೆಟ್‌ವರ್ಕ್‌ನೊಂದಿಗೆ ಘರ್ಷಿಸಿದರೆ, ಎರಡನ್ನೂ ಬದಲಾಯಿಸಿ ಮತ್ತು
`docker compose down` ಚಲಾಯಿಸಿ, `up` ಮೊದಲು.

## ನಿಮ್ಮದೇ ರಿವರ್ಸ್ ಪ್ರಾಕ್ಸಿ ಹಿಂದೆ <!--quire:behind-your-own-reverse-proxy-->

ನೀವು ಈಗಾಗಲೇ ನಡೆಸುತ್ತಿರುವ ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್ ಅಥವಾ ಪ್ರಾಕ್ಸಿ ಬಳಸಲು, `proxy` ಅನ್ನು
ಹೊರಗಿಡಿ (`docker compose up -d --scale proxy=0`) ಮತ್ತು `web` (8080), `content`
(8081), `collab` (1234, websocket) ಮತ್ತು `centrifugo` (8000, websocket) ಮುಂದೆ TLS
ಅಂತ್ಯಗೊಳಿಸಿ. ಸಾರ್ವಜನಿಕ ವಿಳಾಸಗಳನ್ನು `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN` ಮತ್ತು
`QUIRE_COLLAB_URL` (`wss://`) ನಲ್ಲಿ ಹೊಂದಿಸಿ, ಮತ್ತು ನಿಮ್ಮ ಪ್ರಾಕ್ಸಿಯ ವಿಳಾಸ ವ್ಯಾಪ್ತಿಯನ್ನು
`QUIRE_TRUSTED_PROXY_CIDRS` ನಲ್ಲಿ.

## ತೊಂದರೆ ನಿವಾರಣೆ <!--quire:troubleshooting-->

- "QUIRE_DATABASE_ID is not a UUID" ನೊಂದಿಗೆ `init` ನಿರ್ಗಮಿಸುತ್ತದೆ: `uuidgen` ನೊಂದಿಗೆ
  ಅದನ್ನು ಹೊಂದಿಸಿ.
- "did not start on compose" ನೊಂದಿಗೆ `web` ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ: ಲಾಗ್ ಅದು ಗೌರವಿಸಲಾಗದ
  ಪ್ರತಿ ಸೆಟ್ಟಿಂಗ್ ಮತ್ತು ಬದಲಿಗೆ ಏನು ಬಳಸಬೇಕು ಎಂದು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ.
- ಮೊದಲ ಆರಂಭದ ನಂತರ `.env` ನಲ್ಲಿ ಪಾತ್ರ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಿದರೆ ಏನೂ ಆಗುವುದಿಲ್ಲ:
  init ಸ್ಕ್ರಿಪ್ಟ್ ಒಮ್ಮೆ ಮಾತ್ರ ನಡೆಯುತ್ತದೆ. `ALTER ROLE` ಬಳಸಿ.
- `CLAMAV_URL` ಹೊಂದಿಸಲ್ಪಟ್ಟಾಗ ಸ್ಕ್ಯಾನ್ ದೋಷದೊಂದಿಗೆ ಅಪ್‌ಲೋಡ್‌ಗಳು ವಿಫಲವಾಗುತ್ತವೆ: ClamAV
  ಮೊದಲ ಆರಂಭದಲ್ಲಿ ತನ್ನ ಸಹಿಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುತ್ತದೆ, ಅದಕ್ಕೆ ಕೆಲವು ನಿಮಿಷಗಳು ಬೇಕು.

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