Siirry sisältöön

Quiren asentaminen Docker Composella

Asenna Quire omaan infrastruktuuriisi Docker Composella.

Tämä asentaa koko tuotteen yhdelle isännälle: oppimisympäristön, taustatyöt, reaaliaikaisuus- ja yhteistyömuokkauspalvelut sekä profiileista valittavat lisäpalvelut. Rakenne kuvataan tiedoston docs/architecture/23-ops.md kohdassa 2.

Muut kohteet: Vercel ja Cloudflare Workers suorittavat vain verkkopalvelutason. Päivitykset käsitellään päivitysoppaassa, varmuuskopiot ja palautusharjoitus varmuuskopiointioppaassa.

Tarvittavat asiat

  • Docker Engine 27 tai uudempi ja Compose-lisäosa 2.30 tai uudempi.
  • Oletuspinolle 4 CPU-ydintä ja 8 Gt muistia; --profile full -valinnalla 8 ydintä ja 16 Gt muistia. Pelkät ClamAV:n allekirjoitustiedot käyttävät noin 1,5 Gt.
  • Verkkotunnus verkkopalvelutasolle ja toinen epäluotettavalle sisällölle. Niiden on oltava eri palvelinnimiä: SCORM-paketit ja ladattu HTML suoritetaan sisältöalkuperässä, jotta ne eivät koskaan voi lukea oppimisympäristön evästeitä.
  • Paikallista kokeilua varten lvh.me ja *.localhost osoittavat osoitteeseen 127.0.0.1, kuten docker/.env.example olettaa. Pinon oma proxy-palvelu palvelee molempia HTTPS-yhteydellä paikallisen varmenneviranomaisen avulla, joten muuta ei tarvitse asentaa (katso “TLS”).
  • Isännän vapaat portit 80 ja 443 (QUIRE_PROXY_HTTP_PORT ja QUIRE_PROXY_HTTPS_PORT vaihtavat niitä).

Ensimmäinen käynnistys

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 luo tiedoston docker/.env mallista docker/.env.example ja muodostaa kaikki salaisuudet (tietokannan salasanat, allekirjoitus- ja pääavaimet sekä sisällön käynnistysavaimen parin). Se luo myös auditointitarkistuspisteen allekirjoitusavaimen tiedostoon docker/secrets/audit-signing-key.pem, jonka Compose liittää työntekijöille salaisuutena. Se tarvitsee vain komennot sh, awk ja openssl, eikä suostu korvaamaan olemassa olevaa docker/.env-tiedostoa. Kopioi molemmat tiedostot pois isännältä: ilman QUIRE_MASTER_KEY-avainta palautetussa tietokannassa olevia tunnistetietoja ei voi purkaa. Jos täytät tiedoston käsin, kopioi ensin komennolla cp docker/.env.example docker/.env; tiedostossa kerrotaan, miten kukin salaisuus luodaan.

Molempien alkuperäosoitteiden on käytettävä https-yhteyttä. Sisältöpalvelu ei hyväksy tuotannossa pelkkää HTTP:tä eivätkä osoitteet saa kuulua samaan rekisteröitävään verkkotunnukseen. proxy-palvelu päättää TLS-yhteyden kummallekin (katso “TLS”). init-env.sh hylkää http://-alkuiset osoitteet.

Pino käynnistyy kiinteässä järjestyksessä. Kukin vaihe odottaa edellisen valmistumista:

  1. postgres muuttuu terveeksi. Ensimmäisellä käynnistyskerralla sen alustuskomentosarja (docker/postgres/init/90-passwords.sh) asettaa neljän roolin salasanat.
  2. migrate suorittaa kaikki migraatiot ja alustaa työjonon ohjaustietokannassa sekä jokaisessa omistetussa vuokraajatietokannassa. Se varmistaa tietokantojen yhteneväisyyden ja päättyy sitten (katso docs/ops/upgrade.md). Migraatiot suoritetaan jokaisella käynnistyskerralla. Ne ovat idempotentteja, joten päivitykseen riittää uusi levykuva ja uudelleenkäynnistys.
  3. init (apps/web/src/first-run.ts) kirjaa sovellustietokannan tunnisteen QUIRE_DATABASE_ID-arvolla. Jos QUIRE_SETUP_ADMIN_EMAIL on asetettu, se luo ensimmäisen organisaation ja sen ylläpitäjän. Kirjautumisosoite ja luotu salasana tulostetaan kerran komennon docker compose logs init lokiin.
  4. Käynnistetään web, content, worker, scheduler, collab ja centrifugo.
  5. proxy käynnistyy, kun web ja content ovat terveitä.

