Lele i ka ʻike

Hoʻouka iā Quire me Docker Compose

Hoʻouka iā Quire ma kāu ʻōnaehana ponoʻī me Docker Compose.

Nānā ma ke ʻano Markdown

ʻO kēia ka huahana piha ma hoʻokahi host: ka LMS, kāna mau hana hope, nā lawelawe manawa maoli a hoʻoponopono hui, a me kēlā me kēia lawelawe koho ma lalo o profile. Aia ka hoʻolālā ma ka māhele 2 o docs/architecture/23-ops.md.

Nā pahuhopu ʻē aʻe: holo wale ʻo Vercel a me Cloudflare Workers i ka papa pūnaewele. Aia nā hōʻano hou ma upgrade.md, a me nā papaʻa a me ka hoʻāʻo hoʻihoʻi ma backup-restore.md.

Nā mea e pono ai

  • Docker Engine 27 a ʻoi aku me ka plugin Compose 2.30 a ʻoi aku.
  • 4 mau kumu CPU a me 8 GB hoʻomanaʻo no ka stack paʻamau; 8 kumu a me 16 GB me --profile full (paʻa ʻo ClamAV hoʻokahi i kahi o 1.5 GB o nā pūlima).
  • He inoa DNS no ka papa pūnaewele a he inoa lua no ka ʻike hilinaʻi ʻole. Pono lākou he host ʻokoʻa: holo nā pūʻolo SCORM a me ka HTML i hoʻouka ʻia ma ka origin ʻike, no laila ʻaʻole loa lākou e heluhelu i nā kuki LMS.
  • No ka hoʻāʻo kūloko, hoʻonā ʻia ʻo lvh.me a me *.localhost i 127.0.0.1, e like me ka hoʻonohonoho a docker/.env.example. Lawelawe ka proxy ponoʻī o ka stack iā lāua ma https me ka mana hōʻoia kūloko, no laila ʻaʻohe mea ʻē aʻe e hoʻouka ai (e nānā iā «TLS»).
  • E hoʻokuʻu i nā awa 80 a me 443 ma ka host (QUIRE_PROXY_HTTP_PORT a me QUIRE_PROXY_HTTPS_PORT e hoʻoneʻe iā lākou).

Hoʻomaka mua

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

Kākau ʻo docker/scripts/init-env.sh iā docker/.env mai docker/.env.example me ka hana ʻana i nā ʻōlelo huna malu a pau (nā ʻōlelo huna waihona ʻikepili, nā kī pūlima a haku, nā kī pālua hoʻomaka ʻike) a me ke kī pūlima māka hōʻoia ma docker/secrets/audit-signing-key.pem, a kau ʻo Compose ia i loko o nā worker ma ke ʻano he ʻōlelo huna malu. Pono wale iā sh, awk, a me openssl, ʻaʻole hoʻi e kākau ma luna o docker/.env e kū nei. E kope i nā faila ʻelua ma waho o ka host: me ka ʻole o QUIRE_MASTER_KEY, ʻaʻole hiki i ka waihona ʻikepili i hoʻihoʻi ʻia ke wehe i nā palapala hōʻoia i mālama ʻia. No ka hoʻopiha lima ʻana i ka faila, e hoʻohana iā cp docker/.env.example docker/.env; hōʻike ka faila i ka hana ʻana i kēlā me kēia ʻōlelo huna malu.

Pono nā origin ʻelua he https: hōʻole ka lawelawe ʻike i ka http maʻalahi i ka hana, ʻaʻole hoʻi e kaʻana i ka domain registrable hoʻokahi. Hoʻopau ka lawelawe proxy i ka TLS no lāua (e nānā iā «TLS»); hōʻole ʻo init-env.sh i origin http://.

