Pāriet uz saturu

Quire uzstādīšana ar Docker Compose

Uzstādiet Quire uz sava infrastruktūras ar Docker Compose.

Šis ir pilns produkts uz viena servera: LMS, tā fona darbi, reāllaika un kopīgās rediģēšanas pakalpojumi un katrs izvēles pakalpojums aiz profila. Konstrukcija ir docs/architecture/23-ops.md 2. sadaļa.

Citi mērķi: Vercel un Cloudflare Workers darbina tikai tīmekļa slāni. Jauninājumi ir upgrade.md, bet dublējumi un atjaunošanas mācība — backup-restore.md.

Kas jums nepieciešams

  • Docker Engine 27 vai jaunāks ar Compose spraudni 2.30 vai jaunāku.
  • 4 CPU kodoli un 8 GB atmiņas noklusētajai kopklasei; 8 kodoli un 16 GB ar --profile full (tikai ClamAV tur aptuveni 1,5 GB parakstu).
  • DNS vārds tīmekļa slānim un otrs neuzticamajam saturam. Tiem jābūt atšķirīgiem saimniekiem: SCORM pakotnes un augšupielādētais HTML darbojas uz satura izcelsmes, lai tie nekad nevarētu lasīt LMS sīkdatnes.
  • Vietējam testam lvh.me un *.localhost atrisinās uz 127.0.0.1, ko izmanto docker/.env.example. Pašas kopklases proxy pakalpojums apkalpo abus ar https, izmantojot vietējo sertifikācijas iestādi, tāpēc nekas cits netiek uzstādīts (skat. “TLS”).
  • Porti 80 un 443 brīvi uz servera (QUIRE_PROXY_HTTP_PORT un QUIRE_PROXY_HTTPS_PORT tos pārvieto).

Pirmais starts

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 uzraksta docker/.env no docker/.env.example ar izģenerētiem katru noslēpumu (datubāzes paroles, paraksta un galvenās atslēgas, satura palaišanas atslēgu pāri) un audita kontrolpunkta paraksta atslēgu vietnē docker/secrets/audit-signing-key.pem, ko Compose montē darbinīkos kā slepenību. Tam vajag tikai sh, awk un openssl, un tas atsakās pārrakstīt jau esošu docker/.env. Nokopējiet abus failus no servera: bez QUIRE_MASTER_KEY atjaunota datubāze nevar atsifrēt savus saglabātos akreditācijas datus. Lai failu aizpildītu ar roku, cp docker/.env.example docker/.env; fails pasaka, kā izģenerēt katru noslēpumu.

Abām izcelsmēm jābūt https: satura pakalpojums ražotnē atsaka parastu http, un tām nedrīkst būt kopīgs reģistrējams domēns. proxy pakalpojums abām pārtrauc TLS (skat. “TLS”); init-env.sh atsaka http:// izcelsmi.

Kopklase sākas fiksētā secībā, un katrs solis gaida iepriekšējo:

  1. postgres kļūst veselīgs. Pirmajā startēšanā tās init skripts (docker/postgres/init/90-passwords.sh) iestata četru lomu paroles.
  2. migrate piemēro katru migrāciju un sagatavo darbu rindu kontroldatubāzē un katrā atsevišķajā nomnieku datubāzē, pārbauda, ka tās visas piekrīt, pēc tam iziet (docs/ops/upgrade.md). Migrācijas tiek palaistas katrā startēšanā un ir idempotas, tāpēc jauninājums ir jauns attēls un restarts.
  3. init (apps/web/src/first-run.ts) reģistrē lietojumprogrammas datubāzi zem QUIRE_DATABASE_ID un, ja QUIRE_SETUP_ADMIN_EMAIL ir iestatīts, izveido pirmo organizāciju un tās administratoru. Pierakstīšanās adrese un ģenerētā parole tiek izdrukātas vienu reizi docker compose logs init.
  4. web, content, worker, scheduler, collab un centrifugo sākas.
  5. proxy sākas, tiklīdz web un content ir veselīgi.