Avaa osoite https://demo. ja lisää sen perään sovelluksen verkkotunnus (tarkka kirjautumisosoite näkyy init-lokissa). Kirjaudu sisään. Luota paikallisen asennuksen tapauksessa ensin välityspalvelimen varmenneviranomaiseen (katso “TLS”). Vaihda luotu salasana osoitteessa /account/security.

Vaadittavan salaisuuden puuttuessa prosessi kieltäytyy käynnistymästä ja nimeää puuttuvan asetuksen lokissa. Osittain määritettyä kokoonpanoa ei käynnistetä.

Palvelut ja profiilit

Palvelu Profiili Tehtävä
postgres aina Tietokanta (PostgreSQL 18 ja pgvector, luodaan tiedostosta docker/postgres.Dockerfile); WAL arkistoidaan ensimmäisestä käynnistyksestä alkaen
migrate, init aina Kertaluonteisesti: migraatiot ja ensimmäinen käynnistys
web aina Oppimisympäristö portissa QUIRE_HTTP_PORT (8080)
content aina Epäluotettavan sisällön alkuperä portissa QUIRE_CONTENT_PORT (8081)
worker aina Taustatyöt: sähköposti, raportit, tiedostojen käsittely ja webhookit
scheduler aina Toistuvat työt: rekisteröi 64 ajastusta ja välittää ne työntekijälle; vain yksi johtaja kerrallaan
collab aina Yhteistyömuokkauksen WebSocket portissa QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo aina Reaaliaikaisten tapahtumien jakelu portissa QUIRE_REALTIME_PORT (8000)
proxy aina Caddy, TLS-etuovi porteissa 80 ja 443 (katso “TLS”)
valkey cache Välimuisti ja kutsurajat
clamav scan Ladattujen tiedostojen haittaohjelmatarkistus
gotenberg preview Office-tiedostojen PDF-esikatselut ja todistusten muodostaminen
imgproxy images Kuvien koon muuttaminen ja muuntaminen
transcoder video Työntekijäkuva, jossa on vain LGPL-lisensoitu ffmpeg videoversioita varten
seaweedfs storage Tämän isännän S3-yhteensopiva objektitallennus
otelcol observability OpenTelemetry-kerääjä
mailpit devmail Sieppaa kaikki lähtevät sähköpostit Quiren kokeilemista varten
backup backup Kertaluonteinen perusvarmuuskopio; katso backup-restore.md
backup-scheduler, backup-offsite backup Perusvarmuuskopio QUIRE_BACKUP_INTERVAL_HOURS-asetuksen välein ja salatut kopiot toiseen sijaintiin viikoittaisella varmennusharjoituksella
h5p h5p Antamasi H5P LTI 1.3 -välinekuva muuttujassa QUIRE_H5P_IMAGE, portissa QUIRE_H5P_PORT (8090); katso “H5P-palveluntarjoajan yhdistäminen”

--profile full käynnistää kaikki valinnaiset palvelut paitsi backup ja h5p. Käynnistä yksittäinen profiili komennolla docker compose -f docker/compose.yaml --profile scan up -d. Quire toimii ilman valinnaisia palveluja ja ilmoittaa, mitä puuttuu: ilman tarkistinta lataukset tallennetaan ilman haittaohjelmatarkistusta ja ylläpitäjälle kerrotaan siitä; ilman Gotenbergia tiedostot voi ladata mutta niitä ei esikatsella; ilman muunninta videot toistetaan alkuperäisinä.

Kaikki kolmannen osapuolen kuvat ja niiden lisenssivelvoitteet luetellaan tiedostossa docker/third-party-containers.yaml.

H5P-palveluntarjoajan yhdistäminen

