infra: clean up Keycloak configuration, enforce consistency in .env, and improve health checks

Streamlined Keycloak configurations with defaults for development and production in `.env`. Added health checks and improved environment variable documentation with comments to differentiate local and server deployments. Ensured compatibility with pre-built registry images.
This commit is contained in:
Stefan Mogeritsch 2026-03-06 11:23:24 +01:00
parent 6cb1f2d5ba
commit 09b0b1a462
75 changed files with 441 additions and 44 deletions

12
.env
View File

@ -8,6 +8,10 @@
# --- PROJECT ---
PROJECT_NAME=meldestelle
# --- BACKUP ---
BACKUP_DIR=/home/stefan/backups/meldestelle
BACKUP_RETENTION_DAYS=7
# Docker build versions (optional overrides)
DOCKER_VERSION=1.0.0-SNAPSHOT
DOCKER_REGISTRY=git.mo-code.at/mocode-software
@ -48,15 +52,21 @@ SPRING_DATA_VALKEY_PASSWORD=valkey-password
KEYCLOAK_IMAGE_TAG=26.4
KC_HEAP_MIN=512M
KC_HEAP_MAX=1024M
# Lokale Entwicklung: start-dev (kein Pre-Build nötig, kein --optimized)
# Server/Produktion: start --optimized --import-realm (nutzt das pre-built Registry-Image)
KC_COMMAND=start-dev --import-realm
KC_ADMIN_USERNAME=kc-admin
KC_ADMIN_PASSWORD=kc-password
KC_DB=postgres
KC_DB_SCHEMA=keycloak
KC_DB_PASSWORD=meldestelle
# Lokal: localhost | Server: echte IP oder Domain (z.B. 192.168.1.100 oder auth.meldestelle.at)
KC_HOSTNAME=localhost
# false = kein Hostname-Strict-Check (empfohlen für Entwicklung und HTTP-only Server)
KC_HOSTNAME_STRICT=false
KC_HOSTNAME_STRICT_HTTPS=false
KC_PORT=8180:8080
KC_DEBUG_PORT=9000:9000
KC_MANAGEMENT_PORT=9000:9000
# --- KEYCLOAK TOKEN VALIDATION ---
# Public Issuer URI (must match the token issuer from browser/postman)

View File

@ -2,12 +2,21 @@
# Meldestelle Docker Compose Environment
# Single Source of Truth (SSoT)
# ==========================================
# WARNING: This file contains secrets (passwords).
# Do NOT commit this file to version control if it contains production secrets.
# ANLEITUNG:
# 1. Diese Datei nach ".env" kopieren: cp .env.example .env
# 2. Alle Werte mit <PLACEHOLDER> durch echte Werte ersetzen
# 3. Für lokale Entwicklung: KC_COMMAND=start-dev --import-realm
# Für Server/Produktion: KC_COMMAND=start --optimized --import-realm
# WARNING: Die .env-Datei enthält Secrets NIEMALS in Git committen!
# --- PROJECT ---
PROJECT_NAME=meldestelle
# --- BACKUP ---
# SERVER: Pfad zum Backup-Verzeichnis (z.B. /home/<USER>/backups/meldestelle)
BACKUP_DIR=/home/<USER>/backups/meldestelle
BACKUP_RETENTION_DAYS=7
# Docker build versions (optional overrides)
DOCKER_VERSION=1.0.0-SNAPSHOT
DOCKER_BUILD_DATE=2026-02-02T15:00:00Z
@ -37,22 +46,32 @@ VALKEY_MAXMEMORY=256mb
# --- KEYCLOAK ---
KEYCLOAK_IMAGE_TAG=26.4
KC_HEAP_MAX=1024m
KC_COMMAND=start-dev --import-realm
KC_HEAP_MIN=512M
KC_HEAP_MAX=1024M
# LOKAL: start-dev --import-realm
# SERVER: start --optimized --import-realm ← pre-built Registry-Image, kein start-dev!
KC_COMMAND=start --optimized --import-realm
KC_ADMIN_USERNAME=kc-admin
KC_ADMIN_PASSWORD=kc-password
KC_ADMIN_PASSWORD=<SICHERES_PASSWORT>
KC_DB=postgres
KC_DB_SCHEMA=keycloak
KC_DB_PASSWORD=meldestelle
KC_HOSTNAME=localhost
KC_DB_PASSWORD=<SICHERES_PASSWORT>
# SERVER: Echte IP oder Domain eintragen (z.B. 192.168.1.100 oder auth.meldestelle.at)
# LOKAL: localhost
KC_HOSTNAME=<SERVER_IP_ODER_DOMAIN>
# false = Zugriff über beliebige Hostnamen erlaubt (nötig ohne TLS / für HTTP-Betrieb)
KC_HOSTNAME_STRICT=false
KC_HOSTNAME_STRICT_HTTPS=false
KC_PORT=8180:8080
KC_DEBUG_PORT=9000:9000
KC_MANAGEMENT_PORT=9000:9000
# --- KEYCLOAK TOKEN VALIDATION ---
# Public Issuer URI (must match the token issuer from browser/postman)
KC_ISSUER_URI=http://localhost:8180/realms/meldestelle
# Internal JWK Set URI (for service-to-service communication within Docker)
KC_JWK_SET_URI=http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs
# Public Issuer URI: muss mit dem Hostname übereinstimmen, den Browser/App sieht
# LOKAL: http://localhost:8180/realms/meldestelle
# SERVER: http://<SERVER_IP_ODER_DOMAIN>:8180/realms/meldestelle
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI=http://<SERVER_IP_ODER_DOMAIN>:8180/realms/meldestelle
# Internal JWK Set URI: Service-zu-Service innerhalb Docker (immer keycloak:8080)
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI=http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs
# --- CONSUL ---
CONSUL_IMAGE=hashicorp/consul:1.22.1

