Salti al enhavo

Instali Quire per Docker Compose

Instali Quire en via propra infrastrukturo per Docker Compose.

Vidi kiel Markdown

Jen la kompleta produkto ĉe unu gastiganto: la LMS, ĝia fona laboro, realtempaj kaj kunlaboraj redaktaj servoj kaj ĉiu nedeviga servo malantaŭ profilo. La dezajno estas en sekcio 2 de docs/architecture/23-ops.md.

Aliaj celoj: Vercel kaj Cloudflare Workers rulas nur la retan tavolon. Ĝisdatigoj estas en upgrade.md, kaj sekurkopioj kaj la restariga provo en backup-restore.md.

Bezonataĵoj

  • Docker Engine 27 aŭ posta kun Compose-kromaĵo 2.30 aŭ posta.
  • 4 CPU-kernoj kaj 8 GB da memoro por la defaŭlta stako; 8 kernoj kaj 16 GB kun --profile full (ClamAV sola uzas proksimume 1,5 GB por subskriboj).
  • DNS-nomo por la reta tavolo kaj dua por nefidata enhavo. Ili devas esti malsamaj gastigantoj: SCORM-pakaĵoj kaj alŝutita HTML funkcias ĉe la origino de enhavo, por ke ili neniam legu kuketojn de LMS.
  • Por loka provo, lvh.me kaj *.localhost solviĝas al 127.0.0.1; tion uzas docker/.env.example. La propra servo proxy de stako servas ambaŭ per https kun loka atestila aŭtoritato, do nenio alia devas esti instalita (vidu “TLS”).
  • Pordoj 80 kaj 443 liberaj ĉe gastiganto (QUIRE_PROXY_HTTP_PORT kaj QUIRE_PROXY_HTTPS_PORT movas ilin).

Unua ekfunkciigo

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 skribas docker/.env el docker/.env.example generinte ĉiujn sekretojn (datumbazajn pasvortojn, subskriban kaj ĉefan ŝlosilojn, paron da ŝlosiloj por lanĉo de enhavo) kaj subskriban ŝlosilon por kontrolpunkto de kontrolprotokolo en docker/secrets/audit-signing-key.pem, kiun Compose muntas en workers kiel sekreton. Ĝi bezonas nur sh, awk kaj openssl kaj rifuzas anstataŭigi ekzistantan docker/.env. Kopiu ambaŭ dosierojn for de gastiganto: sen QUIRE_MASTER_KEY, restarigita datumbazo ne povas malĉifri siajn konservitajn legitimilojn. Por plenigi dosieron permane, rulu cp docker/.env.example docker/.env; ĝi klarigas kiel generi sekretojn.

Ambaŭ originoj devas esti https: la enhavservo rifuzas simplan http en produktado, kaj ili ne rajtas kunhavi registrigeblan domajnon. Servo proxy finas TLS por ambaŭ (vidu “TLS”); init-env.sh rifuzas originon http://.

Stako startas laŭ fiksa ordo kaj ĉiu paŝo atendas la antaŭan:

  1. postgres fariĝas sana. Ĉe la unua ekfunkciigo ĝia init-skripto (docker/postgres/init/90-passwords.sh) agordas pasvortojn por kvar roloj.
  2. migrate aplikas ĉiun migradon kaj startigas taskovicon en la kontrola datumbazo kaj ĉiu dediĉita luanta datumbazo, kontrolas ke ili konsentas kaj eliras (docs/ops/upgrade.md). Migradoj ruliĝas ĉe ĉiu starto kaj estas idempotentaj, do ĝisdatigo estas nova bildo kaj restartigo.
  3. init (apps/web/src/first-run.ts) registras aplikaĵan datumbazon sub QUIRE_DATABASE_ID kaj, se QUIRE_SETUP_ADMIN_EMAIL estas agordita, kreas unuan organizaĵon kaj ĝian administranton. Ensaluta adreso kaj generita pasvorto estas presitaj unufoje en docker compose logs init.
  4. web, content, worker, scheduler, collab kaj centrifugo startas.
  5. proxy startas kiam web kaj content estas sanaj.

Malfermu https://demo. sekvatan de via aplikaĵa domajno (la protokolo de init presas la precizan ensalutan adreson) kaj ensalutu. Ĉe loka instalado, unue fidu la atestilan aŭtoritaton de proxy (vidu “TLS”). Ŝanĝu la generitan pasvorton ĉe /account/security.