Quire ei sisällä eikä toimita H5P-suoritusympäristöä tai apupalvelua (ADR 0019). Jos käytät H5P:tä, hanki oma isännöity tilaus tai ylläpidä H5P-asennusta erillään Quiresta. Rekisteröi tarjoaja ulkoisena LTI 1.3 -välineenä ja lisää sen sisältö kursseille välinetoimintoina. Quire vaihtaa arvosanat ja toiminnon tai arvioinnin edistymistiedot LTI Assignment and Grade Services (AGS) -palvelun kautta. Jos tarjoaja lähettää myös xAPI-tietueita, määritä erikseen yhteys Quiren xAPI-tietuevarastoon. AGS:n arvosana- ja edistymistietojen vaihto ei lähetä xAPI-tietueita. Moodle-tuonti ilmoittaa H5P-toiminnoista, jotka vaativat LTI-välineen. Tarjoaja vastaa edelleen H5P-suoritusympäristöstä, sisällön luomisesta, sisältöpankista ja yrityshistoriasta.

Jos haluat käyttää tällä isännällä omaa H5P-asennusta, aseta QUIRE_H5P_IMAGE sen levykuvaksi ja käynnistä h5p-profiili. Compose julkaisee sen portissa QUIRE_H5P_PORT (8090) ja säilyttää sen tiedot h5p-data-taltiolla. Levykuva ja siihen liittyvät velvoitteet pysyvät sinun vastuullasi.

Asetukset

Jokainen prosessi lukee tiedoston docker/.env. Malli docker/.env.example luettelee asetukset ja niiden oletukset. Ryhmät:

Osoitteet

Asetus Merkitys
QUIRE_APP_ORIGIN Oppimisympäristön julkinen osoite, esimerkiksi https://learn.example.com
QUIRE_CONTENT_ORIGIN Eri palvelimessa oleva sisällön alkuperä
QUIRE_PLATFORM_DOMAINS Organisaatioiden verkkotunnukset pilkuilla erotettuina
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 Tässä compose. Muiden kohteiden oppaat: vercel ja cloudflare
QUIRE_TRUSTED_PROXY_CIDRS Välityspalvelimet, joiden X-Forwarded-For-otsakkeeseen luotetaan

Salaisuudet

Asetus Merkitys
QUIRE_SECRET_KEY Istuntojen ja tokenien allekirjoittamiseen; 64 heksadesimaalimerkkiä
QUIRE_MASTER_KEY Säilytettyjen tunnistetietojen, kuten SSO- ja webhook-salaisuuksien, suojaamiseen; 32 tavua base64-muodossa. Verkkopalvelu ja työntekijä tarvitsevat saman arvon. Katso kierrätys: key-rotation.md
QUIRE_MASTER_KEY_VERSION Pääavaimen versiotunniste; oletus on v1. Kasvata sitä kierrättäessä.
QUIRE_MASTER_KEY_RETIRED Aiemmat pääavaimet, joita tarvitaan niiden suojaamien tietojen lukemiseen, muodossa v1=<base64>. Poista vasta kun kierrätys on valmis eikä mitään ole jäänyt selvittämättä.
QUIRE_COLLAB_SIGNING_KEY Verkkopalvelun ja collab-palvelun yhteinen avain muokkaustokenien allekirjoitukseen
QUIRE_BACKUP_SIGNING_KEY Kurssivarmuuskopioiden allekirjoittamiseen (valinnainen)

Säilytä QUIRE_MASTER_KEY-avaimen kopio muualla kuin tällä isännällä. Ilman sitä palautettu tietokanta ei voi purkaa tallennettuja tunnistetietoja.

Tietokanta

Asetus Merkitys
POSTGRES_PASSWORD Säilön ja varmuuskopioiden käyttämän pääkäyttäjän salasana
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD Roolien salasanat, asetetaan ensimmäisellä käynnistyskerralla
DATABASE_URL Sovellusrooli. Riviin kohdistuva tietoturva koskee jokaista sen tekemää kyselyä.
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL Migraattorirooli migrate- ja init-palveluille
QUIRE_SUPERUSER_URL Käytetään vain ensikäynnistyksessä
QUIRE_REPORT_DATABASE_URL Vain luku -muotoinen raporttirooli raportteja ja raporttien rakentajaa varten
QUIRE_AUDIT_DATABASE_URL Auditointirooli auditointikonsolia ja SIEM-vientiä varten
QUIRE_DATABASE_ID Mikä tahansa UUID, joka pysyy samana koko asennuksen ajan