Hoʻomaka ka stack ma ke kaʻina paʻa, a kali kēlā me kēia ʻanuʻu i ka mea ma mua:

  1. Ola ʻo postgres. Ma ka hoʻomaka mua loa, hoʻonoho kāna script hoʻomaka (docker/postgres/init/90-passwords.sh) i nā ʻōlelo huna kuleana ʻehā.
  2. Hoʻohana ʻo migrate i kēlā me kēia neʻe a hoʻomaka i ka queue hana ma ka waihona ʻikepili hoʻomalu a me kēlā me kēia waihona tenant hoʻolaʻa; nānā i ko lākou kūlike, a puka (docs/ops/upgrade.md). Holo nā neʻe i kēlā me kēia hoʻomaka a hana hoʻokahi wale nō, no laila he kiʻi hou a hoʻomaka hou ka hōʻano hou.
  3. Hoʻopaʻa ʻo init (apps/web/src/first-run.ts) i ka waihona ʻikepili polokalamu ma lalo o QUIRE_DATABASE_ID; a ke hoʻonoho ʻia ʻo QUIRE_SETUP_ADMIN_EMAIL, hana i hui mua a me kona luna hoʻomalu. Paʻi ʻia hoʻokahi manawa ka helu wahi komo a me ka ʻōlelo huna i hana ʻia, ma docker compose logs init.
  4. Hoʻomaka ʻo web, content, worker, scheduler, collab, a me centrifugo.
  5. Hoʻomaka ʻo proxy ke ola ʻo web a me content.

E wehe iā https://demo. a ukali ʻia e kāu domain polokalamu (paʻi ka moʻolelo init i ka helu wahi komo pololei), a komo. Ma kahi hoʻouka kūloko, hilinaʻi mua i ka mana hōʻoia a ka proxy (e nānā iā «TLS»). E hoʻololi i ka ʻōlelo huna i hana ʻia ma /account/security.

Hōʻole kekahi kaʻina i hoʻomaka me ka ʻōlelo huna malu pono ʻole e hoʻomaka, a kapa i ka hoʻonohonoho i nele ma kāna moʻolelo. ʻAʻohe mea e hoʻomaka me ka hoʻonohonoho hapa.

Nā lawelawe a me nā profile

Lawelawe Profile Hana
postgres mau Ka waihona ʻikepili (PostgreSQL 18 me pgvector, i kūkulu ʻia mai docker/postgres.Dockerfile), me ka waihona WAL mai ka hoʻomaka mua
migrate, init mau Hana hoʻokahi: neʻe ʻikepili, a laila hoʻomaka mua
web mau LMS, ma QUIRE_HTTP_PORT (8080)
content mau Origin ʻike hilinaʻi ʻole, ma QUIRE_CONTENT_PORT (8081)
worker mau Nā hana hope: leka uila, hōʻike, hoʻoponopono faila, a me nā webhook
scheduler mau Nā hana hoʻihoʻi: hoʻopaʻa i nā papa manawa holo 64 a hāʻawi i nā worker; hoʻokahi alakaʻi i ka manawa
collab mau Websocket hoʻoponopono hui, ma QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo mau Hoʻolaha manawa maoli, ma QUIRE_REALTIME_PORT (8000)
proxy mau Caddy, ka puka mua TLS ma nā awa 80 a me 443 (e nānā iā «TLS»)
valkey cache Cache a me nā palena kāhea
clamav scan Nānā malware i nā mea hoʻouka
gotenberg preview Nānā mua Office ma PDF, unuhi palapala hōʻoia
imgproxy images Hoʻololi nui a ʻano kiʻi
transcoder video Kiʻi worker me ffmpeg LGPL wale nō no nā ʻano wikiō
seaweedfs storage Waihona mea kūlike S3 ma kēia host
otelcol observability Mea hōʻiliʻili OpenTelemetry
mailpit devmail Hopu i nā leka puka a pau no ka hoʻāʻo iā Quire
backup backup Papaʻa kumu hana hoʻokahi; e nānā iā backup-restore.md
backup-scheduler, backup-offsite backup Papaʻa kumu i kēlā me kēia QUIRE_BACKUP_INTERVAL_HOURS, a me nā kope hoʻopāʻālua waho me ka hoʻāʻo hōʻoia pule
h5p h5p Kiʻi lako H5P LTI 1.3 āu e hoʻolako ai ma QUIRE_H5P_IMAGE, ma QUIRE_H5P_PORT (8090); e nānā iā «Hoʻohui i mea hoʻolako H5P»

