196 lines
7.8 KiB
YAML
196 lines
7.8 KiB
YAML
# ===================================================================
|
|
# Docker Compose - Client Applications
|
|
# Meldestelle Project - Frontend Components
|
|
# ===================================================================
|
|
# Usage Scenarios:
|
|
#
|
|
# 1. STANDALONE CLIENT DEPLOYMENT (Fixed):
|
|
# docker-compose -f docker-compose.clients.yml up -d
|
|
# - Clients run independently without api-gateway dependency
|
|
# - Set GATEWAY_HOST environment variable to external API Gateway
|
|
# - Example: GATEWAY_HOST=localhost docker-compose -f docker-compose.clients.yml up -d
|
|
#
|
|
# 2. MULTI-FILE WITH INFRASTRUCTURE:
|
|
# docker-compose -f docker-compose.yml -f docker-compose.clients.yml up -d
|
|
# - Infrastructure services (api-gateway, postgres, etc.) start first
|
|
# - Clients connect to api-gateway in same network
|
|
#
|
|
# 3. COMPLETE SYSTEM:
|
|
# docker-compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d
|
|
# - Full stack: Infrastructure + Backend Services + Frontend Clients
|
|
# ===================================================================
|
|
|
|
services:
|
|
# ===================================================================
|
|
# Web Application (Kotlin/JS + Nginx)
|
|
# ===================================================================
|
|
web-app:
|
|
build:
|
|
context: .
|
|
dockerfile: dockerfiles/clients/web-app/Dockerfile
|
|
args:
|
|
- BUILD_DATE=${BUILD_DATE:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")}
|
|
- VERSION=${APP_VERSION:-1.0.0}
|
|
container_name: meldestelle-web-app
|
|
environment:
|
|
NODE_ENV: ${NODE_ENV:-production}
|
|
APP_TITLE: ${APP_NAME:-Meldestelle}
|
|
APP_VERSION: ${APP_VERSION:-1.0.0}
|
|
# Nginx Worker Processes (für Performance)
|
|
NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}
|
|
ports:
|
|
- "4000:4000"
|
|
networks:
|
|
- meldestelle-network
|
|
# depends_on removed for standalone client deployment
|
|
# When using multi-file setup, api-gateway dependency is handled externally
|
|
healthcheck:
|
|
test: [ "CMD", "curl", "--fail", "http://localhost:4000/health" ]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 60s
|
|
restart: unless-stopped
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.web-app.rule=Host(`localhost`) && PathPrefix(`/`)"
|
|
- "traefik.http.services.web-app.loadbalancer.server.port=4000"
|
|
|
|
# ===================================================================
|
|
# Desktop Application (Kotlin Desktop + VNC)
|
|
# ===================================================================
|
|
# desktop-app:
|
|
# build:
|
|
# context: .
|
|
# dockerfile: dockerfiles/clients/desktop-app/Dockerfile
|
|
# container_name: meldestelle-desktop-app
|
|
# environment:
|
|
# # API Configuration - fallback to external gateway if not in same compose network
|
|
# API_BASE_URL: http://${GATEWAY_HOST:-api-gateway}:${GATEWAY_PORT:-8081}
|
|
# # VNC Configuration
|
|
# DISPLAY: ":99"
|
|
# VNC_PORT: "5901"
|
|
# NOVNC_PORT: "6080"
|
|
# # App Information
|
|
# APP_TITLE: ${APP_NAME:-Meldestelle}
|
|
# APP_VERSION: ${APP_VERSION:-1.0.0}
|
|
# ports:
|
|
# - "6080:6080" # Web-based VNC (noVNC)
|
|
# - "5901:5901" # VNC direct access
|
|
# networks:
|
|
# - meldestelle-network
|
|
# # depends_on removed for standalone client deployment
|
|
# # When using multi-file setup, api-gateway dependency is handled externally
|
|
# healthcheck:
|
|
# test: [ "CMD", "/opt/health-check.sh" ]
|
|
# interval: 30s
|
|
# timeout: 10s
|
|
# retries: 3
|
|
# start_period: 60s
|
|
# restart: unless-stopped
|
|
# labels:
|
|
# - "traefik.enable=true"
|
|
# - "traefik.http.routers.desktop-app.rule=Host(`localhost`) && PathPrefix(`/desktop`)"
|
|
# - "traefik.http.services.desktop-app.loadbalancer.server.port=6080"
|
|
|
|
# ===================================================================
|
|
# Auth Server (Custom Keycloak Extension)
|
|
# ===================================================================
|
|
# auth-server:
|
|
# build:
|
|
# context: .
|
|
# dockerfile: dockerfiles/infrastructure/auth-server/Dockerfile
|
|
# args:
|
|
# # Global build arguments (from docker/build-args/global.env)
|
|
# GRADLE_VERSION: ${DOCKER_GRADLE_VERSION:-9.0.0}
|
|
# JAVA_VERSION: ${DOCKER_JAVA_VERSION:-21}
|
|
# BUILD_DATE: ${BUILD_DATE}
|
|
# VERSION: ${DOCKER_APP_VERSION:-1.0.0}
|
|
# # Infrastructure-specific arguments (from docker/build-args/infrastructure.env)
|
|
# SPRING_PROFILES_ACTIVE: ${DOCKER_SPRING_PROFILES_DEFAULT:-default}
|
|
# container_name: meldestelle-auth-server
|
|
# environment:
|
|
# SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-dev}
|
|
# SERVER_PORT: ${AUTH_SERVICE_PORT:-8087}
|
|
# KEYCLOAK_SERVER_URL: http://keycloak:8080
|
|
# KEYCLOAK_REALM: meldestelle
|
|
# KEYCLOAK_CLIENT_ID: meldestelle-auth-service
|
|
# KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET:-auth-service-secret}
|
|
# DB_HOST: postgres
|
|
# DB_PORT: 5432
|
|
# DB_NAME: ${POSTGRES_DB:-meldestelle}
|
|
# DB_USER: ${POSTGRES_USER:-meldestelle}
|
|
# DB_PASSWORD: ${POSTGRES_PASSWORD:-meldestelle}
|
|
# JWT_SECRET: ${JWT_SECRET:-meldestelle-jwt-secret-key-for-development-change-in-production}
|
|
# JWT_ISSUER: ${JWT_ISSUER:-meldestelle-api}
|
|
# JWT_AUDIENCE: ${JWT_AUDIENCE:-meldestelle-clients}
|
|
# ports:
|
|
# - "${AUTH_SERVICE_PORT:-8087}:${AUTH_SERVICE_PORT:-8087}"
|
|
# networks:
|
|
# - meldestelle-network
|
|
# healthcheck:
|
|
# test: [ "CMD", "curl", "--fail", "http://localhost:${AUTH_SERVICE_PORT:-8087}/actuator/health" ]
|
|
# interval: 30s
|
|
# timeout: 10s
|
|
# retries: 3
|
|
# start_period: 60s
|
|
# restart: unless-stopped
|
|
|
|
# ===================================================================
|
|
# Monitoring Server (Custom Grafana Extensions)
|
|
# ===================================================================
|
|
# monitoring-server:
|
|
# build:
|
|
# context: .
|
|
# dockerfile: dockerfiles/infrastructure/monitoring-server/Dockerfile
|
|
# args:
|
|
# # Global build arguments (from docker/build-args/global.env)
|
|
# GRADLE_VERSION: ${DOCKER_GRADLE_VERSION:-9.0.0}
|
|
# JAVA_VERSION: ${DOCKER_JAVA_VERSION:-21}
|
|
# BUILD_DATE: ${BUILD_DATE}
|
|
# VERSION: ${DOCKER_APP_VERSION:-1.0.0}
|
|
# # Infrastructure-specific arguments (from docker/build-args/infrastructure.env)
|
|
# SPRING_PROFILES_ACTIVE: ${DOCKER_SPRING_PROFILES_DEFAULT:-default}
|
|
# container_name: meldestelle-monitoring-server
|
|
# environment:
|
|
# SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-dev}
|
|
# SERVER_PORT: 8088
|
|
# GRAFANA_URL: http://grafana:3000
|
|
# PROMETHEUS_URL: http://prometheus:9090
|
|
# GRAFANA_ADMIN_USER: ${GF_SECURITY_ADMIN_USER:-admin}
|
|
# GRAFANA_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD:-admin}
|
|
# METRICS_AUTH_USERNAME: ${METRICS_AUTH_USERNAME:-admin}
|
|
# METRICS_AUTH_PASSWORD: ${METRICS_AUTH_PASSWORD:-metrics}
|
|
# ports:
|
|
# - "8088:8088"
|
|
# networks:
|
|
# - meldestelle-network
|
|
# healthcheck:
|
|
# test: ["CMD", "curl", "--fail", "http://localhost:8088/actuator/health"]
|
|
# interval: 30s
|
|
# timeout: 10s
|
|
# retries: 3
|
|
# start_period: 60s
|
|
# restart: unless-stopped
|
|
# volumes:
|
|
# - monitoring-data:/app/data
|
|
# - ./docker/monitoring:/app/config:ro
|
|
|
|
# ===================================================================
|
|
# Volumes für Client-spezifische Daten
|
|
# ===================================================================
|
|
volumes:
|
|
monitoring-data:
|
|
driver: local
|
|
desktop-app-gradle-cache:
|
|
driver: local
|
|
web-app-gradle-cache:
|
|
driver: local
|
|
|
|
# ===================================================================
|
|
# Networks (shared network from main compose file)
|
|
# ===================================================================
|
|
networks:
|
|
meldestelle-network:
|
|
driver: bridge
|