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.mekaj*.localhostsolviĝas al 127.0.0.1; tion uzasdocker/.env.example. La propra servoproxyde 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_PORTkajQUIRE_PROXY_HTTPS_PORTmovas 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 initdocker/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:
postgresfariĝas sana. Ĉe la unua ekfunkciigo ĝia init-skripto (docker/postgres/init/90-passwords.sh) agordas pasvortojn por kvar roloj.migrateaplikas ĉ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.init(apps/web/src/first-run.ts) registras aplikaĵan datumbazon subQUIRE_DATABASE_IDkaj, seQUIRE_SETUP_ADMIN_EMAILestas agordita, kreas unuan organizaĵon kaj ĝian administranton. Ensaluta adreso kaj generita pasvorto estas presitaj unufoje endocker compose logs init.web,content,worker,scheduler,collabkajcentrifugostartas.proxystartas kiamwebkajcontentestas 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 porlocalhost,*.localhostkajlvh.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.crtAldonu
quire-local-ca.crtal fidkonservejo de sistemo aŭ retumilo.curluzas ĝ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
initeliras kun “QUIRE_DATABASE_ID is not a UUID”: agordu ĝin peruuidgen.webrestartas kun “did not start on compose”: protokolo listigas ĉiun agordon neuzeblan kaj kion meti anstataŭe.- Ŝanĝi pasvorton de rolo en
.envpost unua starto nenion faras: init-skripto ruliĝas nur unufoje. UzuALTER ROLE. - Alŝutoj malsukcesas pro skaneraro dum
CLAMAV_URLestas agordita: ClamAV elŝutas subskribojn ĉe unua starto, kio daŭras kelkajn minutojn.