Hoʻomaka ʻo --profile full i kēlā me kēia lawelawe koho koe ʻo backup a me h5p. Hoʻomaka i hoʻokahi me docker compose -f docker/compose.yaml --profile scan up -d. Holo nō ʻo Quire me ka ʻole o kekahi lawelawe koho a hōʻike i ka mea e nele ana: me ka scanner ʻole, mālama ʻia nā hoʻouka me ka nānā ʻole a hoʻomaopopo ʻia ka luna hoʻomalu; me ka ʻole o Gotenberg, hāʻawi ʻia ka hoʻoiho faila ma kahi o ka nānā mua; me ka ʻole o ka transcoder, pāʻani ʻia ka wikiō e like me ka faila kumu.

Papa inoa ʻo docker/third-party-containers.yaml i kēlā me kēia kiʻi ʻaoʻao ʻekolu a me kona mau kuleana laikini.

Hoʻohui i mea hoʻolako H5P

ʻAʻole hoʻokomo a hoʻouna ʻo Quire i ʻenekini holo H5P a i ʻole sidecar (ADR 0019). Inā hoʻohana ʻoe iā H5P, hoʻolako i kāu kau inoa hoʻokipa ponoʻī a mālama paha i kāu laʻana H5P ponoʻī i hoʻokaʻawale ʻia mai Quire. E hoʻopaʻa inoa i ia mea hoʻolako ma ke ʻano he lako waho LTI 1.3 a hoʻohui i kona ʻike i nā papa ma ke ʻano he hana lako. Hoʻololi ʻo Quire i nā māka a me ka holomua hana/helu ma o LTI Assignment and Grade Services (AGS). Inā hoʻouna pū ka mea hoʻolako i nā ʻōlelo xAPI, hoʻonohonoho kaʻawale i ia mea no ka waihona ʻōlelo xAPI a Quire; ʻaʻole hoʻouna ka hoʻololi māka/holomua AGS i nā ʻōlelo xAPI. Hōʻike nā hoʻokomo Moodle i nā hana H5P e pono ai ka pilina lako LTI. Na ka mea hoʻolako e mālama i kāna ʻenekini H5P, kākau ʻike, waihona ʻikepili, a me ka mōʻaukala hoʻāʻo.

No ka holo ʻana i kāu laʻana mālama ponoʻī ma kēia host, hoʻonoho iā QUIRE_H5P_IMAGE i kona kiʻi a hoʻomaka i ka profile h5p. Hoʻolaha ʻo Compose iā ia ma QUIRE_H5P_PORT (8090) a mālama i kona ʻikepili ma ka volume h5p-data; nou ke kiʻi a me nā kuleana e pili ana iā ia.

Nā hoʻonohonoho

Heluhelu kēlā me kēia kaʻina iā docker/.env. Papa inoa ka ʻōkuhi docker/.env.example i nā hoʻonohonoho a pau me kā lākou paʻamau. Eia nā pūʻulu:

Nā helu wahi

Hoʻonohonoho Manaʻo
QUIRE_APP_ORIGIN Helu wahi lehulehu o ka LMS, e like me https://learn.example.com
QUIRE_CONTENT_ORIGIN Origin ʻike, he host ʻokoʻa
QUIRE_PLATFORM_DOMAINS Nā domain e noho ai nā hui, i hoʻokaʻawale ʻia me nā koma
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 ma ʻaneʻi. E nānā i nā alakaʻi ʻē aʻe no vercel a me cloudflare
QUIRE_TRUSTED_PROXY_CIDRS Nā proxy i hilinaʻi ʻia ai ko lākou X-Forwarded-For

Nā ʻōlelo huna malu

Hoʻonohonoho Manaʻo
QUIRE_SECRET_KEY Pūlima i nā kau komo a me nā token. 64 huapalapala hex
QUIRE_MASTER_KEY Hoʻopili i nā palapala hōʻoia mālama ʻia e like me SSO a me nā ʻōlelo huna webhook. 32 byte, base64. Pono ka waiwai like i ka papa pūnaewele a me ka worker. Hoʻololi: key-rotation.md
QUIRE_MASTER_KEY_VERSION Lepili mana o ke kī haku, v1 ke ʻole i hoʻonohonoho ʻia. Hoʻonui i ka hoʻololi ʻana
QUIRE_MASTER_KEY_RETIRED Nā kī haku ma mua e pono mau ana e heluhelu i nā mea a lākou i hoʻopaʻa ai, ma ke ʻano v1=<base64>. Wehe ma hope o ka pau ʻana o ka hoʻololi me ka ʻole o kekahi mea i koe
QUIRE_COLLAB_SIGNING_KEY Kaʻana ʻia e web a me collab e pūlima i nā token hoʻoponopono
QUIRE_BACKUP_SIGNING_KEY Pūlima i nā papaʻa papa (koho)

