Preskoči na sadržaj

Instalacija Quirea pomoću Docker Composea

Instalirajte Quire na vlastitoj infrastrukturi pomoću Docker Composea.

Prikaži kao Markdown

Ovo je cijeli proizvod na jednom poslužitelju: LMS, pozadinska obrada, usluge za rad u stvarnom vremenu i zajedničko uređivanje te sve neobavezne usluge koje se pokreću putem profila. Dizajn je opisan u odjeljku 2 dokumenta docs/architecture/23-ops.md.

Ostala odredišta: Vercel i Cloudflare Workers pokreću samo web sloj. Nadogradnje su opisane u upgrade.md, a sigurnosne kopije i proba vraćanja u backup-restore.md.

Što vam je potrebno

  • Docker Engine 27 ili noviji s dodatkom Compose 2.30 ili novijim.
  • Četiri procesorske jezgre i 8 GB memorije za zadani skup usluga; 8 jezgri i 16 GB uz --profile full (ClamAV sam zauzima oko 1,5 GB za potpise).
  • DNS naziv za web sloj i drugi za nepouzdani sadržaj. Moraju biti na različitim domaćinima: paketi SCORM i preneseni HTML pokreću se na izvornom poslužitelju sadržaja kako nikad ne bi mogli čitati kolačiće LMS-a.
  • Za lokalno testiranje, lvh.me i *.localhost razrješavaju se na 127.0.0.1, kako je postavljeno u docker/.env.example. Vlastita usluga skupa proxy poslužuje oba naziva putem HTTPS-a s lokalnim izdavateljem certifikata, pa se ništa drugo ne mora instalirati (pogledajte „TLS”).
  • Slobodni portovi 80 i 443 na poslužitelju (QUIRE_PROXY_HTTP_PORT i QUIRE_PROXY_HTTPS_PORT mijenjaju ih).

Prvo pokretanje

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 stvara docker/.env iz datoteke docker/.env.example, generira sve tajne (lozinke baza podataka, ključeve za potpisivanje i glavni ključ te par ključeva za pokretanje sadržaja) i zapisuje ključ za potpisivanje kontrolne točke nadzora u docker/secrets/audit-signing-key.pem. Compose tu datoteku priključuje radnicima kao tajnu. Potrebni su samo sh, awk i openssl, a postojeću datoteku docker/.env odbija prebrisati. Obje datoteke kopirajte izvan poslužitelja: bez QUIRE_MASTER_KEY vraćena baza ne može dešifrirati pohranjene vjerodajnice. Ako datoteku želite popuniti ručno, pokrenite cp docker/.env.example docker/.env; u datoteci je objašnjeno kako generirati svaku tajnu.

Oba izvora moraju koristiti https: usluga sadržaja u produkciji odbija obični HTTP, a izvori ne smiju dijeliti registrabilnu domenu. Usluga proxy završava TLS vezu za oba (pogledajte „TLS”); init-env.sh odbija izvor s prefiksom http://.

Skup usluga pokreće se utvrđenim redoslijedom, a svaki korak čeka prethodni:

  1. postgres postaje zdrav. Pri prvom pokretanju njegova inicijalizacijska skripta (docker/postgres/init/90-passwords.sh) postavlja lozinke četiriju uloga.
  2. migrate primjenjuje sve migracije i postavlja red poslova u upravljačkoj bazi i u svakoj namjenskoj bazi klijenta, provjerava podudaraju li se, pa se gasi (docs/ops/upgrade.md). Migracije se pokreću pri svakom pokretanju i idempotentne su, pa se nadogradnja svodi na novu sliku i ponovno pokretanje.
  3. init (apps/web/src/first-run.ts) bilježi bazu aplikacije pod nazivom QUIRE_DATABASE_ID te, ako je postavljeno QUIRE_SETUP_ADMIN_EMAIL, stvara prvu organizaciju i njezina administratora. Adresa za prijavu i generirana lozinka ispisuju se samo jednom u izlazu naredbe docker compose logs init.
  4. Pokreću se web, content, worker, scheduler, collab i centrifugo.
  5. proxy se pokreće kad web i content postanu zdravi.

Otvorite https://demo. iza čega slijedi domena aplikacije (zapis init ispisuje točnu adresu za prijavu) i prijavite se. Na lokalnoj instalaciji najprije vjerujte izdavatelju certifikata posrednika (pogledajte „TLS”). Promijenite generiranu lozinku na /account/security.

