372 lines
10 KiB
Plaintext
372 lines
10 KiB
Plaintext
# docker compose config output
|
|
name: meldestelle
|
|
services:
|
|
api-gateway:
|
|
build:
|
|
context: /home/stefan-mo/WsMeldestelle/Meldestelle
|
|
dockerfile: dockerfiles/infrastructure/gateway/Dockerfile
|
|
args:
|
|
BUILD_DATE: unknown
|
|
GRADLE_VERSION: 9.0.0
|
|
JAVA_VERSION: "21"
|
|
SPRING_PROFILES_ACTIVE: default
|
|
VERSION: 1.0.0
|
|
container_name: meldestelle-api-gateway
|
|
depends_on:
|
|
consul:
|
|
condition: service_healthy
|
|
required: true
|
|
keycloak:
|
|
condition: service_healthy
|
|
required: true
|
|
postgres:
|
|
condition: service_healthy
|
|
required: true
|
|
redis:
|
|
condition: service_healthy
|
|
required: true
|
|
environment:
|
|
CONSUL_ENABLED: "true"
|
|
CONSUL_HOST: consul
|
|
CONSUL_PORT: "8500"
|
|
GATEWAY_PORT: "8081"
|
|
GATEWAY_SECURITY_KEYCLOAK_ENABLED: "false"
|
|
KEYCLOAK_CLIENT_ID: api-gateway
|
|
KEYCLOAK_ISSUER_URI: http://keycloak:8080/realms/meldestelle
|
|
KEYCLOAK_JWK_SET_URI: http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs
|
|
KEYCLOAK_REALM: meldestelle
|
|
KEYCLOAK_SERVER_URL: http://keycloak:8080
|
|
SPRING_PROFILES_ACTIVE: dev,keycloak
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- curl
|
|
- --fail
|
|
- http://localhost:8081/actuator/health
|
|
timeout: 5s
|
|
interval: 15s
|
|
retries: 3
|
|
start_period: 30s
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 8081
|
|
published: "8081"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: volume
|
|
source: api-gateway-gradle-cache
|
|
target: /home/gradle/.gradle
|
|
volume: {}
|
|
consul:
|
|
command:
|
|
- agent
|
|
- -server
|
|
- -ui
|
|
- -node=server-1
|
|
- -bootstrap-expect=1
|
|
- -client=0.0.0.0
|
|
container_name: meldestelle-consul
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- curl
|
|
- -f
|
|
- http://localhost:8500/v1/status/leader
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: hashicorp/consul:1.15
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 8500
|
|
published: "8500"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
grafana:
|
|
container_name: meldestelle-grafana
|
|
depends_on:
|
|
prometheus:
|
|
condition: service_started
|
|
required: true
|
|
environment:
|
|
GF_INSTALL_PLUGINS: grafana-piechart-panel
|
|
GF_SECURITY_ADMIN_PASSWORD: admin
|
|
GF_SECURITY_ADMIN_USER: admin
|
|
GF_USERS_ALLOW_SIGN_UP: "false"
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- curl
|
|
- --fail
|
|
- http://localhost:3000/api/health
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: grafana/grafana:11.3.0
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 3000
|
|
published: "3000"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: volume
|
|
source: grafana-data
|
|
target: /var/lib/grafana
|
|
volume: {}
|
|
- type: bind
|
|
source: /home/stefan-mo/WsMeldestelle/Meldestelle/docker/monitoring/grafana
|
|
target: /etc/grafana/provisioning
|
|
read_only: true
|
|
bind:
|
|
create_host_path: true
|
|
kafka:
|
|
container_name: meldestelle-kafka
|
|
depends_on:
|
|
zookeeper:
|
|
condition: service_healthy
|
|
required: true
|
|
environment:
|
|
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
|
|
KAFKA_BROKER_ID: "1"
|
|
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
|
|
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
|
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
|
|
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- kafka-broker-api-versions
|
|
- --bootstrap-server
|
|
- localhost:9092
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: confluentinc/cp-kafka:7.4.0
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 9092
|
|
published: "9092"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
keycloak:
|
|
command:
|
|
- start-dev
|
|
- --import-realm
|
|
container_name: meldestelle-keycloak
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
required: true
|
|
environment:
|
|
JAVA_OPTS_APPEND: -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+DisableExplicitGC -Djava.net.preferIPv4Stack=true -Duser.timezone=Europe/Vienna
|
|
KC_CACHE: ispn
|
|
KC_DB: postgres
|
|
KC_DB_PASSWORD: meldestelle
|
|
KC_DB_POOL_INITIAL_SIZE: "5"
|
|
KC_DB_POOL_MAX_SIZE: "20"
|
|
KC_DB_POOL_MIN_SIZE: "5"
|
|
KC_DB_SCHEMA: keycloak
|
|
KC_DB_URL: jdbc:postgresql://postgres:5432/meldestelle
|
|
KC_DB_USERNAME: meldestelle
|
|
KC_HEALTH_ENABLED: "true"
|
|
KC_HOSTNAME_STRICT: "false"
|
|
KC_HTTP_ENABLED: "true"
|
|
KC_HTTP_PORT: "8080"
|
|
KC_LOG_CONSOLE_COLOR: "false"
|
|
KC_LOG_CONSOLE_FORMAT: plain
|
|
KC_LOG_LEVEL: info
|
|
KC_METRICS_ENABLED: "true"
|
|
KC_PROXY_HEADERS: xforwarded
|
|
KEYCLOAK_ADMIN: admin
|
|
KEYCLOAK_ADMIN_PASSWORD: admin
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- 'if command -v curl >/dev/null 2>&1; then curl -fsS http://localhost:8080/health/ready | grep -q "\"status\":\"UP\""; elif command -v wget >/dev/null 2>&1; then wget -q -O - http://localhost:8080/health/ready | grep -q "\"status\":\"UP\""; else echo "Healthcheck: curl/wget not found, using bash /dev/tcp fallback" >&2; timeout 25 bash -lc "exec 3<>/dev/tcp/127.0.0.1/8080 && printf \"GET /health/ready HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n\" >&3 && head -n 1 <&3 | grep -q \"200 OK\""; fi'
|
|
timeout: 30s
|
|
interval: 15s
|
|
retries: 10
|
|
start_period: 3m0s
|
|
image: quay.io/keycloak/keycloak:26.4.0
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 8080
|
|
published: "8180"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: bind
|
|
source: /home/stefan-mo/WsMeldestelle/Meldestelle/docker/services/keycloak
|
|
target: /opt/keycloak/data/import
|
|
bind:
|
|
create_host_path: true
|
|
- type: volume
|
|
source: keycloak-data
|
|
target: /opt/keycloak/data
|
|
volume: {}
|
|
postgres:
|
|
container_name: meldestelle-postgres
|
|
environment:
|
|
POSTGRES_DB: meldestelle
|
|
POSTGRES_PASSWORD: meldestelle
|
|
POSTGRES_USER: meldestelle
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- pg_isready -U meldestelle -d meldestelle
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: postgres:16-alpine
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 5432
|
|
published: "5432"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: volume
|
|
source: postgres-data
|
|
target: /var/lib/postgresql/data
|
|
volume: {}
|
|
- type: bind
|
|
source: /home/stefan-mo/WsMeldestelle/Meldestelle/docker/services/postgres
|
|
target: /docker-entrypoint-initdb.d
|
|
bind:
|
|
create_host_path: true
|
|
prometheus:
|
|
command:
|
|
- --config.file=/etc/prometheus/prometheus.yml
|
|
- --storage.tsdb.path=/prometheus
|
|
- --web.console.libraries=/etc/prometheus/console_libraries
|
|
- --web.console.templates=/etc/prometheus/consoles
|
|
- --storage.tsdb.retention.time=200h
|
|
- --web.enable-lifecycle
|
|
container_name: meldestelle-prometheus
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- wget
|
|
- --no-verbose
|
|
- --tries=1
|
|
- --spider
|
|
- http://localhost:9090/-/healthy
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: prom/prometheus:v2.54.1
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 9090
|
|
published: "9090"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: volume
|
|
source: prometheus-data
|
|
target: /prometheus
|
|
volume: {}
|
|
- type: bind
|
|
source: /home/stefan-mo/WsMeldestelle/Meldestelle/docker/monitoring/prometheus
|
|
target: /etc/prometheus
|
|
read_only: true
|
|
bind:
|
|
create_host_path: true
|
|
redis:
|
|
command:
|
|
- redis-server
|
|
- --appendonly
|
|
- "yes"
|
|
container_name: meldestelle-redis
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- redis-cli
|
|
- ping
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: redis:7-alpine
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 6379
|
|
published: "6379"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- type: volume
|
|
source: redis-data
|
|
target: /data
|
|
volume: {}
|
|
zookeeper:
|
|
container_name: meldestelle-zookeeper
|
|
environment:
|
|
ZOOKEEPER_CLIENT_PORT: "2181"
|
|
ZOOKEEPER_TICK_TIME: "2000"
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- bash
|
|
- -c
|
|
- echo 'ruok' | nc localhost 2181
|
|
timeout: 5s
|
|
interval: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
image: confluentinc/cp-zookeeper:7.4.0
|
|
networks:
|
|
meldestelle-network: null
|
|
ports:
|
|
- mode: ingress
|
|
target: 2181
|
|
published: "2181"
|
|
protocol: tcp
|
|
restart: unless-stopped
|
|
networks:
|
|
meldestelle-network:
|
|
name: meldestelle_meldestelle-network
|
|
driver: bridge
|
|
volumes:
|
|
api-gateway-gradle-cache:
|
|
name: meldestelle_api-gateway-gradle-cache
|
|
driver: local
|
|
grafana-data:
|
|
name: meldestelle_grafana-data
|
|
driver: local
|
|
keycloak-data:
|
|
name: meldestelle_keycloak-data
|
|
driver: local
|
|
postgres-data:
|
|
name: meldestelle_postgres-data
|
|
driver: local
|
|
prometheus-data:
|
|
name: meldestelle_prometheus-data
|
|
driver: local
|
|
redis-data:
|
|
name: meldestelle_redis-data
|
|
driver: local
|