E mālama i kope o QUIRE_MASTER_KEY ma kahi ʻē aʻe, ʻaʻole ma kēia host. ʻAʻole hiki i ka waihona ʻikepili i hoʻihoʻi ʻia me ka ʻole ona ke wehe i nā palapala hōʻoia.

Waihona ʻikepili

Hoʻonohonoho Manaʻo
POSTGRES_PASSWORD Superuser, hoʻohana ʻia e ke ipu a me nā papaʻa
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD Nā ʻōlelo huna kuleana, hoʻonoho ʻia i ka hoʻomaka mua
DATABASE_URL Kuleana polokalamu. Pili ka palekana pae-lālani i kēlā me kēia nīnau āna e hana ai
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL Kuleana neʻe ʻikepili no migrate a me init
QUIRE_SUPERUSER_URL Hoʻohana wale ʻia i ka hoʻomaka mua
QUIRE_REPORT_DATABASE_URL Kuleana hōʻike heluhelu wale nō no nā hōʻike a me ka mea kūkulu hōʻike
QUIRE_AUDIT_DATABASE_URL Kuleana hōʻoia no ka console hōʻoia a me ka hoʻokuʻu SIEM
QUIRE_DATABASE_ID Kekahi UUID, paʻa no ke ola holoʻokoʻa o ka hoʻouka ʻana

Hoʻohana ʻia nā ʻōlelo huna kuleana i ka wā i hana mua ʻia ai ka volume waihona ʻikepili wale nō. No ka hoʻololi ʻana ma hope, hoʻohana iā ALTER ROLE a hōʻano hou i ka URL kūlike.

Hoʻohana ʻia QUIRE_REPORT_DATABASE_URL no ka waihona ʻikepili kino i hoʻonohonoho ʻia e DATABASE_URL. No kekahi waihona ʻikepili kino i hoʻopaʻa inoa ʻia, hoʻonoho i kona URL pilina quire_report ponoʻī ma nā kaiapuni web a worker, a laila hoʻokomo i ka inoa loli i ke kahua Loli kaiapuni hōʻike o ia waihona ma ke ʻano he env:NAME. Pono ke kuhikuhi e kuhikuhi i ka waihona ʻikepili like me ka pilina polokalamu, ʻoi aku ka maikaʻi i kāna replica heluhelu. Hahai nā wahi hōʻike a pau i ka tenant a i ka pilina hōʻike o kona waihona ponoʻī: ka mea kūkulu hōʻike a me nā hōʻike i mālama ʻia, nā hoʻouna manawa, nā hoʻokuʻu hōʻike, ka helu ʻikepili, ka moʻolelo hōʻoia, nā kumuwaiwai hōʻoia REST, a me ka huli hōʻoia a ke kōkua. ʻAʻole loa kekahi o lākou e ʻaiʻē i ka URL hōʻike o kekahi waihona ʻē aʻe. Inā ʻaʻohe pilina hōʻike o kahi waihona, holo nā hōʻike maʻamau ma kona pilina polokalamu ponoʻī; hōʻole ka helu ʻikepili a me kēlā me kēia heluhelu hōʻoia a wehewehe i ke kumu, no ka mea ʻaʻole hiki i ke kuleana polokalamu ke heluhelu i ka moʻolelo hōʻoia.

Nā mea hoʻokele