View File

@ -4,15 +4,25 @@
# Sichert Datenbanken und Konfigurationen
# ==========================================
# Konfiguration
BACKUP_DIR="/home/grandmo/backups/meldestelle"
# .env laden (SSoT für alle Variablen)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
if [ -f "$PROJECT_ROOT/.env" ]; then
set -a
# shellcheck disable=SC1091
source "$PROJECT_ROOT/.env"
set +a
fi
# Konfiguration (Defaults falls .env nicht vorhanden)
BACKUP_DIR="${BACKUP_DIR:-$HOME/backups/meldestelle}"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
RETENTION_DAYS=7
PROJECT_NAME="meldestelle"
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
PROJECT_NAME="${PROJECT_NAME:-meldestelle}"
# Container Namen (müssen mit docker-compose übereinstimmen)
DB_CONTAINER="${PROJECT_NAME}-postgres"
DB_USER="meldestelle" # Oder aus .env lesen
DB_USER="${POSTGRES_USER:-pg-user}"
# Verzeichnisse erstellen
mkdir -p "$BACKUP_DIR"

View File

@ -118,11 +118,11 @@ services:
SPRING_DATASOURCE_USERNAME: "${POSTGRES_USER:-pg-user}"
SPRING_DATASOURCE_PASSWORD: "${POSTGRES_PASSWORD:-pg-password}"
# --- REDIS ---
SPRING_DATA_REDIS_HOST: "${REDIS_SERVER_HOSTNAME:-redis}"
SPRING_DATA_REDIS_PORT: "${REDIS_SERVICE_PORT:-6379}"
SPRING_DATA_REDIS_PASSWORD: "${REDIS_PASSWORD:-redis-password}"
SPRING_DATA_REDIS_CONNECT_TIMEOUT: "${REDIS_SERVER_CONNECT_TIMEOUT:-5s}"
# --- VALKEY (formerly Redis) ---
SPRING_DATA_VALKEY_HOST: "${VALKEY_SERVER_HOSTNAME:-valkey}"
SPRING_DATA_VALKEY_PORT: "${VALKEY_SERVER_PORT:-6379}"
SPRING_DATA_VALKEY_PASSWORD: "${VALKEY_PASSWORD:-}"
SPRING_DATA_VALKEY_CONNECT_TIMEOUT: "${VALKEY_SERVER_CONNECT_TIMEOUT:-5s}"
# --- ZIPKIN ---
MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: "${ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans}"