Proces koji se pokrene bez obavezne tajne odbija rad i u zapis navodi nedostajuću postavku. Ništa se ne pokreće s nepotpunom konfiguracijom.

Usluge i profili

Usluga Profil Namjena
postgres uvijek Baza podataka (PostgreSQL 18 s pgvectorom, izgrađen iz docker/postgres.Dockerfile), s arhiviranjem WAL-a od prvog pokretanja
migrate, init uvijek Jednokratni zadaci: migracije, zatim prvo pokretanje
web uvijek LMS na QUIRE_HTTP_PORT (8080)
content uvijek Izvor nepouzdanog sadržaja na QUIRE_CONTENT_PORT (8081)
worker uvijek Pozadinski poslovi: e-pošta, izvješća, obrada datoteka i web-dojavnici
scheduler uvijek Ponavljajući poslovi: registrira 64 rasporeda tijekom rada i predaje ih radniku; u svakom je trenutku samo jedan vodeći
collab uvijek WebSocket za zajedničko uređivanje na QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo uvijek Distribucija događaja u stvarnom vremenu na QUIRE_REALTIME_PORT (8000)
proxy uvijek Caddy, TLS ulazna točka na portovima 80 i 443 (pogledajte „TLS”)
valkey cache Predmemorija i ograničavanje učestalosti zahtjeva
clamav scan Skeniranje prenesenih datoteka na zlonamjerni softver
gotenberg preview Pretpregledi uredskih datoteka u PDF-u i prikaz certifikata
imgproxy images Promjena veličine i pretvaranje slika
transcoder video Slika radnika s ffmpegom isključivo uz LGPL za pretvorbu videozapisa
seaweedfs storage Pohrana objekata kompatibilna sa S3 na ovom poslužitelju
otelcol observability Sakupljač OpenTelemetry podataka
mailpit devmail Hvata svu odlaznu poštu za isprobavanje Quirea
backup backup Jednokratna osnovna sigurnosna kopija; pogledajte backup-restore.md
backup-scheduler, backup-offsite backup Osnovna sigurnosna kopija svakih QUIRE_BACKUP_INTERVAL_HOURS i šifrirane kopije izvan poslužitelja uz tjednu probu provjere
h5p h5p Slika alata H5P LTI 1.3 koju sami osiguravate u QUIRE_H5P_IMAGE, na QUIRE_H5P_PORT (8090); pogledajte „Povezivanje pružatelja H5P-a”

--profile full pokreće sve neobavezne usluge osim backup i h5p. Pojedinu pokrenite naredbom docker compose -f docker/compose.yaml --profile scan up -d. Quire radi i bez neobaveznih usluga te navodi što nedostaje: bez skenera se prenesene datoteke pohranjuju bez skeniranja, a administrator dobiva obavijest; bez Gotenberga datoteke se mogu preuzeti umjesto da se prikaže pretpregled; bez pretvarača video se reproducira kao izvorna datoteka.

Sve slike trećih strana i pripadajuće obveze licenciranja navedene su u docker/third-party-containers.yaml.

Povezivanje pružatelja H5P-a

Quire ne ugrađuje niti isporučuje izvršno okruženje ili pomoćni proces H5P-a (ADR 0019). Ako koristite H5P, sami osigurajte hostiranu pretplatu ili upravljajte vlastitom, odvojeno hostiranom instancom H5P-a. Registrirajte pružatelja kao vanjski alat LTI 1.3 i dodajte njegov sadržaj kolegijima kao aktivnosti alata. Quire razmjenjuje ocjene te napredak aktivnosti i ocjenjivanja kroz LTI Assignment and Grade Services (AGS). Ako pružatelj šalje i iskaze xAPI-ja, zasebno ga konfigurirajte za Quireovo spremište iskaza xAPI-ja; razmjena ocjena i napretka putem AGS-a ne šalje iskaze xAPI-ja. Uvozi iz Moodla prikazuju aktivnosti H5P-a kao one kojima je potrebna veza s alatom LTI. Pružatelj je i dalje odgovoran za izvršno okruženje H5P-a, izradu sadržaja, bazu sadržaja i povijest pokušaja.

Da biste vlastitu instancu hostirali na ovom poslužitelju, postavite QUIRE_H5P_IMAGE na njezinu sliku i pokrenite profil h5p. Compose je objavljuje na QUIRE_H5P_PORT (8090), a podatke čuva u volumenu h5p-data; slika i sve povezane obveze ostaju vaša odgovornost.

Postavke