Hoʻonohonoho Nā koho o kēia mana Nā memo
QUIRE_STORAGE_DRIVER local (paʻamau), s3, a i ʻole azure Mālama ʻo local i nā faila ma ka volume files. Uhi ʻo s3 iā AWS S3, kūlike R2 a me GCS, a me nā waihona ʻē aʻe kūlike S3, me nā hoʻouka multipart hiki ke hoʻomau
QUIRE_REALTIME_DRIVER inprocess (paʻamau), sse, centrifugo, a i ʻole durable_objects Kūpono ʻo inprocess no hoʻokahi ipu web; hoʻohana iā centrifugo a i ʻole sse ke nui nā ipu
QUIRE_CACHE_DRIVER memory (paʻamau), postgres, a i ʻole valkey No kēlā me kēia kaʻina ʻo memory; hoʻohana iā valkey a i ʻole postgres i paʻa nā palena kāhea ma waena o nā ipu
QUIRE_VIDEO_DRIVER ffmpeg (paʻamau) a i ʻole progressive_mp4 A i ʻole mea hoʻolako hoʻokipa: Cloudflare Stream, Mux, a i ʻole Bunny ma o kā lākou mau kī
QUIRE_IMAGE_DRIVER noop (paʻamau), imgproxy, a i ʻole cloudflare Hāʻawi ʻo noop i kēlā me kēia kiʻi ma kona nui kumu. Pono ʻo imgproxy i ka profile images a me nā hoʻonohonoho ma lalo; hoʻohana ʻo cloudflare iā Cloudflare Images
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi, a i ʻole in_process Mea hoʻolako paʻamau paepae no nā hālāwai ola. Inā waiho hakahaka ʻia, hōʻike nā hālāwai ola ʻaʻole i hoʻonohonoho ʻia a hoʻohui ka hui i kona moʻokāki ma Nā hoʻohui, Mea hoʻolako hālāwai ola. Lanakila mau ka moʻokāki ponoʻī o ka hui ma luna o kēia waiwai. Heluhelu ʻia nā hoʻonohonoho ponoʻī o ka mea hoʻolako (BBB_URL a me BBB_SECRET, nā loli ZOOM_*, TEAMS_*, GOOGLE_MEET_*, a me JITSI_*) no ka mea hoʻolako i kapa ʻia ma ʻaneʻi wale nō
QUIRE_MEETING_REGIONS Papa koma o eu, uk, us Nā wahi e hana ai ka mea hoʻolako paʻamau paepae i nā hālāwai. Inā waiho hakahaka ʻia, ʻaʻole nānā ʻia e kūʻē i ka hui i hoʻopaʻa ʻia i ʻāpana, e like me ma mua. Hōʻike ka ʻaoʻao o ka moʻokāki ponoʻī i nā wahi o ka hui

Hōʻole ʻia kekahi waiwai mea hoʻokele i loaʻa ʻole ma kēia mana i ka hoʻomaka ʻana o ka papa pūnaewele me ka inoa o ka hoʻonohonoho, ʻaʻole pani mālie ʻia e ka paʻamau.

Nā kiʻi

Noi nā ʻaoʻao i nā kiʻi ma nā nui paʻa ʻehā ma o /api/files/{id}/image/{size}, nānā kēia i ka ʻae like me ka faila ponoʻī, a laila hoʻohuli i ka lawelawe kiʻi. Hiki i kēlā me kēia hui ke noi i QUIRE_IMAGE_SPECS_PER_HOUR (2000 ma ke ʻano paʻamau) pālua kiʻi a nui hou i kēlā me kēia hola; ʻaʻole helu ʻia nā nui i hana mua ʻia i ia hola. E hoʻohana iā valkey a i ʻole postgres no QUIRE_CACHE_DRIVER me nā ipu web he nui, i pili ai ka palena iā lākou a pau.

Hoʻonohonoho Mea hoʻokele Nā memo
IMGPROXY_URL imgproxy Helu wahi e hiki ai nā polokalamu kele pūnaewele iā imgproxy, e laʻa me https://images.example.org. Hoʻolaha ka profile images iā ia ma QUIRE_IMAGES_PORT (8082)
IMGPROXY_KEY, IMGPROXY_SALT imgproxy Nā kaula hex, nā waiwai like a imgproxy i hoʻomaka ai. Hana i kēlā me kēia me openssl rand -hex 32. Pūlima ʻo Quire i kēlā me kēia helu wahi kiʻi me lāua, no laila ʻaʻole hāʻawi ʻo imgproxy i kiʻi a Quire i noi ʻole ai
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy me ka waihona kūloko Kahi e kiʻi ai ʻo imgproxy i nā kumu kiʻi. Hoʻonoho ʻo Compose iā http://web:3000. Me ka waihona s3 a i ʻole azure, kiʻi ʻo imgproxy mai ka bucket a ʻaʻole hoʻohana ʻia kēia
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare Token API me ka ʻae hoʻoponopono Images, a me ka hash moʻokāki mai Images, Developer resources. E hoʻā i nā ʻano loli maʻalahi no ka moʻokāki
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare Koho. Ke hoʻonoho ʻia, pilikino nā kiʻi a pūlima ʻia a pau nā helu wahi. Me ka ʻole ona, lehulehu nā kiʻi ma nā helu wahi i loaʻa mai QUIRE_SECRET_KEY ʻaʻole hiki i kekahi ke kuhi