Atveriet https://demo. un savu lietojumprogrammas domēnu (init žurnāls izdrukā precīzo pierakstīšanās adresi) un pierakstieties. Vietējā uzstādīšanā vispirms uzticieties proxy sertifikācijas iestādei (skat. “TLS”). Nomainiet ģenerēto paroli vietnē /account/security.

Process, kas palaists bez vajadzīgās slepenības, atsakās startēt un savā žurnālā nosaka trūkstošo iestatījumu. Nekas nepuskonfigurēts nesākas.

Pakalpojumi un profili

Pakalpojums Profils Ko tas dara
postgres vienmēr Datubāze (PostgreSQL 18 ar pgvector, uzbūvēta no docker/postgres.Dockerfile), ar WAL arhivēšanu no pirmās ielādes
migrate, init vienmēr Vienreizējs: migrācijas, pēc tam pirmais starts
web vienmēr LMS uz QUIRE_HTTP_PORT (8080)
content vienmēr Neuzticamā satura izcelsme uz QUIRE_CONTENT_PORT (8081)
worker vienmēr Fona darbi: e-pasts, atskaites, failu apstrāde, tīmekļa āķi
scheduler vienmēr Atkārtotie darbi: reģistrē 64 izpildlaika grafikus un nodod tos darbinīkam; viens vadonis vienlaikus
collab vienmēr Kopīgās rediģēšanas websocket uz QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo vienmēr Reāllaika izplatīšana uz QUIRE_REALTIME_PORT (8000)
proxy vienmēr Caddy, TLS priekšējā durvis portos 80 un 443 (skat. “TLS”)
valkey cache Kešs un ātruma ierobežojumi
clamav scan Ļaunprātīgas programmatūras skenēšana augšupielādēm
gotenberg preview Office uz PDF priekšskatījumiem, sertifikātu renderēšana
imgproxy images Mainīta izmēra un konvertēti attēli
transcoder video Darbinīka attēls ar tikai LGPL ffmpeg video renderējumiem
seaweedfs storage Saderīga objektu glabātuve uz šī servera
otelcol observability OpenTelemetry vācējs
mailpit devmail Ķer visu izejošo pastu, lai izmēģinātu Quire
backup backup Vienu reizi bāzes dublējums; skat. backup-restore.md
backup-scheduler, backup-offsite backup Bāzes dublējums ik pēc QUIRE_BACKUP_INTERVAL_HOURS, un šifrētas kopijas ārpus servera ar nedēļas pārbaudes mācību
h5p h5p H5P LTI 1.3 rīka attēls, ko piegādājat QUIRE_H5P_IMAGE, uz QUIRE_H5P_PORT (8090); skat. “H5P pakalpojuma sniedzēja pievienošana”

--profile full sāk katru izvēles pakalpojumu, izņemot backup un h5p. Vienu palaist var ar docker compose -f docker/compose.yaml --profile scan up -d. Bez izvēles pakalpojuma Quire joprojām darbojas un saka, kā trūkst: bez skenētāja augšupielādes tiek glabātas neskenētas, un administrators tiek informēts; bez Gotenberg faili piedāvā lejupielādi nevis priekšskatījumu; bez pārveidotāja video atskaņojas kā oriģinālais fails.

Katrs trešās puses attēls un tā licences saistības ir uzskaitītas failā docker/third-party-containers.yaml.

H5P pakalpojuma sniedzēja pievienošana

Quire neievieto un neizplata H5P izpildlaiku vai sānu procesu (ADR 0019). Ja izmantojat H5P, nodrošiniet savu mitināto abonementu vai darbiniet savu pašmitināto H5P instanci atsevišķi no Quire. Reģistrējiet to pakalpojumu sniedzēju kā ārējo LTI 1.3 rīku un pievienojiet tā saturu kursiem kā rīka nodarbības. Quire apmainās ar atzīmēm un nodarbību/vērtēšanas progresu caur LTI Assignment and Grade Services (AGS). Ja pakalpojums sniedzējs arī sūta xAPI paziņojumus, konfigurējiet to atsevišķi Quire xAPI paziņojumu glabātuvei; AGS atzīmju/progresu apmaiņa nesūta xAPI paziņojumus. Moodle importi ziņo, ka H5P nodarbībām vajag LTI rīka savienojumu. Pakalpojuma sniedzējs joprojām ir atbildīgs par savu H5P izpildlaiku, autorēšanu, satura banku un mēģinājumu vēsturi.

