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:
parent
6cb1f2d5ba
commit
09b0b1a462
12
.env
12
.env
|
|
@ -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)
|
||||
|
|
|
|||
43
.env.example
43
.env.example
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Frontend Architecture & Modularization Strategy
|
||||
|
||||
**Status:** DRAFT
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Architektur: Das Platform-Modul
|
||||
|
||||
## Überblick
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Guide
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Enable Gitea Actions Cache to Accelerate CI/CD
|
||||
|
||||
[Gitea](/)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Guide
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Technisches Referenzhandbuch: MS-R1 "Das Biest"
|
||||
|
||||
## 1. System-Übersicht & Architektur
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
---
|
||||
Betriebsanleitung Minisforum MS-R1
|
||||
type: Reference
|
||||
status: ARCHIVED
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
|
||||
# MINISFORUM MS-R1
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# SSoT Konfigurations-Masterplan für Zora (ARM64)
|
||||
|
||||
## 1. System-Umgebung (Infrastruktur)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Guide
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Setup Guide: Host OS (Minisforum MS-R1)
|
||||
|
||||
**Status:** DEPRECATED / HISTORIC
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Guide
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Setup Guide: Infrastructure Services (Minisforum MS-R1)
|
||||
|
||||
**Status:** DEPRECATED / HISTORIC
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Spezifikation
|
||||
|
||||
| CPU | CP8180, 12 Cores/12 Threads, 2.6Ghz |
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Dokumentation: Zentrales Mail-Relay (SSoT) auf Zora
|
||||
|
||||
## 1. Identität & Rollenverteilung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Roadmap: Finalisierung Gitea-Infrastruktur (MS-R1)
|
||||
|
||||
## Phase 1: Konnektivität & Erreichbarkeit 🌐
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
---
|
||||
Datenblatt USV
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Eaton 3S
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: DRAFT
|
||||
owner: Lead Architect
|
||||
---
|
||||
# PENDING DECISIONS: Backend Infrastructure & Architecture
|
||||
|
||||
**Status:** RESOLVED
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0000: Vorlage für Architekturentscheidungsaufzeichnungen
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0001: Modulare Architektur
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0002: Domain-Driven Design
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0003: Microservices-Architektur
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0004: Ereignisgesteuerte Kommunikation
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0005: Polyglotte Persistenz
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0006: Authentifizierung und Autorisierung mit Keycloak
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0007: API-Gateway-Muster
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0008: Multiplatform-Client-Anwendungen
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0009: Final KMP Architecture
|
||||
|
||||
Status: Accepted
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR 001: Backend Infrastructure & Architecture Decisions
|
||||
|
||||
**Status:** ACCEPTED
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0010: SQLDelight für Cross-Platform-Persistenz
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0011: Koin für Dependency Injection
|
||||
|
||||
## Status
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# ADR-0012: Strukturierung der Domänen-Dokumentation
|
||||
|
||||
* **Status:** Accepted
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Analyse der Legacy-Spezifikation (OEPS Pflichtenheft 2021 V2.4)
|
||||
|
||||
* **Datum:** 2026-01-14
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: DRAFT
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Non-Functional Requirements (NFRs) - Phase 1
|
||||
|
||||
* **Status:** Draft
|
||||
|
|
|
|||
|
|
@ -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".
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: DRAFT
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Use Cases Draft - Phase 1 (Core Domain)
|
||||
|
||||
* **Status:** Draft
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: ADR
|
||||
status: DRAFT
|
||||
owner: Lead Architect
|
||||
---
|
||||
# User Stories Draft - Phase 1 (Core Domain)
|
||||
|
||||
* **Status:** Draft
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Lead Architect (System & Build)
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Senior Backend Developer (Spring Boot & DDD)
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Infrastructure & DevOps Engineer
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Domain/Product Expert (optional, Diskussion/Sparring)
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: KMP Frontend Expert
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Gemini (parallel/extern)
|
||||
|
||||
## Zweck
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: Junie (IDE)
|
||||
|
||||
## Zweck
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
---
|
||||
# Playbook: QA & Testing Specialist
|
||||
|
||||
## Beschreibung
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Report
|
||||
status: ARCHIVED
|
||||
owner: Frontend Expert
|
||||
---
|
||||
# 🧹 Troubleshooting Log: Frontend Docker Build & Runtime Config
|
||||
|
||||
**Datum:** 02.02.2026
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
|
||||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Heimnetzwerk
|
||||
|
||||
```mermaid
|
||||
|
|
|
|||
|
|
@ -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. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
---
|
||||
Pangolin vs. Cloudflare Tunnel
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
|
||||
## 🛡️ Pangolin vs. Cloudflare Tunnel
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
# Zipkin Tracing
|
||||
|
||||
## Übersicht
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
|
||||
Hier ist eine strategische Roadmap für den Ausbau des „Empires“ auf **Zora**. Da du aktuell im „Mo’s 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)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
|
||||
---
|
||||
type: Reference
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
---
|
||||
## 🏗️ System-Architektur "Zora" (ARM64)
|
||||
|
||||
**Stand: 05. März 2026**
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
37
docs/99_Journal/2026-03-06_Session_Log_Keycloak_Fix.md
Normal file
37
docs/99_Journal/2026-03-06_Session_Log_Keycloak_Fix.md
Normal 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 |
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user