Roolien salasanat asetetaan vain, kun tietokantataltio luodaan ensimmäisen kerran. Vaihda salasana myöhemmin komennolla ALTER ROLE ja päivitä vastaava yhteysosoite.

QUIRE_REPORT_DATABASE_URL koskee fyysistä tietokantaa, jonka DATABASE_URL määrittää. Aseta jokaiselle muulle rekisteröidylle fyysiselle tietokannalle sen oma quire_report-yhteysosoite verkkopalvelun ja työntekijän ympäristöön. Aseta sen jälkeen tietokannan Raportoinnin ympäristömuuttuja -kenttään muuttujan nimi muodossa env:NAME. Viitteen on osoitettava samaan tietokantaan kuin sovellusyhteyden, mieluiten sen lukureplikaan. Jokainen raporttinäkymä käyttää vuokraajan oman tietokannan raporttiyhteyttä: raporttien rakentaja ja tallennetut raportit, ajastetut toimitukset, raporttien viennit, analytiikka, auditointiloki, REST-auditointiresurssit ja avustajan auditointihaku. Mikään niistä ei käytä toisen tietokannan raporttiosoitetta. Jos tietokannalla ei ole raporttiyhteyttä, tavalliset raportit suoritetaan sen omalla sovellusyhteydellä. Analytiikka ja kaikki auditointiluvut hylätään ilmoituksella, sillä sovellusrooli ei voi lukea auditointiketjua.

Ajurit

Asetus Tämän julkaisun arvot Huomioita
QUIRE_STORAGE_DRIVER local (oletus), s3 tai azure local säilyttää tiedostot files-taltiolla. s3 tukee AWS S3:a, R2:ta, GCS-yhteensopivuutta ja muita S3-yhteensopivia tallennuspalveluja sekä jatkettavia osalähetyksiä.
QUIRE_REALTIME_DRIVER inprocess (oletus), sse, centrifugo tai durable_objects inprocess sopii yhdelle verkkosäiliölle. Käytä useammalla säiliöllä centrifugo- tai sse-ajuria.
QUIRE_CACHE_DRIVER memory (oletus), postgres tai valkey memory on prosessikohtainen. Käytä valkey- tai postgres-ajuria, jotta kutsurajat jaetaan säiliöiden kesken.
QUIRE_VIDEO_DRIVER ffmpeg (oletus) tai progressive_mp4 Tai avaimilla määritetty isännöity palvelu: Cloudflare Stream, Mux tai Bunny.
QUIRE_IMAGE_DRIVER noop (oletus), imgproxy tai cloudflare noop tarjoaa kuvat alkuperäisessä koossa. imgproxy tarvitsee images-profiilin ja alla olevat asetukset; cloudflare käyttää Cloudflare Imagesia.
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi tai in_process Alustan oletuspalvelu live-istunnoille. Jos asetus puuttuu, live-istunnot ilmoittavat, ettei palvelua ole määritetty, kunnes organisaatio yhdistää oman tilin kohdassa Integrations, Live session provider. Organisaation oma tili ohittaa aina tämän arvon. Palveluntarjoajan omat asetukset (BBB_URL ja BBB_SECRET sekä ZOOM_*, TEAMS_*, GOOGLE_MEET_* ja JITSI_*) luetaan vain, jos tässä on vastaava palveluntarjoaja.
QUIRE_MEETING_REGIONS Pilkuilla erotettu eu, uk, us-luettelo Alustan oletuspalveluntarjoajan kokoustenkäsittelyalueet. Jos arvo puuttuu, palveluntarjoajaa ei tarkisteta alueeseen sidotun organisaation varalta, kuten aiemminkin. Organisaatio määrittää oman tilinsä alueet sen asetussivulla.

Jos tämän julkaisun ajurivalikoimaan kuulumatonta arvoa käytetään, verkkopalvelun käynnistys hylätään ja virheessä nimetään asetus. Oletusarvoa ei oteta käyttöön hiljaisesti.

Kuvat