Svaki proces čita docker/.env. Predložak docker/.env.example navodi svaku postavku sa zadanom vrijednošću. Skupine su:

Adrese

Postavka Značenje
QUIRE_APP_ORIGIN Javna adresa LMS-a, primjerice https://learn.example.com
QUIRE_CONTENT_ORIGIN Izvor sadržaja na drugom domaćinu
QUIRE_PLATFORM_DOMAINS Domene pod kojima se nalaze organizacije, odvojene zarezima
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 Ovdje compose. U ostalim vodičima pogledajte vercel i cloudflare
QUIRE_TRUSTED_PROXY_CIDRS Posrednički poslužitelji čijem se zaglavlju X-Forwarded-For vjeruje

Tajne

Postavka Značenje
QUIRE_SECRET_KEY Potpisuje sesije i tokene. 64 heksadekadska znaka
QUIRE_MASTER_KEY Omata pohranjene vjerodajnice, primjerice tajne SSO-a i web-dojavnika. 32 bajta u base64 kodiranju. Web sloj i radnik trebaju istu vrijednost. Rotacija: key-rotation.md
QUIRE_MASTER_KEY_VERSION Oznaka verzije glavnog ključa; v1 ako nije postavljena. Povećajte je pri rotaciji
QUIRE_MASTER_KEY_RETIRED Stariji glavni ključevi potrebni za čitanje vrijednosti koje su omotali, u obliku v1=<base64>. Uklonite ih nakon završetka rotacije bez nerazriješenih stavki
QUIRE_COLLAB_SIGNING_KEY Web i collab dijele ga za potpisivanje tokena za uređivanje
QUIRE_BACKUP_SIGNING_KEY Potpisuje sigurnosne kopije kolegija (neobavezno)

Sačuvajte kopiju QUIRE_MASTER_KEY izvan ovog poslužitelja. Vraćena baza bez njega ne može dešifrirati vjerodajnice koje sadrži.

Baza podataka

Postavka Značenje
POSTGRES_PASSWORD Lozinka superkorisnika koju koriste spremnik i sigurnosne kopije
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD Lozinke uloga koje se postavljaju pri prvom pokretanju
DATABASE_URL Uloga aplikacije. Sigurnost na razini retka primjenjuje se na svaki njezin upit
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL Uloga migratora za migrate i init
QUIRE_SUPERUSER_URL Koristi se samo pri prvom pokretanju
QUIRE_REPORT_DATABASE_URL Uloga samo za čitanje izvješća, za izvješća i njihov alat za izradu
QUIRE_AUDIT_DATABASE_URL Uloga nadzora za konzolu nadzora i izvoz u SIEM
QUIRE_DATABASE_ID Proizvoljan UUID koji ostaje nepromijenjen tijekom cijelog vijeka instalacije

Lozinke uloga primjenjuju se samo pri prvoj izradi volumena baze podataka. Želite li ih promijeniti kasnije, upotrijebite ALTER ROLE, a zatim nadogradite odgovarajući URL.

QUIRE_REPORT_DATABASE_URL koristi se za fizičku bazu postavljenu u DATABASE_URL. Za svaku drugu registriranu fizičku bazu postavite njezin URL veze quire_report u okruženjima web sloja i radnika, a zatim naziv varijable upišite u polje Reporting environment variable te baze kao env:NAME. Referenca mora pokazivati na istu bazu kao i veza aplikacije, po mogućnosti na njezinu repliku samo za čitanje. Svaka površina za izvješća prati klijenta do veze za izvješća vlastite baze: alat za izradu izvješća i spremljena izvješća, zakazana slanja, izvozi izvješća, analitika, zapis nadzora, resursi nadzora REST i pretraživanje nadzora pomoćnikom. Nijedna ne koristi URL za izvješća druge baze. Ako baza nema vezu za izvješća, uobičajena se izvješća izvršavaju preko vlastite veze aplikacije te baze, dok analitika i sva čitanja nadzora odbijaju rad i objašnjavaju razlog jer uloga aplikacije ne može čitati trag nadzora.

Upravljački programi