View File

@ -77,7 +77,7 @@ services:
dockerfile: config/docker/keycloak/Dockerfile
args:
KEYCLOAK_IMAGE_TAG: "${KEYCLOAK_IMAGE_TAG:-26.4}"
image: "${DOCKER_REGISTRY:-git.mo-code.at/grandmo}/keycloak:${KEYCLOAK_IMAGE_TAG:-26.4}"
image: "${DOCKER_REGISTRY:-git.mo-code.at/mocode-software}/keycloak:${KEYCLOAK_IMAGE_TAG:-26.4}"
container_name: "${PROJECT_NAME:-meldestelle}-keycloak"
restart: unless-stopped
profiles: [ "infra", "all" ]
@ -89,21 +89,36 @@ services:
KC_DB_URL: "jdbc:postgresql://postgres:5432/${POSTGRES_DB:-pg-meldestelle-db}"
KC_DB_USERNAME: "${POSTGRES_USER:-pg-user}"
KC_DB_PASSWORD: "${POSTGRES_PASSWORD:-pg-password}"
# Hostname-Konfiguration: Für lokale Entwicklung "localhost", auf dem Server die echte IP/Domain setzen
KC_HOSTNAME: "${KC_HOSTNAME:-localhost}"
# WICHTIG: false erlaubt Zugriff über beliebige Hostnamen (nötig für Server-Betrieb ohne TLS)
KC_HOSTNAME_STRICT: "${KC_HOSTNAME_STRICT:-false}"
# WICHTIG: false erlaubt HTTP (kein HTTPS-Zwang) für Entwicklung und HTTP-only Server
KC_HOSTNAME_STRICT_HTTPS: "${KC_HOSTNAME_STRICT_HTTPS:-false}"
KC_HTTP_ENABLED: "true"
# Admin-Interface explizit auf allen Interfaces binden (0.0.0.0)
KC_HTTP_MANAGEMENT_PORT: "9000"
KC_HEALTH_ENABLED: "true"
KC_METRICS_ENABLED: "true"
# Integration der Power-Flags
JAVA_OPTS_APPEND: "-Xms${KC_HEAP_MIN:-512M} -Xmx${KC_HEAP_MAX:-1024M} ${JVM_OPTS_ARM64}"
ports:
- "${KC_PORT:-8180:8080}"
- "${KC_DEBUG_PORT:-9000:9000}"
- "${KC_MANAGEMENT_PORT:-9000:9000}"
depends_on:
postgres:
condition: "service_healthy"
healthcheck:
test: [ "CMD-SHELL", "curl -sf http://localhost:9000/health/ready || exit 1" ]
interval: "15s"
timeout: "5s"
retries: "10"
start_period: "60s"
volumes:
- "./config/docker/keycloak:/opt/keycloak/data/import:Z"
command: "${KC_COMMAND:-start-dev --import-realm}"
# start --optimized nutzt das pre-built Image (kc.sh build im Dockerfile)
# start-dev würde den Pre-Build ignorieren und im Dev-Modus starten (Konflikt mit Registry-Images!)
command: "${KC_COMMAND:-start --optimized --import-realm}"
networks:
meldestelle-network:
aliases:

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Frontend Architecture & Modularization Strategy
**Status:** DRAFT

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Architektur: Das Platform-Modul
## Überblick

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Repository-Architektur (MP-22)
**WARNUNG (Januar 2026): Dieses Dokument ist veraltet.** Die hier beschriebene "Soll"-Struktur wurde teilweise umgesetzt, aber wichtige strategische Änderungen sind in den Statusberichten vom Januar 2026 dokumentiert. Dieses Dokument dient nur noch als historischer Referenzpunkt.

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Open-Source-Konformität & Lizenz-Checkliste
Dieses Dokument dient der Überwachung und Sicherstellung der Open-Source-Konformität des Projekts **Meldestelle**. Es wird vom Lead Architect gepflegt.

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# Enable Gitea Actions Cache to Accelerate CI/CD
[![](/gitea-text.svg)Gitea](/)

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# 💻 Client-Setup: Arbeitsplatz an "Das Biest" anbinden
Diese Anleitung beschreibt die Einrichtung eines lokalen Rechners, um via SSH und Cloudflare-Tunnel auf die

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# Technisches Referenzhandbuch: MS-R1 "Das Biest"
## 1. System-Übersicht & Architektur