Procezo sen bezonata sekreto rifuzas starti kaj nomas la mankantan agordon en sia protokolo. Nenio ekfunkcias duonagordita.

Servoj kaj profiloj

Servo Profilo Funkcio
postgres ĉiam Datumbazo (PostgreSQL 18 kun pgvector, konstruita el docker/postgres.Dockerfile), kun WAL arkivata ekde la unua ekfunkciigo
migrate, init ĉiam Unufoja: migradoj, poste unua ekfunkciigo
web ĉiam LMS, ĉe QUIRE_HTTP_PORT (8080)
content ĉiam Origino por nefidata enhavo ĉe QUIRE_CONTENT_PORT (8081)
worker ĉiam Fonaj taskoj: retpoŝto, raportoj, dosierprilaborado, webhooks
scheduler ĉiam Ripetiĝantaj taskoj: registras la 64 rultempajn horarojn kaj transdonas ilin al worker; po unu gvidanto
collab ĉiam Websocket por kunlabora redaktado, ĉe QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo ĉiam Realtempa dissendo ĉe QUIRE_REALTIME_PORT (8000)
proxy ĉiam Caddy, la TLS-enirejo ĉe pordoj 80 kaj 443 (vidu “TLS”)
valkey cache Kaŝmemoro kaj rapidlimoj
clamav scan Malware-skanado de alŝutoj
gotenberg preview Antaŭrigardoj de Office al PDF kaj atestila renderado
imgproxy images Regrandigitaj kaj konvertitaj bildoj
transcoder video Worker-bildo kun LGPL-nur ffmpeg por videaj derivaĵoj
seaweedfs storage S3-kongrua objektostokado ĉe ĉi tiu gastiganto
otelcol observability OpenTelemetry-kolektilo
mailpit devmail Kaptas ĉiun elirantan retpoŝton dum provo de Quire
backup backup Unufoja baza sekurkopio; vidu backup-restore.md
backup-scheduler, backup-offsite backup Baza sekurkopio ĉiun QUIRE_BACKUP_INTERVAL_HOURS kaj ĉifritaj ekstergastigaj kopioj kun semajna kontrolprovo
h5p h5p H5P LTI 1.3-ilobildo provizita de vi en QUIRE_H5P_IMAGE, ĉe QUIRE_H5P_PORT (8090); vidu “Konekti H5P-provizanton”

--profile full startigas ĉiun nedevigan servon krom backup kaj h5p. Startigu unu per docker compose -f docker/compose.yaml --profile scan up -d. Sen nedeviga servo Quire plu funkcias kaj diras kio mankas: sen skanilo alŝutoj konserviĝas neskaniitaj kaj administranto estas informata; sen Gotenberg oni povas elŝuti dosierojn sed ne antaŭrigardi ilin; sen transcoder video ludas kiel originala dosiero.

Ĉiuj triaj bildoj kaj licencaj devoj estas listigitaj en docker/third-party-containers.yaml.

Konekti H5P-provizanton

Quire ne enkorpigas aŭ liveras H5P-rultempon aŭ flankprogramon (ADR 0019). Se vi uzas H5P, provizu propran gastigatan abonon aŭ funkciigu memgastigatan H5P- instancon aparte de Quire. Registru tiun provizanton kiel eksteran LTI 1.3- ilon kaj aldonu ĝian enhavon al kursoj kiel ilaj aktivecoj. Quire interŝanĝas notojn kaj progreson de aktiveco/pritatakso per LTI Assignment and Grade Services (AGS). Se provizanto ankaŭ sendas xAPI-deklarojn, agordu tion aparte por konservejo de xAPI-deklaroj de Quire; AGS-interŝanĝo de noto/progreso ne sendas xAPI- deklarojn. Moodle-importoj raportas H5P-aktivecojn kiel bezonantajn konekton al LTI-ilo. La provizanto restas respondeca pri sia H5P-rultempo, kreado, enhavbanko kaj historio de provoj.

Por funkciigi propran memgastigatan instancon ĉi tie, agordu QUIRE_H5P_IMAGE al ĝia bildo kaj startigu profilon h5p. Compose publikigas ĝin ĉe QUIRE_H5P_PORT (8090) kaj konservas ĝiajn datumojn en volumeno h5p-data; bildo kaj ĝiaj devoj restas viaj.

Agordoj

Ĉiu procezo legas docker/.env. Ŝablono docker/.env.example listigas ĉiun agordon kun defaŭlta valoro. Grupoj:

Adresoj