Postavka Vrijednosti u ovom izdanju Napomene
QUIRE_STORAGE_DRIVER local (zadano), s3 ili azure local čuva datoteke u volumenu files. s3 podržava AWS S3, interoperabilnost s R2 i GCS-om te druga spremišta kompatibilna sa S3 uz višedijelne prijenose koji se mogu nastaviti
QUIRE_REALTIME_DRIVER inprocess (zadano), sse, centrifugo ili durable_objects inprocess odgovara jednom web-spremniku; uzmite centrifugo ili sse kad ih ima više
QUIRE_CACHE_DRIVER memory (zadano), postgres ili valkey memory vrijedi za pojedini proces; koristite valkey ili postgres kako bi ograničenja učestalosti vrijedila u svim spremnicima
QUIRE_VIDEO_DRIVER ffmpeg (zadano) ili progressive_mp4 Ili hostirani pružatelj: Cloudflare Stream, Mux ili Bunny, prema njihovim ključevima
QUIRE_IMAGE_DRIVER noop (zadano), imgproxy ili cloudflare noop poslužuje svaku sliku u izvornoj veličini. imgproxy zahtijeva profil images i donje postavke; cloudflare koristi Cloudflare Images
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi ili in_process Zadani pružatelj platforme za sesije uživo. Ako nije postavljen, sesije uživo prikazuju da nisu konfigurirane dok organizacija ne poveže vlastiti račun u Integrations, Live session provider. Račun organizacije uvijek ima prednost. Postavke pojedinog pružatelja (BBB_URL i BBB_SECRET, varijable ZOOM_*, TEAMS_*, GOOGLE_MEET_* i JITSI_*) čitaju se samo za ovdje imenovanog pružatelja
QUIRE_MEETING_REGIONS Popis regija eu, uk, us odvojen zarezima Gdje zadani pružatelj platforme obrađuje sastanke. Ako nije postavljen, ne uspoređuje se s organizacijom prikvačenom na regiju, kao ni dosad. Stranica računa organizacije navodi njegove regije

Ako ova verzija ne sadrži vrijednost upravljačkog programa, pokretanje web sloja odbija je i navodi postavku umjesto da je tiho zamijeni zadanom.

Slike

Stranice traže slike u četiri fiksne veličine putem /api/files/{id}/image/{size}. Ta putanja provjerava isti pristup kao i za samu datoteku, a zatim preusmjerava na uslugu slika. Svaka organizacija može zatražiti QUIRE_IMAGE_SPECS_PER_HOUR (zadano 2000) novih parova slika i veličina na sat; veličine već izrađene tijekom tog sata ne računaju se. Koristite valkey ili postgres za QUIRE_CACHE_DRIVER uz više web-spremnika kako bi ograničenje vrijedilo u svima.

Postavka Upravljački program Napomene
IMGPROXY_URL imgproxy Adresa na kojoj preglednici dosežu imgproxy, primjerice https://images.example.org. Profil images objavljuje ga na QUIRE_IMAGES_PORT (8082)
IMGPROXY_KEY, IMGPROXY_SALT imgproxy Heksadekadski nizovi, jednake vrijednosti s kojima se imgproxy pokreće. Svaki generirajte naredbom openssl rand -hex 32. Quire njima potpisuje svaku adresu slike, pa imgproxy ne prikazuje ništa što Quire nije zatražio
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy s lokalnom pohranom Odakle imgproxy dohvaća izvornike. Compose postavlja http://web:3000. Uz pohranu s3 ili azure imgproxy dohvaća ih iz spremnika i ova se postavka ne koristi
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare API token s ovlastima uređivanja u Images i raspršena vrijednost računa iz Images, Developer resources. Uključite prilagodljive varijante za račun
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare Neobavezno. Kad je postavljen, slike su privatne, a svaka adresa je potpisana i istječe. Bez njega su slike javne na adresama izvedenim iz QUIRE_SECRET_KEY koje nitko ne može pogoditi

Cloudflare Images čuva vlastitu kopiju svakog izvornika koji poslužuje. Kad se datoteka izbriše, radnik briše tu kopiju prije izvornika.

Red poslova

Pozadinski poslovi koriste pg-boss u istoj bazi Postgresa, pa nije potrebno pokretati zasebnu uslugu reda ni išta konfigurirati. Poslovi se stavljaju u red u istoj transakciji kao i promjena koja ih je pokrenula, pa rušenje ne može izgubiti posao ni ga poslati dvaput. Ovdje je QUIRE_QUEUE_DRIVER postavljen na zadanu vrijednost pgboss; vercel i cloudflare premještaju samo lake obavijesti i isporuke web-dojavnika u vlastiti red platforme. Vodiči za Vercel i Cloudflare objašnjavaju kako web-slojevi tih platformi stavljaju poslove u red.

E-pošta