Lai uz šī servera palaistu savu pašmitināto instanci, iestatiet QUIRE_H5P_IMAGE uz tās attēlu un ieslēdziet profilu h5p. Compose to publicē uz QUIRE_H5P_PORT (8090) un glabā tā datus h5p-data sējumā; attēls un tā saistības paliek jūsu.

Iestatījumi

Katrs process lasa docker/.env. Veidne docker/.env.example uzskaita katru iestatījumu ar tā noklusējumu. Grupas:

Adreses

Iestatījums Nozīme
QUIRE_APP_ORIGIN LMS publiskā adrese, piemēram, https://learn.example.com
QUIRE_CONTENT_ORIGIN Satura izcelsme, cits saimnieks
QUIRE_PLATFORM_DOMAINS Domēni, zem kuriem dzīvo organizācijas, atdalīti ar komatiem
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 Šeit compose. Par vercel un cloudflare skat. citos ceļvežos
QUIRE_TRUSTED_PROXY_CIDRS Starpniekserverji, kuru X-Forwarded-For tic

Noslēpumi

Iestatījums Nozīme
QUIRE_SECRET_KEY Paraksta sesijas un žetonus. 64 heksadecimālas rakstzīmes
QUIRE_MASTER_KEY Ietīj saglabātos akreditācijas datus, piemēram, SSO un tīmekļa āķu noslēpumus. 32 baiti, base64. Tīmekļa slānim un darbinīkam jābūt ar vienādu vērtību. Maiņa: key-rotation.md
QUIRE_MASTER_KEY_VERSION Galvenās atslēgas versijas etiķete, v1, ja nav iestatīts. Palieliniet to, kad maināt
QUIRE_MASTER_KEY_RETIRED Iepriekšējās galvenās atslēgas, kas vēl vajadzīgas, lai lasītu to noslēgto, kā v1=<base64>. Noņemiet pēc maiņas pabeigšanas bez nekā neatrisināta
QUIRE_COLLAB_SIGNING_KEY Koplieto web un collab, lai parakstītu rediģēšanas žetonus
QUIRE_BACKUP_SIGNING_KEY Paraksta kursu dublējumus (izvēles)

Saglabājiet QUIRE_MASTER_KEY kopiju kaut kur citur ārpus šī servera. Datubāze, kas atjaunota bez tā, nevar atsifrēt tajā esošos akreditācijas datus.

Datubāze

Iestatījums Nozīme
POSTGRES_PASSWORD Superlietotājs, ko izmanto konteiners un dublējumi
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD Lomu paroles, iestatītas pirmajā startēšanā
DATABASE_URL Lietojumprogrammas loma. Rindu līmeņa drošība attiecas uz katru tās vaicājumu
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL Migrētāja loma migrate un init
QUIRE_SUPERUSER_URL Izmanto tikai pirmais starts
QUIRE_REPORT_DATABASE_URL Tikai lasāmā atskaišu loma atskaitēm un atskaišu veidotājam
QUIRE_AUDIT_DATABASE_URL Audita loma audita konsolei un SIEM eksportam
QUIRE_DATABASE_ID Jebkurš UUID, fiksēts visas instalācijas mūžam

Lomu paroles tiek piemērotas tikai tad, kad datubāzes sējums tiek izveidots pirmo reizi. Lai vēlāk kādu mainītu, lietojiet ALTER ROLE un pēc tam atjauniniet atbilstošo URL.

