Dan huwa l-prodott sħiħ fuq host wieħed: l-LMS, ix-xogħol fl-isfond tiegħu, is-
servizzi realtime u tal-editjar kollaborattiv, u kull servizz fakultattiv
wara profil. Id-disinn jinsab f’docs/architecture/23-ops.md sezzjoni 2.
Miri oħra: Vercel u Cloudflare Workers imexxu l-livell web biss. L-aġġornamenti jinsabu f’upgrade.md, u l-backups u d-drill tar-restore f’backup-restore.md.
X’għandek bżonn
- Docker Engine 27 jew aktar ġdid bil-plugin Compose 2.30 jew aktar ġdid.
- 4 cores tas-CPU u 8 GB memorja għall-istack default; 8 cores u 16 GB
b’
--profile full(ClamAV waħdu jżomm madwar 1.5 GB ta’ signatures). - Isem DNS għal-livell web u ieħor għall-kontenut mhux fdat. Iridu jkunu hosts differenti: pakketti SCORM u HTML imtella’ jaħdmu fuq l-oriġini tal-kontenut biex qatt ma jistgħu jaqraw il-cookies tal-LMS.
- Għal test lokali,
lvh.meu*.localhostisolvu għal 127.0.0.1, li huwa dak li jużadocker/.env.example. Is-servizzproxytal-istack iservi lit-tnejn fuq https b’awtorità taċ-ċertifikati lokali, biex xejn ieħor ma huwa installat (ara “TLS”). - Ports 80 u 443 ħielsa fuq il-host (
QUIRE_PROXY_HTTP_PORTuQUIRE_PROXY_HTTPS_PORTiċaqalquhom).
L-ewwel tħaddim
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 jikteb docker/.env minn docker/.env.example
b’kull sigriet iġġenerat (passwords tad-database, iċ-ċwievet tal-iffirmar u master,
il-par taċ-ċwievet tat-tnedija tal-kontenut) u ċ-ċavetta tal-iffirmar tal-checkpoint tal-verifika f’
docker/secrets/audit-signing-key.pem, li Compose jmountja fil-workers
bħala sigriet. Jeħtieġ biss sh, awk u openssl, u jirrifjuta li
jissostitwixxi docker/.env eżistenti. Ikkopja ż-żewġ fajls barra l-host: mingħajr
QUIRE_MASTER_KEY database rrestawrata ma tistax tiddekripta l-kredenzjali maħżuna tagħha.
Biex timla l-fajl bl-idejn minflok, cp docker/.env.example docker/.env; il-
fajl jgħid kif tiġġenera kull sigriet.
Iż-żewġ oriġini jridu jkunu https: is-servizz tal-kontenut jirrifjuta http sempliċi fi
produzzjoni, u ma jridux jaqsmu dominju reġistrabbli. Is-servizz proxy
itemm TLS għat-tnejn (ara “TLS”); init-env.sh jirrifjuta oriġini
http://.
L-istack jibda f’ordni fissa, u kull pass jistenna lil ta’ qablu:
postgresisir b’saħħtu. Fl-ewwel bidu nett l-iskript init tiegħu (docker/postgres/init/90-passwords.sh) jissettja l-erba’ passwords tar-rwoli.migratejapplika kull migrazzjoni u jibbutstrapja l-queue tax-xogħol fid- database tal-kontroll u f’kull database dedikata tat-tenant, jiċċekkja li huma kollha jaqblu, imbagħad joħroġ (docs/ops/upgrade.md). Il-migrazzjonijiet jaħdmu f’kull bidu u huma idempotenti, biex aġġornament huwa immaġni ġdida u restart.init(apps/web/src/first-run.ts) jirreġistra d-database tal-applikazzjoni taħtQUIRE_DATABASE_IDu, metaQUIRE_SETUP_ADMIN_EMAILhuwa ssettjat, joħloq l- ewwel organizzazzjoni u l-amministratur tagħha. L-indirizz tad-dħul u password iġġenerata jiġu stampati darba, f’docker compose logs init.web,content,worker,scheduler,collabucentrifugojibdew.proxyjibda ladarbawebucontentikunu b’saħħithom.
Iftaħ https://demo. segwit mid-dominju tal-applikazzjoni tiegħek (il-log init
jistampa l-indirizz eżatt tad-dħul), u idħol. Fuq installazzjoni lokali, afda
l-awtorità taċ-ċertifikati tal-proxy l-ewwel (ara “TLS”). Biddel il-password iġġenerata f’/account/security.
Proċess mibdi mingħajr sigriet meħtieġ jirrifjuta li jibda u jsemmi s- setting nieqes fil-log tiegħu. Xejn ma jibda kkonfigurat nofsu.
Servizzi u profili
| Service | Profile | What it does |
|---|---|---|
| postgres | always | Id-database (PostgreSQL 18 b’pgvector, mibnija minn docker/postgres.Dockerfile), b’WAL arkivjat mill-ewwel boot |
| migrate, init | always | One-shot: migrazzjonijiet, imbagħad l-ewwel tħaddim |
| web | always | L-LMS, fuq QUIRE_HTTP_PORT (8080) |
| content | always | L-oriġini tal-kontenut mhux fdat, fuq QUIRE_CONTENT_PORT (8081) |
| worker | always | Xogħol fl-isfond: email, rapporti, ipproċessar ta’ fajls, webhooks |
| scheduler | always | Xogħol rikorrenti: jirreġistra l-64 skeda ta’ runtime u jgħaddihom lill-worker; mexxej wieħed kull darba |
| collab | always | Websocket tal-editjar kollaborattiv, fuq QUIRE_COLLAB_HTTP_PORT (1234) |
| centrifugo | always | Fan-out realtime, fuq QUIRE_REALTIME_PORT (8000) |
| proxy | always | Caddy, il-bieb ta’ quddiem TLS fuq ports 80 u 443 (ara “TLS”) |
| valkey | cache |
Cache u limiti tar-rata |
| clamav | scan |
Skennjar ta’ malware tal-uploads |
| gotenberg | preview |
Previews minn Office għal PDF, rendering taċ-ċertifikati |
| imgproxy | images |
Immaġnijiet imdaqqsa u kkonvertiti |
| transcoder | video |
L-immaġni tal-worker b’ffmpeg LGPL biss, għal verżjonijiet tal-vidjo |
| seaweedfs | storage |
Ħażna ta’ oġġetti kompatibbli ma’ S3 fuq dan il-host |
| otelcol | observability |
Kollettur OpenTelemetry |
| mailpit | devmail |
Jaqbad il-posta ħierġa kollha, biex tipprova Quire |
| backup | backup |
Backup bażi one-shot; ara backup-restore.md |
| backup-scheduler, backup-offsite | backup |
Backup bażi kull QUIRE_BACKUP_INTERVAL_HOURS, u kopji encrypted barra l-host b’drill ta’ verifika kull ġimgħa |
| h5p | h5p |
L-immaġni tal-għodda H5P LTI 1.3 li tipprovdi int f’QUIRE_H5P_IMAGE, fuq QUIRE_H5P_PORT (8090); ara “Connecting an H5P provider” |
--profile full jibda kull servizz fakultattiv ħlief backup u h5p.
Ibda wieħed b’docker compose -f docker/compose.yaml --profile scan up -d.
Mingħajr servizz fakultattiv Quire xorta taħdem u tgħid x’huwa nieqes: l-ebda
skenner ifisser uploads jinħażnu mhux skennjati u l-amministratur jingħad; l-ebda
Gotenberg ifisser fajls joffru download minflok preview; l-ebda transcoder ifisser
vidjo jindaqq bħala l-fajl oriġinali.
Kull immaġni ta’ parti terza u l-obbligi tal-liċenzja tagħha huma elenkati f’
docker/third-party-containers.yaml.
Konnessjoni ta’ fornitur H5P
Quire ma tinkorpora jew tibgħat l-ebda runtime H5P jew sidecar (ADR 0019). Jekk tuża H5P, ipprovdi l-abbonament hosted tiegħek jew opera l-istanza H5P self-hosted tiegħek separatament minn Quire. Irreġistra dak il-fornitur bħala għodda esterna LTI 1.3 u żid il-kontenut tiegħu mal-korsijiet bħala attivitajiet ta’ għodda. Quire tiskambja gradi u progress tal-attività/gradar permezz ta’ LTI Assignment and Grade Services (AGS). Jekk il-fornitur jibgħat ukoll dikjarazzjonijiet xAPI, ikkonfigura dan separatament għall- maħżen tad-dikjarazzjonijiet xAPI ta’ Quire; skambju ta’ gradi/progress AGS ma jibgħatx dikjarazzjonijiet xAPI. Imports ta’ Moodle jirrapportaw attivitajiet H5P bħala li jeħtieġu konnessjoni ta’ għodda LTI. Il-fornitur jibqa’ responsabbli għar-runtime H5P tiegħu, l-awtur, il-bank tal-kontenut u l-istorja tat-tentattivi.
Biex tħaddem l-istanza self-hosted tiegħek fuq dan il-host, issettja QUIRE_H5P_IMAGE għall-
immaġni tiegħu u ibda l-profil h5p. Compose jippubblikaha fuq QUIRE_H5P_PORT
(8090) u jżomm id-data tagħha fil-volum h5p-data; l-immaġni, u l-
obbligi li jiġu magħha, jibqgħu tiegħek.
Settings
Kull proċess jaqra docker/.env. It-template, docker/.env.example, jelenka
kull setting bid-default tiegħu. Il-gruppi:
Indirizzi
| Setting | Meaning |
|---|---|
QUIRE_APP_ORIGIN |
L-indirizz pubbliku tal-LMS, bħal https://learn.example.com |
QUIRE_CONTENT_ORIGIN |
L-oriġini tal-kontenut, host differenti |
QUIRE_PLATFORM_DOMAINS |
Dominji li organizzazzjonijiet jgħixu taħthom, separati b’virgoli |
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 hawnhekk. Ara l-gwidi l-oħra għal vercel u cloudflare |
QUIRE_TRUSTED_PROXY_CIDRS |
Proxies li X-Forwarded-For tagħhom huwa maħsub |
Sigrieti
| Setting | Meaning |
|---|---|
QUIRE_SECRET_KEY |
Jiffirma sessjonijiet u tokens. 64 karattri hex |
QUIRE_MASTER_KEY |
Jgeżwer kredenzjali maħżuna bħal sigrieti SSO u webhook. 32 bytes, base64. Il-livell web u l-worker jeħtieġu l-istess valur. Rotazzjoni: key-rotation.md |
QUIRE_MASTER_KEY_VERSION |
It-tikketta tal-verżjoni taċ-ċavetta master, v1 meta mhijiex issettjata. Għolliha meta ddawwar |
QUIRE_MASTER_KEY_RETIRED |
Ċwievet master ta’ qabel li għadhom meħtieġa biex jaqraw dak li ssiġillaw, bħala v1=<base64>. Neħħi wara li rotazzjoni tintemm b’xejn mhux solvut |
QUIRE_COLLAB_SIGNING_KEY |
Kondiviż bejn web u collab biex jiffirma tokens tal-editjar |
QUIRE_BACKUP_SIGNING_KEY |
Jiffirma backups tal-korsijiet (fakultattiv) |
Żomm kopja ta’ QUIRE_MASTER_KEY xi mkien ieħor barra dan il-host. Database
rrestawrata mingħajrha ma tistax tiddekripta l-kredenzjali li żżomm.
Database
| Setting | Meaning |
|---|---|
POSTGRES_PASSWORD |
Is-superuser, użat mill-container u l-backups |
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD |
Passwords tar-rwoli, issettjati fl-ewwel bidu |
DATABASE_URL |
Ir-rwol tal-applikazzjoni. Sigurtà fil-livell tar-ringieli tapplika għal kull query li tagħmel |
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL |
Ir-rwol tal-migratur, għal migrate u init |
QUIRE_SUPERUSER_URL |
Użat biss mill-ewwel tħaddim |
QUIRE_REPORT_DATABASE_URL |
Ir-rwol tar-rapport ta’ qari biss, għar-rapporti u l-bennej tar-rapporti |
QUIRE_AUDIT_DATABASE_URL |
Ir-rwol tal-verifika, għall-console tal-verifika u l-esportazzjoni SIEM |
QUIRE_DATABASE_ID |
Kwalunkwe UUID, fiss għall-ħajja tal-installazzjoni |
Passwords tar-rwoli jiġu applikati biss meta l-volum tad-database jinħoloq l-ewwel darba.
Biex tbiddel waħda aktar tard, uża ALTER ROLE u mbagħad aġġorna l-URL li taqbel.
QUIRE_REPORT_DATABASE_URL jintuża għad-database fiżika kkonfigurata minn
DATABASE_URL. Għal kull database fiżika reġistrata oħra, issettja l-URL tal-konnessjoni
quire_report tagħha stess fl-ambjenti tal-web u tal-worker, imbagħad poġġi
l-isem tal-varjabbli f’dik id-database Reporting environment variable bħala
env:NAME. Ir-referenza trid tindika lill-istess database bħall-konnessjoni tal-app
tagħha, idealment ir-replika tal-qari tagħha. Kull wiċċ tar-rapport isegwi l-
tenant sad-database tiegħu stess konnessjoni tar-rapport: il-bennej tar-rapporti u
rapporti ssejvjati, kunsinni skedati, esportazzjonijiet tar-rapporti, analitika, il-log tal-verifika,
ir-riżorsi tal-verifika REST u t-tiftix tal-verifika tal-assistent. L-ebda waħda
minnhom qatt ma tissellef URL tar-rapport ta’ database oħra. Meta database m’għandha l-ebda
konnessjoni tar-rapport, rapporti ordinarji jaħdmu fuq il-konnessjoni tal-applikazzjoni tad-database stess,
filwaqt li analitika u kull qari tal-verifika jirrifjutaw u jgħidu hekk, għax
ir-rwol tal-applikazzjoni ma jistax jaqra t-trail tal-verifika.
Drivers
| Setting | This release | Notes |
|---|---|---|
QUIRE_STORAGE_DRIVER |
local (default), s3 jew azure |
local iżomm fajls fil-volum files. s3 ikopri AWS S3, R2, interoperabbiltà GCS u maħżen oħra kompatibbli ma’ S3, b’uploads multipart li jistgħu jitkomplew |
QUIRE_REALTIME_DRIVER |
inprocess (default), sse, centrifugo jew durable_objects |
inprocess huwa tajjeb għal container web wieħed; uża centrifugo jew sse meta jkun hemm diversi |
QUIRE_CACHE_DRIVER |
memory (default), postgres jew valkey |
memory huwa għal kull proċess; uża valkey jew postgres biex il-limiti tar-rata jżommu bejn containers |
QUIRE_VIDEO_DRIVER |
ffmpeg (default) jew progressive_mp4 |
Jew fornitur hosted: Cloudflare Stream, Mux jew Bunny, biċ-ċwievet tagħhom |
QUIRE_IMAGE_DRIVER |
noop (default), imgproxy jew cloudflare |
noop iservi kull immaġni fid-daqs oriġinali tagħha. imgproxy jeħtieġ il-profil images u s-settings hawn taħt; cloudflare juża Cloudflare Images |
QUIRE_MEETING_PROVIDER |
bbb, zoom, teams, meet, jitsi jew in_process |
Id-default tal-pjattaforma għas-sessjonijiet live. Mhux issettjat, sessjonijiet live jgħidu li mhumiex ikkonfigurati, sakemm organizzazzjoni tikkonnettja l-kont tagħha taħt Integrations, Live session provider. Il-kont ta’ organizzazzjoni dejjem jirbaħ fuq dan il-valur. Is-settings ta’ kull fornitur (BBB_URL u BBB_SECRET, il-varjabbli ZOOM_*, TEAMS_*, GOOGLE_MEET_* u JITSI_*) jinqraw biss għall-fornitur imsemmi hawnhekk |
QUIRE_MEETING_REGIONS |
Lista b’virgoli ta’ eu, uk, us |
Fejn il-fornitur default tal-pjattaforma jipproċessa laqgħat. Mhux issettjat, ma jiġix iċċekkjat kontra organizzazzjoni mwaħħla ma’ reġjun, bħal qabel. Il-kont ta’ organizzazzjoni jiddikjara r-reġjuni tiegħu fil-paġna tiegħu |
Valur ta’ driver li din ir-release ma tinkludix jiġi rifjutat meta l-livell web jibda, bis-setting imsemmija, aktar milli jiġi sostitwit bil-kwiet bid- default.
Immaġnijiet
Paġni jitolbu immaġnijiet f’erba’ daqsijiet fissi permezz ta’
/api/files/{id}/image/{size}, li jiċċekkja l-istess aċċess bħall-fajl
innifsu u mbagħad jerġa’ jindirizza lejn is-servizz tal-immaġnijiet. Kull organizzazzjoni tista’ titlob
għal QUIRE_IMAGE_SPECS_PER_HOUR (default 2000) pari ġodda ta’ immaġni u daqs
fis-siegħa; daqsijiet diġà prodotti dik is-siegħa ma jgħoddux. Uża valkey jew
postgres għal QUIRE_CACHE_DRIVER b’aktar minn container web wieħed, biex il-
limitu jżomm bejniethom.
| Setting | Driver | Notes |
|---|---|---|
IMGPROXY_URL |
imgproxy |
L-indirizz li browsers jilħqu imgproxy fuqu, pereżempju https://images.example.org. Il-profil images jippubblikah fuq QUIRE_IMAGES_PORT (8082) |
IMGPROXY_KEY, IMGPROXY_SALT |
imgproxy |
Strings hex, l-istess valuri li imgproxy jinbeda bihom. Iġġenera kull waħda b’openssl rand -hex 32. Quire jiffirma kull indirizz tal-immaġni bihom, biex imgproxy ma jirrendix xejn li Quire ma talbitx |
QUIRE_IMAGE_SOURCE_ORIGIN |
imgproxy with local storage |
Fejn imgproxy jġib l-oriġinali minn. Compose jissettja http://web:3000. B’ħażna s3 jew azure imgproxy jġib mill-bucket u dan ma jintużax |
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH |
cloudflare |
Token API b’permess ta’ editjar Images, u l-hash tal-kont minn Images, Developer resources. Ixgħel varjanti flessibbli għall-kont |
CLOUDFLARE_IMAGES_SIGNING_KEY |
cloudflare |
Fakultattiv. Meta ssettjat, immaġnijiet huma privati u kull indirizz huwa ffirmat u jiskadi. Mingħajrha, immaġnijiet huma pubbliċi f’indirizzi derivati minn QUIRE_SECRET_KEY li ħadd ma jista’ jaħseb |
Cloudflare Images iżomm il-kopja tiegħu ta’ kull oriġinal li jservi. Meta fajl jitħassar, il-worker iħassar dik il-kopja qabel l-oriġinali.
Queue
Xogħol fl-isfond juża pg-boss fl-istess database Postgres, biex m’hemm l-ebda
servizz queue x’tħaddem u xejn x’tikkonfigura. Xogħol jiġi kkwodjat fl-istess
tranżazzjoni bħall-bidla li kkawżatu, biex ħabta ma tistax titlef wieħed jew
tibgħat wieħed darbtejn. QUIRE_QUEUE_DRIVER huwa pgboss hawnhekk, id-default tiegħu; vercel
u cloudflare iċaqalqu biss il-kunsinni ħfief ta’ notifiki u webhook lill-queue
tal-pjattaforma stess, u l-gwidi Vercel u Cloudflare jiddeskrivuhom
u kif il-livelli web tagħhom jikkwodjaw.
Issettja waħda minn:
QUIRE_EMAIL_PROVIDER_CONFIG: oġġett JSON li jsemmi fornitur HTTP u l-kredenzjali tiegħu, bħal{"provider":"postmark","token":"..."}. Postmark, Amazon SES, Mailgun, SendGrid u Resend huma appoġġjati.QUIRE_SMTP_URL:smtp://user:password@host:587. Din il-mira biss; il- miri serverless jimblokkaw SMTP.
QUIRE_MAIL_FROM huwa l-mittent. Biex tipprova Quire, ibda l-profil devmail,
issettja QUIRE_SMTP_URL=smtp://mailpit:1025, u aqra l-posta f’
http://localhost:8025.
Servizzi fakultattivi
| Setting | With profile |
|---|---|
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 jew QUIRE_MEILISEARCH_URL |
Tiftix estern; test sħiħ ta’ Postgres inkella |
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL |
Kontroll ta’ ksur ta’ password. Mixgħul default kontra api.pwnedpasswords.com (prefiss hash ta’ ħames karattri biss jintbagħat); off jitfih, u l-URL tindika lejn API range li tospita int |
Osservabbiltà
OTEL_EXPORTER_OTLP_ENDPOINT isemmi l-kollettur li kull proċess jibgħat
traċċi u metriki lilu; bil-profil observability huwa
http://otelcol:4318, u docker/otel-collector.yaml huwa fejn iżżid l-
esportatur għall-backend tiegħek. Il-livell web, worker, scheduler, content u collab
jesportaw spans fuq OTLP/HTTP (talbiet web, tranżazzjonijiet tad-database tat-tenant,
xogħol tal-worker u sejħiet ħerġin) meta jkun issettjat, u metriki lill-
istess endpoint kull minuta (OTEL_METRICS_EXPORTER=none jitfihom).
OTEL_TRACES_SAMPLER_ARG jissettja s-sehem ta’ traċċi miżmuma. Logs imorru fuq standard
output f’LOG_LEVEL, u Compose ddawwarhom. Traċċi qatt ma jġorru data
personali.
Egress reġjonali (residenza tad-data tal-UE)
QUIRE_REGION=eu jgħid li l-istack isservi organizzazzjonijiet tal-Unjoni Ewropea. Il-
worker imbagħad iżomm kull talba ħierġa magħmula għal organizzazzjoni mwaħħla mal-
UE għal allowlist (21-compliance.md sezzjoni 8.1). L-allowlist hija l-
hosts li s-servizzi kkonfigurati jiddikjaraw għar-reġjun (l-endpoint tal-ħażna,
il-fornitur tal-email, fornitur tal-vidjo hosted, il-miri tal-ħażna tal-organizzazzjoni stess,
fornituri tal-AI u kont tal-email), il-hosts ta’ kull servizz
taħt deroga attiva, u l-hosts li telenka int f’
QUIRE_EGRESS_ALLOW_HOSTS. Talba lil kull host pubbliku ieħor hija rifjutata
qabel ma tintbagħat, ir-rifjut jinkiteb fit-trail tal-verifika tal-organizzazzjoni bħala
privacy/egress_refused, u hija elenkata taħt Compliance, Data residency.
| Setting | Values | Effect |
|---|---|---|
QUIRE_EGRESS_ALLOW_HOSTS |
Lista b’virgoli ta’ hostnames, jew *.example.org għal kull subdomain |
Hosts żejda li organizzazzjoni tal-UE tista’ tilħaq. Endpoints webhook, xAPI u SIEM, feeds tal-blog u hosts ta’ Amazon SES jappartjenu hawnhekk, għax huma għażla tal-organizzazzjoni stess u l-ebda servizz ma jiddikjarahom. Loopback, indirizzi privati u ismijiet b’tikketta waħda bħal web jew clamav huma n-network tiegħek stess u qatt ma jiġu ċċekkjati |
Organizzazzjonijiet tar-Renju Unit u tal-Istati Uniti mhumiex miżmuma ma’ lista ta’ hosts; iżommu l-kontrolli tar-reġjun tas-servizz. Issettja l-lista fuq il-worker; il-paġna tal-admin taqraha fuq il-livell web
biex turi l-allowlist, għalhekk poġġiha f’docker/.env, li kull servizz
jaqra.
Il-kontroll tal-applikazzjoni jagħti żball ċar u entrata tal-verifika, u mhuwiex
il-garanzija: il-kodiċi jista’ jkun ħażin. Il-garanzija hija n-network. Compose ma
jinfurzahiex għalik. Għal stack reġjonali, poġġi s-servizzi worker u web
fuq network internal: true li l-unika rotta ħierġa tagħha hija proxy tal-egress
(pereżempju container Squid jew tinyproxy) li jippermetti l-istess hosts
bħala QUIRE_EGRESS_ALLOW_HOSTS flimkien mal-hosts tas-servizzi kkonfigurati tiegħek, u
issettja HTTPS_PROXY għal dawk is-servizzi. Il-paġna tar-residenza telenka l-hosts eżatti
li l-applikazzjoni tippermetti, biex iż-żewġ listi jkunu jistgħu jitqabblu.
Saħħa
| Endpoint | Meaning |
|---|---|
/healthz |
Liveness: il-proċess iwieġeb. Kontrolli tas-saħħa ta’ Compose jużaw dan |
/readyz |
Readiness: dipendenzi milħuqa, u kull servizz fakultattiv irrapportat bħala kkonfigurat jew le. Indika l-load balancer tiegħek hawnhekk |
docker compose -f docker/compose.yaml ps juri s-saħħa ta’ kull servizz.
TLS
Is-servizz proxy (Caddy, Apache-2.0, docker/caddy/Caddyfile) huwa parti mill-
istack default. Iwieġeb fuq ports 80 u 443 u jgħaddi:
| Host or path | Goes to |
|---|---|
QUIRE_PROXY_CONTENT_HOST |
content |
QUIRE_PROXY_APP_HOST, kull subdomain tat-tenant u dominju personalizzat |
web |
/_collab/ fuq dawk il-hosts |
collab (websocket, QUIRE_COLLAB_URL) |
/_realtime/connection/ fuq dawk il-hosts |
Il-websocket tal-klijent ta’ centrifugo; l-API tas-server tiegħu qatt ma hija esposta |
/_images/ fuq dawk il-hosts |
imgproxy, bil-profil images (IMGPROXY_URL) |
init-env.sh jidderiva QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST,
QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL u IMGPROXY_URL miż-żewġ
oriġini, biex ma jistgħux jinfirdu. Editjahom flimkien jekk tibdel
oriġini bl-idejn.
Ċertifikati jsegwu QUIRE_PROXY_TLS:
-
internal(id-default): l-awtorità taċ-ċertifikati ta’ Caddy stess, għallocalhost,*.localhostulvh.me. Afda l-għerq tagħha darba, imbagħad ibbrażja:docker compose -f docker/compose.yaml cp \ proxy:/data/caddy/pki/authorities/local/root.crt ./quire-local-ca.crtŻid
quire-local-ca.crtmal-maħżen tal-fiduċja tas-sistema jew tal-browser.curljeħodha b’--cacert. -
Indirizz email: ċertifikati ACME awtomatiċi (Let’s Encrypt, imbagħad ZeroSSL) għal hostnames reali. DNS għaż-żewġ oriġini u kull host tat-tenant irid jindika hawnhekk, u ports 80 u 443 iridu jkunu milħuqa mill-internet.
Hosts tat-tenant jinħarġu meta jintalbu, fl-ewwel żjara, u biss meta web
jikkonferma li l-isem huwa ta’ din l-installazzjoni (/tls-allowed, mistoqsi fuq in-
network ta’ Compose). L-ebda ċertifikat wildcard jew plugin ta’ fornitur DNS mhu meħtieġ,
u barrani li jindika isem lejn il-host ma jistax iġiegħlu jitlob
ċertifikati. Ċertifikati u l-awtorità lokali jgħixu fil-volum
caddy-data; agħmel backup tiegħu mal-bqija jekk tuża internal.
Web jemmen X-Forwarded-For mill-proxy waħdu: il-proxy għandu indirizz fiss
(QUIRE_PROXY_ADDRESS, default 172.29.64.10) fuq subnet fissa
(QUIRE_COMPOSE_SUBNET), u QUIRE_TRUSTED_PROXY_CIDRS isemmi dak l-indirizz.
Jekk is-subnet tikkonfliġġi ma’ network fuq il-host, biddel it-tnejn u ħaddem
docker compose down qabel up.
Wara l-proxy reverse tiegħek
Biex tuża load balancer jew proxy li diġà tħaddem minflok, ħalli proxy barra
(docker compose up -d --scale proxy=0) u temm TLS quddiem web
(8080), content (8081), collab (1234, websocket) u centrifugo (8000,
websocket). Issettja l-indirizzi pubbliċi f’QUIRE_APP_ORIGIN,
QUIRE_CONTENT_ORIGIN u QUIRE_COLLAB_URL (wss://), u l-firxa tal-indirizzi tal-proxy tiegħek
f’QUIRE_TRUSTED_PROXY_CIDRS.
Solvi problemi
initjoħroġ bi “QUIRE_DATABASE_ID is not a UUID”: issettjah b’uuidgen.webjerġa’ jibda b’“did not start on compose”’: il-log jelenka kull setting li ma jistax jonora u x’tuża minflok.- Tibdil ta’ password ta’ rwol f’
.envwara l-ewwel bidu ma jagħmel xejn: l- iskript init jaħdem darba. UżaALTER ROLE. - Uploads ifallu bi żball ta’ skennjar waqt li
CLAMAV_URLhuwa ssettjat: ClamAV jniżżel is-signatures tiegħu fl-ewwel bidu, li jieħu ftit minuti.