View File

@ -1,5 +1,7 @@
---
Betriebsanleitung Minisforum MS-R1
type: Reference
status: ARCHIVED
owner: DevOps Engineer
---
# MINISFORUM MS-R1

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# SSoT Konfigurations-Masterplan für Zora (ARM64)
## 1. System-Umgebung (Infrastruktur)

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# Setup Guide: Host OS (Minisforum MS-R1)
**Status:** DEPRECATED / HISTORIC

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# Setup Guide: Infrastructure Services (Minisforum MS-R1)
**Status:** DEPRECATED / HISTORIC

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Spezifikation
| CPU | CP8180, 12 Cores/12 Threads, 2.6Ghz |

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Dokumentation: Zentrales Mail-Relay (SSoT) auf Zora
## 1. Identität & Rollenverteilung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Roadmap: Finalisierung Gitea-Infrastruktur (MS-R1)
## Phase 1: Konnektivität & Erreichbarkeit 🌐

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
Hier ist der Quellcode des Berichts im Markdown-Format:
# Architektonische Resilienz in verteilten Systemen: Ein umfassender Leitfaden zur Implementierung von Offline-First Kotlin Multiplatform Architekturen mit SQLDelight

View File

@ -1,5 +1,7 @@
---
Datenblatt USV
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Eaton 3S

View File

@ -1,3 +1,8 @@
---
type: ADR
status: DRAFT
owner: Lead Architect
---
# PENDING DECISIONS: Backend Infrastructure & Architecture
**Status:** RESOLVED

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0000: Vorlage für Architekturentscheidungsaufzeichnungen
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0001: Modulare Architektur
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0002: Domain-Driven Design
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0003: Microservices-Architektur
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0004: Ereignisgesteuerte Kommunikation
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0005: Polyglotte Persistenz
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0006: Authentifizierung und Autorisierung mit Keycloak
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0007: API-Gateway-Muster
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0008: Multiplatform-Client-Anwendungen
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0009: Final KMP Architecture
Status: Accepted

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR 001: Backend Infrastructure & Architecture Decisions
**Status:** ACCEPTED

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0010: SQLDelight für Cross-Platform-Persistenz
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0011: Koin für Dependency Injection
## Status

View File

@ -1,3 +1,8 @@
---
type: ADR
status: ACTIVE
owner: Lead Architect
---
# ADR-0012: Strukturierung der Domänen-Dokumentation
* **Status:** Accepted

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
Architecture Decision Records (ADRs)
Dieses Verzeichnis enthält Architekturentscheidungen in kurzer, überprüfbarer Form.

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: Frontend Expert
---
# SQLDelight Integration in Compose Multiplatform
This guide shows how to integrate SQLDelight in a Compose Multiplatform project with Koin dependency injection.

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: Frontend Expert
---
# Architekturstrategien für Asynchrone Persistenz in Kotlin Multiplatform: Eine umfassende Analyse zur Integration von SQLDelight in Web-Umgebungen
## 1. Einleitung und Problemstellung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Glossar der Domäne "Meldestelle"
Dieses Dokument definiert die **Ubiquitous Language** (allgegenwärtige Sprache) des Projekts. Alle Begriffe sind so zu verwenden, wie sie hier definiert sind sowohl im Code als auch in der Kommunikation.

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# 01 - Core Domain Entities
Dieses Dokument definiert die zentralen fachlichen Entitäten (Kern-Entitäten) des "Meldestelle"-Projekts. Diese Entitäten bilden das Fundament des Datenmodells und der gesamten Anwendungslogik.

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Entitäten des Kern-Modells
Dieses Verzeichnis enthält detaillierte Beschreibungen der zentralen fachlichen Entitäten des "Meldestelle"-Projekts.

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Das Kern-Modell (Core Model)
Dieses Verzeichnis ist die "Single Source of Truth" für das destillierte, fachliche Wissen des Projekts. Nur was hier beschrieben ist, gilt als vereinbarte Wahrheit für die Implementierung.

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Analyse der Legacy-Spezifikation (OEPS Pflichtenheft 2021 V2.4)
* **Datum:** 2026-01-14