QUIRE_REPORT_DATABASE_URL tiek izmantots fiziskajai datubāzei, ko nosaka DATABASE_URL. Jebkurai citai reģistrētai fiziskai datubāzei iestatiet tās pašas quire_report savienojuma URL web un darbinīka vidē, pēc tam ielieciet mainīgā nosaukumu tās datubāzes Atskaišu vides mainīgā laukā kā env:NAME. Atsaucei jārāda uz to pašu datubāzi kā tās lietotnes savienojumam, vēlams, tās lasīšanas replikai. Katra atskaišu virsma seko nomniekam uz tās pašas datubāzes atskaišu savienojumu: atskaišu veidotājs un saglabātās atskaites, plānotās piegādes, atskaišu eksporti, analītika, audita žurnāls, REST audita resursi un palīga audita meklēšana. Neviena no tām nekad neaizņem citas datubāzes atskaišu URL. Kad datubāzei nav atskaišu savienojuma, parastās atskaites darbojas uz tās pašas datubāzes lietotnes savienojuma, bet analītika un katra audita lasīšana atsakās un to saka, jo lietojumprogrammas loma nevar lasīt izsekojamības ķēdi.

Draiveri

Iestatījums Šī versija Piezīmes
QUIRE_STORAGE_DRIVER local (noklusējums), s3 vai azure local glabā failus files sējumā. s3 aptver AWS S3, R2, GCS savietojamību un citas S3 saderīgas glabātuves ar atsākjamām daļskaitļa augšupielādēm
QUIRE_REALTIME_DRIVER inprocess (noklusējums), sse, centrifugo vai durable_objects inprocess der vienam web konteineram; izmantojiet centrifugo vai sse, kad to ir vairāki
QUIRE_CACHE_DRIVER memory (noklusējums), postgres vai valkey memory ir katram procesam; izmantojiet valkey vai postgres, lai ātruma ierobežojumi turētos starp konteineriem
QUIRE_VIDEO_DRIVER ffmpeg (noklusējums) vai progressive_mp4 Vai mitināts pakalpojums sniedzējs: Cloudflare Stream, Mux vai Bunny, ar to atslēgām
QUIRE_IMAGE_DRIVER noop (noklusējums), imgproxy vai cloudflare noop apkalpo katru attēlu tā oriģinālajā izmērā. imgproxy vajag profilu images un zemākos iestatījumus; cloudflare izmanto Cloudflare Images
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi vai in_process Platformas noklusējums tiešraides sesijām. Ja nav iestatīts, tiešraides sesijas saka, ka nav konfigurētas, līdz organizācija pieslēdz savu kontu sadaļā Integrācijas, Tiešraides sesiju pakalpojuma sniedzējs. Organizācijas paša konts vienmēr uzvar šo vērtību. Katra pakalpojuma sniedzēja pašie iestatījumi (BBB_URL un BBB_SECRET, ZOOM_*, TEAMS_*, GOOGLE_MEET_* un JITSI_* mainīgie) tiek lasīti tikai šeit nosauktajam pakalpojumam
QUIRE_MEETING_REGIONS Saraksts ar eu, uk, us, atdalīti ar komatiem Kur platformas noklusētā pakalpojuma sniedzējs apstrādā sapulces. Ja nav iestatīts, tas netiek pārbaudīts pret organizāciju, kas piesaistīta reģionam, tāpat kā iepriekš. Organizācijas paša konts savus reģionus norāda savā lapā

Draivera vērtība, ko šī versija neietver, tiek noraidīta, kad tīmekļa slānis sākas, nosaucot iestatījumu, nevis klusībā aizstājot ar noklusējumu.

Attēli

Lapas pieprasa attēlus četros fiksētos izmēros caur /api/files/{id}/image/{size}, kas pārbauda to pašu piekļuvi kā pats fails un pēc tam novirza uz attēlu pakalpojumu. Katra organizācija stundā drīkst pieprasīt QUIRE_IMAGE_SPECS_PER_HOUR (noklusējums 2000) jaunus attēlu un izmēra pārus; tajā stundā jau izveidotie izmēri neskaitās. Izmantojiet valkey vai postgres QUIRE_CACHE_DRIVER ar vairāk nekā vienu web konteineru, lai limits turētos starp tiem.