Postavite jedno od sljedećeg:

  • QUIRE_EMAIL_PROVIDER_CONFIG: JSON objekt koji navodi HTTP pružatelja i njegove vjerodajnice, primjerice {"provider":"postmark","token":"..."}. Podržani su Postmark, Amazon SES, Mailgun, SendGrid i Resend.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. Ovo odredište podržava tu postavku; poslužiteljski odredišni sustavi blokiraju SMTP.

QUIRE_MAIL_FROM adresa je pošiljatelja. Da biste isprobali Quire, pokrenite profil devmail, postavite QUIRE_SMTP_URL=smtp://mailpit:1025 i čitajte poštu na http://localhost:8025.

Neobavezne usluge

Postavka Uz profil
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 ili QUIRE_MEILISEARCH_URL Vanjsko pretraživanje; inače se koriste cijeli tekstualni indeksi Postgresa
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Provjera izloženosti lozinki. Prema zadanim postavkama uključena je putem api.pwnedpasswords.com (šalje se samo prefiks raspršene vrijednosti od pet znakova); vrijednost off isključuje je, a URL pokazuje na API raspona kojim sami upravljate

Nadzor

OTEL_EXPORTER_OTLP_ENDPOINT označava sakupljač kojem svaki proces šalje praćenja i metrike. Uz profil observability njegova je vrijednost http://otelcol:4318; u datoteci docker/otel-collector.yaml dodaje se izvoznik za vašu pozadinsku uslugu. Kad je postavljen, web sloj, radnik, planer, sadržajni poslužitelj i collab izvoze raspona putem OTLP/HTTP-a (web-zahtjevi, transakcije baza klijenata, poslovi radnika i odlazni pozivi) te svake minute šalju metrike na istu adresu (OTEL_METRICS_EXPORTER=none isključuje ih). OTEL_TRACES_SAMPLER_ARG postavlja udio zadržanih praćenja. Zapisi se ispisuju na standardni izlaz na razini LOG_LEVEL, a Compose ih rotira. Praćenja nikad ne sadrže osobne podatke.

Regionalni izlazni promet (rezidentnost podataka u EU-u)

QUIRE_REGION=eu znači da skup usluga poslužuje organizacije iz Europske unije. Radnik tada sva odlazna usmjerenja za organizaciju prikvačenu na EU ograničava popisom dopuštenih odredišta (odjeljak 8.1 dokumenta 21-compliance.md). Popis obuhvaća domaćine koje za regiju navode konfigurirane usluge (krajnju točku pohrane, pružatelja e-pošte, hostiranog videopružatelja, ciljeve vlastite pohrane organizacije, pružatelje umjetne inteligencije i račun e-pošte), domaćine usluga obuhvaćenih aktivnim izuzećem i domaćine koje navedete u QUIRE_EGRESS_ALLOW_HOSTS. Zahtjev prema bilo kojem drugom javnom domaćinu odbija se prije slanja, odbijanje se bilježi u tragu nadzora organizacije kao privacy/egress_refused, a domaćin se prikazuje u odjeljku Compliance, Data residency.

Postavka Vrijednosti Učinak
QUIRE_EGRESS_ALLOW_HOSTS Popis naziva domaćina odvojenih zarezima ili *.example.org za sve poddomene Dodatni domaćini dostupni organizacijama iz EU-a. Ovdje pripadaju krajnje točke web-dojavnika, xAPI-ja i SIEM-a, izvori članaka te domaćini Amazon SES-a jer su to odabiri same organizacije, a nijedna usluga ih ne navodi. Povratne, privatne i jednokomponentne adrese kao što su web ili clamav pripadaju vašoj mreži i nikad se ne provjeravaju

Organizacije iz UK-a i SAD-a ne ograničavaju se popisom domaćina; za njih i dalje vrijede provjere regije usluge. Popis postavite radniku, a stranica administracije čita ga u web-sloju radi prikaza dopuštenih odredišta, pa ga upišite u docker/.env, koji čitaju sve usluge.

Provjera aplikacije daje jasnu pogrešku i zapis nadzora, ali nije jamstvo: kod može biti pogrešan. Jamstvo pruža mreža, a Compose ga ne provodi umjesto vas. Za regionalni skup povežite usluge worker i web s mrežom internal: true kojoj je jedina izlazna ruta posrednički poslužitelj za izlazni promet (primjerice spremnik Squid ili tinyproxy) koji dopušta iste domaćine kao QUIRE_EGRESS_ALLOW_HOSTS, uz domaćine konfiguriranih usluga, i postavite HTTPS_PROXY za te usluge. Stranica rezidentnosti navodi točne domaćine koje aplikacija dopušta, pa možete usporediti oba popisa.

