meldestelle/docker-compose.yml
2025-07-21 12:08:20 +02:00

71 lines
2.3 KiB
YAML

services:
server:
build:
context: . # Baut mit Dockerfile im Root
image: meldestelle/server:latest
container_name: meldestelle-server
restart: unless-stopped
ports:
- "8080:8081"
environment:
- DB_USER=${POSTGRES_USER}
- DB_PASSWORD=${POSTGRES_PASSWORD}
- DB_NAME=${POSTGRES_DB}
- DB_HOST=db
- DB_PORT=5432
depends_on:
db:
condition: service_healthy
networks:
- meldestelle-net
# PostgreSQL Datenbank (Service-Name 'db')
db:
image: postgres:16-alpine # Spezifische Version
container_name: meldestelle-db
restart: unless-stopped
environment:
# Liest Werte aus .env
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
# PGDATA nicht nötig, Standard verwenden
volumes:
# Benanntes Volume für Daten auf Standardpfad
- postgres_data:/var/lib/postgresql/data
networks:
- meldestelle-net # <--- Muss zum Netzwerk-Namen passen
healthcheck: # Wichtig für depends_on
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ] # Doppelte $$ beachten!
interval: 10s
timeout: 5s
retries: 5
ports: # Nur bei Bedarf freigeben, z.B. für lokalen Zugriff
- "127.0.0.1:54321:5432" # Host-Port 54321 → Container-Port 5432
# PgAdmin Service
pgadmin:
image: dpage/pgadmin4:latest # Oder spezifische Version
container_name: meldestelle-pgadmin
restart: unless-stopped
environment:
# Werte aus .env lesen (oder Defaults nutzen)
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@example.com}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin_password_change_me} # UNBEDINGT IN .env SETZEN!
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin_data:/var/lib/pgadmin # Benanntes Volume
ports:
# Port 5050 auf dem Host (nur localhost) → Port 80 im Container
- "${PGADMIN_PORT:-127.0.0.1:5050}:80"
networks:
- meldestelle-net # <--- Muss zum Netzwerk-Namen passen
depends_on: # PgAdmin braucht die DB
- db
networks:
meldestelle-net:
driver: bridge
volumes:
postgres_data: # <--- Konsistenter Name
pgadmin_data: # <--- Konsistenter Name