Iestatījums Draivers Piezīmes
IMGPROXY_URL imgproxy Adrese, pa kuru pārlūki sasniedz imgproxy, piemēram, https://images.example.org. Profils images to publicē uz QUIRE_IMAGES_PORT (8082)
IMGPROXY_KEY, IMGPROXY_SALT imgproxy Heksadecimālas virknes, tās pašas vērtības, ar kurām imgproxy tiek palaists. Katru ģenerējiet ar openssl rand -hex 32. Quire ar tām paraksta katru attēla adresi, tāpēc imgproxy nerenderē neko, ko Quire nav pieprasījis
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy ar vietējo krātuvi No kurienes imgproxy saņem oriģinālus. Compose iestata http://web:3000. Ar s3 vai azure krātuvi imgproxy saņem no spaiņa, un to neizmanto
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare API žetons ar Images rediģēšanas atļauju un konta maiņas kods no sadaļas Images, Izstrādātāja resursi. Ieslēdziet kontam elastīgos variantus
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare Izvēles. Kad iestatīts, attēli ir privāti un katra adrese ir parakstīta un beidzas. Bez tā attēli ir publiski adresēs, kas izvestas no QUIRE_SECRET_KEY un kuras neviens nevar uzminēt

Cloudflare Images glabā savu katru kopiju oriģinālam, ko tas apkalpo. Kad fails tiek izdzēsts, darbinīks vispirms izdzēš šo kopiju un pēc tam oriģinālu.

Rinda

Fona darbi izmanto pg-boss tai pašā Postgres datubāzē, tāpēc nav neviena rindas pakalpojuma, kas jāpalaiž, un nekas, kas jākonfigurē. Darbi tiek likti rindā tajā pašā darījumā, kas izraisīja izmaiņu, tāpēc avārija nevar zaudēt vienu vai nosūtīt divreiz. QUIRE_QUEUE_DRIVER šeit ir pgboss, tā noklusējums; vercel un cloudflare pārvieto tikai vieglos paziņojumu un tīmekļa āķu piegādes uz platformas pašu rindu, un Vercel un Cloudflare ceļvedī tās ir aprakstītas un to, kā to tīmekļa slāņi liek rindā.

E-pasts

Iestatiet vienu no:

  • QUIRE_EMAIL_PROVIDER_CONFIG: JSON objekts, kas nosauc HTTP pakalpojuma sniedzēju un tā akreditācijas datus, piemēram, {"provider":"postmark","token":"..."}. Atbalstīti Postmark, Amazon SES, Mailgun, SendGrid un Resend.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. Tikai šim mērķim; bezservera mērķi SMTP bloķē.

QUIRE_MAIL_FROM ir sūtītājs. Lai izmēģinātu Quire, ieslēdziet profilu devmail, iestatiet QUIRE_SMTP_URL=smtp://mailpit:1025 un lasiet pastu vietnē http://localhost:8025.

Izvēles pakalpojumi

Iestatījums Ar profilu
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 vai QUIRE_MEILISEARCH_URL Ārējā meklēšana; citādi Postgres pilnteksta meklēšana
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Paroles noplūdes pārbaude. Pēc noklusējuma ieslēgta pret api.pwnedpasswords.com (tiek nosūtīts tikai piecu rakstzīmju hash prefikss); off to izslēdz, un URL norāda uz pašu mitinātu diapazona API

Novērojamība