Agordo Signifo
QUIRE_APP_ORIGIN Publika adreso de LMS, ekzemple https://learn.example.com
QUIRE_CONTENT_ORIGIN Origino de enhavo, ĉe alia gastiganto
QUIRE_PLATFORM_DOMAINS Domajnoj por organizaĵoj, apartigitaj per komoj
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 ĉi tie. Vidu aliajn gvidilojn por vercel kaj cloudflare
QUIRE_TRUSTED_PROXY_CIDRS Prokuriloj kies X-Forwarded-For estas fidata

Sekretoj

Agordo Signifo
QUIRE_SECRET_KEY Subskribas sesiojn kaj ĵetonojn. 64 deksesumaj signoj
QUIRE_MASTER_KEY Envolvas konservitajn legitimilojn kiel sekretojn de SSO kaj webhook. 32 bajtoj, base64. Reta tavolo kaj worker bezonas saman valoron. Rotacio: key-rotation.md
QUIRE_MASTER_KEY_VERSION Versietikedo de ĉefa ŝlosilo, v1 se ne agordita. Pliigu dum rotacio
QUIRE_MASTER_KEY_RETIRED Antaŭaj ĉefaj ŝlosiloj bezonataj por legi tion, kion ili sigelis, kiel v1=<base64>. Forigu post fino de rotacio sen nesolvitaj valoroj
QUIRE_COLLAB_SIGNING_KEY Kunhavata de web kaj collab por subskribi redaktajn ĵetonojn
QUIRE_BACKUP_SIGNING_KEY Subskribas kursajn sekurkopiojn (nedeviga)

Konservu kopion de QUIRE_MASTER_KEY aliloke ol ĉe ĉi tiu gastiganto. Datumbazo restarigita sen ĝi ne povas malĉifri konservitajn legitimilojn.

Datumbazo

Agordo Signifo
POSTGRES_PASSWORD Superuzanto uzata de ujo kaj sekurkopioj
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD Pasvortoj de roloj, agordataj ĉe unua starto
DATABASE_URL Aplikaĵa rolo. Row-level security validas por ĉiu ĝia peto
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL Migrada rolo por migrate kaj init
QUIRE_SUPERUSER_URL Uzata nur dum unua starto
QUIRE_REPORT_DATABASE_URL Nurlega raportrolo por raportoj kaj raportkonstruilo
QUIRE_AUDIT_DATABASE_URL Kontrolrola konekto por kontrolkonzolo kaj SIEM-eksporto
QUIRE_DATABASE_ID Iu UUID, fiksa dum la vivo de instalado

Pasvortoj por roloj aplikiĝas nur kiam datumbaza volumeno estas kreita unuafoje. Por ŝanĝi poste, uzu ALTER ROLE kaj ĝisdatigu la kongruan URL.

QUIRE_REPORT_DATABASE_URL estas uzata por la fizika datumbazo agordita per DATABASE_URL. Por ĉiu alia registrita fizika datumbazo, agordu propran quire_report-konektan URL en medioj de web kaj worker, kaj metu la variablan nomon en la kampon Reporting environment variable de tiu datumbazo kiel env:NAME. Referenco devas montri al sama datumbazo kiel aplikaĵa konekto, ideale ĝia lega kopio. Ĉiu raporta interfaco sekvas luanton al raportkonekto de ĝia propra datumbazo: raportkonstruilo kaj konservitaj raportoj, planitaj liveroj, raporteksportoj, analitiko, kontrolprotokolo, REST-kontrolrimedoj kaj kontrolserĉo de helpanto. Neniu el ili uzas raport-URL-on de alia datumbazo. Kiam datumbazo ne havas raportkonekton, normalaj raportoj ruliĝas per propra aplikaĵa konekto, dum analitiko kaj ĉiu kontrola lego rifuzas kaj diras kial, ĉar aplikaĵa rolo ne povas legi kontrolspuron.

Peliloj

