ຂ້າມໄປຫາເນື້ອຫາ

ການຕິດຕັ້ງ Quire ດ້ວຍ Docker Compose

ຕິດຕັ້ງ Quire ເທິງ infrastructure ຂອງທ່ານເອງດ້ວຍ Docker Compose.

ເບິ່ງໃນຮູບແບບ Markdown

ນີ້ແມ່ນຜະລິດຕະພັນຄົບຖ້ວນຢູ່ເຊີບເວີດຽວ: LMS, ງານພື້ນຫຼັງຂອງມັນ, ບໍລິການແກ້ໄຂຮ່ວມກັນແບບສົດ ແລະ ບໍລິການທາງເລືອກທຸກໆອັນຢູ່ ເບື້ອງຫຼັງ profile ໜຶ່ງ. ດີຊາຍນແມ່ນ 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 ຄວາມຈື່ຈຳສຳລັບ stack ຄ່າເລີ່ມຕົ້ນ; 8 ຫົວຊິ່ງ ແລະ 16 GB ດ້ວຍ --profile full (ClamAV ແຕ່ລະອັນຖືກລາຍເຊັນ ປະມານ 1.5 GB).
  • ຊື່ DNS ສຳລັບຊັ້ນເວັບ ແລະ ຊື່ທີສອງສຳລັບເນື້ອຫາທີ່ບໍ່ໄວ້ເຊື່ອຖື. ພວກມັນຕ້ອງເປັນເຊີບເວີທີ່ແຕກຕ່າງກັນ: ຊຸດ SCORM ແລະ HTML ທີ່ອັບ ໂຫຼດແລ່ນຢູ່ຕົ້ນສະບັບຂອງເນື້ອຫາ ເພື່ອໃຫ້ພວກມັນບໍ່ເຄີຍສາມາດ ອ່ານ cookie ຂອງ LMS ໄດ້.
  • ສຳລັບການທົດສອບທ້ອງຖິ່ນ lvh.me ແລະ *.localhost ແກ້ໄປ 127.0.0.1 ເຊິ່ງແມ່ນສິ່ງທີ່ docker/.env.example ໃຊ້. ບໍລິການ proxy ເອງຂອງ stack ບໍລິການທັງສອງຜ່ານ https ດ້ວຍ certificate authority ທ້ອງຖິ່ນ ດັ່ງນັ້ນບໍ່ມີຫຍັງອື່ນຖືກຕິດຕັ້ງ (ເບິ່ງ “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 init

docker/scripts/init-env.sh ຂຽນ docker/.env ຈາກ docker/.env.example ພ້ອມຄວາມລັບທຸກໆອັນທີ່ສ້າງແລ້ວ (ລະຫັດຜ່ານຖານຂໍ້ມູນ, ກະແຈ ລາຍລານື້ ແລະ master, ຄູ່ກະແຈເປີດເລີ່ມເນື້ອຫາ) ແລະ ກະແຈ ລາຍລານື້ຈຸດກວດສອບການກວດກາຢູ່ docker/secrets/audit-signing-key.pem ເຊິ່ງ Compose mount ມັນເຂົ້າ workers ເປັນຄວາມລັບ. ມັນຕ້ອງການແຕ່ sh, awk ແລະ openssl ເທົ່ານັ້ນ ແລະ ປະຕິເສດການຂຽນທັບ docker/.env ທີ່ມີຢູ່ແລ້ວ. ຄັດລອກໄຟລ໌ທັງສອງອອກຈາກເຊີບເວີ: ໂດຍ ບໍ່ມີ QUIRE_MASTER_KEY ຖານຂໍ້ມູນທີ່ກູ້ຄືນມາບໍ່ສາມາດຖືກຖອກລະຫັດ ຂໍ້ມູນທີ່ເກັບໄວ້ໄດ້. ເພື່ອເຕີມໄຟລ໌ດ້ວຍມືແທນ cp docker/.env.example docker/.env; ໄຟລ໌ບອກວິທີສ້າງຄວາມລັບແຕ່ລະອັນ.

ຕົ້ນສະບັບທັງສອງຕ້ອງເປັນ https: ບໍລິການເນື້ອຫາປະຕິເສດ http ເລຍໃນການຜະລິດ ແລະ ພວກມັນບໍ່ຄວນແບ່ງ domain ທີ່ສາມາດລົງທະບຽນ ໄດ້ຮ່ວມກັນ. ບໍລິການ proxy ຢຸດ TLS ສຳລັບທັງສອງ (ເບິ່ງ “TLS”); init-env.sh ປະຕິເສດເນື້ອຫາຕົ້ນສະບັບ http://.

Stack ເລີ່ມໃນລຳດັບທີ່ກຳນົດໄວ້ ແລະ ຂັ້ນຕອນແຕ່ລະອັນລໍຖ້າ ຂັ້ນຕອນກ່ອນໜ້າ:

  1. postgres ກາຍເປັນສະບາຍດີ. ໃນການເລີ່ມຄັ້ງທຳອິດແທ້ ສະຄຣິບ init ຂອງມັນ (docker/postgres/init/90-passwords.sh) ຕັ້ງລະຫັດ ຜ່ານບົດບາດທັງສີ່.
  2. migrate ນຳໃຊ້ການຍ້າຍຂໍ້ມູນທຸກໆຄັ້ງ ແລະ ເລີ່ມຕາຕະລາງງານ ໃນຖານຂໍ້ມູນຄວບຄຸມ ແລະ ໃນຖານຂໍ້ມູນ tenant ສະເພາະທຸກໆແຫ່ງ, ກວດສອບວ່າພວກມັນລ້ວນຕົກລົງກັນ ຈາກນັ້ນອອກ (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. ຕິດຕາມດ້ວຍ domain ແອັບພິເຄຊັນຂອງທ່ານ (ບັນທຶກ init ພິມທີ່ຢູ່ເຂົ້າສູ່ລະບົບທີ່ແນ່ນອນ) ແລະ ເຂົ້າສູ່ລະບົບ. ໃນ ການຕິດຕັ້ງທ້ອງຖິ່ນ ເຊື່ອຖື certificate authority ຂອງ proxy ກ່ອນ (ເບິ່ງ “TLS”). ປ່ຽນລະຫັດຜ່ານທີ່ສ້າງທີ່ /account/security.

ຂະບວນການທີ່ເລີ່ມໂດຍບໍ່ມີຄວາມລັບທີ່ຈຳເປັນຈະປະຕິເສດການເລີ່ມ ແລະ ລະບຸການຕັ້ງຄ່າທີ່ຂາດໃນບັນທຶກຂອງມັນ. ບໍ່ມີຫຍັງເລີ່ມ ໂດຍຕັ້ງຄ່າຄ້າງ.

ບໍລິການ ແລະ profiles

ບໍລິການ Profile ສິ່ງທີ່ມັນເຮັດ
postgres ສະເໝີ ຖານຂໍ້ມູນ (PostgreSQL 18 ກັບ pgvector, ສ້າງຈາກ docker/postgres.Dockerfile), ພ້ອມ WAL ຈັດເກັບໄວ້ນັບແຕ່ການບູດຄັ້ງທຳອິດ
migrate, init ສະເໝີ ແຮກດຽວ: ການຍ້າຍຂໍ້ມູນ ຈາກນັ້ນການແລ່ນຄັ້ງທຳອິດ
web ສະເໝີ LMS, ຢູ່ QUIRE_HTTP_PORT (8080)
content ສະເໝີ ຕົ້ນສະບັບຂອງເນື້ອຫາທີ່ບໍ່ໄວ້ເຊື່ອຖື, ຢູ່ QUIRE_CONTENT_PORT (8081)
worker ສະເໝີ ງານພື້ນຫຼັງ: ອີເມວ, ລາຍງານ, ການປະມວນຜົນໄຟລ໌, webhooks
scheduler ສະເໝີ ງານຊ້ຳເວລາ: ລົງທະບຽນຕາຕະລາປັບກາງ 64 ແຫ່ງ ແລະ ມອບໃຫ້ worker; ຜູ້ນຳໜຶ່ງຄົນໃນເວລາດຽວ
collab ສະເໝີ websocket ການແກ້ໄຂຮ່ວມກັນ, ຢູ່ QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo ສະເໝີ ການແຈກຢາຍສົດ, ຢູ່ QUIRE_REALTIME_PORT (8000)
proxy ສະເໝີ Caddy, ຊອນໜ້າ TLS ໃນພອດ 80 ແລະ 443 (ເບິ່ງ “TLS”)
valkey cache Cache ແລະ ຂໍ້ຈຳກັດອັດຕາ
clamav scan ການສະແກນ malware ສຳລັບການອັບໂຫຼດ
gotenberg preview Office ເປັນ PDF previews, ການສະແດງໃບຢັ້ງຢືນ
imgproxy images ຮູບທີ່ປັບຂະໜາດ ແລະ ປ່ຽນຮູບແບບ
transcoder video ຮູບລະບົບ worker ກັບ ffmpeg ທີ່ເປັນແຕ່ LGPL, ສຳລັບການປ່ຽນຮູບວິດີໂອ
seaweedfs storage ການເກັບ object ທີ່ເຂົ້າກັບ S3 ຢູ່ເຊີບເວີນີ້
otelcol observability ຕົວເກັບ OpenTelemetry
mailpit devmail ຈັບທຸກຈົດໝາຍທີ່ອອກໄປ, ສຳລັບລອງໃຊ້ Quire
backup backup base backup ແຮກດຽວ; ເບິ່ງ backup-restore.md
backup-scheduler, backup-offsite backup base backup ທຸກ QUIRE_BACKUP_INTERVAL_HOURS, ແລະ ສຳເນົານອກເຊີບເວີທີ່ລະຫັດພ້ອມການຝຶກກວດສອບລາຍອາທິດ
h5p h5p ຮູບລະບົບເຄື່ອງມື H5P LTI 1.3 ທີ່ທ່ານສະໜອງໃນ QUIRE_H5P_IMAGE, ຢູ່ 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 ບໍ່ໃສ່ຫຼືສົ່ງ runtime ຫຼື sidecar ຂອງ H5P (ADR 0019). ຖ້າທ່ານ ໃຊ້ H5P ສະໜອງການຈະລົງທະບຽນທີ່ເປັນເຈົ້າຂອງບໍລິການຂອງທ່ານ ເອງ ຫຼື ດຳເນີນ instance H5P ຕິດຕັ້ງເອງຂອງທ່ານແຍກຈາກ Quire. ລົງທະບຽນຜູ້ໃຫ້ບໍລິການນັ້ນເປັນເຄື່ອງມືພາຍນອກ LTI 1.3 ແລະ ເພີ່ມເນື້ອຫາຂອງມັນເຂົ້າຫຼັກສູດເປັນກິດຈະກຳເຄື່ອງມື. Quire ແລກປ່ຽນຄະແນນ ແລະ ຄວາມຄືບໜ້າການປະເມີນ/ການກະທຳຜ່ານ LTI Assignment and Grade Services (AGS). ຖ້າຜູ້ໃຫ້ບໍລິການຍັງສົ່ງຖາ xAPI ຕັ້ງຄ່າສິ່ງນັ້ນແຍກສຳລັບຮ້ານເກັບຖາ xAPI ຂອງ Quire; ການ ແລກປ່ຽນຄະແນນ/ຄວາມຄືບໜ້າ AGS ບໍ່ສົ່ງຖາ xAPI. ການນຳເຂົ້າ Moodle ລາຍງານກິດຈະກຳ H5P ເປັນສິ່ງທີ່ຕ້ອງການການເຊື່ອມຕໍ່ ເຄື່ອງມື LTI. ຜູ້ໃຫ້ບໍລິການຍັງຮັບຜິດຊອບ runtime H5P, ການຂຽນ, ທະນາຄານເນື້ອຫາ ແລະ ປະຫວັດການລອງຂອງຕົນ.

ເພື່ອແລ່ນ instance ຕິດຕັ້ງເອງຂອງທ່ານເອງເທິງເຊີບເວີນີ້ ຕັ້ງ QUIRE_H5P_IMAGE ເປັນຮູບລະບົບຂອງມັນ ແລະ ເລີ່ມ profile h5p. Compose ເຜີຍແຜ່ມັນຢູ່ QUIRE_H5P_PORT (8090) ແລະ ເກັບຂໍ້ມູນ ຂອງມັນໄວ້ໃນ volume h5p-data; ຮູບລະບົບ ແລະ ພັນທະກຳທີ່ມາ ພ້ອມມັນຍັງເປັນຂອງທ່ານ.

ການຕັ້ງຄ່າ

ຂະບວນການທຸກໆອັນອ່ານ docker/.env. ເທມເພລດ docker/.env.example ລາຍຊື່ແຕ່ລະການຕັ້ງຄ່າພ້ອມຄ່າເລີ່ມຕົ້ນຂອງມັນ. ກຸ່ມຕ່າງໆ:

ທີ່ຢູ່

ການຕັ້ງຄ່າ ຄວາມໝາຍ
QUIRE_APP_ORIGIN ທີ່ຢູ່ສາທາລະນະຂອງ LMS, ເຊັ່ນ https://learn.example.com
QUIRE_CONTENT_ORIGIN ຕົ້ນສະບັບຂອງເນື້ອຫາ, ເຊີບເວີໜຶ່ງທີ່ແຕກຕ່າງ
QUIRE_PLATFORM_DOMAINS domain ທີ່ອົງການຢູ່ພາຍໃຕ້, ຄັດດ້ວຍເຄັມ
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 proxy ທີ່ X-Forwarded-For ຂອງມັນຖືກເຊື່ອຖື

ຄວາມລັບ

ການຕັ້ງຄ່າ ຄວາມໝາຍ
QUIRE_SECRET_KEY ລາຍລານື້ເຊັນຊັນ ແລະ token. 64 ຕົວອັກສອນ hex
QUIRE_MASTER_KEY ຫຸ້ມຂໍ້ມູນລະຫັດເຂົ້າເຖິງທີ່ເກັບໄວ້ເຊັ່ນ SSO ແລະຄວາມລັບ webhook. 32 ໂບຍ, base64. ຊັ້ນເວັບ ແລະ worker ຕ້ອງການຄ່າດຽວກັນ. ການປ່ຽນ: key-rotation.md
QUIRE_MASTER_KEY_VERSION ປ້າຍເວີຊັນຂອງ master key, v1ເມື່ອບໍ່ໄດ້ຕັ້ງ. ສູງຂຶ້ນເມື່ອທ່ານປ່ຽນມັນ
QUIRE_MASTER_KEY_RETIRED master keys ກ່ອນໜ້ານີ້ທີ່ຍັງຕ້ອງການອ່ານສິ່ງທີ່ພວກມັນຜະໜວກ, ເປັນ v1=<base64>. ລຶບຫຼັງຈາກການປ່ຽນສຳເລັດໂດຍບໍ່ມີຫຍັງຄ້າງ
QUIRE_COLLAB_SIGNING_KEY ແບ່ງປັນໂດຍ web ແລະ collabເພື່ອລາຍລານື້ token ການແກ້ໄຂ
QUIRE_BACKUP_SIGNING_KEY ລາຍລານື້ສຳຮາງຫຼັກສູດ (ທາງເລືອກ)

ເກັບສຳເນົາ QUIRE_MASTER_KEY ໃນບ່ອນອື່ນນອກເໜືອເຊີບເວີນີ້. ຖານຂໍ້ມູນທີ່ກູ້ຄືນໂດຍບໍ່ມີມັນບໍ່ສາມາດຖືກຖອກລະຫັດຂໍ້ມູນ ລະຫັດເຂົ້າເຖິງທີ່ມັນຖືກໄວ້ໄດ້.

ຖານຂໍ້ມູນ

ການຕັ້ງຄ່າ ຄວາມໝາຍ
POSTGRES_PASSWORD superuser, ໃຊ້ໂດຍ container ແລະການສຳຮາງ
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD ລະຫັດຜ່ານບົດບາດ, ຕັ້ງໃນການເລີ່ມຄັ້ງທຳອິດ
DATABASE_URL ບົດບາດຂອງແອັບ. ການປ້ອງກັນຂັ້ນແຖວນຳໃຊ້ກັບ query ທຸກໆອັນທີ່ມັນເຮັດ
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL ບົດບາດ migrator, ສຳລັບ migrate ແລະ init
QUIRE_SUPERUSER_URL ໃຊ້ແຕ່ໂດຍການແລ່ນຄັ້ງທຳອິດ
QUIRE_REPORT_DATABASE_URL ບົດບາດລາຍງານທີ່ອ່ານຢ່າງດຽວ, ສຳລັບລາຍງານ ແລະເຄື່ອງສ້າງລາຍງານ
QUIRE_AUDIT_DATABASE_URL ບົດບາດການກວດກາ, ສຳລັບ console ການກວດກາ ແລະການສົ່ງອອກ SIEM
QUIRE_DATABASE_ID UUID ໃດກໍ່ໄດ້, ປັກໄວ້ຕະຫຼອດຊີວິດຂອງການຕິດຕັ້ງ

ລະຫັດຜ່ານບົດບາດຖືກນຳໃຊ້ແຕ່ເມື່ອ volume ຂອງຖານຂໍ້ມູນຖືກສ້າງ ຄັ້ງທຳອິດ. ເພື່ອປ່ຽນໜຶ່ງອັນຕໍ່ມາ ໃຊ້ ALTER ROLE ຈາກນັ້ນອັບເດດ URL ທີ່ກົງກັນ.

QUIRE_REPORT_DATABASE_URL ໃຊ້ສຳລັບຖານຂໍ້ມູນທາງກາຍະພາບທີ່ ຕັ້ງຄ່າໂດຍ DATABASE_URL. ສຳລັບຖານຂໍ້ມູນທາງກາຍະພາບທີ່ລົງ ທະບຽນອື່ນໆ ຕັ້ງ URL ການເຊື່ອມຕໍ່ quire_report ຂອງມັນເອງໃນ ສະພາບແວດລ້ອມ web ແລະ worker ຈາກນັ້ນວາງຊື່ຕົວແປໃນຊ່ອງ Reporting environment variable ຂອງຖານຂໍ້ມູນນັ້ນເປັນ env:NAME. ການອ້າງອີງຕ້ອງຊີ້ໄປທີ່ຖານຂໍ້ມູນດຽວກັນກັບການເຊື່ອມຕໍ່ app ຂອງມັນ ໂດຍສະເພາະ replica ຂອງມັນ. ພື້ນຜິວລາຍງານທຸກໆອັນ ຕິດຕາມ tenant ໄປຫາການເຊື່ອມຕໍ່ລາຍງານຂອງຖານຂໍ້ມູນເອງ: ເຄື່ອງສ້າງລາຍງານ ແລະລາຍງານທີ່ບັນທຶກໄວ້, ການສົ່ງທີ່ນັດໄວ້, ການສົ່ງອອກລາຍງານ, ການວິເຄາະ, ບັນທຶກການກວດກາ, ຊັບພະຍາກອນ ການກວດກາຂອງ REST ແລະການຄົ້ນຫາການກວດກາຂອງຜູ້ຊ່ວຍ. ບໍ່ມີ ອັນໃດຂອງພວກມັນເຄີຍຢຸມຢາມ URL ລາຍງານຂອງຖານຂໍ້ມູນອື່ນ. ເມື່ອຖານຂໍ້ມູນບໍ່ມີການເຊື່ອມຕໍ່ລາຍງານ ລາຍງານປົກກະຕິແລ່ນ ເທິງການເຊື່ອມຕໍ່ແອັບພັກຂອງຖານຂໍ້ມູນນັ້ນເອງ ໃນຂະນະທີ່ ການວິເຄາະ ແລະການອ່ານການກວດກາທຸກໆອັນປະຕິເສດ ແລະບອກ ດັ່ງນັ້ນ ເພາະບົດບາດແອັບພັກບໍ່ສາມາດອ່ານເສັ້ນການກວດກາໄດ້.

ແຂກຮັບຊົງ

ການຕັ້ງຄ່າ ສະບັບນີ້ ໝາຍເຫດ
QUIRE_STORAGE_DRIVER local (ຄ່າເລີ່ມຕົ້ນ), s3 ຫຼື azure local ເກັບໄຟລ໌ໄວ້ໃນ volume files. s3 ຄຸມຄອງ AWS S3, R2, GCS interoperability ແລະທີ່ເກັບເຂົ້າກັບ S3 ອື່ນໆ ພ້ອມການອັບໂຫຼດ multipart ທີ່ສາມາດສືບຕໍ່ໄດ້
QUIRE_REALTIME_DRIVER inprocess (ຄ່າເລີ່ມຕົ້ນ), sse, centrifugo ຫຼື durable_objects inprocess ເໝາະສຳລັບ container ເວັບດຽວ; ໃຊ້ centrifugo ຫຼື sse ເມື່ອມີຫຼາຍອັນ
QUIRE_CACHE_DRIVER memory (ຄ່າເລີ່ມຕົ້ນ), postgres ຫຼື valkey memory ແມ່ນຕາມຂະບວນການ; ໃຊ້ valkey ຫຼື postgresເພື່ອໃຫ້ຂໍ້ຈຳກັດອັດຕາຖືກຮັກສາຂ້າມ container
QUIRE_VIDEO_DRIVER ffmpeg (ຄ່າເລີ່ມຕົ້ນ) ຫຼື progressive_mp4 ຫຼື ຜູ້ໃຫ້ບໍລິການເປັນເຈົ້າຂອງ: Cloudflare Stream, Mux ຫຼື Bunny, ໂດຍກະແຈຂອງພວກເຂົາ
QUIRE_IMAGE_DRIVER noop (ຄ່າເລີ່ມຕົ້ນ), imgproxy ຫຼື cloudflare noop ບໍລິການຮູບທຸກໆອັນດ້ວຍຂະໜາດຕົ້ນສະບັບຂອງມັນ. imgproxy ຕ້ອງການ profile images ແລະການຕັ້ງຄ່າຂ້າງລຸ່ມ; cloudflare ໃຊ້ Cloudflare Images
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi ຫຼື in_process ຄ່າເລີ່ມຕົ້ນຂອງເພລຟອມສຳລັບເຊັນຊັນສົດ. ບໍ່ໄດ້ຕັ້ງ, ເຊັນຊັນສົດຈະບອກວ່າບໍ່ຖືກຕັ້ງຄ່າ ຈົນກວ່າອົງການໜຶ່ງຈະເຊື່ອມບັນຊີຂອງຕົນເອງພາຍໃຕ້ Integrations, Live session provider. ບັນຊີຂອງອົງການເອງສະເໝີຊະນະຄ່ານີ້. ການຕັ້ງຄ່າຂອງແຕ່ລະຜູ້ໃຫ້ບໍລິການເອງ (BBB_URL ແລະ BBB_SECRET, ຕົວແປ ZOOM_*, TEAMS_*, GOOGLE_MEET_* ແລະ JITSI_*) ອ່ານແຕ່ສຳລັບຜູ້ໃຫ້ບໍລິການທີ່ລະບຸໄວ້ທີ່ນີ້
QUIRE_MEETING_REGIONS ລາຍຊື່ຄັດຂອງ eu, uk, us ບ່ອນທີ່ຜູ້ໃຫ້ບໍລິການຄ່າເລີ່ມຕົ້ນຂອງເພລຟອມປະມວນຜົນການປະຊຸມ. ບໍ່ໄດ້ຕັ້ງ, ມັນບໍ່ຖືກກວດສອບກັບອົງການທີ່ຖືກຜູກກັບເຂດ ເຊັ່ນກ່ອນໜ້ານີ້. ບັນຊີຂອງອົງການເອງລະບຸເຂດຂອງຕົນຢູ່ໜ້າຂອງມັນ

ຄ່າຂອງແຂກຮັບຊົງທີ່ສະບັບນີ້ບໍ່ລວມຢູ່ຈະຖືກປະຕິເສດເມື່ອຊັ້ນ ເວັບເລີ່ມ ພ້ອມຊື່ການຕັ້ງຄ່າ ແທນທີ່ຈະຖືກແທນທີ່ໂດຍລະງັບ ໂດຍຄ່າເລີ່ມຕົ້ນ.

ຮູບພາບ

ໜ້າຕ່າງໆຂໍຮູບທີ່ສີ່ຂະໜາດທີ່ກຳນົດໄວ້ຜ່ານ /api/files/{id}/image/{size} ເຊິ່ງກວດສອບການເຂົ້າເຖິງດຽວກັນ ກັບໄຟລ໌ເອງ ຈາກນັ້ນ redirect ໄປຫາບໍລິການຮູບ. ແຕ່ລະອົງການສາມາດ ຂໍຮູບໃໝ່ ແລະຄູ່ຂະໜາດ QUIRE_IMAGE_SPECS_PER_HOUR (ຄ່າເລີ່ມຕົ້ນ 2000) ຕໍ່ຊົ່ວໂມງ; ຂະໜາດທີ່ຜະລິດແລ້ວໃນຊົ່ວໂມງນັ້ນບໍ່ນັບ. ໃຊ້ valkey ຫຼື postgres ສຳລັບ QUIRE_CACHE_DRIVER ກັບ container ເວັບຫຼາຍກວ່າໜຶ່ງ ເພື່ອໃຫ້ຂໍ້ຈຳກັດຖືກຮັກສາຂ້າມພວກມັນ.

ການຕັ້ງຄ່າ ແຂກຮັບຊົງ ໝາຍເຫດ
IMGPROXY_URL imgproxy ທີ່ຢູ່ທີ່ເບີເຊີເຂົ້າເຖິງ imgproxy, ຕົວຢ່າງ https://images.example.org. Profile images ເຜີຍແຜ່ມັນຢູ່ QUIRE_IMAGES_PORT (8082)
IMGPROXY_KEY, IMGPROXY_SALT imgproxy ສະຕຣິງ hex, ຄ່າດຽວກັນທີ່ imgproxy ເລີ່ມດ້ວຍ. ສ້າງແຕ່ລະອັນດ້ວຍ openssl rand -hex 32. Quire ລາຍລານື້ທີ່ຢູ່ຮູບທຸກໆອັນດ້ວຍພວກມັນ ດັ່ງນັ້ນ imgproxy ບໍ່ສະແດງຫຍັງທີ່ Quire ບໍ່ໄດ້ຂໍ
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy ກັບການເກັບທ້ອງຖິ່ນ ບ່ອນທີ່ imgproxy ດຶງຕົ້ນສະບັບຈາກ. Compose ຕັ້ງ http://web:3000. ດ້ວຍການເກັບ s3 ຫຼື azure imgproxy ດຶງຈາກ bucket ແລະສິ່ງນີ້ບໍ່ຖືກນຳໃຊ້
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare API token ກັບສິດແກ້ໄຂ Images ແລະ account hash ຈາກ Images, Developer resources. ເປີດ flexible variants ສຳລັບບັນຊີ
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare ທາງເລືອກ. ເມື່ອຕັ້ງ ຮູບເປັນສ່ວນຕົວ ແລະທຸກໆທີ່ຢູ່ຖືກລາຍລານື້ ແລະໝົດອາຍຸ. ໂດຍບໍ່ມີມັນ ຮູບເປັນສາທາລະນະຢູ່ທີ່ຢູ່ທີ່ສະແດງອອກຈາກ QUIRE_SECRET_KEY ທີ່ບໍ່ມີໃຜສາມາດເດົາໄດ້

Cloudflare Images ເກັບສຳເນົາຂອງຕົນເອງຂອງຕົ້ນສະບັບແຕ່ລະອັນ ທີ່ມັນບໍລິການ. ເມື່ອໄຟລ໌ຖືກລຶບ worker ລຶບສຳເນົານັ້ນກ່ອນ ຕົ້ນສະບັບ.

Queue

ງານພື້ນຫຼັງໃຊ້ pg-boss ໃນຖານຂໍ້ມູນ Postgres ດຽວກັນ ດັ່ງນັ້ນ ບໍ່ມີບໍລິການ queue ໃຫ້ແລ່ນ ແລະບໍ່ມີຫຍັງໃຫ້ຕັ້ງຄ່າ. ງານຖືກ ບັນທຶກເຂົ່າ queue ໃນ transaction ດຽວກັນກັບການປ່ຽນແປງທີ່ເຮັດ ໃຫ້ພວກມັນເກີດ ດັ່ງນັ້ນການລົ້ມລະບົບບໍ່ສາມາດສູນງານໜຶ່ງ ຫຼືສົ່ງງານໜຶ່ງສອງຄັ້ງ. QUIRE_QUEUE_DRIVER ແມ່ນ pgboss ທີ່ນີ້, ຄ່າເລີ່ມຕົ້ນຂອງມັນ; vercel ແລະ cloudflare ຍ້າຍແຕ່ການ ແຈ້ງເຕືອນເບົາໆ ແລະການສົ່ງ webhook ໄປຫາ queue ເອງຂອງເພລຟອມ ແລະຄູ່ມານຳ Vercel ແລະ Cloudflare ອະທິບາຍພວກມັນ ແລະວິທີ ທີ່ຊັ້ນເວັບຂອງພວກມັນບັນທຶກເຂົ້າ queue.

ອີເມວ

ຕັ້ງໜຶ່ງໃນສິ່ງເຫຼົ່ານີ້:

  • QUIRE_EMAIL_PROVIDER_CONFIG: object JSON ທີ່ລະບຸຜູ້ໃຫ້ບໍລິການ HTTP ແລະລະຫັດເຂົ້າເຖິງຂອງມັນ, ເຊັ່ນ {"provider":"postmark","token":"..."}. Postmark, Amazon SES, Mailgun, SendGrid ແລະ Resend ໂດຍສະໜັບສະໜູນ.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. ແຕ່ເປົ້າໝາຍນີ້; ເປົ້າໝາຍ serverless ກັກ SMTP.

QUIRE_MAIL_FROM ແມ່ນຜູ້ສົ່ງ. ສຳລັບລອງໃຊ້ Quire ເລີ່ມ profile devmail, ຕັ້ງ QUIRE_SMTP_URL=smtp://mailpit:1025, ແລະອ່ານ ຈົດໝາຍທີ່ http://localhost:8025.

ບໍລິການທາງເລືອກ

ການຕັ້ງຄ່າ ກັບ 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 (ສົ່ງແຕ່ hash prefix ສີ່ຕົວອັກສອນ); off ປິດມັນ, ແລະ URL ຊີ້ໄປຫາ range API ທີ່ທ່ານດຳເນີນເອງ

ການສັງເກດເບິ່ງ

OTEL_EXPORTER_OTLP_ENDPOINT ຊື່ຕົວເກັບທີ່ຂະບວນການທຸກໆອັນສົ່ງ trace ແລະ metrics ໄປ; ກັບ profile observability ມັນແມ່ນ http://otelcol:4318 ແລະ docker/otel-collector.yaml ແມ່ນບ່ອນ ທີ່ທ່ານເພີ່ມ exporter ສຳລັບ backend ຂອງທ່ານ. ຊັ້ນເວັບ, worker, scheduler, ຂະບວນການ content ແລະ collab export spans ຜ່ານ OTLP/HTTP (ຄຳຮ້ອງຂໍເວັບ, transaction ຂອງຖານຂໍ້ມູນ tenant, ງານ worker ແລະການເອີ້ນອອກ) ເມື່ອມັນຖືກຕັ້ງ, ແລະ metrics ໄປຫາ endpoint ດຽວກັນທຸກໆນາທີ (OTEL_METRICS_EXPORTER=none ປິດພວກ ມັນ). OTEL_TRACES_SAMPLER_ARG ຕັ້ງສ່ວນທີ່ຖືກເກັບໄວ້ຂອງ traces. ບັນທຶກໄປຫາສະຕຣີມສະຕານເອກອັກຄະທີ່ LOG_LEVEL ແລະ Compose ໝຸນພວກມັນ. Traces ບໍ່ເຄີຍພົວພັນຂໍ້ມູນສ່ວນຕົວ.

ການອອກພື້ນທີ່ຕາມເຂດ (ການຢູ່ຂໍ້ມູນ EU)

QUIRE_REGION=eu ບອກວ່າ stack ບໍລິການອົງການສະຫະພາບເອີຣົບ. worker ຈາກນັ້ນຈະກັກຄຳຮ້ອງຂໍອອກທຸກໆອັນທີ່ເຮັດສຳລັບອົງການ ທີ່ຖືກຜູກກັບ EU ໃຫ້ຢູ່ໃນ allowlist (21-compliance.md ບົດທີ 8.1). Allowlist ແມ່ນເຊີບເວີທີ່ບໍລິການທີ່ຕັ້ງຄ່າແລ້ວປະກາດສຳລັບເຂດ ນັ້ນ (endpoint ການເກັບ, ຜູ້ໃຫ້ບໍລິການອີເມວ, ຜູ້ໃຫ້ບໍລິການວິດີໂອ ເປັນເຈົ້າຂອງ, ເປົ້າໝາຍການເກັບຂອງອົງການເອງ, ຜູ້ໃຫ້ບໍລິການ AI ແລະບັນຊີອີເມວ), ເຊີບເວີຂອງບໍລິການໃດໆພາຍໃຕ້ການຍົກເວັ້ນ ທີ່ກຳລັງມີຜົນ, ແລະເຊີບເວີທີ່ທ່ານລາຍຊື່ໃນ QUIRE_EGRESS_ALLOW_HOSTS. ຄຳຮ້ອງຂໍໄປຫາເຊີບເວີສາທາລະນະ ອື່ນຈະຖືກປະຕິເສດກ່ອນທີ່ຈະສົ່ງ, ການປະຕິເສດຖືກຂຽນລົງ ເສັ້ນການກວດກາຂອງອົງການເປັນ privacy/egress_refused ແລະ ມັນຖືກລາຍຊື່ພາຍໃຕ້ Compliance, Data residency.

ການຕັ້ງຄ່າ ຄ່າ ຜົນກະທົບ
QUIRE_EGRESS_ALLOW_HOSTS ລາຍຊື່ hostname ທີ່ຄັດ, ຫຼື *.example.org ສຳລັບ subdomain ທຸກໆອັນ ເຊີບເວີເພີ່ມເຕີມທີ່ອົງການ EU ສາມາດເຂົ້າເຖິງໄດ້. Endpoint ຂອງ webhook, xAPI ແລະ SIEM, ກະແສບລັອກ ແລະເຊີບເວີ Amazon SES ຂຶ້ນກັບທີ່ນີ້ ເພາະມັນເປັນການເລືອກຂອງອົງການເອງ ແລະບໍ່ມີບໍລິການໃດປະກາດພວກມັນ. Loopback, ທີ່ຢູ່ເອກະຊົນ ແລະຊື່ label ດຽວເຊັ່ນ web ຫຼື clamav ແມ່ນເຄືອຂ່າຍຂອງທ່ານເອງ ແລະບໍ່ເຄີຍຖືກກວດສອບ

ອົງການ UK ແລະ US ບໍ່ຖືກຜູກກັບລາຍຊື່ເຊີບເວີ; ພວກເຂົາຮັກສາ ການກວດສອບເຂດຂອງບໍລິການ. ຕັ້ງລາຍຊື່ໃສ່ worker; ໜ້າ admin ອ່ານມັນຈາກຊັ້ນເວັບເພື່ອສະແດງ allowlist ດັ່ງນັ້ນວາງມັນໃນ docker/.env ເຊິ່ງບໍລິການທຸກໆອັນອ່ານ.

ການກວດສອບຂອງແອັບພັກໃຫ້ຂໍ້ຜິດພາດທີ່ຊັດເຈນ ແລະລາຍການ ການກວດກາ ແລະມັນບໍ່ແມ່ນການຮັບປະກັນ: ລະຫັດສາມາດຜິດໄດ້. ການຮັບປະກັນແມ່ນເຄືອຂ່າຍ. Compose ບໍ່ບັງຄັບມັນໃຫ້ທ່ານ. ສຳລັບ stack ຕາມເຂດ ວາງບໍລິການ worker ແລະ web ເທິງເຄືອ ຂ່າຍ internal: true ທີ່ເສັ້ນທາງອອກດຽວຂອງມັນແມ່ນ egress proxy (ຕົວຢ່າງ container Squid ຫຼື tinyproxy) ທີ່ອະນຸຍາດເຊີບເວີ ດຽວກັນກັບ QUIRE_EGRESS_ALLOW_HOSTS ບວກເຊີບເວີຂອງບໍລິການ ທີ່ທ່ານຕັ້ງຄ່າ ແລະຕັ້ງ HTTPS_PROXY ສຳລັບບໍລິການເຫຼົ່ານັ້ນ. ໜ້າການຢູ່ລາຍຊື່ເຊີບເວີທີ່ແນ່ນອນທີ່ແອັບພັກອະນຸຍາດ ດັ່ງນັ້ນ ລາຍຊື່ທັງສອງສາມາດປຽບທຽບກັນໄດ້.

ສຸຂະພາບ

Endpoint ຄວາມໝາຍ
/healthz Liveness: ຂະບວນການຕອບ. Compose health checks ໃຊ້ສິ່ງນີ້
/readyz Readiness: dependency ເຂົ້າເຖິງໄດ້ ແລະບໍລິການທາງເລືອກແຕ່ລະອັນລາຍງານວ່າຖືກຕັ້ງຄ່າຫຼືບໍ່. ຊີ້ load balancer ຂອງທ່ານໄປທີ່ນີ້

docker compose -f docker/compose.yaml ps ສະແດງສຸຂະພາບຂອງແຕ່ລະ ບໍລິການ.

TLS

ບໍລິການ proxy (Caddy, Apache-2.0, docker/caddy/Caddyfile) ເປັນ ສ່ວນໜຶ່ງຂອງ stack ຄ່າເລີ່ມຕົ້ນ. ມັນຕອບຢູ່ພອດ 80 ແລະ 443 ແລະ ແຈກກາງ:

ເຊີບເວີ ຫຼື ເສັ້ນທາງ ໄປຫາ
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, subdomain ຂອງ tenant ທຸກໆອັນ ແລະ domain ທີ່ກຳນົດເອງ web
/_collab/ ຢູ່ເຊີບເວີເຫຼົ່ານັ້ນ collab (websocket, QUIRE_COLLAB_URL)
/_realtime/connection/ ຢູ່ເຊີບເວີເຫຼົ່ານັ້ນ websocket ຂອງ client ຂອງ centrifugo; server API ຂອງມັນບໍ່ເຄີຍຖືກເປີດເຜີຍ
/_images/ ຢູ່ເຊີບເວີເຫຼົ່ານັ້ນ imgproxy, ກັບ profile images (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 (ຄ່າເລີ່ມຕົ້ນ): certificate authority ເອງຂອງ Caddy, ສຳລັບ localhost, *.localhost ແລະ lvh.me. ເຊື່ອຖື root ຂອງ ມັນໜຶ່ງຄັ້ງ ຈາກນັ້ນກວດສອບ:

    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) ສຳລັບ hostname ແທ້. DNS ສຳລັບຕົ້ນສະບັບທັງສອງ ແລະ ເຊີບເວີ tenant ທຸກໆອັນຕ້ອງຊີ້ໄປທີ່ນີ້ ແລະພອດ 80 ແລະ 443 ຕ້ອງເຂົ້າເຖິງໄດ້ຈາກອິນເຕີເນັດ.

ເຊີບເວີຂອງ tenant ຖືກອອກໃບຢັ້ງຢືນຕາມຄວາມຕ້ອງການ, ໃນການ ເຂົ້າຢ້ຽມຄັ້ງທຳອິດ, ແລະແຕ່ເມື່ອ web ຢືນຢັນວ່າຊື່ຂຶ້ນກັບ ການຕິດຕັ້ງນີ້ (/tls-allowed, ຖາມຢູ່ເຄືອຂ່າຍ Compose). ບໍ່ ຕ້ອງການໃບຢັ້ງຢືນ wildcard ຫຼື plugin ຜູ້ໃຫ້ບໍລິການ DNS ແລະ ຄົນແປກໜ້າທີ່ຊີ້ຊື່ໄປຫາເຊີບເວີບໍ່ສາມາດເຮັດໃຫ້ມັນຂໍໃບ ຢັ້ງຢືນໄດ້. ໃບຢັ້ງຢືນ ແລະອົງການທ້ອງຖິ່ນຢູ່ໃນ volume caddy-data; ສຳຮາງມັນພ້ອມສິ່ງອື່ນຖ້າທ່ານໃຊ້ internal.

Web ເຊື່ອຖື X-Forwarded-For ຈາກ proxy ແຕ່ຢ່າງດຽວ: proxy ມີ ທີ່ຢູ່ທີ່ກຳນົດ (QUIRE_PROXY_ADDRESS, ຄ່າເລີ່ມ 172.29.64.10) ຢູ່ subnet ທີ່ກຳນົດ (QUIRE_COMPOSE_SUBNET) ແລະ QUIRE_TRUSTED_PROXY_CIDRS ຊື່ທີ່ຢູ່ນັ້ນ. ຖ້າ subnet ຕຳກັບເຄືອ ຂ່າຍໜຶ່ງຢູ່ເຊີບເວີ ປ່ຽນທັງສອງ ແລະແລ່ນ docker compose down ກ່ອນ up.

ເບື້ອງຫຼັງ reverse proxy ຂອງທ່ານເອງ

ເພື່ອໃຊ້ load balancer ຫຼື proxy ທີ່ທ່ານແລ່ນຢູ່ແລ້ວແທນ ປ່ອຍ proxy ອອກ (docker compose up -d --scale proxy=0) ແລະຢຸດ TLS ເບື້ອງໜ້າຂອງ web (8080), content (8081), collab (1234, websocket) ແລະ centrifugo (8000, websocket). ຕັ້ງທີ່ຢູ່ສາທາລະນະໃນ QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN ແລະ QUIRE_COLLAB_URL (wss://) ແລະຊ່ວງທີ່ຢູ່ຂອງ proxy ຂອງທ່ານໃນ QUIRE_TRUSTED_PROXY_CIDRS.

ການແກ້ໄຂບັນຫາ

  • init ອອກດ້ວຍ “QUIRE_DATABASE_ID is not a UUID”: ຕັ້ງມັນດ້ວຍ uuidgen.
  • web ເລີ່ມຄືນດ້ວຍ “did not start on compose”: ບັນທຶກລາຍຊື່ ແຕ່ລະການຕັ້ງຄ່າທີ່ມັນບໍ່ສາມາດເຄົາລົບ ແລະສິ່ງທີ່ຈະໃຊ້ແທນ.
  • ການປ່ຽນລະຫັດຜ່ານບົດບາດໃນ .env ຫຼັງການເລີ່ມຄັ້ງທຳອິດ ບໍ່ເຮັດຫຍັງ: ສະຄຣິບ init ແລ່ນໜຶ່ງຄັ້ງ. ໃຊ້ ALTER ROLE.
  • ການອັບໂຫຼດລົ້ມແຫຼວດ້ວຍຂໍ້ຜິດພາດການສະແກນໃນຂະນະທີ່ CLAMAV_URL ຖືກຕັ້ງ: ClamAV ດາວໂຫຼດລາຍເຊັນຂອງມັນໃນການ ເລີ່ມຄັ້ງທຳອິດ ເຊິ່ງໃຊ້ເວລາສອງສາມນາທີ.
ການນຳທາງ

ພິມເພື່ອຄົ້ນຫາ…

↑↓ ນຳທາງ↵ ເລືອກEsc ປິດ