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 ---
|
||||||
PROJECT_NAME=meldestelle
|
PROJECT_NAME=meldestelle
|
||||||
|
|
||||||
|
# --- BACKUP ---
|
||||||
|
BACKUP_DIR=/home/stefan/backups/meldestelle
|
||||||
|
BACKUP_RETENTION_DAYS=7
|
||||||
|
|
||||||
# Docker build versions (optional overrides)
|
# Docker build versions (optional overrides)
|
||||||
DOCKER_VERSION=1.0.0-SNAPSHOT
|
DOCKER_VERSION=1.0.0-SNAPSHOT
|
||||||
DOCKER_REGISTRY=git.mo-code.at/mocode-software
|
DOCKER_REGISTRY=git.mo-code.at/mocode-software
|
||||||
|
|
@ -48,15 +52,21 @@ SPRING_DATA_VALKEY_PASSWORD=valkey-password
|
||||||
KEYCLOAK_IMAGE_TAG=26.4
|
KEYCLOAK_IMAGE_TAG=26.4
|
||||||
KC_HEAP_MIN=512M
|
KC_HEAP_MIN=512M
|
||||||
KC_HEAP_MAX=1024M
|
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_COMMAND=start-dev --import-realm
|
||||||
KC_ADMIN_USERNAME=kc-admin
|
KC_ADMIN_USERNAME=kc-admin
|
||||||
KC_ADMIN_PASSWORD=kc-password
|
KC_ADMIN_PASSWORD=kc-password
|
||||||
KC_DB=postgres
|
KC_DB=postgres
|
||||||
KC_DB_SCHEMA=keycloak
|
KC_DB_SCHEMA=keycloak
|
||||||
KC_DB_PASSWORD=meldestelle
|
KC_DB_PASSWORD=meldestelle
|
||||||
|
# Lokal: localhost | Server: echte IP oder Domain (z.B. 192.168.1.100 oder auth.meldestelle.at)
|
||||||
KC_HOSTNAME=localhost
|
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_PORT=8180:8080
|
||||||
KC_DEBUG_PORT=9000:9000
|
KC_MANAGEMENT_PORT=9000:9000
|
||||||
|
|
||||||
# --- KEYCLOAK TOKEN VALIDATION ---
|
# --- KEYCLOAK TOKEN VALIDATION ---
|
||||||
# Public Issuer URI (must match the token issuer from browser/postman)
|
# 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
|
# Meldestelle – Docker Compose Environment
|
||||||
# Single Source of Truth (SSoT)
|
# Single Source of Truth (SSoT)
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# WARNING: This file contains secrets (passwords).
|
# ANLEITUNG:
|
||||||
# Do NOT commit this file to version control if it contains production secrets.
|
# 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 ---
|
||||||
PROJECT_NAME=meldestelle
|
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 build versions (optional overrides)
|
||||||
DOCKER_VERSION=1.0.0-SNAPSHOT
|
DOCKER_VERSION=1.0.0-SNAPSHOT
|
||||||
DOCKER_BUILD_DATE=2026-02-02T15:00:00Z
|
DOCKER_BUILD_DATE=2026-02-02T15:00:00Z
|
||||||
|
|
@ -37,22 +46,32 @@ VALKEY_MAXMEMORY=256mb
|
||||||
|
|
||||||
# --- KEYCLOAK ---
|
# --- KEYCLOAK ---
|
||||||
KEYCLOAK_IMAGE_TAG=26.4
|
KEYCLOAK_IMAGE_TAG=26.4
|
||||||
KC_HEAP_MAX=1024m
|
KC_HEAP_MIN=512M
|
||||||
KC_COMMAND=start-dev --import-realm
|
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_USERNAME=kc-admin
|
||||||
KC_ADMIN_PASSWORD=kc-password
|
KC_ADMIN_PASSWORD=<SICHERES_PASSWORT>
|
||||||
KC_DB=postgres
|
KC_DB=postgres
|
||||||
KC_DB_SCHEMA=keycloak
|
KC_DB_SCHEMA=keycloak
|
||||||
KC_DB_PASSWORD=meldestelle
|
KC_DB_PASSWORD=<SICHERES_PASSWORT>
|
||||||
KC_HOSTNAME=localhost
|
# 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_PORT=8180:8080
|
||||||
KC_DEBUG_PORT=9000:9000
|
KC_MANAGEMENT_PORT=9000:9000
|
||||||
|
|
||||||
# --- KEYCLOAK TOKEN VALIDATION ---
|
# --- KEYCLOAK TOKEN VALIDATION ---
|
||||||
# Public Issuer URI (must match the token issuer from browser/postman)
|
# Public Issuer URI: muss mit dem Hostname übereinstimmen, den Browser/App sieht
|
||||||
KC_ISSUER_URI=http://localhost:8180/realms/meldestelle
|
# LOKAL: http://localhost:8180/realms/meldestelle
|
||||||
# Internal JWK Set URI (for service-to-service communication within Docker)
|
# SERVER: http://<SERVER_IP_ODER_DOMAIN>:8180/realms/meldestelle
|
||||||
KC_JWK_SET_URI=http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs
|
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 ---
|
||||||
CONSUL_IMAGE=hashicorp/consul:1.22.1
|
CONSUL_IMAGE=hashicorp/consul:1.22.1
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,25 @@
|
||||||
# Sichert Datenbanken und Konfigurationen
|
# Sichert Datenbanken und Konfigurationen
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
# Konfiguration
|
# .env laden (SSoT für alle Variablen)
|
||||||
BACKUP_DIR="/home/grandmo/backups/meldestelle"
|
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)
|
DATE=$(date +%Y-%m-%d_%H-%M-%S)
|
||||||
RETENTION_DAYS=7
|
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
|
||||||
PROJECT_NAME="meldestelle"
|
PROJECT_NAME="${PROJECT_NAME:-meldestelle}"
|
||||||
|
|
||||||
# Container Namen (müssen mit docker-compose übereinstimmen)
|
# Container Namen (müssen mit docker-compose übereinstimmen)
|
||||||
DB_CONTAINER="${PROJECT_NAME}-postgres"
|
DB_CONTAINER="${PROJECT_NAME}-postgres"
|
||||||
DB_USER="meldestelle" # Oder aus .env lesen
|
DB_USER="${POSTGRES_USER:-pg-user}"
|
||||||
|
|
||||||
# Verzeichnisse erstellen
|
# Verzeichnisse erstellen
|
||||||
mkdir -p "$BACKUP_DIR"
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
|
||||||
|
|
@ -118,11 +118,11 @@ services:
|
||||||
SPRING_DATASOURCE_USERNAME: "${POSTGRES_USER:-pg-user}"
|
SPRING_DATASOURCE_USERNAME: "${POSTGRES_USER:-pg-user}"
|
||||||
SPRING_DATASOURCE_PASSWORD: "${POSTGRES_PASSWORD:-pg-password}"
|
SPRING_DATASOURCE_PASSWORD: "${POSTGRES_PASSWORD:-pg-password}"
|
||||||
|
|
||||||
# --- REDIS ---
|
# --- VALKEY (formerly Redis) ---
|
||||||
SPRING_DATA_REDIS_HOST: "${REDIS_SERVER_HOSTNAME:-redis}"
|
SPRING_DATA_VALKEY_HOST: "${VALKEY_SERVER_HOSTNAME:-valkey}"
|
||||||
SPRING_DATA_REDIS_PORT: "${REDIS_SERVICE_PORT:-6379}"
|
SPRING_DATA_VALKEY_PORT: "${VALKEY_SERVER_PORT:-6379}"
|
||||||
SPRING_DATA_REDIS_PASSWORD: "${REDIS_PASSWORD:-redis-password}"
|
SPRING_DATA_VALKEY_PASSWORD: "${VALKEY_PASSWORD:-}"
|
||||||
SPRING_DATA_REDIS_CONNECT_TIMEOUT: "${REDIS_SERVER_CONNECT_TIMEOUT:-5s}"
|
SPRING_DATA_VALKEY_CONNECT_TIMEOUT: "${VALKEY_SERVER_CONNECT_TIMEOUT:-5s}"
|
||||||
|
|
||||||
# --- ZIPKIN ---
|
# --- ZIPKIN ---
|
||||||
MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: "${ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans}"
|
MANAGEMENT_ZIPKIN_TRACING_ENDPOINT: "${ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans}"
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ services:
|
||||||
dockerfile: config/docker/keycloak/Dockerfile
|
dockerfile: config/docker/keycloak/Dockerfile
|
||||||
args:
|
args:
|
||||||
KEYCLOAK_IMAGE_TAG: "${KEYCLOAK_IMAGE_TAG:-26.4}"
|
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"
|
container_name: "${PROJECT_NAME:-meldestelle}-keycloak"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
profiles: [ "infra", "all" ]
|
profiles: [ "infra", "all" ]
|
||||||
|
|
@ -89,21 +89,36 @@ services:
|
||||||
KC_DB_URL: "jdbc:postgresql://postgres:5432/${POSTGRES_DB:-pg-meldestelle-db}"
|
KC_DB_URL: "jdbc:postgresql://postgres:5432/${POSTGRES_DB:-pg-meldestelle-db}"
|
||||||
KC_DB_USERNAME: "${POSTGRES_USER:-pg-user}"
|
KC_DB_USERNAME: "${POSTGRES_USER:-pg-user}"
|
||||||
KC_DB_PASSWORD: "${POSTGRES_PASSWORD:-pg-password}"
|
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}"
|
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"
|
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_HEALTH_ENABLED: "true"
|
||||||
KC_METRICS_ENABLED: "true"
|
KC_METRICS_ENABLED: "true"
|
||||||
# Integration der Power-Flags
|
# Integration der Power-Flags
|
||||||
JAVA_OPTS_APPEND: "-Xms${KC_HEAP_MIN:-512M} -Xmx${KC_HEAP_MAX:-1024M} ${JVM_OPTS_ARM64}"
|
JAVA_OPTS_APPEND: "-Xms${KC_HEAP_MIN:-512M} -Xmx${KC_HEAP_MAX:-1024M} ${JVM_OPTS_ARM64}"
|
||||||
ports:
|
ports:
|
||||||
- "${KC_PORT:-8180:8080}"
|
- "${KC_PORT:-8180:8080}"
|
||||||
- "${KC_DEBUG_PORT:-9000:9000}"
|
- "${KC_MANAGEMENT_PORT:-9000:9000}"
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: "service_healthy"
|
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:
|
volumes:
|
||||||
- "./config/docker/keycloak:/opt/keycloak/data/import:Z"
|
- "./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:
|
networks:
|
||||||
meldestelle-network:
|
meldestelle-network:
|
||||||
aliases:
|
aliases:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Frontend Architecture & Modularization Strategy
|
# Frontend Architecture & Modularization Strategy
|
||||||
|
|
||||||
**Status:** DRAFT
|
**Status:** DRAFT
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Architektur: Das Platform-Modul
|
# Architektur: Das Platform-Modul
|
||||||
|
|
||||||
## Überblick
|
## Überblick
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Repository-Architektur (MP-22)
|
# 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.
|
**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
|
# 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.
|
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
|
# Enable Gitea Actions Cache to Accelerate CI/CD
|
||||||
|
|
||||||
[Gitea](/)
|
[Gitea](/)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Guide
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# 💻 Client-Setup: Arbeitsplatz an "Das Biest" anbinden
|
# 💻 Client-Setup: Arbeitsplatz an "Das Biest" anbinden
|
||||||
|
|
||||||
Diese Anleitung beschreibt die Einrichtung eines lokalen Rechners, um via SSH und Cloudflare-Tunnel auf die
|
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"
|
# Technisches Referenzhandbuch: MS-R1 "Das Biest"
|
||||||
|
|
||||||
## 1. System-Übersicht & Architektur
|
## 1. System-Übersicht & Architektur
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
Betriebsanleitung Minisforum MS-R1
|
type: Reference
|
||||||
|
status: ARCHIVED
|
||||||
|
owner: DevOps Engineer
|
||||||
---
|
---
|
||||||
|
|
||||||
# MINISFORUM MS-R1
|
# MINISFORUM MS-R1
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# SSoT Konfigurations-Masterplan für Zora (ARM64)
|
# SSoT Konfigurations-Masterplan für Zora (ARM64)
|
||||||
|
|
||||||
## 1. System-Umgebung (Infrastruktur)
|
## 1. System-Umgebung (Infrastruktur)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Guide
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# Setup Guide: Host OS (Minisforum MS-R1)
|
# Setup Guide: Host OS (Minisforum MS-R1)
|
||||||
|
|
||||||
**Status:** DEPRECATED / HISTORIC
|
**Status:** DEPRECATED / HISTORIC
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Guide
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# Setup Guide: Infrastructure Services (Minisforum MS-R1)
|
# Setup Guide: Infrastructure Services (Minisforum MS-R1)
|
||||||
|
|
||||||
**Status:** DEPRECATED / HISTORIC
|
**Status:** DEPRECATED / HISTORIC
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# Spezifikation
|
# Spezifikation
|
||||||
|
|
||||||
| CPU | CP8180, 12 Cores/12 Threads, 2.6Ghz |
|
| 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
|
# Dokumentation: Zentrales Mail-Relay (SSoT) auf Zora
|
||||||
|
|
||||||
## 1. Identität & Rollenverteilung
|
## 1. Identität & Rollenverteilung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Roadmap: Finalisierung Gitea-Infrastruktur (MS-R1)
|
# Roadmap: Finalisierung Gitea-Infrastruktur (MS-R1)
|
||||||
|
|
||||||
## Phase 1: Konnektivität & Erreichbarkeit 🌐
|
## 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:
|
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
|
# 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
|
# Eaton 3S
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: DRAFT
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# PENDING DECISIONS: Backend Infrastructure & Architecture
|
# PENDING DECISIONS: Backend Infrastructure & Architecture
|
||||||
|
|
||||||
**Status:** RESOLVED
|
**Status:** RESOLVED
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0000: Vorlage für Architekturentscheidungsaufzeichnungen
|
# ADR-0000: Vorlage für Architekturentscheidungsaufzeichnungen
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0001: Modulare Architektur
|
# ADR-0001: Modulare Architektur
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0002: Domain-Driven Design
|
# ADR-0002: Domain-Driven Design
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0003: Microservices-Architektur
|
# ADR-0003: Microservices-Architektur
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0004: Ereignisgesteuerte Kommunikation
|
# ADR-0004: Ereignisgesteuerte Kommunikation
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0005: Polyglotte Persistenz
|
# ADR-0005: Polyglotte Persistenz
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0006: Authentifizierung und Autorisierung mit Keycloak
|
# ADR-0006: Authentifizierung und Autorisierung mit Keycloak
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0007: API-Gateway-Muster
|
# ADR-0007: API-Gateway-Muster
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0008: Multiplatform-Client-Anwendungen
|
# ADR-0008: Multiplatform-Client-Anwendungen
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0009: Final KMP Architecture
|
# ADR-0009: Final KMP Architecture
|
||||||
|
|
||||||
Status: Accepted
|
Status: Accepted
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR 001: Backend Infrastructure & Architecture Decisions
|
# ADR 001: Backend Infrastructure & Architecture Decisions
|
||||||
|
|
||||||
**Status:** ACCEPTED
|
**Status:** ACCEPTED
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0010: SQLDelight für Cross-Platform-Persistenz
|
# ADR-0010: SQLDelight für Cross-Platform-Persistenz
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0011: Koin für Dependency Injection
|
# ADR-0011: Koin für Dependency Injection
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# ADR-0012: Strukturierung der Domänen-Dokumentation
|
# ADR-0012: Strukturierung der Domänen-Dokumentation
|
||||||
|
|
||||||
* **Status:** Accepted
|
* **Status:** Accepted
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
Architecture Decision Records (ADRs)
|
Architecture Decision Records (ADRs)
|
||||||
|
|
||||||
Dieses Verzeichnis enthält Architekturentscheidungen in kurzer, überprüfbarer Form.
|
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
|
# SQLDelight Integration in Compose Multiplatform
|
||||||
|
|
||||||
This guide shows how to integrate SQLDelight in a Compose Multiplatform project with Koin dependency injection.
|
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
|
# Architekturstrategien für Asynchrone Persistenz in Kotlin Multiplatform: Eine umfassende Analyse zur Integration von SQLDelight in Web-Umgebungen
|
||||||
|
|
||||||
## 1. Einleitung und Problemstellung
|
## 1. Einleitung und Problemstellung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Glossar der Domäne "Meldestelle"
|
# 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.
|
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
|
# 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.
|
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
|
# Entitäten des Kern-Modells
|
||||||
|
|
||||||
Dieses Verzeichnis enthält detaillierte Beschreibungen der zentralen fachlichen Entitäten des "Meldestelle"-Projekts.
|
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)
|
# 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.
|
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)
|
# Analyse der Legacy-Spezifikation (OEPS Pflichtenheft 2021 V2.4)
|
||||||
|
|
||||||
* **Datum:** 2026-01-14
|
* **Datum:** 2026-01-14
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: DRAFT
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Non-Functional Requirements (NFRs) - Phase 1
|
# Non-Functional Requirements (NFRs) - Phase 1
|
||||||
|
|
||||||
* **Status:** Draft
|
* **Status:** Draft
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Anekdote Meldestelle
|
# Anekdote Meldestelle
|
||||||
|
|
||||||
Ich bin diesmal die Meldestelle für ein kleines Turnier, z.B. ein "CDN-C Neu" bzw. "CSN-C Neu" am "Musterhof".
|
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)
|
# Use Cases Draft - Phase 1 (Core Domain)
|
||||||
|
|
||||||
* **Status:** Draft
|
* **Status:** Draft
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: ADR
|
||||||
|
status: DRAFT
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# User Stories Draft - Phase 1 (Core Domain)
|
# User Stories Draft - Phase 1 (Core Domain)
|
||||||
|
|
||||||
* **Status:** Draft
|
* **Status:** Draft
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Lead Architect (System & Build)
|
# Playbook: Lead Architect (System & Build)
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Senior Backend Developer (Spring Boot & DDD)
|
# Playbook: Senior Backend Developer (Spring Boot & DDD)
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Infrastructure & DevOps Engineer
|
# Playbook: Infrastructure & DevOps Engineer
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Domain/Product Expert (optional, Diskussion/Sparring)
|
# Playbook: Domain/Product Expert (optional, Diskussion/Sparring)
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: KMP Frontend Expert
|
# Playbook: KMP Frontend Expert
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Gemini (parallel/extern)
|
# Playbook: Gemini (parallel/extern)
|
||||||
|
|
||||||
## Zweck
|
## Zweck
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: Junie (IDE)
|
# Playbook: Junie (IDE)
|
||||||
|
|
||||||
## Zweck
|
## Zweck
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Playbook: QA & Testing Specialist
|
# Playbook: QA & Testing Specialist
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Lead Architect
|
||||||
|
---
|
||||||
# Agent Operating Model (AOM)
|
# Agent Operating Model (AOM)
|
||||||
|
|
||||||
Dieses Verzeichnis definiert, **wie** KI-Unterstützung im Projekt eingesetzt wird:
|
Dieses Verzeichnis definiert, **wie** KI-Unterstützung im Projekt eingesetzt wird:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Backend Developer
|
||||||
|
---
|
||||||
# Backend Dokumentation
|
# 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.
|
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
|
# 🧹 Troubleshooting Log: Frontend Docker Build & Runtime Config
|
||||||
|
|
||||||
**Datum:** 02.02.2026
|
**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)
|
# 🧹 Troubleshooting Log: Gradle 9.x & KMP Docker Build (Part 2)
|
||||||
|
|
||||||
**Datum:** 02.02.2026
|
**Datum:** 02.02.2026
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Frontend Expert
|
||||||
|
---
|
||||||
# Offline-First-Architektur
|
# Offline-First-Architektur
|
||||||
|
|
||||||
Dieses Dokument beschreibt die **Zielarchitektur** für die Offline-First-Strategie im KMP-Frontend.
|
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)
|
# Web-Setup (Webpack & Worker)
|
||||||
|
|
||||||
Dieses Dokument beschreibt die spezifische Konfiguration für das Web-Target (JS/Wasm) des KMP-Frontends.
|
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
|
# Heimnetzwerk
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
Konfigurations-Matrix
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
---
|
---
|
||||||
# Konfigurations-Matrix
|
# Konfigurations-Matrix
|
||||||
|
|
||||||
|
|
@ -15,15 +17,17 @@ Konfigurations-Matrix
|
||||||
| **POSTGRES_DB** | `meldestelle` | `meldestelle` | Name der primären Datenbank-Instanz. |
|
| **POSTGRES_DB** | `meldestelle` | `meldestelle` | Name der primären Datenbank-Instanz. |
|
||||||
| **POSTGRES_PORT** | `5432:5432` | `5432:5432` | Mapping vom Host zum Container. |
|
| **POSTGRES_PORT** | `5432:5432` | `5432:5432` | Mapping vom Host zum Container. |
|
||||||
| **PROJECT_NAME** | `meldestelle` | `meldestelle` | Präfix für Container-Namen auf dem Host. |
|
| **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). |
|
| **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_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_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_PASSWORD** | `leer` oder `dev` | `[STARKES_SECRET]` | SSoT-Geheimnis aus Gitea-Secrets. |
|
||||||
| **VALKEY_PORT** | `6379:6379` | `6379:6379` | Standard-Port-Mapping. |
|
| **VALKEY_PORT** | `6379:6379` | `6379:6379` | Standard-Port-Mapping. |
|
||||||
| **KC_HEAP_MAX** | `1024m` | `4096m` | Mehr Power für Zoras 64 GB RAM. |
|
| **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_COMMAND** | `start-dev --import-realm` | `start --optimized --import-realm` | `start-dev` + pre-built Image = Konflikt! Server immer mit `--optimized`. |
|
||||||
| **KC_HOSTNAME** | `localhost` | `auth.mo-code.at` | Wichtig für gültige Tokens im Web-Frontend. |
|
| **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. |
|
| **KC_DB_PASSWORD** | `meldestelle` | `[GEHEIM]` | SSoT-Passwort aus den Gitea-Secrets. |
|
||||||
| **KEYCLOAK_IMAGE_TAG** | `26.4` | `26.4` | Versionierung. |
|
| **KEYCLOAK_IMAGE_TAG** | `26.4` | `26.4` | Versionierung. |
|
||||||
| **ZIPKIN_HEAP** | `256m` | `1024m` | Mehr Puffer für Tracing-Daten auf Zora. |
|
| **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
|
## 🛡️ Pangolin vs. Cloudflare Tunnel
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
owner: project-maintainers
|
type: Reference
|
||||||
status: active
|
owner: DevOps Engineer
|
||||||
|
status: ACTIVE
|
||||||
review_cycle: 180d
|
review_cycle: 180d
|
||||||
last_reviewed: 2025-10-31
|
last_reviewed: 2025-10-31
|
||||||
summary: "Übersicht der wichtigsten lokalen URLs und Ports. Quelle: docker-compose.yaml + config/env"
|
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
|
# Zipkin Tracing
|
||||||
|
|
||||||
## Übersicht
|
## Übersicht
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
|
type: Reference
|
||||||
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.
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
:white_check_mark:
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Roadmap: Zora Infrastructure & Deployment (Februar 2026)
|
# Roadmap: Zora Infrastructure & Deployment (Februar 2026)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Reference
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
## 🏗️ System-Architektur "Zora" (ARM64)
|
## 🏗️ System-Architektur "Zora" (ARM64)
|
||||||
|
|
||||||
**Stand: 05. März 2026**
|
**Stand: 05. März 2026**
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
type: Guide
|
||||||
|
status: ACTIVE
|
||||||
|
owner: DevOps Engineer
|
||||||
|
---
|
||||||
# Runbook: Lokale Entwicklungsumgebung
|
# Runbook: Lokale Entwicklungsumgebung
|
||||||
|
|
||||||
Dieses Dokument beschreibt, wie die Docker-basierte lokale Entwicklungsumgebung für das Projekt "Meldestelle" verwendet wird.
|
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
|
title: Frontend Cleanup & Architecture Status Report
|
||||||
date: 2026-02-01
|
date: 2026-02-01
|
||||||
author: Frontend Expert & Curator
|
author: Frontend Expert & Curator
|
||||||
status: Final
|
|
||||||
tags: [frontend, architecture, cleanup, kmp, compose]
|
tags: [frontend, architecture, cleanup, kmp, compose]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
---
|
---
|
||||||
type: Report
|
type: Report
|
||||||
|
status: ACTIVE
|
||||||
|
owner: Curator
|
||||||
date: 2026-02-01
|
date: 2026-02-01
|
||||||
author: Curator
|
author: Curator
|
||||||
status: FINAL
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Report: Fix Sync Type Mismatch (String vs Long)
|
# 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
|
org.gradle.caching=true
|
||||||
|
|
||||||
# Security and Reproducibility
|
# Security and Reproducibility
|
||||||
org.gradle.dependency.verification=lenient
|
org.gradle.dependency.verification=strict
|
||||||
org.gradle.dependency.locking.enabled=true
|
org.gradle.dependency.locking.enabled=true
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user