Agordo Ĉi tiu eldono Notoj
QUIRE_STORAGE_DRIVER local (defaŭlta), s3 aŭ azure local konservas dosierojn en volumeno files. s3 kovras AWS S3, R2, GCS-kongruecon kaj aliajn S3-kongruajn konservejojn kun rekomencigeblaj plurpartaj alŝutoj
QUIRE_REALTIME_DRIVER inprocess (defaŭlta), sse, centrifugo aŭ durable_objects inprocess taŭgas por unu reta ujo; uzu centrifugo aŭ sse se estas pluraj
QUIRE_CACHE_DRIVER memory (defaŭlta), postgres aŭ valkey memory estas por ĉiu procezo; uzu valkey aŭ postgres por konservi rapidlimojn inter ujoj
QUIRE_VIDEO_DRIVER ffmpeg (defaŭlta) aŭ progressive_mp4 Aŭ gastigita provizanto: Cloudflare Stream, Mux aŭ Bunny per iliaj ŝlosiloj
QUIRE_IMAGE_DRIVER noop (defaŭlta), imgproxy aŭ cloudflare noop servas ĉiun bildon je originala grando. imgproxy bezonas profilon images kaj agordojn sube; cloudflare uzas Cloudflare Images
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi aŭ in_process Defaŭlta platforma provizanto por vivaj kunsidoj. Se malplena, vivaj kunsidoj diras ke ili ne estas agorditaj ĝis organizaĵo konektas propran konton ĉe Integriĝoj, Provizanto de viva kunsido. Propra konto de organizaĵo ĉiam superregas ĉi tiun valoron. Agordoj de ĉiu provizanto (BBB_URL kaj BBB_SECRET, variabloj ZOOM_*, TEAMS_*, GOOGLE_MEET_* kaj JITSI_*) estas legataj nur por provizanto nomita ĉi tie
QUIRE_MEETING_REGIONS Komapartigita listo de eu, uk, us Regionoj kie defaŭlta platforma provizanto prilaboras kunsidojn. Se malplena, ĝi ne estas kontrolata kontraŭ organizaĵo ligita al regiono, kiel antaŭe. Propra konto de organizaĵo montras siajn regionojn en sia paĝo

Valoro de pelilo ne inkluzivita en ĉi tiu eldono estas rifuzata kiam la reta tavolo startas, kun nomo de agordo, anstataŭ silente anstataŭigi ĝin per defaŭlto.

Bildoj

Paĝoj petas bildojn je kvar fiksaj grandoj per /api/files/{id}/image/{size}, kiu kontrolas saman aliron kiel dosiero mem kaj poste alidirektas al bildservo. Ĉiu organizaĵo rajtas peti QUIRE_IMAGE_SPECS_PER_HOUR (defaŭlta 2000) novajn parajn bildo-grando hore; jam produktitaj grandoj en tiu horo ne kalkuliĝas. Uzu valkey aŭ postgres por QUIRE_CACHE_DRIVER se estas pluraj retaj ujoj, por ke limo validu inter ili.

Agordo Pelilo Notoj
IMGPROXY_URL imgproxy Adreso atingata de retumiloj por imgproxy, ekz. https://images.example.org. Profilo images publikigas ĝin ĉe QUIRE_IMAGES_PORT (8082)
IMGPROXY_KEY, IMGPROXY_SALT imgproxy Deksesumaj ĉenoj, samaj valoroj uzataj kiam imgproxy startas. Generu ĉiun per openssl rand -hex 32. Quire subskribas ĉiun bildadreson per ili, por ke imgproxy ne renderu ion, kion Quire ne petis
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy kun loka stokado De kie imgproxy prenas originalojn. Compose agordas http://web:3000. Kun s3 aŭ azure stokado, imgproxy prenas el bucket kaj tio ne estas uzata
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare API-ĵetono kun redakta permeso por Images, kaj konto-haketo el Images, Developer resources. Ŝaltu flekseblajn variaĵojn por konto
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare Nedeviga. Agordite, bildoj estas privataj kaj ĉiu adreso estas subskribita kaj eksvalidiĝas. Sen ĝi bildoj estas publikaj ĉe adresoj derivitaj de QUIRE_SECRET_KEY, diveneblaj de neniu

Cloudflare Images konservas propran kopion de ĉiu originalo servata. Forigante dosieron, worker forigas tiun kopion antaŭ la originalo.

Atendovico

Fonaj taskoj uzas pg-boss en sama Postgres-datumbazo, do ne necesas funkciigi aŭ agordi apartan atendovicservon. Taskoj estas envicigataj en sama transakcio kiel ŝanĝo, kiu kaŭzis ilin, do paneo ne povas perdi aŭ dufoje sendi taskon. QUIRE_QUEUE_DRIVER estas defaŭlte pgboss ĉi tie; vercel kaj cloudflare movas nur malpezajn sciigajn kaj webhook-liverojn al propra atendovico de platformo. Vercel- kaj Cloudflare-gvidiloj priskribas ilin kaj kiel iliaj retaj tavoloj envicigas.