Mālama ʻo Cloudflare Images i kope ponoʻī o kēlā me kēia kiʻi kumu āna e hāʻawi ai. Ke holoi ʻia kekahi faila, holoi ka worker i kēlā kope ma mua o ke kumu.

Queue

Hoʻohana nā hana hope iā pg-boss ma ka waihona Postgres like, no laila ʻaʻohe lawelawe queue e holo a hoʻonohonoho ai. Hoʻokomo ʻia nā hana ma ka hana ʻikepili like me ka hoʻololi nāna lākou i hoʻomaka, no laila ʻaʻole hiki i ka hāʻule ke nalowale a hoʻouna pālua paha. Paʻamau ʻo QUIRE_QUEUE_DRIVER ma kēia pahuhopu i pgboss; hoʻoneʻe ʻo vercel a me cloudflare i nā hoʻomaopopo māmā a me nā hoʻouna webhook wale nō i ka queue ponoʻī o ka paepae, a wehewehe nā alakaʻi Vercel a Cloudflare iā lākou a me ka hoʻokomo ʻana a kā lākou mau papa pūnaewele.

Leka uila

E hoʻonoho i kekahi o kēia:

  • QUIRE_EMAIL_PROVIDER_CONFIG: mea JSON e kapa ana i mea hoʻolako HTTP a me kona mau palapala hōʻoia, e like me {"provider":"postmark","token":"..."}. Kākoʻo ʻia ʻo Postmark, Amazon SES, Mailgun, SendGrid, a me Resend.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. No kēia pahuhopu wale nō; pāpā nā pahuhopu serverless iā SMTP.

ʻO QUIRE_MAIL_FROM ka mea hoʻouna. No ka hoʻāʻo ʻana iā Quire, hoʻomaka i ka profile devmail, hoʻonoho iā QUIRE_SMTP_URL=smtp://mailpit:1025, a heluhelu i ka leka ma http://localhost:8025.

Nā lawelawe koho

Hoʻonohonoho Me ka 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 a i ʻole QUIRE_MEILISEARCH_URL Huli waho; i ʻole, kikokikona piha Postgres
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Nānā ʻōlelo huna haki. Hoʻā paʻamau ʻia ma api.pwnedpasswords.com (hoʻouna ʻia ka prefix hash ʻelima huapalapala wale nō); hoʻopau ʻo off iā ia, a kuhikuhi ka URL i API range āu e mālama ai

Nānā ʻōnaehana

Kapa ʻo OTEL_EXPORTER_OTLP_ENDPOINT i ka mea hōʻiliʻili a nā kaʻina a pau e hoʻouna ai i nā kaha a me nā ana; me ka profile observability, ʻo ia ʻo http://otelcol:4318, a ma docker/otel-collector.yaml ʻoe e hoʻohui ai i ka exporter backend. Hoʻouna nā kaʻina web, worker, scheduler, content, a me collab i nā spans ma OTLP/HTTP (nā noi pūnaewele, nā hana waihona ʻikepili tenant, nā hana worker, a me nā kāhea puka) ke hoʻonoho ʻia, a me nā ana i kēlā me kēia minuke i ka endpoint like (OTEL_METRICS_EXPORTER=none e hoʻopau iā lākou). Hoʻonoho ʻo OTEL_TRACES_SAMPLER_ARG i ka mahele o nā kaha e mālama ʻia. Hele nā moʻolelo i ka puka maʻamau ma ka pae LOG_LEVEL, a hoʻololi ʻo Compose iā lākou. ʻAʻohe ʻike pilikino i loko o nā kaha.

Puka ʻāpana (noho ʻikepili EU)