OTEL_EXPORTER_OTLP_ENDPOINT nosauc vācēju, kuram katrs process sūta izsekošanas ierakstus un metrikas; ar profilu observability tas ir http://otelcol:4318, un docker/otel-collector.yaml ir vieta, kur pievienot eksportētāju savam aizmugurei. Tīmekļa slānis, darbinīks, plānotājs, satura un collab procesi, kad tas ir iestatīts, eksportē posmus pār OTLP/HTTP (tīmekļa pieprasījumi, nomnieku datubāžu darījumi, darbinīka darbi un izejošie izsaukumi) un metrikas uz to pašu punktu ik pēc minūtes (OTEL_METRICS_EXPORTER=none tos izslēdz). OTEL_TRACES_SAMPLER_ARG nosaka izsekojumu daļu, ko patur. Žurnāli iet uz standarta izvadi ar LOG_LEVEL, un Compose tos apgriež. Izsekojumi nekad nes personas datus.

Reģionālā izeja (ES datu atrašanās vieta)

QUIRE_REGION=eu norāda, ka kopklase apkalpo Eiropas Savienības organizācijas. Darbinīks tad katrai organizācijai, kas piesaistīta ES, izejošo pieprasījumu ierobežo ar atļauto sarakstu (21-compliance.md 8.1. sadaļa). Atļauto sarakstu veido tie saimnieki, ko konfigurētie pakalpojumi paziņo šim reģionam (glabātuves punkts, e-pasta pakalpojums, mitināts video pakalpojums, pašas organizācijas glabātuves mērķi, mākslīgā intelekta pakalpojumi un e-pasta konts), jebkura pakalpojuma saimnieki zem aktīvas atkāpes un tie saimnieki, ko uzskaitāt vietnē QUIRE_EGRESS_ALLOW_HOSTS. Pieprasījums jebkuram citam publiskam saimniekam tiek noraidīts pirms nosūtīšanas, noraidījums tiek ierakstītas organizācijas izsekojamības ķēdī kā privacy/egress_refused, un tas ir uzskaitīts sadaļā Atbilstība, Datu atrašanās vieta.

Iestatījums Vērtības Efekts
QUIRE_EGRESS_ALLOW_HOSTS Saraksts ar saimnieku nosaukumiem, atdalītiem ar komatiem, vai *.example.org katram apakšdomēnam Papildu saimnieki, kurus ES organizācija drīkst sasniegt. Tīmekļa āķu, xAPI un SIEM gala punkti, emuāru barotnes un Amazon SES saimnieki pieder šeit, jo tie ir pašas organizācijas izvēle un neviens pakalpojums tos nepaziņo. Apgrieztā adrese, privātās adreses un vienzīmju nosaukumi, piemēram, web vai clamav, ir jūsu pašu tīkls un nekad netiek pārbaudīti

UK un ASV organizācijas nav ierobežotas ar saimnieku sarakstu; tās patur pakalpojuma reģiona pārbaudes. Sarakstu iestatiet darbinīkā; admin lapa to lasa tīmekļa slānī, lai parādītu atļauto sarakstu, tāpēc ielieciet to docker/.env, ko lasa katrs pakalpojums.

Lietojumprogrammas pārbaude dod skaidru kļūdu un audita ierakstu, un tā nav garantija: kods var būt nepareizs. Garantija ir tīkls. Compose to jūsu vietā nespēj ieviest. Reģionālai kopklasei ielieciet worker un web pakalpojumus uz internal: true tīkla, kura vienīgais izejas maršruts ir izejas starpniekserveris (piemēram, Squid vai tinyproxy konteiners), kas ļauj tos pašus saimniekus kā QUIRE_EGRESS_ALLOW_HOSTS plus jūsu konfigurēto pakalpojumu saimniekus, un tiem pakalpojumiem iestatiet HTTPS_PROXY. Atrašanās vietas lapa uzskaita precīzos saimniekus, kurus atļauj lietotne, lai abus sarakstus varētu salīdzināt.

Veselība

Gala punkts Nozīme
/healthz Dzīvotne: process atbild. Compose veselības pārbaudes izmanto šo
/readyz Gatavība: atkarības ir sasniedzamas, un katrs izvēles pakalpojums ir ziņojis, vai tas ir konfigurēts. Norādiet šeit savu slodzes līdzsvarotāju

docker compose -f docker/compose.yaml ps rāda katra pakalpojuma veselību.

TLS