Retpoŝto

Agordu unu el jenaj:

  • QUIRE_EMAIL_PROVIDER_CONFIG: JSON-objekton kun nomo de HTTP-provizanto kaj ĝiaj legitimiloj, ekzemple {"provider":"postmark","token":"..."}. Postmark, Amazon SES, Mailgun, SendGrid kaj Resend estas subtenataj.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. Nur ĉi tiu celo; la senservilaj celoj blokas SMTP.

QUIRE_MAIL_FROM estas sendanto. Por provi Quire, startigu profilon devmail, agordu QUIRE_SMTP_URL=smtp://mailpit:1025 kaj legu retpoŝton ĉe http://localhost:8025.

Nedevigaj servoj

Agordo Kun profilo
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ŭ QUIRE_MEILISEARCH_URL Ekstera serĉo; alie plen-teksta Postgres-serĉo
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Kontrolo pri kompromititaj pasvortoj. Defaŭlte aktiva ĉe api.pwnedpasswords.com (sendiĝas nur prefikso de haketo kun kvin signoj); off malŝaltas ĝin, kaj URL indikas range-API-on mastrumatan de vi

Observado

OTEL_EXPORTER_OTLP_ENDPOINT nomas kolektilon al kiu ĉiu procezo sendas spurojn kaj metrikojn; kun profilo observability ĝi estas http://otelcol:4318, kaj docker/otel-collector.yaml estas loko por aldoni eksportilon al via backend. Reta tavolo, worker, scheduler, content kaj collab procezoj eksportas span-ojn per OTLP/HTTP (retajn petojn, luantajn datumbazajn transakciojn, worker-taskojn kaj elirantajn vokojn) kiam agordite, kaj metrikojn al sama finpunkto ĉiun minuton (OTEL_METRICS_EXPORTER=none malŝaltas ilin). OTEL_TRACES_SAMPLER_ARG agordas proporcion de konservataj spuroj. Protokoloj iras al norma eligo laŭ LOG_LEVEL, kaj Compose rotacias ilin. Spuroj neniam portas personajn datumojn.

Regiona elira trafiko (EU-datumrezideco)

QUIRE_REGION=eu indikas ke stako servas organizaĵojn de Eŭropa Unio. Worker limigas ĉiun elirantan peton faritan por organizaĵo ligita al EU al permeslisto (21-compliance.md sekcio 8.1). Listo enhavas gastigantojn deklaritajn de agorditaj servoj por regiono (stokfinpunkto, retpoŝta provizanto, gastigita videoprovizanto, propraj stokceloj de organizaĵo, AI-provizantoj kaj retpoŝta konto), gastigantojn de servoj sub aktiva escepto kaj gastigantojn listigitajn en QUIRE_EGRESS_ALLOW_HOSTS. Peto al alia publika gastiganto estas rifuzata antaŭ sendo; rifuzo estas registrata en kontrolprotokolo de organizaĵo kiel privacy/egress_refused, kaj listigata sub Konformeco, Datumloĝado.

Agordo Valoroj Efiko
QUIRE_EGRESS_ALLOW_HOSTS Komapartigita listo de gastigantonomoj aŭ *.example.org por ĉiuj subdomajnoj Pliaj gastigantoj atingeblaj por EU-organizaĵo. Webhook-, xAPI- kaj SIEM-finpunktoj, blogfluoj kaj Amazon SES-gastigantoj apartenas ĉi tien, ĉar ilin elektas organizaĵo kaj neniu servo deklaras ilin. Loopback, privataj adresoj kaj ununuraj etikednomoj kiel web aŭ clamav estas propra reto kaj neniam kontrolataj

UK- kaj US-organizaĵoj ne estas ligitaj al gastigantolisto; kontroloj pri servoregiono daŭras. Agordu liston ĉe worker; administra paĝo legas ĝin ĉe reta tavolo por montri permesliston, do metu ĝin en docker/.env, legatan de ĉiu servo.

Aplikaĵa kontrolo donas klaran eraron kaj kontrolregistron, sed ĝi ne estas garantio: kodo povas esti malĝusta. Garantio estas reto. Compose ne plenumigas ĝin por vi. Por regiona stako metu worker kaj web servojn en reton internal: true, kies sola elira vojo estas elira prokurilo (ekzemple Squid aŭ tinyproxy-ujo) permesanta samajn gastigantojn kiel QUIRE_EGRESS_ALLOW_HOSTS kaj gastigantojn de agorditaj servoj; agordu HTTPS_PROXY por tiuj servoj. Loĝpaĝo listigas precizajn gastigantojn permesitajn de aplikaĵo, por ke du listoj estu kompareblaj.