View File

@ -1,3 +1,8 @@
---
type: ADR
status: DRAFT
owner: Lead Architect
---
# Non-Functional Requirements (NFRs) - Phase 1
* **Status:** Draft

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Anekdote Meldestelle
Ich bin diesmal die Meldestelle für ein kleines Turnier, z.B. ein "CDN-C Neu" bzw. "CSN-C Neu" am "Musterhof".

View File

@ -1,3 +1,8 @@
---
type: ADR
status: DRAFT
owner: Lead Architect
---
# Use Cases Draft - Phase 1 (Core Domain)
* **Status:** Draft

View File

@ -1,3 +1,8 @@
---
type: ADR
status: DRAFT
owner: Lead Architect
---
# User Stories Draft - Phase 1 (Core Domain)
* **Status:** Draft

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Lead Architect (System & Build)
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Senior Backend Developer (Spring Boot & DDD)
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Infrastructure & DevOps Engineer
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Domain/Product Expert (optional, Diskussion/Sparring)
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: KMP Frontend Expert
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Gemini (parallel/extern)
## Zweck

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: Junie (IDE)
## Zweck

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Playbook: QA & Testing Specialist
## Beschreibung

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Lead Architect
---
# Agent Operating Model (AOM)
Dieses Verzeichnis definiert, **wie** KI-Unterstützung im Projekt eingesetzt wird:

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Backend Developer
---
# Backend Dokumentation
Dieses Verzeichnis enthält die spezifische Dokumentation für alle Backend-Komponenten, einschließlich der Microservices und der Infrastruktur-Module wie dem API-Gateway.

View File

@ -1,3 +1,8 @@
---
type: Report
status: ARCHIVED
owner: Frontend Expert
---
# 🧹 Troubleshooting Log: Frontend Docker Build & Runtime Config
**Datum:** 02.02.2026

View File

@ -1,3 +1,8 @@
---
type: Report
status: ARCHIVED
owner: Frontend Expert
---
# 🧹 Troubleshooting Log: Gradle 9.x & KMP Docker Build (Part 2)
**Datum:** 02.02.2026

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: Frontend Expert
---
# Offline-First-Architektur
Dieses Dokument beschreibt die **Zielarchitektur** für die Offline-First-Strategie im KMP-Frontend.

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: Frontend Expert
---
# Web-Setup (Webpack & Worker)
Dieses Dokument beschreibt die spezifische Konfiguration für das Web-Target (JS/Wasm) des KMP-Frontends.

View File

