Tai visas produktas vienoje sistemoje: LMS, jo foninis darbas, realiojo laiko
ir bendro redagavimo paslaugos ir kiekviena pasirenkama paslauga už profilio.
Projekto aprašas yra docs/architecture/23-ops.md 2 skyrius.
Kiti tikslai: Vercel ir Cloudflare Workers vykdo tik tinklo sluoksnį. Atnaujinimai yra upgrade.md, o atsatinės kopijos ir atkūrimo pratybos – backup-restore.md.
Ko jums reikia
- Docker Engine 27 arba vėlesnis su Compose įskiepiu 2.30 arba vėlesniu.
- 4 CPU branduoliai ir 8 GB atminties numatytajam masyvui; 8 branduoliai ir
16 GB su
--profile full(vienas ClamAV laiko apie 1,5 GB parašų). - DNS vardas tinklo sluoksniui ir antras nepatikimam turiniui. Jie turi būti skirtingi šeimininkai: SCORM paketai ir įkeltas HTML veikia turinio kilmės vietose, todėl jie niekada negali perskaityti LMS slapukų.
- Vietiniam bandymui
lvh.meir*.localhostišsprendžiami į 127.0.0.1, ką ir naudojadocker/.env.example. Pati masyvoproxypaslauga tiekia abu per https su vietine liudijimų įstaiga, todėl nieko kito neįdiegiama (žr. „TLS“). - 80 ir 443 prievadai laisvi sistemoje (
QUIRE_PROXY_HTTP_PORTirQUIRE_PROXY_HTTPS_PORTjuos perkelia).
Pirmasis paleidimas
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 įrašo docker/.env iš docker/.env.example su
sugeneruota kiekviena paslaptimi (duomenų bazės slaptažodžiai, pasirašymo ir
pagrindiniai raktai, turinio paleidimo raktų pora) ir audito kontrolinio
taško pasirašymo raktu faile docker/secrets/audit-signing-key.pem, kurį
Compose prijungia prie darbininkų kaip paslaptį. Jam reikia tik sh, awk
ir openssl, ir jis atsisako perrašyti jau esamą docker/.env. Nukopijuokite
abu failus už sistemos ribų: be QUIRE_MASTER_KEY atkurta duomenų bazė negali
iššifruoti savo išsaugotų prisijungimo duomenų. Jei norite failą užpildyti
ranka, cp docker/.env.example docker/.env; faile parašyta, kaip sugeneruoti
kiekvieną paslaptį.
Abu kilmės adresai turi būti https: turinio paslauga atsisako paprasto
http gamyboje, ir jie negali dalytis registruojamu domenu. Paslauga proxy
nutraukia TLS abiem (žr. „TLS“); init-env.sh atmeta http:// kilmės adresą.
Masyvas paleidžiamas fiksuota tvarka, ir kiekvienas žingsnis laukia ankstesnio:
postgrestampa sveikas. Pirmojo paleidimo metu jo paleidimo skriptas (docker/postgres/init/90-passwords.sh) nustato keturių vaidmenų slaptažodžius.migratepritaiko kiekvieną migraciją ir įkuria užduočių eilę valdymo duomenų bazėje ir kiekvienoje atskiroje nuomininko duomenų bazėje, patikrina, ar jos visos sutampa, tada išeina (docs/ops/upgrade.md). Migracijos vykdomos kiekvieną kartą paleidus ir yra idempotentiškos, todėl atnaujinimas yra naujas atvaizdas ir paleidimas iš naujo.init(apps/web/src/first-run.ts) užregistruoja programų duomenų bazę poQUIRE_DATABASE_IDir, kai nustatytasQUIRE_SETUP_ADMIN_EMAIL, sukuria pirmąją organizaciją ir jos administratorių. Prisijungimo adresas ir sugeneruotas slaptažodis atspausdinami vieną kartą,docker compose logs init.- Paleidžiami
web,content,worker,scheduler,collabircentrifugo. proxypaleidžiamas, kaiwebircontentyra sveiki.
Atidarykite https://demo. ir po jo savo programos domeną (init žurnalas
atspausdina tikslų prisijungimo adresą) ir prisijunkite. Diegiant vietoje
pirmiausia pasitikėkite proxy liudijimų įstaiga (žr. „TLS“). Pakeiskite
sugeneruotą slaptažodį adresu /account/security.
Procesas, paleistas be privalomos paslapties, atsisako paleisti ir savo žurnale įvardija trūkstamą nustatymą. Niekas nepaleidžiamas pusiau sukonfigūruotas.
Paslaugos ir profiliai
| Paslauga | Profilis | Ką daro |
|---|---|---|
| postgres | visada | Duomenų bazė (PostgreSQL 18 su pgvector, pastatyta iš docker/postgres.Dockerfile), su WAL archyvavimu nuo pirmojo paleidimo |
| migrate, init | visada | Vienkartinė: migracijos, tada pirmasis paleidimas |
| web | visada | LMS ant QUIRE_HTTP_PORT (8080) |
| content | visada | Nepatikimo turinio kilmės vieta ant QUIRE_CONTENT_PORT (8081) |
| worker | visada | Fono užduotys: el. paštas, ataskaitos, failų apdorojimas, „webhooks“ |
| scheduler | visada | Pasikartojančios užduotys: registruoja 64 vykdymo tvarkaraščius ir perduoda juos darbininkui; vienas lyderis vienu metu |
| collab | visada | Bendro redagavimo websocket ant QUIRE_COLLAB_HTTP_PORT (1234) |
| centrifugo | visada | Realiojo laiko skirstymas ant QUIRE_REALTIME_PORT (8000) |
| proxy | visada | Caddy, TLS priekinės durys 80 ir 443 prievaduose (žr. „TLS“) |
| valkey | cache |
Podėliai ir greičio ribojimai |
| clamav | scan |
Kenksmingų programų skenavimas įkėlimų |
| gotenberg | preview |
Office į PDF peržiūros, liudijimų generavimas |
| imgproxy | images |
Keičiamo dydžio ir konvertuoti paveikslėliai |
| transcoder | video |
Darbininko atvaizdas su tik LGPL ffmpeg, vaizdo pavidalams |
| seaweedfs | storage |
S3 suderinta objektų saugyklas šioje sistemoje |
| otelcol | observability |
OpenTelemetry rinktuvas |
| mailpit | devmail |
Sugaudo visą išeinantį paštą, kad galėtumėte išbandyti Quire |
| backup | backup |
Vienkartinė bazinė atsarginė kopija; žr. backup-restore.md |
| backup-scheduler, backup-offsite | backup |
Bazinė atsarginė kopija kas QUIRE_BACKUP_INTERVAL_HOURS ir užšifruotos kopijos už sistemos ribų su kasdiene patikros pratyba |
| h5p | h5p |
H5P LTI 1.3 įrankio atvaizdas, kurį tiekiate QUIRE_H5P_IMAGE, ant QUIRE_H5P_PORT (8090); žr. „H5P teikėjo prijungimas“ |
--profile full paleidžia kiekvieną pasirenkamą paslaugą, išskyrus backup
ir h5p. Vieną paslaugą paleiskite su
docker compose -f docker/compose.yaml --profile scan up -d. Be pasirenkamos
paslaugos Quire vis tiek veikia ir pasako, ko trūksta: be skenerio įkėlimai
saugomi neskeniuojami ir administratorius apie tai informuojamas; be
„Gotenberg“ failai vietoj peržiūros siūlo atsisiųsti; be transkoderio vaizdo
įrašas groja toks, koks yra originalus failas.
Kiekvienas trečiosios šalies atvaizdas ir jo licencijos įsipareigojimai
išvardyti faile docker/third-party-containers.yaml.
H5P teikėjo prijungimas
Quire neįdeda ir neteikia H5P vykdyklo arba šalutinio proceso (ADR 0019). Jei naudojate H5P, patys tiekite prieglobos prenumeratą arba valdykite savo H5P instanciją atskirai nuo Quire. Užregistruokite tą teikėją kaip LTI 1.3 išorinį įrankį ir pridėkite jo turinį prie kursų kaip įrankio veiklas. Quire keičiasi įvertinimais ir veiklos / tikrinimo eiga per LTI Priskyrimo ir įvertinimo paslaugas (AGS). Jei teikėjas taip pat siunčia xAPI teiginius, sukonfigūruokite tai atskirai Quire xAPI teiginių saugyklai; AGS įvertinimų / eigos keitimasis xAPI teiginių nesiunčia. Moodle importai praneša, kad H5P veikloms reikia LTI įrankio ryšio. Teikėjas ir toliau atsakingas už savo H5P vykdyklą, redagavimą, turinio banką ir bandymų istoriją.
Kad paleistumėte savo H5P instanciją šioje sistemoje, nustatykite
QUIRE_H5P_IMAGE į jos atvaizdą ir paleiskite profilį h5p. Compose jį
paskelbia ant QUIRE_H5P_PORT (8090) ir saugo jo duomenis h5p-data tome;
atsakomybė už atvaizdą ir kartu su juo ateinančius įsipareigojimus lieka jūsų.
Nustatymai
Kiekvienas procesas skaito docker/.env. Šablonas docker/.env.example
išvardija kiekvieną nustatymą su jo numatytąja reikšme. Grupės:
Adresai
| Nustatymas | Reikšmė |
|---|---|
QUIRE_APP_ORIGIN |
LMS viešasis adresas, pavyzdžiui https://learn.example.com |
QUIRE_CONTENT_ORIGIN |
Turinio kilmės vieta, kitas šeimininkas |
QUIRE_PLATFORM_DOMAINS |
Domenai, po kuriais gyvena organizacijos, skiriami kableliais |
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 |
Čia compose. Kituose vadovuose žr. vercel ir cloudflare |
QUIRE_TRUSTED_PROXY_CIDRS |
Įėjimo taškai, kurių X-Forwarded-For tikima |
Paslaptys
| Nustatymas | Reikšmė |
|---|---|
QUIRE_SECRET_KEY |
Pasirašo sesijas ir žetonus. 64 šešioliktainiai simboliai |
QUIRE_MASTER_KEY |
Suvynioja išsaugotus prisijungimo duomenis, tokius kaip SSO ir „webhook“ paslaptys. 32 baitai, base64. Tinklo sluoksniui ir darbininkui reikia tos pačios reikšmės. Rotavimas: key-rotation.md |
QUIRE_MASTER_KEY_VERSION |
Pagrindinio rakto versijos žyma, kai nenustatyta – v1. Pakelkite ją rotuodami |
QUIRE_MASTER_KEY_RETIRED |
Ankstesni pagrindiniai raktai, kurių vis dar reikia perskaityti tai, ką jie užkabino, kaip v1=<base64>. Pašalinkite, kai rotavimas baigiamas nieko neišsprendus |
QUIRE_COLLAB_SIGNING_KEY |
Dalijamas web ir collab pasirašyti redagavimo žetonus |
QUIRE_BACKUP_SIGNING_KEY |
Pasirašo kursų atsatines kopijas (neprivaloma) |
Laikykite QUIRE_MASTER_KEY kopiją kur kitur, ne šioje sistemoje. Duomenų
bazė, atkurta be jo, negali iššifruoti joje esančių prisijungimo duomenų.
Duomenų bazė
| Nustatymas | Reikšmė |
|---|---|
POSTGRES_PASSWORD |
Superuseris, naudojamas konteinerio ir atsatinių kopijų |
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD |
Vaidmenų slaptažodžiai, nustatomi pirmojo paleidimo metu |
DATABASE_URL |
Programų vaidmuo. Eilučių lygio apsauga taikoma kiekvienai jo užklausai |
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL |
Migratoriaus vaidmuo migrate ir init |
QUIRE_SUPERUSER_URL |
Naudojamas tik pirmojo paleidimo |
QUIRE_REPORT_DATABASE_URL |
Tik skaitymui skirtas ataskaitų vaidmuo ataskaitoms ir ataskaitų kūrėjui |
QUIRE_AUDIT_DATABASE_URL |
Audito vaidmuo audito konsolei ir SIEM eksportui |
QUIRE_DATABASE_ID |
Bet koks UUID, fiksuotas visam diegimo gyvenimui |
Vaidmenų slaptažodžiai taikomi tik tada, kai duomenų bazės tomas sukuriamas
pirmą kartą. Norėdami vėliau pakeisti vieną, naudokite ALTER ROLE ir tada
atnaujinkite atitinkamą URL.
QUIRE_REPORT_DATABASE_URL naudojamas fizinei duomenų bazei, sukonfigūruotai
DATABASE_URL. Kiekvienai kitai registruotai fizinei duomenų bazei nustatykite
jos pačios quire_report ryšio URL web ir darbininko aplinkose, tada į tą
duomenų bazę įrašykite kintamojo pavadinimą į lauką Reporting environment
variable kaip env:NAME. Nuoroda turi nurodyti į tą pačią duomenų bazę,
kaip ir jos programų ryšys, pageidautina, jos skaitymo kopiją. Kiekvienas
ataskaitų paviršius seka nuomininką į jo paties duomenų bazės ataskaitų
ryšį: ataskaitų kūrėjas ir išsaugotos ataskaitos, planiniai pristatymai,
ataskaitų eksportai, analitika, audito žurnalas, REST audito ištekliai ir
asistento audito paieška. Nė vienas iš jų niekados nesiima kitos duomenų
bazės ataskaitų URL. Kai duomenų bazė neturi ataskaitų ryšio, eilinės
ataskaitos vykdomos tos duomenų bazės paties programų ryšiu, o analitika ir
kiekvienas audito skaitymas atmetami su paaiškinimu, nes programų vaidmuo
negali skaityti audito pėdsako.
Varikliai
| Nustatymas | Ši versija | Pastabos |
|---|---|---|
QUIRE_STORAGE_DRIVER |
local (pagal nutylėjimą), s3 arba azure |
local laiko failus files tome. s3 apima AWS S3, R2, GCS suderinamumą ir kitas S3 suderintas saugyklas, su tęstiniais daugiadaliniais įkėlimais |
QUIRE_REALTIME_DRIVER |
inprocess (pagal nutylėjimą), sse, centrifugo arba durable_objects |
inprocess tinka vienam web konteineriui; kai jų keletas, naudokite centrifugo arba sse |
QUIRE_CACHE_DRIVER |
memory (pagal nutylėjimą), postgres arba valkey |
memory yra kiekvienam procesui; naudokite valkey arba postgres, kad greičio ribojimai galiotų tarp konteinerių |
QUIRE_VIDEO_DRIVER |
ffmpeg (pagal nutylėjimą) arba progressive_mp4 |
Arba prieglobos teikėjas: Cloudflare Stream, Mux arba Bunny, pagal jų raktus |
QUIRE_IMAGE_DRIVER |
noop (pagal nutylėjimą), imgproxy arba cloudflare |
noop tiekia kiekvieną paveikslėlį jo originaliu dydžiu. imgproxy reikia profilio images ir toliau nurodytų nustatymų; cloudflare naudoja Cloudflare Images |
QUIRE_MEETING_PROVIDER |
bbb, zoom, teams, meet, jitsi arba in_process |
Platformos numatytoji tiesioginių sesijų reikšmė. Nenustatyta, tiesioginės sesijos praneša, kad nesukonfigūruotos, kol organizacija neprijungia savo paskyros skiltyje Integracijos, tiesioginių sesijų teikėjas. Organizacijos paties paskyra visada laimi prieš šią reikšmę. Kiekvieno teikėjo patys nustatymai (BBB_URL ir BBB_SECRET, ZOOM_*, TEAMS_*, GOOGLE_MEET_* ir JITSI_* kintamieji) skaitomi tik čia pavadinto teikėjo |
QUIRE_MEETING_REGIONS |
Kableliais skiriamas eu, uk, us sąrašas |
Kur platformos numatytasis teikėjas tvarko susitikimus. Nenustatyta, tai nėra tikrinama prieš organizaciją, pririštą prie regiono, kaip anksčiau. Organizacijos paties paskyra nurodo savo regionus savo puslapyje |
Variklio reikšmės, kurios šios versijos nėra, tinklo sluoksniui paleidžiant atmetamos su nurodytu nustatymu, vietoj to, kad būtų tyliai pakeista numatąja reikšme.
Paveikslėliai
Puslapiai prašo paveikslėlių keturiais fiksuotais dydžiais per
/api/files/{id}/image/{size}, kuris tikrina tą patį prieinamumą kaip ir
pats failas, o tada nukreipia į paveikslėlių paslaugą. Kiekviena organizacija
gali per valandą paprašyti QUIRE_IMAGE_SPECS_PER_HOUR (pagal nutylėjimą
2000) naujų paveikslėlio ir dydžio porų; tą valandą jau pagaminti dydžiai
nesiskaičiuoja. Kai web konteinerių daugiau nei vienas, naudokite valkey
arba postgres kaip QUIRE_CACHE_DRIVER, kad limitas galiotų per visus.
| Nustatymas | Variklis | Pastabos |
|---|---|---|
IMGPROXY_URL |
imgproxy |
Adresas, kuriuo naršyklės pasiekia imgproxy, pavyzdžiui https://images.example.org. Profilis images jį paskelbia ant QUIRE_IMAGES_PORT (8082) |
IMGPROXY_KEY, IMGPROXY_SALT |
imgproxy |
Šešioliktainės eilutės, tos pačios reikšmės, su kuriomis paleidžiamas imgproxy. Kiekvieną sugeneruokite su openssl rand -hex 32. Quire jomis pasirašo kiekvieną paveikslėlio adresą, todėl imgproxy nieko nepiešia, ko Quire neprašė |
QUIRE_IMAGE_SOURCE_ORIGIN |
imgproxy su vietine saugykla |
Kur imgproxy ima originalus. Compose nustato http://web:3000. Su s3 arba azure saugykla imgproxy ima iš kibiro ir to nereikia |
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH |
cloudflare |
API žetonas su Images redagavimo teise ir paskyros maiša iš Images, Developer resources. Įjunkite lanksčius variantus paskyrai |
CLOUDFLARE_IMAGES_SIGNING_KEY |
cloudflare |
Neprivaloma. Kai nustatyta, paveikslėliai yra privatūs ir kiekvienas adresas pasirašomas ir galioja ribotą laiką. Be jo paveikslėliai vieši adresais, išvestais iš QUIRE_SECRET_KEY, kurių niekas negali atspėti |
Cloudflare Images laiko savo kiekvieno originalo, kurį tiekia, kopiją. Kai failas ištrinamas, darbininkas tą kopiją ištrina prieš originalą.
Eilė
Fono užduotys naudoja pg-boss toje pačioje Postgres duomenų bazėje, todėl
eilės paslaugos paleisti nereikia ir nėra ko konfigūruoti. Užduotys dedamos
į eilę toje pačioje transakcijoje, kaip ir pakeitimas, ją sukėlęs, todėl
kritimas negali nė vienos prarasti arba nė vienos išsiųsti du kartus.
QUIRE_QUEUE_DRIVER čia yra pgboss, jo numatytoji reikšmė; vercel ir
cloudflare perkelia tik lengvus pranešimų ir „webhook“ pristatymus į
pačios platformos eilę, o Vercel ir Cloudflare vadovai juos aprašo ir tai,
kaip jų tinklo sluoksniai deda į eilę.
El. paštas
Nustatykite vieną iš:
QUIRE_EMAIL_PROVIDER_CONFIG: JSON objektas, įvardijantis HTTP teikėją ir jo prisijungimo duomenis, pavyzdžiui{"provider":"postmark","token":"..."}. Palaikomi Postmark, Amazon SES, Mailgun, SendGrid ir Resend.QUIRE_SMTP_URL:smtp://user:password@host:587. Tik šiam tikslui; be serverio tikslai SMTP blokuoja.
QUIRE_MAIL_FROM yra siuntėjas. Norėdami išbandyti Quire, paleiskite profilį
devmail, nustatykite QUIRE_SMTP_URL=smtp://mailpit:1025 ir skaitykite
paštą adresu http://localhost:8025.
Pasirenkamos paslaugos
| Nustatymas | Su profiliu |
|---|---|
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 arba QUIRE_MEILISEARCH_URL |
Išorinė paieška; kitaip Postgres pilno teksto |
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL |
Slaptažodžių pažeidimo patikra. Pagal nutylėjimą įjungta prieš api.pwnedpasswords.com (siunčiamas tik penkių simbolių maišos priešdėlis); off ją išjungia, o URL nurodo į jūsų prieglobos diapazono API |
Stebėsena
OTEL_EXPORTER_OTLP_ENDPOINT įvardija rinktuvą, į kurį kiekvienas procesas
siunčia pėdsakus ir matuoklius; su profiliumi observability tai yra
http://otelcol:4318, o docker/otel-collector.yaml yra vieta, kur pridedate
eksportuotoją savo sistemai. Tinklo sluoksnio, darbininko, tvarkytuvo, turinio
ir bendradarbiavimo procesai eksportuoja intervalus per OTLP/HTTP (web
užklausos, nuomininko duomenų bazės transakcijos, darbininko užduotys ir
išeinančios užklausos), kai tai nustatyta, ir matuoklius į tą patį adresą
kas minutę (OTEL_METRICS_EXPORTER=none juos išjungia).
OTEL_TRACES_SAMPLER_ARG nustato laikomų pėdsakų dalį. Žurnalai eina į
standartinę išvestį su LOG_LEVEL, o Compose juos sukasi. Pėdsakuose niekada
nėra asmens duomenų.
Regioninis išėjimas (ES duomenų rezidavimas)
QUIRE_REGION=eu sako, kad masyvas aptarnauja Europos Sąjungos organizacijas.
Tada darbininkas kiekvieną išeinantį užklausą, padarytą organizacijai,
pririštai prie ES, laiko pagal leidžiamų adresų sąrašą (21-compliance.md 8.1
skyrius). Leidžiamų adresų sąrašą sudaro šeimininkai, kuriuos sukonfigūruotos
paslaugos deklaruoja regionui (saugyklos adresas, el. pašto teikėjas,
prieglobos vaizdo teikėjas, pačios organizacijos saugyklų adresai, DI
teikėjai ir el. pašto paskyra), bet kokios paslaugos, esančios aktyvioje
nuolaidoje, šeimininkai, ir jūsų išvardyti šeimininkai faile
QUIRE_EGRESS_ALLOW_HOSTS. Užklausa į bet kokį kitą viešą šeimininką
atmetama dar prieš ją išsiunčiant, atmetimas įrašomas į organizacijos audito
pėdsaką kaip privacy/egress_refused, ir jis išvardijamas skiltyje
Atitiktis, Duomenų rezidavimas.
| Nustatymas | Reikšmės | Poveikis |
|---|---|---|
QUIRE_EGRESS_ALLOW_HOSTS |
Kableliais skiriamas šeimininkų vardų sąrašas arba *.example.org kiekvienam subdomenui |
Papildomi šeimininkai, kuriuos ES organizacija gali pasiekti. „Webhook“, xAPI ir SIEM taškai, tinklaraščių srautai ir Amazon SES šeimininkai priklauso čia, nes jie yra pačios organizacijos pasirinkimas ir jų nedeklaruoja jokia paslauga. Loopback, privatūs adresai ir vienžodžiai vardai, tokie kaip web arba clamav, yra jūsų paties tinklas ir niekada netikrinami |
JK ir JAV organizacijos nelaikomos šeimininkų sąrašu; jos išlaiko paslaugos
regiono patikras. Nustatykite sąrašą darbininkui; administratoriaus puslapis
jį skaito tinklo sluoksnyje, kad parodytų leidžiamų adresų sąrašą, todėl
įrašykite jį į docker/.env, kurį skaito kiekviena paslauga.
Programos patikra duoda aiškią klaidą ir audito įrašą, ir tai nėra garantija:
kodas gali būti klaidingas. Garantija yra tinklas. Compose to jums neįgyvendina.
Regioniniam masyvui dėkite worker ir web paslaugas į internal: true
tinklą, kurio vienintelis išėjimas yra išėjimo įėjimo taškas (pavyzdžiui
Squid arba tinyproxy konteineris), leidžiantis tuos pačius šeimininkus kaip
QUIRE_EGRESS_ALLOW_HOSTS ir jūsų sukonfigūruotų paslaugų šeimininkus, ir
nustatykite HTTPS_PROXY toms paslaugoms. Rezidavimo puslapis išvardija
tikslius šeimininkus, kuriuos leidžia programa, todėl tuos du sąrašus galima
palyginti.
Sveikata
| Taškas | Reikšmė |
|---|---|
/healthz |
Gyvybingumas: procesas atsako. Compose sveikatos patikros tai naudoja |
/readyz |
Pasirengimas: priklausomybės pasiekiamos ir kiekviena pasirenkama paslauga pranešta, ar sukonfigūruota. Nukreipkite čia savo apkrovos paskirstytuvą |
docker compose -f docker/compose.yaml ps rodo kiekvienos paslaugos sveikatą.
TLS
Paslauga proxy (Caddy, Apache-2.0, docker/caddy/Caddyfile) yra numatytojo
masyvo dalis. Ji atsako 80 ir 443 prievaduose ir maršrutizuoja:
| Šeimininkas arba kelias | Kur eina |
|---|---|
QUIRE_PROXY_CONTENT_HOST |
content |
QUIRE_PROXY_APP_HOST, kiekvienas nuomininko subdomenas ir pasirinktinis domenas |
web |
/_collab/ tuose šeimininkuose |
collab (websocket, QUIRE_COLLAB_URL) |
/_realtime/connection/ tuose šeimininkuose |
centrifugo kliento websocket; jo serverio API niekada neatveriama |
/_images/ tuose šeimininkuose |
imgproxy, su profiliumi images (IMGPROXY_URL) |
init-env.sh išveda QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST,
QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL ir IMGPROXY_URL iš dviejų
kilmės adresų, todėl jie negali išsiskirtyti. Redaguokite juos kartu, jei
kilmės adresą keičiate ranka.
Liudijimai vadovaujasi QUIRE_PROXY_TLS:
-
internal(pagal nutylėjimą): pati Caddy liudijimų įstaigalocalhost,*.localhostirlvh.me. Kartą pasitikėkite jos šaknimi, tada naršykite:docker compose -f docker/compose.yaml cp \ proxy:/data/caddy/pki/authorities/local/root.crt ./quire-local-ca.crtPridėkite
quire-local-ca.crtprie sistemos arba naršyklės pasitikėjimo saugyklos.curljį priima su--cacert. -
El. pašto adresas: automatiniai ACME liudijimai (Let’s Encrypt, tada ZeroSSL) tikriems vardams. Abiejų kilmės sričių ir kiekvieno nuomininko šeimininko DNS turi nurodyti čia, o 80 ir 443 prievadai turi būti pasiekiami iš interneto.
Nuomininkų šeimininkai išduodami pagal poreikį, pirmojo apsilankymo metu, ir
tik tada, kai web patvirtina, kad vardas priklauso šiam diegimui (/tls-allowed,
klausiama Compose tinkle). Nereikia nei pakaitinio liudijimo, nei DNS teikėjo
įskiepio, ir svetimas žmogus, nukreipęs vardą į sistemą, negali priversti jos
prašyti liudijimų. Liudijimai ir vietinė įstaiga gyvena caddy-data tome;
jei naudojate internal, atsarginę kopiją darykite kartu su likusia dalimi.
Web tikima X-Forwarded-For tik iš įėjimo taško: jis turi fiksuotą adresą
(QUIRE_PROXY_ADDRESS, pagal nutylėjimą 172.29.64.10) fiksuotame tinkle
(QUIRE_COMPOSE_SUBNET), ir QUIRE_TRUSTED_PROXY_CIDRS įvardija tą adresą.
Jei tinklas susiduria su tinklu sistemoje, pakeiskite abu ir paleiskite
docker compose down prieš up.
Už savo atvirkštinio įėjimo taško
Norėdami naudoti apkrovos paskirstytuvą arba įėjimo tašką, kurį jau turite,
palikite proxy už (docker compose up -d --scale proxy=0) ir nutraukite
TLS priekyje web (8080), content (8081), collab (1234, websocket) ir
centrifugo (8000, websocket). Nustatykite viešuosius adresus
QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN ir QUIRE_COLLAB_URL (wss://),
ir savo įėjimo taško adresų intervalą QUIRE_TRUSTED_PROXY_CIDRS.
Trikčių šalinimas
initišeina su “QUIRE_DATABASE_ID is not a UUID”: nustatykite jį suuuidgen.webpaleidžiamas iš naujo su “did not start on compose”: žurnale išvardijamas kiekvienas nustatymas, kurio jis negali įgyvendinti, ir ką vietoj jo naudoti.- Vaidmens slaptažodžio pakeitimas faile
.envpo pirmojo paleidimo nieko nedaro: paleidimo skriptas veikia vieną kartą. NaudokiteALTER ROLE. - Įkėlimai nepavyksta su klaida dėl skenavimo, kai nustatytas
CLAMAV_URL: ClamAV parsisiunčia savo parašus pirmojo paleidimo metu, o tai užtrunka kelias minutes.