Sano

Finpunkto Signifo
/healthz Vivsigno: procezo respondas. Compose-sankontroloj uzas ĉi tion
/readyz Preteco: dependecoj atingeblas, kaj ĉiu nedeviga servo estas raportita agordita aŭ ne. Direktu load balancer ĉi tien

docker compose -f docker/compose.yaml ps montras sanon de ĉiu servo.

TLS

Servo proxy (Caddy, Apache-2.0, docker/caddy/Caddyfile) estas parto de defaŭlta stako. Ĝi respondas ĉe pordoj 80 kaj 443 kaj sendas:

Gastiganto aŭ vojo Al
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, ĉiu luanta subdomajno kaj propra domajno web
/_collab/ ĉe tiuj gastigantoj collab (websocket, QUIRE_COLLAB_URL)
/_realtime/connection/ ĉe tiuj gastigantoj klienta websocket de centrifugo; ĝia servila API neniam estas publikigita
/_images/ ĉe tiuj gastigantoj imgproxy, kun profilo images (IMGPROXY_URL)

init-env.sh derivas QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL kaj IMGPROXY_URL el la du originoj, por ke ili ne disiĝu. Redaktu ilin kune se vi ŝanĝas originon permane.

Atestiloj sekvas QUIRE_PROXY_TLS:

  • internal (defaŭlta): propra atestila aŭtoritato de Caddy por localhost, *.localhost kaj lvh.me. Fidu ĝian radikon unufoje, poste malfermu:

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

    Aldonu quire-local-ca.crt al fidkonservejo de sistemo aŭ retumilo. curl uzas ĝin per --cacert.

  • Retpoŝtadreso: aŭtomataj ACME-atestiloj (Let’s Encrypt, poste ZeroSSL) por realaj gastigantonomoj. DNS por ambaŭ originoj kaj ĉiu luanta gastiganto devas montri ĉi tien, kaj pordoj 80 kaj 443 devas esti atingeblaj de interreto.

Luantaj gastigantoj estas eldonataj laŭpete ĉe unua vizito kaj nur kiam web konfirmas, ke nomo apartenas al instalado (/tls-allowed, petata en Compose-reto). Ne bezonas ĵokeran atestilon aŭ DNS-provizantan kromprogramon, kaj fremdulo indikaĉanta nomon al gastiganto ne povas igi ĝin peti atestilojn. Atestiloj kaj loka aŭtoritato troviĝas en volumeno caddy-data; sekurkopiu ĝin kune kun resto se vi uzas internal.

Web fidas nur X-Forwarded-For de prokurilo: prokurilo havas fiksan adreson (QUIRE_PROXY_ADDRESS, defaŭlte 172.29.64.10) ĉe fiksa subreto (QUIRE_COMPOSE_SUBNET), kaj QUIRE_TRUSTED_PROXY_CIDRS nomas tiun adreson. Se subreto kolizias kun reto ĉe gastiganto, ŝanĝu ambaŭ kaj rulu docker compose down antaŭ up.

Malantaŭ propra inversa prokurilo

Por uzi ekzistantan load balancer aŭ prokurilon, ne startigu proxy (docker compose up -d --scale proxy=0) kaj finu TLS antaŭ web (8080), content (8081), collab (1234, websocket) kaj centrifugo (8000, websocket). Agordu publikajn adresojn en QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN kaj QUIRE_COLLAB_URL (wss://), kaj intervalon de prokurilaj adresoj en QUIRE_TRUSTED_PROXY_CIDRS.

Solvado de problemoj

  • init eliras kun “QUIRE_DATABASE_ID is not a UUID”: agordu ĝin per uuidgen.
  • web restartas kun “did not start on compose”: protokolo listigas ĉiun agordon neuzeblan kaj kion meti anstataŭe.
  • Ŝanĝi pasvorton de rolo en .env post unua starto nenion faras: init-skripto ruliĝas nur unufoje. Uzu ALTER ROLE.
  • Alŝutoj malsukcesas pro skaneraro dum CLAMAV_URL estas agordita: ClamAV elŝutas subskribojn ĉe unua starto, kio daŭras kelkajn minutojn.
Navigado

Tajpu por serĉi…

↑↓ navigi↵ elektiEsc fermi