@ -1,4 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Heimnetzwerk
```mermaid

View File

@ -1,5 +1,7 @@
---
Konfigurations-Matrix
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Konfigurations-Matrix
@ -15,15 +17,17 @@ Konfigurations-Matrix
| **POSTGRES_DB** | `meldestelle` | `meldestelle` | Name der primären Datenbank-Instanz. |
| **POSTGRES_PORT** | `5432:5432` | `5432:5432` | Mapping vom Host zum Container. |
| **PROJECT_NAME** | `meldestelle` | `meldestelle` | Präfix für Container-Namen auf dem Host. |
| **KC_HOSTNAME** | `localhost` | `auth.mo-code.at` | Erreichbarkeit von Keycloak (wichtig für Tokens). |
| **KC_HOSTNAME** | `localhost` | `<SERVER_IP_ODER_DOMAIN>` | Erreichbarkeit von Keycloak (wichtig für Tokens). Auf dem Server nie `localhost`! |
| **KC_DB_URL** | `jdbc:postgresql://postgres:5432/pg-meldestelle-db` | `jdbc:postgresql://postgres:5432/meldestelle` | JDBC-String (muss zur POSTGRES_DB passen). |
| **VALKEY_MAXMEMORY** | `256mb` | `4gb` bis `8gb` | Zora hat 64 GB RAM; hier können wir großzügig cachen. |
| **VALKEY_POLICY** | `allkeys-lru` | `allkeys-lru` | Wirft die am längsten nicht genutzten Schlüssel raus, wenn der Speicher voll ist. |
| **VALKEY_PASSWORD** | `leer` oder `dev` | `[STARKES_SECRET]` | SSoT-Geheimnis aus Gitea-Secrets. |
| **VALKEY_PORT** | `6379:6379` | `6379:6379` | Standard-Port-Mapping. |
| **KC_HEAP_MAX** | `1024m` | `4096m` | Mehr Power für Zoras 64 GB RAM. |
| **KC_COMMAND** | `start-dev --import-realm` | `start --optimized` | Nutzt das im Dockerfile vor-gebaute Image. |
| **KC_HOSTNAME** | `localhost` | `auth.mo-code.at` | Wichtig für gültige Tokens im Web-Frontend. |
| **KC_COMMAND** | `start-dev --import-realm` | `start --optimized --import-realm` | `start-dev` + pre-built Image = Konflikt! Server immer mit `--optimized`. |
| **KC_HOSTNAME_STRICT** | `false` | `false` | `false` = beliebige Hostnamen erlaubt (Pflicht für HTTP-only Betrieb). |
| **KC_HOSTNAME_STRICT_HTTPS** | `false` | `false` | `false` = kein HTTPS-Zwang. Bei TLS-Einrichtung auf `true` setzen. |
| **KC_MANAGEMENT_PORT** | `9000:9000` | `9000:9000` | Health/Metrics-Port (immer auf 0.0.0.0 gebunden, unabhängig von KC_HOSTNAME). |
| **KC_DB_PASSWORD** | `meldestelle` | `[GEHEIM]` | SSoT-Passwort aus den Gitea-Secrets. |
| **KEYCLOAK_IMAGE_TAG** | `26.4` | `26.4` | Versionierung. |
| **ZIPKIN_HEAP** | `256m` | `1024m` | Mehr Puffer für Tracing-Daten auf Zora. |

View File

@ -1,5 +1,7 @@
---
Pangolin vs. Cloudflare Tunnel
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
## 🛡️ Pangolin vs. Cloudflare Tunnel

View File

@ -1,6 +1,7 @@
---
owner: project-maintainers
status: active
type: Reference
owner: DevOps Engineer
status: ACTIVE
review_cycle: 180d
last_reviewed: 2025-10-31
summary: "Übersicht der wichtigsten lokalen URLs und Ports. Quelle: docker-compose.yaml + config/env"

View File

@ -1,3 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Zipkin Tracing
## Übersicht

View File

@ -1,8 +1,7 @@
---
Hier ist eine strategische Roadmap für den Ausbau des „Empires“ auf **Zora**. Da du aktuell im „Mos Territory“ bist, dient dieser Plan als Vorbereitung für deine nächste Session am Gerät.
:white_check_mark:
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
# Roadmap: Zora Infrastructure & Deployment (Februar 2026)

View File

@ -1,4 +1,8 @@
---
type: Reference
status: ACTIVE
owner: DevOps Engineer
---
## 🏗️ System-Architektur "Zora" (ARM64)
**Stand: 05. März 2026**

View File

@ -1,3 +1,8 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
---
# Runbook: Lokale Entwicklungsumgebung
Dieses Dokument beschreibt, wie die Docker-basierte lokale Entwicklungsumgebung für das Projekt "Meldestelle" verwendet wird.

View File

@ -1,8 +1,10 @@
---
type: Report
status: ACTIVE
owner: Frontend Expert
title: Frontend Cleanup & Architecture Status Report
date: 2026-02-01
author: Frontend Expert & Curator
status: Final
tags: [frontend, architecture, cleanup, kmp, compose]
---

View File