Hōʻike ʻo QUIRE_REGION=eu i ka lawelawe ʻana o ka stack i nā hui ʻEulopa. Hoʻopaʻa ka worker i kēlā me kēia noi puka no kahi hui i hoʻopaʻa ʻia i ka EU i papa inoa ʻae ʻia (māhele 8.1 o 21-compliance.md). ʻO nā host ma ka papa inoa nā mea a nā lawelawe i hoʻonohonoho ʻia e hoʻolaha ai no ka ʻāpana (endpoint waihona, mea hoʻolako leka uila, mea hoʻolako wikiō hoʻokipa, nā pahuhopu waihona ponoʻī o ka hui, nā mea hoʻolako AI a me ka moʻokāki leka uila), nā host o nā lawelawe ma lalo o ʻae kūikawā hana, a me nā host āu e papa inoa ai ma QUIRE_EGRESS_ALLOW_HOSTS. Hōʻole ʻia kekahi noi i host lehulehu ʻē aʻe ma mua o ka hoʻouna ʻana; kākau ʻia ka hōʻole ma ke kaulahao hōʻoia hui ma ke ʻano he privacy/egress_refused, a helu ʻia ma Ka mālama ʻana, Noho ʻikepili.

Hoʻonohonoho Waiwai Hopena
QUIRE_EGRESS_ALLOW_HOSTS Papa koma inoa host, a i ʻole *.example.org no kēlā me kēia subdomain Nā host hou hiki i hui EU ke kiʻi. Aia nā endpoint webhook, xAPI, a SIEM, nā hānai blog, a me nā host Amazon SES ma ʻaneʻi, no ka mea na ka hui lākou i koho ai a ʻaʻole i hoʻolaha ʻia e kekahi lawelawe. ʻAʻole nānā ʻia ka loopback, nā helu kūloko pilikino, a me nā inoa lepili hoʻokahi e like me web a i ʻole clamav, no ka mea no kāu pūnaewele ponoʻī lākou

ʻAʻole hoʻopaʻa ʻia nā hui UK a me US i ka papa inoa host; mālama lākou i nā nānā ʻāpana lawelawe. E hoʻonoho i ka papa inoa ma ka worker; heluhelu ka ʻaoʻao admin iā ia ma ka papa pūnaewele e hōʻike i ka papa inoa ʻae ʻia, no laila e hoʻokomo i docker/.env i heluhelu ʻia e kēlā me kēia lawelawe.

Hāʻawi ka nānā polokalamu i hewa maopopo a me komo hōʻoia, akā ʻaʻole ia ka palekana paʻa: hiki ke hewa ke code. ʻO ka pūnaewele ka palekana. ʻAʻole hoʻokō ʻo Compose iā ia no ʻoe. No ka stack ʻāpana, e kau i nā lawelawe worker a me web ma kahi pūnaewele internal: true nona ke ala puka hoʻokahi ma o proxy puka (e laʻa me Squid a i ʻole ipu tinyproxy) e ʻae ana i nā host like me QUIRE_EGRESS_ALLOW_HOSTS a me nā host o kāu mau lawelawe i hoʻonohonoho ʻia; hoʻonoho iā HTTPS_PROXY no ia mau lawelawe. Papa inoa ka ʻaoʻao noho i nā host pololei a ka polokalamu e ʻae ai, i hiki ke hoʻohālikelike i nā papa inoa ʻelua.

Ola

Endpoint Manaʻo
/healthz Ola: pane ke kaʻina. Hoʻohana nā nānā ola Compose iā ia
/readyz Mākaukau: hiki ke kiʻi i nā hilinaʻi a hōʻike kēlā me kēia lawelawe koho inā ua hoʻonohonoho ʻia. Kuhikuhi i kāu mea kaulike ukana iā ia

Hōʻike ʻo docker compose -f docker/compose.yaml ps i ke kūlana olakino o kēlā me kēia lawelawe.

TLS

He māhele ka lawelawe proxy (Caddy, Apache-2.0, docker/caddy/Caddyfile) o ka stack paʻamau. Pane ia ma nā awa 80 a me 443 a hoʻouna:

Host a ala paha Hoʻouna i
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, kēlā me kēia subdomain tenant a me domain maʻamau web
/_collab/ ma ia mau host collab (websocket, QUIRE_COLLAB_URL)
/_realtime/connection/ ma ia mau host websocket client a centrifugo; ʻaʻole loa e hōʻike ʻia kona API kikowaena
/_images/ ma ia mau host imgproxy, me ka profile images (IMGPROXY_URL)

Loaʻa iā init-env.sh nā waiwai QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL, a me IMGPROXY_URL mai nā origin ʻelua, no laila ʻaʻole hiki ke kaʻawale ko lākou mau waiwai. Hoʻoponopono pū iā lākou ke hoʻololi lima ʻoe i origin.

Pili nā palapala hōʻoia iā QUIRE_PROXY_TLS:

  • internal (paʻamau): ka mana hōʻoia ponoʻī a Caddy, no localhost, *.localhost, a me lvh.me. Hilinaʻi i kona kumu hoʻokahi manawa, a laila wehe:

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

    Hoʻohui iā quire-local-ca.crt i ka waihona hilinaʻi ʻōnaehana a i ʻole polokalamu kele pūnaewele. Lawe ʻo curl iā ia ma o --cacert.

  • He helu leka uila: palapala hōʻoia ACME ʻakomi (Let’s Encrypt, a laila ZeroSSL) no nā inoa host maoli. Pono e kuhikuhi nā DNS o nā origin ʻelua a me kēlā me kēia host tenant i ʻaneʻi; pono nā awa 80 a me 443 e hiki ke kiʻi mai ka pūnaewele puni honua.

Hāʻawi ʻia nā host tenant ma ke koi i ka kipa mua wale nō ke hōʻoia ka web no kēia hoʻouka ʻana ka inoa (/tls-allowed, i nīnau ʻia ma ka pūnaewele Compose). ʻAʻole pono palapala hōʻoia wildcard a plugin mea hoʻolako DNS paha; ʻaʻole hiki i kekahi malihini ke kuhikuhi i inoa i ka host a koi i nā palapala hōʻoia. Noho nā palapala hōʻoia a me ka mana kūloko ma ka volume caddy-data; e hana i papaʻa pū me ke koena inā hoʻohana ʻoe iā internal.

Hilinaʻi ka web i X-Forwarded-For mai ka proxy wale nō: he helu paʻa ko ka proxy (QUIRE_PROXY_ADDRESS, paʻamau 172.29.64.10) ma kahi subnet paʻa (QUIRE_COMPOSE_SUBNET), a kapa ʻo QUIRE_TRUSTED_PROXY_CIDRS i kēlā helu. Inā kūʻē ka subnet i kekahi pūnaewele host, hoʻololi i nā mea ʻelua a holo iā docker compose down ma mua o up.

Ma hope o kāu proxy hoʻohuli ponoʻī

No ka hoʻohana ʻana i kāu mea kaulike ukana a proxy paha, waiho i proxy ma waho (docker compose up -d --scale proxy=0) a hoʻopau TLS ma mua o web (8080), content (8081), collab (1234, websocket), a me centrifugo (8000, websocket). E hoʻonoho i nā helu lehulehu ma QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, a me QUIRE_COLLAB_URL (wss://); a me ka pae helu wahi proxy ma QUIRE_TRUSTED_PROXY_CIDRS.

Hoʻoponopono pilikia

  • Puka ʻo init me «QUIRE_DATABASE_ID is not a UUID»: hoʻonoho me uuidgen.
  • Hoʻomaka hou ʻo web me «did not start on compose»: papa inoa ka moʻolelo i kēlā me kēia hoʻonohonoho hiki ʻole ke hoʻokō a me ka mea e hoʻohana ai.
  • ʻAʻohe hopena o ka hoʻololi ʻōlelo huna kuleana ma .env ma hope o ka hoʻomaka mua: holo hoʻokahi wale nō ka script hoʻomaka. E hoʻohana iā ALTER ROLE.
  • Hāʻule nā hoʻouka me ka hewa nānā ke hoʻonoho ʻia ʻo CLAMAV_URL: hoʻoiho ʻo ClamAV i nā pūlima i ka hoʻomaka mua, he mau minuke paha kēlā.
Hoʻokele

E kikokiko e ʻimi…

↑↓ hoʻokele↵ kohoEsc pani