Files
familienarchiv/docs/architecture/c4/l2-containers.puml
Marcel 67004737f6
Some checks failed
CI / Unit & Component Tests (pull_request) Successful in 5m45s
CI / OCR Service Tests (pull_request) Successful in 36s
CI / Backend Unit Tests (pull_request) Failing after 23m49s
CI / fail2ban Regex (pull_request) Successful in 2m13s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m46s
fix(observability): define obs_glitchtip_worker Container in C4 diagram
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 04:43:09 +02:00

4.9 KiB

Container Diagram: FamilienarchivContainer Diagram: FamilienarchivFamilienarchiv (Docker Compose)[system]Observability Stack (docker-compose.observability.yml)[system]«container»Web Frontend[SvelteKit / Node adapter / port3000] Server-side rendered UI.Handles auth sessioncookies, document searchand viewer, transcriptioneditor, annotation layer,family tree (Stammbaum),stories (Geschichten),activity feed (Chronik),enrichment workflow, andadmin panel.«container»API Backend[Spring Boot 4 / Java 21 / Jetty /port 8080] REST API. Implementsdocument management,search, user auth, fileupload/download,transcription, OCRorchestration, and SSEnotifications. TrustsX-Forwarded-* headers fromCaddy.«container»OCR Service[Python FastAPI / port 8000] Handwritten textrecognition (HTR) and OCRmicroservice. Single-nodeby design â€” see ADR-001.Reachable only on theinternal Docker network; noexternal port exposed.«container»Relational Database[PostgreSQL 16] Stores document metadata,persons, users, permissiongroups, tags, transcriptionblocks, audit log, and SpringSession data.«container»Object Storage[MinIO (S3-compatible)] Stores the actual documentfiles (PDFs, scans). Backenduses a bucket-scopedservice account(archiv-app), not MinIO root.«container»Bucket /Service-Account Init[MinIO Client (mc)] One-shot container onstartup. Idempotent:creates the archive bucket,the archiv-app serviceaccount, and attaches thereadwrite policy.«container»Prometheus[prom/prometheus:v3.4.0] Scrapes metrics frombackend management port8081(/actuator/prometheus),node-exporter, andcAdvisor. Retention: 30days.«container»Node Exporter[prom/node-exporter:v1.9.0] Host-level CPU, memory,disk, and network metrics.«container»cAdvisor[gcr.io/cadvisor/cadvisor:v0.52.1] Per-container resourcemetrics.«container»Loki[grafana/loki:3.4.2] Stores log streams from allcontainers.«container»Promtail[grafana/promtail:3.4.2] Ships Docker container logsto Loki via Docker SD.«container»Tempo[grafana/tempo:2.7.2] Distributed trace storage.OTLP gRPC receiver on port4317 (archiv-net). Grafanaqueries traces on port 3200(obs-net). All ports internalonly.«container»Grafana[grafana/grafana-oss:11.6.1] Unified observability UI â€”dashboards, logs, traces.Datasources (Prometheus,Loki, Tempo) and threedashboards areauto-provisioned.«container»GlitchTip[glitchtip/glitchtip:v4] Sentry-compatible errortracker â€” web process.Receives frontend +backend error events,groups by fingerprint,provides issue UI with stacktraces.«container»GlitchTip Worker[glitchtip/glitchtip:v4] Celery + beat worker â€”async event ingestion,notifications, cleanup.«container»Redis[redis:7-alpine] Celery task queue forGlitchTip async workers.«person»User Admin or family member«external_system»Email Service SMTP server. Deliversnotification andpassword-reset emails.«container»Reverse Proxy[Caddy 2 (host-installed)] TLS termination (auto Let'sEncrypt). Routes /api/* tobackend:8080, everythingelse to frontend:3000.Responds 404 on/actuator/* and adds HSTS,X-Content-Type-Options,Referrer-Policy headers.HTTPS[TLS 1.2/1.3]Reverse proxiesnon-/api requests[HTTP / loopback:3000]Reverse proxies /api/*[HTTP / loopback:8080]API requests withBasic Auth token[HTTP / REST / JSON]SSE notifications(server-sent events)[HTTP / SSE â€” frontedby Caddy]Reads and writesmetadata andsessions[JDBC / SQL]Uploads and streamsdocument files usingarchiv-app serviceaccount[HTTP / S3 API (AWSSDK v2)]OCR job requestswith presigned MinIOURL[HTTP / REST / JSON]Sends notificationand password-resetemails (optional)[SMTP]Fetches PDF viapresigned URL[HTTP / S3 presigned]Bootstraps bucket +service account onstartup[MinIO Client CLI]Pushes log streams[HTTP/Loki push API]Sends distributedtraces via OTLP[gRPC / OTLP / port 4317(archiv-net)]Queries metrics[HTTP 9090]Queries logs[HTTP 3100]Queries traces[HTTP 3200]Stores error events inglitchtip DB[PostgreSQL /archiv-net]Processes Celerytasks[Redis / obs-net]