@ -1,8 +1,9 @@
---
type: Report
status: ACTIVE
owner: Curator
date: 2026-02-01
author: Curator
status: FINAL
---
# Report: Fix Sync Type Mismatch (String vs Long)

View File

@ -0,0 +1,37 @@
# Journal - 2026-03-06
## 📝 Zusammenfassung
Keycloak funktionierte lokal einwandfrei, aber auf dem Meldestellen-Host war das Admin-Dashboard (`:8180`) nicht erreichbar und der Login schlug fehl — obwohl der Health-Port (`:9000`) grün war. Root Cause: Das pre-built Registry-Image wurde mit `start-dev` gestartet (Konflikt) und `KC_HOSTNAME=localhost` war auf dem Server falsch.
## 🛠️ Änderungen
### 1. `dc-infra.yaml` — Keycloak-Service bereinigt
* **Command:** `start-dev --import-realm``start --optimized --import-realm` (nutzt das pre-built Image korrekt).
* **Neu:** `KC_HOSTNAME_STRICT=false` und `KC_HOSTNAME_STRICT_HTTPS=false` — erlaubt HTTP-Betrieb ohne TLS-Zwang.
* **Neu:** `KC_HTTP_MANAGEMENT_PORT=9000` — Management-Interface explizit konfiguriert.
* **Fix:** `KC_DEBUG_PORT``KC_MANAGEMENT_PORT` umbenannt (war falsch benannt).
* **Fix:** Image-Pfad von `grandmo``mocode-software` korrigiert.
* **Neu:** Healthcheck auf `http://localhost:9000/health/ready` ergänzt.
### 2. `.env` — Keycloak-Block erweitert
* `KC_HOSTNAME_STRICT=false`, `KC_HOSTNAME_STRICT_HTTPS=false`, `KC_MANAGEMENT_PORT=9000:9000` hinzugefügt.
* Erklärende Kommentare: LOKAL vs. SERVER für `KC_COMMAND` und `KC_HOSTNAME`.
### 3. `.env.example` — Als Server-Vorlage optimiert
* Default `KC_COMMAND=start --optimized --import-realm` (Server-Default).
* `<PLACEHOLDER>`-Werte für alle Secrets (`KC_ADMIN_PASSWORD`, `KC_DB_PASSWORD`) und `KC_HOSTNAME`.
* `SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI` mit `<SERVER_IP_ODER_DOMAIN>`-Platzhalter.
* Klare LOKAL/SERVER-Kommentare bei allen kritischen Variablen.
## 📚 Gelerntes
* **`kc.sh build` + `start-dev` = Konflikt:** Ein mit `kc.sh build` optimiertes Image muss mit `start --optimized` gestartet werden. `start-dev` ignoriert den Pre-Build und startet im Dev-Modus — das bricht das Registry-Image auf dem Server.
* **`KC_HOSTNAME` steuert den HTTP-Port, nicht den Management-Port:** Port `9000` (Health) ist immer auf `0.0.0.0` gebunden. Port `8080/8180` (HTTP) wird durch `KC_HOSTNAME` gesteuert — daher war Health grün, aber Admin-Dashboard nicht erreichbar.
* **`KC_HOSTNAME_STRICT=false` ist Pflicht für HTTP-only Server:** Ohne dieses Flag lehnt Keycloak alle Requests ab, deren Host-Header nicht exakt mit `KC_HOSTNAME` übereinstimmt.
## 🔜 Nächste Schritte
* Auf dem Meldestellen-Host die `.env` anpassen:
* `KC_HOSTNAME=<SERVER_IP>`
* `KC_COMMAND=start --optimized --import-realm`
* `SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI=http://<SERVER_IP>:8180/realms/meldestelle`
* Container neu starten und Admin-Dashboard + Login verifizieren.
* Langfristig: TLS/HTTPS einrichten, dann `KC_HOSTNAME_STRICT_HTTPS=true` setzen.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

View File

@ -33,7 +33,7 @@ org.gradle.parallel=true
org.gradle.caching=true
# Security and Reproducibility
org.gradle.dependency.verification=lenient
org.gradle.dependency.verification=strict
org.gradle.dependency.locking.enabled=true
# Development