Sivut pyytävät kuvia neljässä kiinteässä koossa osoitteesta /api/files/{id}/image/{size}. Palvelu tarkistaa samat käyttöoikeudet kuin itse tiedostolle ja uudelleenohjaa kuvapalveluun. Jokainen organisaatio voi pyytää tunnissa enintään QUIRE_IMAGE_SPECS_PER_HOUR uutta kuva- ja kokoparia (oletus 2000). Sillä tunnilla jo tuotettuja kokoja ei lasketa mukaan. Jos käytössä on useampi verkkosäiliö, aseta valkey tai postgres ajuriksi muuttujaan QUIRE_CACHE_DRIVER, jotta raja on yhteinen.

Asetus Ajuri Huomioita
IMGPROXY_URL imgproxy Osoite, josta selaimet tavoittavat imgproxyn, esimerkiksi https://images.example.org. images-profiili julkaisee sen portissa QUIRE_IMAGES_PORT (8082).
IMGPROXY_KEY, IMGPROXY_SALT imgproxy Heksadesimaalimerkkijonot, joiden on vastattava imgproxyn käynnistysarvoja. Luo kumpikin komennolla openssl rand -hex 32. Quire allekirjoittaa jokaisen kuvaosoitteen näillä arvoilla, joten imgproxy ei muunna Quiren pyytämättömiä kuvia.
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy paikallisella tallennuksella Alkuperäiskuvien nouto-osoite; Compose asettaa arvoksi http://web:3000. s3- tai azure-tallennuksella imgproxy noutaa kuvat säilöstä eikä käytä asetusta.
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare Images-muokkausoikeudella varustettu API-token ja tilin tiiviste kohdasta Images, Developer resources. Ota tilillä käyttöön joustavat versiot.
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare Valinnainen. Kun asetus on määritetty, kuvat ovat yksityisiä ja jokainen osoite allekirjoitetaan sekä vanhenee. Ilman sitä kuvat ovat julkisia QUIRE_SECRET_KEY-arvosta johdettujen arvaamattomien osoitteiden kautta.

Cloudflare Images säilyttää itse kopion jokaisesta tarjoamastaan alkuperäiskuvasta. Kun tiedosto poistetaan, työntekijä poistaa ensin tämän kopion ja sitten alkuperäisen.

Työjono

Taustatyöt käyttävät pg-bossia samassa Postgres-tietokannassa. Erillistä jonopalvelua ei tarvitse suorittaa eikä määrittää. Työt lisätään jonoon samassa tapahtumassa kuin ne käynnistävä muutos, joten kaatuminen ei voi kadottaa työtä tai lähettää sitä kahdesti. QUIRE_QUEUE_DRIVER on tässä oletusarvoinen pgboss. Ajurit vercel ja cloudflare siirtävät vain kevyet ilmoitus- ja webhook-toimitukset alustan omaan jonoon. Vercel- ja Cloudflare-oppaissa kuvataan niiden toiminta ja verkkopalvelutason jonoon lisäämät työt.

Sähköposti

Aseta jompikumpi seuraavista:

  • QUIRE_EMAIL_PROVIDER_CONFIG: HTTP-palveluntarjoajan ja sen tunnistetiedot nimeävä JSON-objekti, esimerkiksi {"provider":"postmark","token":"..."}. Tuettuja ovat Postmark, Amazon SES, Mailgun, SendGrid ja Resend.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. Tämä kohde tukee asetusta; palvelimettomat kohteet estävät SMTP:n.

QUIRE_MAIL_FROM määrittää lähettäjän. Kokeillaksesi Quirea käynnistä devmail-profiili, aseta QUIRE_SMTP_URL=smtp://mailpit:1025 ja lue viestit osoitteesta http://localhost:8025.

Valinnaiset palvelut

Asetus Profiili
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 tai QUIRE_MEILISEARCH_URL Ulkoinen haku; muussa tapauksessa Postgresin kokotekstihaku
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Salasanan vuototarkistus. Oletuksena päällä osoitteeseen api.pwnedpasswords.com (lähetetään vain viiden merkin tiiviste-alku); off poistaa sen käytöstä. URL-osoitteella määritetään oma rajapintapalvelusi.

Havainnoitavuus