Zdravlje

Krajnja točka Značenje
/healthz Živost: proces odgovara. To se koristi pri provjerama zdravlja Composea
/readyz Spremnost: ovisnosti su dostupne, a za svaku neobaveznu uslugu navodi se je li konfigurirana. Ovdje usmjerite uravnoteživač opterećenja

docker compose -f docker/compose.yaml ps prikazuje stanje svake usluge.

TLS

Usluga proxy (Caddy, licenca Apache-2.0, docker/caddy/Caddyfile) dio je zadane konfiguracije. Odgovara na portovima 80 i 443 te usmjerava:

Domaćin ili putanja Odredište
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, svaka poddomena klijenta i prilagođena domena web
/_collab/ na tim domaćinima collab (WebSocket, QUIRE_COLLAB_URL)
/_realtime/connection/ na tim domaćinima WebSocket klijenta za centrifugo; API poslužitelja nikad se ne izlaže
/_images/ na tim domaćinima imgproxy, uz profil images (IMGPROXY_URL)

init-env.sh izvodi QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL i IMGPROXY_URL iz obaju izvora kako se njihove vrijednosti ne bi razišle. Ako ručno promijenite izvor, uređujte ih zajedno.

Certifikati ovise o QUIRE_PROXY_TLS:

  • internal (zadano): vlastiti izdavatelj certifikata Caddyja za localhost, *.localhost i lvh.me. Jednom vjerujte njegovom korijenskom certifikatu, a zatim otvorite:

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

    Dodajte quire-local-ca.crt u spremište pouzdanih certifikata sustava ili preglednika. curl ga koristi putem opcije --cacert.

  • Adresa e-pošte: automatski ACME certifikati (Let’s Encrypt, zatim ZeroSSL) za stvarne nazive domaćina. DNS za oba izvora i sve domaćine klijenata mora pokazivati ovamo, a portovi 80 i 443 moraju biti dostupni s interneta.

Certifikati za domaćine klijenata izdaju se na zahtjev pri prvom posjetu, i to samo kad web-sloj potvrdi da naziv pripada ovoj instalaciji putem /tls-allowed na mreži Composea. Nije potreban zamjenski certifikat ni dodatak pružatelja DNS usluge, a neznanac ne može postaviti naziv koji pokazuje na ovaj poslužitelj i time zatražiti certifikat. Certifikati i lokalni izdavatelj nalaze se u volumenu caddy-data; koristite li internal, uključite ga u sigurnosne kopije.

Web-sloj vjeruje zaglavlju X-Forwarded-For samo od posrednika: posrednik ima fiksnu adresu (QUIRE_PROXY_ADDRESS, zadano 172.29.64.10) u fiksnoj podmreži (QUIRE_COMPOSE_SUBNET), a QUIRE_TRUSTED_PROXY_CIDRS navodi tu adresu. Ako se podmreža preklapa s mrežom na poslužitelju, promijenite obje postavke, pokrenite docker compose down, a zatim up.

Iza vlastitog povratnog posredničkog poslužitelja

Želite li umjesto toga koristiti postojeći uravnoteživač opterećenja ili posrednički poslužitelj, izostavite proxy (docker compose up -d --scale proxy=0) i završite TLS ispred web (8080), content (8081), collab (1234, WebSocket) i centrifugo (8000, WebSocket). Postavite javne adrese u QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN i QUIRE_COLLAB_URL (wss://), a raspon adresa posrednika u QUIRE_TRUSTED_PROXY_CIDRS.

Rješavanje problema

  • init završava uz poruku „QUIRE_DATABASE_ID is not a UUID”: postavite ga naredbom uuidgen.
  • web se ponovno pokreće uz poruku „did not start on compose”: zapis navodi svaku postavku koju ne može podržati i prikazuje što umjesto nje treba koristiti.
  • Promjena lozinke uloge u .env nakon prvog pokretanja nema učinka: inicijalizacijska skripta pokreće se samo jednom. Upotrijebite ALTER ROLE.
  • Prijenos ne uspijeva zbog pogreške skeniranja dok je postavljen CLAMAV_URL: ClamAV pri prvom pokretanju preuzima potpise, što traje nekoliko minuta.
Navigacija

Upišite za pretraživanje…

↑↓ kretanje↵ odabirEsc zatvaranje