proxy pakalpojums (Caddy, Apache-2.0, docker/caddy/Caddyfile) ir noklusētās kopklases sastāvdaļa. Tas atbild portos 80 un 443 un maršrutē:

Saimnieks vai ceļš Kur ved
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, katrs nomnieka apakšdomēns un pielāgotais domēns web
/_collab/ uz šiem saimniekiem collab (websocket, QUIRE_COLLAB_URL)
/_realtime/connection/ uz šiem saimniekiem centrifugo klienta websocket; tā servera API nekad netiek atvērts
/_images/ uz šiem saimniekiem imgproxy ar profilu images (IMGPROXY_URL)

init-env.sh izved QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL un IMGPROXY_URL no abām izcelsmēm, lai tās nevarētu aiziet prom citā virzienā. Mainiet tās kopā, ja kādu izcelsmi maināt ar roku.

Sertifikāti seko QUIRE_PROXY_TLS:

  • internal (noklusējums): Caddy paša sertifikācijas iestāde localhost, *.localhost un lvh.me. Uzticieties tās saknei vienreiz un pēc tam pārlūkojiet:

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

    Pievienojiet quire-local-ca.crt sistēmas vai pārlūka uzticamo sarakstu. curl to pieņem ar --cacert.

  • E-pasta adrese: automātiski ACME sertifikāti (Let’s Encrypt, pēc tam ZeroSSL) īstiem saimnieku nosaukumiem. Abu izcelsmju un katra nomnieka saimnieka DNS jānorāda šeit, un portiem 80 un 443 jābūt sasniedzamiem no interneta.

Nomnieku saimnieki tiek izsniegi pēc pieprasījuma, pirmajā apmeklējumā, un tikai tad, kad web apstiprina, ka vārds pieder šai instalācijai (/tls-allowed, vaicāts Compose tīklā). Nav vajadzīgs nekāds aizstājējsertifikāts ne DNS pakalpojuma sniedzēja spraudnis, un svešinieks, kas norāda vārdu uz serveri, nevar panākt, lai tas pieprasītu sertifikātus. Sertifikāti un vietējā iestāde dzīvo caddy-data sējumā; dublējiet to kopā ar pārējo, ja izmantojat internal.

Web tic tikai X-Forwarded-For no proxy: proxy ir fiksēta adrese (QUIRE_PROXY_ADDRESS, noklusējums 172.29.64.10) uz fiksēta apakštīkla (QUIRE_COMPOSE_SUBNET), un QUIRE_TRUSTED_PROXY_CIDRS nosauc šo adresi. Ja apakštīkls saduras ar tīklu uz servera, mainiet abus un palaidiet docker compose down pirms up.

Aiz sava apgrieztā starpniekservera

Lai izmantotu slodzes līdzsvarotāju vai starpniekserveri, ko jau darbināt, tā vietā, izlaidiet proxy (docker compose up -d --scale proxy=0) un pārtrauciet TLS priekšā web (8080), content (8081), collab (1234, websocket) un centrifugo (8000, websocket). Iestatiet publiskās adreses QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN un QUIRE_COLLAB_URL (wss://) un sava starpniekservera adresu diapazonu QUIRE_TRUSTED_PROXY_CIDRS.

Problēmu novēršana

  • init iziet ar “QUIRE_DATABASE_ID is not a UUID”: iestatiet to ar uuidgen.
  • web startās no jauna ar “did not start on compose”: žurnāls uzskaita katru iestatījumu, ko tas nevar ievērot, un ko lietot tā vietā.
  • Lomu paroles maiņa .env pēc pirmās startēšanās neko nedara: init skripts darbojas vienreiz. Lietojiet ALTER ROLE.
  • Augšupielādes neizdodas ar skenēšanas kļūdu, kamēr CLAMAV_URL ir iestatīts: ClamAV lejupielādē savus parakstus pirmajā startēšanā, kas aizņem dažas minūtes.
Navigācija

Ierakstiet, lai meklētu…

↑↓ pārvietoties↵ izvēlētiesEsc aizvērt