OTEL_EXPORTER_OTLP_ENDPOINT määrittää kerääjän, jolle kaikki prosessit lähettävät jäljet ja mittarit. observability-profiilissa sen arvo on http://otelcol:4318. Lisää taustajärjestelmän vientipalvelu tiedostoon docker/otel-collector.yaml. Jos asetus on määritetty, verkkopalvelu, työntekijä, ajastin, sisältöpalvelu ja collab-prosessit vievät pyynnöistä, vuokraajien tietokantatapahtumista, työntekijätöistä ja lähtevistä kutsuista muodostetut jäljet OTLP/HTTP:llä sekä mittarit samaan osoitteeseen minuutin välein. OTEL_METRICS_EXPORTER=none poistaa mittarit käytöstä. OTEL_TRACES_SAMPLER_ARG määrittää säilytettävien jälkien osuuden. Lokit kirjoitetaan vakiotulosteeseen muuttujalla LOG_LEVEL määritetyllä tasolla, ja Compose kierrättää ne. Jäljissä ei ole henkilötietoja.

Alueellinen ulosmenevä liikenne (EU:n tietojen sijainti)

QUIRE_REGION=eu kertoo pinon palvelevan Euroopan unionin organisaatioita. Työntekijä rajaa tämän jälkeen EU-alueeseen kiinnitetyn organisaation kaikki lähtevät pyynnöt sallittujen listaan (21-compliance.md, kohta 8.1). Lista sisältää niiden määritettyjen palvelujen isännät, jotka ilmoittavat toimivansa alueella (tallennuspäätepiste, sähköpostipalvelu, isännöity videopalvelu, organisaation omat tallennuskohteet, tekoälypalvelut ja sähköpostitili), aktiivisen poikkeusluvan alaisten palvelujen isännät sekä muuttujassa QUIRE_EGRESS_ALLOW_HOSTS luettelemasi isännät. Pyyntö muihin julkisiin osoitteisiin estetään ennen lähetystä. Esto kirjataan organisaation auditointiketjuun tunnisteella privacy/egress_refused sekä kohdassa Compliance, Data residency.

Asetus Arvot Vaikutus
QUIRE_EGRESS_ALLOW_HOSTS Pilkuilla erotettu isäntänimiluettelo tai *.example.org kaikille aliverkkotunnuksille EU-organisaation lisäsallitut osoitteet. Webhook-, xAPI- ja SIEM-päätepisteet, blogisyötteet ja Amazon SES -isännät kuuluvat tähän, sillä organisaatio valitsee ne itse eikä mikään palvelu ilmoita niitä. Loopback- ja yksityisosoitteita sekä yksiosaisia nimiä, kuten web tai clamav, ei tarkisteta, sillä ne kuuluvat omaan verkkoosi.

Isäntänimilista ei koske Ison-Britannian eikä Yhdysvaltojen organisaatioita. Niille tehdään edelleen palvelun alueen tarkistukset. Aseta lista työntekijälle. Ylläpitosivu lukee sen verkkopalvelutasolta ja näyttää sallitut isännät. Lisää muuttuja siis tiedostoon docker/.env, jota kaikki palvelut lukevat.

Sovelluksen tarkistus antaa selkeän virheen ja auditointimerkinnän, mutta se ei ole varsinainen takuu, sillä koodi voi olla virheellistä. Takuun muodostaa verkko. Compose ei valvo sitä puolestasi. Alueellisessa pinossa aseta worker- ja web-palvelut verkkoon internal: true, jonka ainoa ulospääsy on ulosmenevää liikennettä välittävä palvelin (esimerkiksi Squid tai tinyproxy-säiliö). Rajaa se samoihin osoitteisiin kuin QUIRE_EGRESS_ALLOW_HOSTS sekä määrittämiesi palvelujen isäntiin. Aseta palveluille myös HTTPS_PROXY. Alueellisen sijainnin sivu näyttää sovelluksen sallimat osoitteet, jotta voit verrata luetteloita.

Terveys

Päätepiste Merkitys
/healthz Elossaolo: prosessi vastaa. Compose-kuntotarkistukset käyttävät tätä.
/readyz Valmius: riippuvuuksiin saadaan yhteys ja jokainen valinnainen palvelu ilmoittaa, onko se määritetty. Käytä tätä kuormantasaajassa.

docker compose -f docker/compose.yaml ps näyttää jokaisen palvelun terveystilan.

TLS

Oletuspino sisältää proxy-palvelun (Caddy, Apache-2.0, docker/caddy/Caddyfile). Se kuuntelee portteja 80 ja 443 ja reitittää pyynnöt näin:

