Энэ нь нэг хост дээрх бүтэн бүтээгдэхүүн: LMS, түүний арын ажлууд, бодит цагийн болон хамтран засах үйлчилгээнүүд, мөн профайлын ард байгаа бүх сонголттой үйлчилгээнүүд. Зохион байгуулалт нь docs/architecture/23-ops.md хэсэг 2 юм.
Өөр зорилтууд: Vercel болон Cloudflare Workers нь зөвхөн веб түвшинг ажиллуулна. Шинэчлэлтүүд upgrade.md дотор, нөөцлөлт болон сэргээлтийн дасгал backup-restore.md дотор байна.
Юу шаардлагатай вэ
- Docker Engine 27 эсвэл дээш, Compose plugin 2.30 эсвэл дээштэй.
- Өгөгдсөн багцад 4 CPU цөм, 8 GB санах ой;
--profile full-тэй 8 цөм, 16 GB (ClamAV ганцаараа бараг 1.5 GB шинжийг барина). - Веб түвшинд зориулсан DNS нэр, мөн итгэж болохгүй агуулгад зориулсан хоёр дахь нэр. Тэд өөр өөр хост байх ёстой: SCORM багцууд болон байршуулсан HTML нь агуулгын origin дээр ажилладаг тул LMS-ийн cookie-г хэзээ ч уншиж чадахгүй.
- Орон нутгийн туршилтын хувьд
lvh.meболон*.localhostнь 127.0.0.1 рүү шийдэгддэг — энэ ньdocker/.env.exampleашигладаг зүйл юм. Багцын өөрийнproxyүйлчилгээ нь орон нутгийн гэрчилгээний эрх бүхийг ашиглан хоёуланг https-ээр үйлчилдэг тул өөр юу ч суулгах шаардлагагүй (“TLS” үз). - Хост дээр 80, 443 портууд чөлөөтэй байх (
QUIRE_PROXY_HTTP_PORTболонQUIRE_PROXY_HTTPS_PORTтэдгээрийг хөдөлгөнө).
Анхны ажиллагаа
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 initdocker/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; файл бүр нууцлалыг хэрхэн үүсгэхийг хэлдэг.
Хоёр origin аль аль нь https байх ёстой: агуулгын үйлчилгээ үйлдвэрлэлийн үедэн хэвийн http-г татгалздаг бөгөөд тэд бүртгэгдэх боломжтой ижил домейн хуваалцахгүй. proxy үйлчилгээ хоёулангийн TLS-ийг тасладаг (“TLS” үз); init-env.sh нь http:// origin-г татгалздаг.
Багц тогтсон дарааллаар эхэлдэг бөгөөд алхам бүр өмнөхөө хүлээнэ:
postgresэрүүл болно. Анхны ажиллагааны үед түүний эхлүүлэх скрипт (docker/postgres/init/90-passwords.sh) дөрвөн үүргийн нууц үгийг тогтоодог.migrateбүх шилжүүлэлтийг хэрэгжүүлж, ажлын ээлжийг хяналтын өгөгдлийн сан болон бүр тусгай түрээсчийн өгөгдлийн сан бүрд эхлүүлж, тэд бүгд тохирч байгааг шалгаад, дараа нь гарна (docs/ops/upgrade.md). Шилжүүлэлтүүд бүр ажиллагаандаа ажиллаж, идемпотент байдаг тул шинэчлэлт нь шинэ дүрс болон дахин ачаалалт юм.init(apps/web/src/first-run.ts) нь программын өгөгдлийн сангQUIRE_DATABASE_ID-н доор бүртгэж,QUIRE_SETUP_ADMIN_EMAILтогтоогдсон үед анхны байгууллага, түүний администраторыг үүсгэнэ. Нэвтрэх хаяг болон үүсгэсэн нууц үг нэг удааdocker compose logs initдээр хэвлэгдэнэ.web,content,worker,scheduler,collab,centrifugoэхэлнэ.proxyньweb,contentэрүүл болсны дараа эхэлнэ.
https://demo.-г өөрийн программын домейн дагуулан нээнэ үү (init лог нэвтрэх яг тэр хаягийг хэвлэдэг), мөн нэвтэрнэ үү. Орон нутгийн суулгалтад эхлээд проксигийн гэрчилгээний эрхийг итгэлд оруулна уу (“TLS” үз). Үүсгэсэн нууц үгээ /account/security дээр солино уу.
Шаардлагатай нууцлалгүйгээр эхэлсэн процесс эхлэхээс татгалзаж, лог дээрээ дутагдаж буй тохиргоог нэрлэнэ. Юу ч хагас тохируулагдсан байдлаар эхлэхгүй.
Үйлчилгээнүүд болон профайлууд
| Үйлчилгээ | Профайл | Юу хийдэг вэ |
|---|---|---|
| postgres | always | Өгөгдлийн сан (pgvector-тэй PostgreSQL 18, docker/postgres.Dockerfile-аас бүтээгдсэн), анхны ачааллагаанаас хойш WAL архивлагдсан |
| migrate, init | always | Нэг удаагийн: шилжүүлэлтүүд, дараа нь анхны ажиллагаа |
| web | always | LMS, QUIRE_HTTP_PORT (8080) дээр |
| content | always | Итгэж болохгүй агуулгын origin, QUIRE_CONTENT_PORT (8081) дээр |
| worker | always | Арын ажлууд: имэйл, тайлан, файл боловсруулалт, вебхүүкүүд |
| scheduler | always | Давтан гардаг ажлууд: 64 ажиллагааны хуваарийг бүртгээд worker-т өгдөг; нэгэн зэрэг нэг л удирдагч |
| collab | always | Хамтран засах websocket, QUIRE_COLLAB_HTTP_PORT (1234) дээр |
| centrifugo | always | Бодит цагийн тархалт, QUIRE_REALTIME_PORT (8000) дээр |
| proxy | always | Caddy, 80, 443 портууд дээрх TLS үүд (“TLS” үз) |
| valkey | cache |
Кэш болон хурдын хязгаарууд |
| clamav | scan |
Байршуулалтын хортой програмын шалгалт |
| gotenberg | preview |
Office-оос PDF урьдчилж харах, гэрчилгээ дүрслэл |
| imgproxy | images |
Хэмжээлсэн, хөрвүүлсэн зургууд |
| transcoder | video |
Зөвхөн LGPL ffmpeg-тэй worker дүрс, видео хувилбаруудад |
| 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гүй бол файлууд урьдчилж харахын оронд татан авалтыг санал болгоно; transcoderгүй бол видео анхны файлаараа тоглогдоно.
Бүх гуравдагч талын дүрс болон түүний лицензийн үүргүүд docker/third-party-containers.yaml-д жагсаагдсан.
H5P өгөгч холбох
Quire H5P ажиллагааны эсвэл хажуугийн туслах багцыг шигтгэж эсвэл нийлүүлдэггүй (ADR 0019). Та H5P ашиглаж байвал өөрийн хостлогдсон захиалга өгөх эсвэл өөрийн өөрийн сервер дээрх H5P инстанцыг Quire-ээс тусад нь ажиллуулна уу. Тэр өгөгчийг LTI 1.3 гадаад хэрэгсэл болгон бүртгээд, түүний агуулгыг хэрэгслийн үйл ажиллагаа болгон сургалтуудад нэмнэ үү. Quire LTI Даалгавар ба үнэлгээний үйлчилгээ (AGS)-ээр дамжуулан дүн, үйл ажиллагаа/үнэлгээний дэвшил солилцдог. Хэрэв өгөгч мөн xAPI мэдэгдэл илгээвэл үүнийг Quire-н xAPI мэдэгдлийн агуулгад тусад нь тохируулна уу; AGS дүн/дэвшил солилцоо нь xAPI мэдэгдэл илгээдэггүй. Moodle импортууд H5P үйл ажиллагуудыг LTI хэрэгслийн холболт шаардлагатай гэж тайлагдаг. Өгөгч өөрийн H5P ажиллагаа, зохиолт, агуулгын банк, оролдлогын түүхээс хариуцлага хэвээр үүрнэ.
Энэ хост дээр өөрийн өөрийн серверийн инстанцыг ажиллуулахын тулд QUIRE_H5P_IMAGE-ийг түүний дүрсэд тогтооод h5p профайлыг эхлүүлнэ үү. Compose үүнийг QUIRE_H5P_PORT (8090) дээр нийтлээд өгөгдлийг нь h5p-data volume-д хадгална; дүрс, түүний дагалдах үүрэг нь таных хэвээр үлдэнэ.
Тохиргоонууд
Бүх процесс docker/.env уншдаг. Загвар docker/.env.example нь тохиргоо бүрийг өгөгдсөн утгатай нь жагсаана. Бүлгүүд:
Хаягууд
| Тохиргоо | Утга |
|---|---|
QUIRE_APP_ORIGIN |
LMS-ийн нийтлэг хаяг, жишээ нь https://learn.example.com |
QUIRE_CONTENT_ORIGIN |
Агуулгын 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_SECRET_KEY |
Сесси болон token-уудыг гарын үсэглэнэ. 64 шигтгээт тэмдэгт |
QUIRE_MASTER_KEY |
SSO болон вебхүүкийн нууц зэрэг хадгалагдсан итгэмжлэлүүдийг орооно. 32 байт, base64. Веб түвшин, worker адил утга шаардана. Эргэлт: key-rotation.md |
QUIRE_MASTER_KEY_VERSION |
Мастер түлхүүрийн хувилбарын шошго, тогтоогдоогүй үед v1. Эргэлт хийхдээ өсгөнө |
QUIRE_MASTER_KEY_RETIRED |
Өмнөх мастер түлхүүрүүд — тэдний оруулсныг уншихад хэрэгтэй хэвээр байгаа нь, v1=<base64> хэлбэрээр. Эргэлт дуусаад шийдвэрлэгдээгүй зүйлгүй болсны дараа арилгана |
QUIRE_COLLAB_SIGNING_KEY |
Web болон collab-аар хуваалцагдаж засах token-уудыг гарын үсэглэхэд |
QUIRE_BACKUP_SIGNING_KEY |
Сургалтын нөөцлөлтүүдийг гарын үсэглэнэ (сонголттой) |
QUIRE_MASTER_KEY-н хуулбарыг энэ хостоос өөр газар хадгалаарай. Үгүйгээр сэргээсэн өгөгдлийн сан хадгалж буй итгэмжлэлүүдээ задалж чадахгүй.
Өгөгдлийн сан
| Тохиргоо | Утга |
|---|---|
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, суулгалтын насан туршид тогтмол |
Үүргийн нууц үгүүд зөвхөн өгөгдлийн сангийн volume анх үүсгэгдэхэд хэрэглэгдэнэ. Дараа нь солихын тулд ALTER ROLE ашиглаад, дараа нь тохирох URL-ийг шинэчлэнэ үү.
QUIRE_REPORT_DATABASE_URL нь DATABASE_URL-аар тохируулагдсан физик өгөгдлийн санд ашиглагдана. Бусад ямар ч бүртгэгдсэн физик өгөгдлийн санд веб болон worker орчинд өөрийн quire_report холболтын URL-ийг тогтооод, дараа нь хувьсагчийн нэрийг тэр өгөгдлийн сангийн Тайлангийн орчны хувьсагч талбарт env:NAME хэлбэрээр оруулна уу. Иш нь өөрийн аппликейшн холболттой адил өгөгдлийн санг заах ёстой — боломж бол өөрийн унших реплика. Бүх тайлангийн гадаргуу түрээсчийг өөрийн өгөгдлийн сангийн тайлангийн холболт руу дагадаг: тайлангийн үүсгэгч, хадгалсан тайлан, товлосон хүргэлт, тайлангийн экспорт, шинжилгээ, аудит лог, REST аудит нөөцүүд, мөн туслахын аудит хайлт. Тэдгээрийн аль нь ч өөр өгөгдлийн сангийн тайлангийн URL-ийг хэзээ ч зээлдэггүй. Өгөгдлийн санд тайлангийн холболтгүй бол энгийн тайлангууд тэр өгөгдлийн сангийн өөрийн аппликейшн холболтоор ажиллах бөгөөд шинжилгээ болон бүх аудит уншлага татгалзаж, үүнийг хэлнэ — учир нь аппликейшнийн үүрэг аудитын мөрийг унших чадваргүй.
Драйверүүд
| Тохиргоо | Энэ хувилбар | Тэмдэглэл |
|---|---|---|
QUIRE_STORAGE_DRIVER |
local (өгөгдсөн), s3 эсвэл azure |
local нь файлуудыг files volume-д барьна. s3 нь AWS S3, R2, GCS interoperability болон бусад S3-тай тохирох хадгалалтуудыг, үргэлжлүүлж болох multipart байршуулалттай хамт хамрана |
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 профайл болон дээрх тохиргоонууд хэрэгтэй; 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-ийн таслагын жагсаалт |
Платформын өгөгдсөн өгөгч уулзалтуудыг хаана боловсруулдаг вэ. Тогтоогдоогүй үед бүсэд бэхэлэгдсэн байгууллагатай харьцуулагдахгүй — өмнөх шигээр. Байгууллагын өөрийн данс өөрийн хуудас дээрээ бүсүүдээ тэмдэглэнэ |
Энэ хувилбарт багтаагүй драйверийн утга веб түвшин эхлэх үед татгалзагдах бөгөөд тохиргоог нэрлэх бөгөөд өгөгдсөнөөр нь дуугүй солигдохгүй.
Зургууд
Хуудсууд зургийг дөрвөн тогтсон хэмжээгээр /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 профайл үүнийг QUIRE_IMAGES_PORT (8082) дээр нийтлэнэ |
IMGPROXY_KEY, IMGPROXY_SALT |
imgproxy |
Шигтгээт мөрүүд, imgproxy эхэлдэгтэй ижил утгууд. Бүрнийг openssl rand -hex 32-оор үүсгэнэ үү. Quire бүх зурагийн хаягийг тэдгээрээр гарын үсэглэдэг тул imgproxy Quire хүсээгүй зүйлийг дүрсэлдэггүй |
QUIRE_IMAGE_SOURCE_ORIGIN |
imgproxy ба local хадгалалт |
imgproxy анхны файлуудыг хаанаас татдаг вэ. Compose http://web:3000 тогтоодог. s3 эсвэл azure хадгалалттай бол imgproxy савнаас татдаг бөгөөд үүнийг ашиглахгүй |
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH |
cloudflare |
Images засах эрхтэй API token, мөн Images, Developer resources-аас авсан дансны хэш. Дансанд уян хатан хувилбаруудыг нээнэ үү |
CLOUDFLARE_IMAGES_SIGNING_KEY |
cloudflare |
Сонголттой. Тогтоогдсон үед зургууд нууц байх бөгөөд бүх хаяг гарын үсэглэгдэж, хугацаа нь дуусна. Үгүй бол зургууд нийтлэг бөгөөд QUIRE_SECRET_KEY-ээс гарган авсан, хэн ч тааж чадахгүй хаягуудтай байдаг |
Cloudflare Images нь үйлчилж буй анхны файл бүрийн өөрийн хуулбарыг хадгалдаг. Файл устгагдахад worker тэр хуулбарыг анхны файлаасаа өмнө устгадаг.
Ээлж
Арын ажлууд ижил PostgreSQL өгөгдлийн сан дээр pg-boss ашигладаг тул ажиллуулах ээлжийн үйлчилгээ, тохируулах зүйлгүй. Ажлууд үүнийг үүсгэсэн өөрчлөлттэй ижил гүйлгээнд ээлжлэгддэг тул осол нэгийг нь алдах эсвэл хоёр удаа илгээх чадахгүй. QUIRE_QUEUE_DRIVER энд pgboss — өгөгдсөн утга нь; vercel болон cloudflare зөвхөн хөнгөн мэдэгдэл болон вебхүүкийн хүргэлтүүдийг платформын өөрийн ээлж рүү шилжүүлдэг бөгөөд Vercel, Cloudflare гарын авлагууд тэдгээрийг болон тэдний веб түвшин хэрхэн ээлжлдэгийг тайлбарлана.
Имэйл
Дараагуудаас нэгийг тохируулна уу:
QUIRE_EMAIL_PROVIDER_CONFIG: HTTP өгөгч, түүний итгэмжлэлийг нэрлэсэн JSON объект — жишээ нь{"provider":"postmark","token":"..."}. Postmark, Amazon SES, Mailgun, SendGrid, Resend дэмжигдэнэ.QUIRE_SMTP_URL:smtp://user:password@host:587. Зөвхөн энэ зорилт; serverless зорилтууд SMTP-г хаадаг.
QUIRE_MAIL_FROM нь илгээгч. Quire-г туршихын тулд devmail профайлыг эхлүүлээд, QUIRE_SMTP_URL=smtp://mailpit:1025 тогтоогоод, имэйлийг http://localhost:8025 дээр уншина уу.
Сонголттой үйлчилгээнүүд
| Тохиргоо | Профайлтай |
|---|---|
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-г заана |
Ажиглалт
OTEL_EXPORTER_OTLP_ENDPOINT нь бүх процесс мөр болон хэмжигдэхүүдээ илгээдэг коллекторыг нэрлэнэ; observability профайлын үед http://otelcol:4318 байх бөгөөд docker/otel-collector.yaml нь та өөрийн backend-д зориулсан экспортлогчийг нэмдэг газар юм. Энэ тогтоогдсон үед веб түвшин, worker, scheduler, content, collab процесууд OTLP/HTTP-ээр span-уудыг (веб хүсэлт, түрээсчийн өгөгдлийн сангийн гүйлгээ, worker ажлууд, гарсан дуудлагууд) экспортолж, ижил endpoint-д хэмжигдэхүүдийг минут тутам илгээнэ (OTEL_METRICS_EXPORTER=none тэдгээрийг унтраадаг). OTEL_TRACES_SAMPLER_ARG нь хадгалагдсан мөрүүдийн хувийг тогтоодог. Логууд LOG_LEVEL-оор стандарт гаралт руу явна, мөн Compose тэдгээрийг эргэлдүүлдэг. Мөрүүд хэзээ ч хувийн өгөгдөл ачдаггүй.
Бүс нутгийн гарц (ЕХ-ны өгөгдлийн байршил)
QUIRE_REGION=eu нь багц Европын Холбооны байгууллагуудад үйлчилдэг гэдгийг хэлнэ. Дараа нь ажилч нь ЕХ-д бэхэлэгдсэн байгууллагаар хийгдсэн бүх гарсан хүсэлтийг зөвшөөрөгдсөн жагсаалтад барина (21-compliance.md хэсэг 8.1). Зөвшөөрөгдсөн жагсаалт нь тохируулсан үйлчилгээнүүд бүс нутгийнхаа тулд зарладаг хостууд (хадгалалтын endpoint, имэйлийн өгөгч, хостлогдсон видео өгөгч, байгууллагын өөрийн хадгалалтын зорилтууд, AI өгөгчүүд, имэйлийн данс), идэвхтэй хөнгөлөлттэй ямар ч үйлчилгээний хостууд, мөн та QUIRE_EGRESS_ALLOW_HOSTS-д жагсаасан хостууд юм. Бусад ямар ч нийтлэг хост руугийн хүсэлт илгээгдэхээс өмнө татгалзагдаж, татгалз нь байгууллагын аудитын мөр дээр privacy/egress_refused байдлаар бичигдэж, Compliance, Өгөгдлийн байршил дор жагсаагдана.
| Тохиргоо | Утгууд | Үр дүн |
|---|---|---|
QUIRE_EGRESS_ALLOW_HOSTS |
Хост нэрүүдийн таслагын жагсаалт, эсвэл бүх дэд домейний хувьд *.example.org |
ЕХ-н байгууллага хүрч болох нэмэлт хостууд. Вебхүүк, xAPI, SIEM endpoint-үүд, блогийн тэжээл, Amazon SES хостууд энд багтах ёстой — учир нь тэд байгууллагын өөрийн сонголт бөгөөд ямар ч үйлчилгээ тэдгээрийг зарладаггүй. Loopback, хувийн хаягууд, мөн web эсвэл clamav шиг нэг үгтэй нэрүүд нь таны өөрийн сүлжээ бөгөөд хэзээ ч шалгагдахгүй |
Их Британи, Америкийн байгууллагууд хостын жагсаалтад хүлээгдэхгүй; тэд үйлчилгээний бүс нутгийн шалгалтуудаа хадгална. Жагсаалтыг ажилч дээр тогтооно уу; администраторын хуудас үүнийг веб түвшин дээр уншиж зөвшөөрөгдсөн жагсаалтыг харуулдаг тул үүнийг бүх үйлчилгээ уншдаг docker/.env-д тавина уу.
Програмын шалгалт тодорхой алдаа болон аудит бичлэг өгдөг бөгөөд энэ нь баталгаа биш: код буруу байж болно. Баталгаа нь сүлжээ юм. Compose үүнийг таны өмнөөс хэрэгжүүлдэггүй. Бүс нутгийн багцын хувьд worker болон web үйлчилгээнүүдийг зөвхөн гарцын зам нь гарц прокси (жишээ нь Squid эсвэл tinyproxy контейнер) байх internal: true сүлжээнд тавиад — тэр прокси нь QUIRE_EGRESS_ALLOW_HOSTS-тэй ижил хостууд, мөн тохируулсан үйлчилгээнүүдийн хостуудыг зөвшөөрөх бөгөөд тэдгээр үйлчилгээнүүдэд HTTPS_PROXY тогтооно уу. Тэгээд хоёр жагсаалтыг харьцуулж болно. Байршиллагын хуудас програм зөвшөөрдөг яг тэр хостуудыг жагсаадаг тул тэдгээрийг харьцуулж болно.
Эрүүл мэнд
| Endpoint | Утга |
|---|---|
/healthz |
Амьд байдал: процесс хариулна. Compose-ийн эрүүл мэндийн шалгалт үүнийг ашиглана |
/readyz |
Бэлэн байдал: хамааралтууд хүртээмжтэй, мөн сонголттой үйлчилгээ бүр тохируулагдсан эсэхээ тайлагдсан. Ачаалал тэнцвэрүүлэгчээ энд чиглүүлнэ үү |
docker compose -f docker/compose.yaml ps нь үйлчилгээ бүрийн эрүүл мэндийг харуулна.
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 профайлаар (IMGPROXY_URL) |
init-env.sh нь хоёр origin-ээс QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL, IMGPROXY_URL-ийг гарган авдаг тул тэд салж чадахгүй. Гараар origin өөрчилбөл хамтдаа засна уу.
Гэрчилгээнүүд QUIRE_PROXY_TLS-ийг дагана:
-
internal(өгөгдсөн): Caddy-н өөрийн гэрчилгээний эрх —localhost,*.localhost,lvh.me-н хувьд. Үүнийг үндсэнд нь нэг удаа итгээд, дараа нь хөтлөнө үү:docker compose -f docker/compose.yaml cp \ proxy:/data/caddy/pki/authorities/local/root.crt ./quire-local-ca.crtquire-local-ca.crt-ийг систем эсвэл хөтөчийн итгэлийн санд нэмнэ үү.curlнь үүнийг--cacert-аар авна. -
Имэйл хаяг: бодит нэртэй домейнүүдэд автомат ACME гэрчилгээнүүд (Let’s Encrypt, дараа нь ZeroSSL). Хоёр origin, бүр түрээсчийн хостын DNS энд заах ёстой бөгөөд 80, 443 портууд интернетээс хүртээмжтэй байх ёстой.
Түрээсчийн хостууд шаардлагын дагуу, анхны зочлолтоор, мөн зөвхөн web энэ нэр нь энэ суулгалтын хувь гэдгийг баталгаажуулсны дараа (/tls-allowed, Compose сүлжээнээс асуугддаг) олгогддог. Юмар ч шаардлагагүй бөгөөд хост руу гадны хүн нэр зааж ч гэрчилгээ хүсэхэд чадахгүй. Гэрчилгээнүүд болон орон нутгийн эрх caddy-data volume-д байрлана; internal ашиглаж байвал бусадтайгаа хамт нөөцлөнө үү.
Web нь проксиээс л X-Forwarded-For-ийг итгэдэг: проксиг тогтсон хаягтай (QUIRE_PROXY_ADDRESS, өгөгдсөнөөр 172.29.64.10) тогтсон дэд сүлжээтэй (QUIRE_COMPOSE_SUBNET) байдаг бөгөөд QUIRE_TRUSTED_PROXY_CIDRS тэр хаягийг нэрлэнэ. Хэрэв дэд сүлжээ хостын сүлжээтэй зөрвөл хоёуланг нь өөрчлөөд docker compose down-ийг up-аас өмнө ажиллуулна уу.
Өөрийн эсрэг проксигийн ард
Аль хэдийн ажиллуулж буй ачаалал тэнцвэрүүлэгч эсвэл прокси ашиглахын тулд 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-д тогтооно уу.
Алдаа шийдвэрлэх
init“QUIRE_DATABASE_ID is not a UUID” мэдэгдэлтэйгээр гарна: үүнийгuuidgen-аар тогтооно уу.web“did not start on compose” мэдэгдэлтэйгээр дахин ачаалагдана: лог нь чадахгүй байгаа тохиргоо бүрийг болон оронд нь юу ашиглахыг жагсаана.- Анхны ажиллагааны дараа
.envдээр үүргийн нууц үг өөрчилсөн нь юу ч хийхгүй: эхлүүлэх скрипт нэг удаа ажиллана.ALTER ROLEашиглаарай. CLAMAV_URLтогтоогдсон үед байршуулалт сканерын алдаатай амжилтгүй болдог: ClamAV анхны ажиллагаандаа шинжүүдээ татдаг бөгөөд энэ нь хэдэн минут шаарддаг.