Isäntä tai polku Kohde
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, kaikki vuokraajien aliverkkotunnukset ja mukautetut verkkotunnukset web
/_collab/ näissä isännissä collab (WebSocket, QUIRE_COLLAB_URL)
/_realtime/connection/ näissä isännissä centrifugo-asiakkaan WebSocket; sen palvelin-API:a ei koskaan tuoda julki
/_images/ näissä isännissä imgproxy, kun images-profiili on käytössä (IMGPROXY_URL)

init-env.sh johtaa kahdesta alkuperäosoitteesta asetukset QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL ja IMGPROXY_URL, jotta ne eivät voi ajautua eri arvoihin. Muuta ne yhdessä, jos vaihdat alkuperäosoitetta käsin.

Varmenteet määräytyvät asetuksen QUIRE_PROXY_TLS mukaan:

  • internal (oletus): Caddyn oma varmenneviranomainen osoitteille localhost, *.localhost ja lvh.me. Luota sen juurivarmenteeseen kerran ja avaa sitten sivusto:

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

    Lisää quire-local-ca.crt järjestelmän tai selaimen luotettujen varmenteiden joukkoon. curl-komennossa käytetään valintaa --cacert.

  • Sähköpostiosoite: automaattiset ACME-varmenteet (Let’s Encrypt, sitten ZeroSSL) oikeille verkkotunnuksille. Molempien alkuperäosoitteiden ja jokaisen vuokraajan isännän DNS-tietojen on osoitettava tänne, ja porttien 80 ja 443 on oltava saavutettavissa internetistä.

Vuokraajien isännille myönnetään varmenne tarpeen mukaan ensimmäisen käynnin yhteydessä, ja vain jos web-palvelu varmistaa, että nimi kuuluu asennukseen (kysely /tls-allowed Compose-verkossa). Wildcard-varmennetta tai DNS-palveluntarjoajan liitännäistä ei tarvita. Väärän verkkotunnuksen tähän isäntään osoittava ulkopuolinen ei voi pakottaa varmenteen pyytämistä. Varmenteet ja paikallinen varmenneviranomainen säilyvät caddy-data-taltiolla. Jos käytät internal-asetusta, varmuuskopioi taltio muiden mukana.

Web-palvelu luottaa välityspalvelimen X-Forwarded-For-otsakkeeseen. Välityspalvelimen osoite on kiinteä (QUIRE_PROXY_ADDRESS, oletus 172.29.64.10) ja se on kiinteässä aliverkossa (QUIRE_COMPOSE_SUBNET). QUIRE_TRUSTED_PROXY_CIDRS nimeää kyseisen osoitteen. Jos aliverkko on ristiriidassa isäntäkoneen verkon kanssa, vaihda molemmat asetukset ja suorita docker compose down ennen up-komentoa.

Oman käänteisvälityspalvelimen takana

Jos käytät nykyistä kuormantasaajaa tai välityspalvelinta, älä sisällytä proxy-palvelua (docker compose up -d --scale proxy=0). Päätä TLS-yhteys niiden palvelujen edessä: web (8080), content (8081), collab (1234, WebSocket) ja centrifugo (8000, WebSocket). Aseta julkiset osoitteet muuttujiin QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN ja QUIRE_COLLAB_URL (wss://) sekä välityspalvelimen osoitealue muuttujaan QUIRE_TRUSTED_PROXY_CIDRS.

Vianmääritys

  • init pysähtyy viestiin “QUIRE_DATABASE_ID is not a UUID”: aseta tunniste komennolla uuidgen.
  • web käynnistyy uudelleen ja ilmoittaa “did not start on compose”: lokissa luetellaan asetukset, joita ei voida käyttää, ja niiden korvaamiseen tarvittavat arvot.
  • Roolin salasanan vaihtaminen .env-tiedostossa ensimmäisen käynnistyksen jälkeen ei vaikuta: alustusskripti ajetaan vain kerran. Käytä ALTER ROLE -komentoa.
  • Lataus epäonnistuu tarkistusvirheeseen, kun CLAMAV_URL on asetettu: ClamAV lataa allekirjoitustietonsa ensimmäisellä käynnistyskerralla, mikä kestää muutaman minuutin.
Navigaatio

Kirjoita hakeaksesi…

↑↓ siirry↵ valitseEsc sulje