services: server: build: context: . # Baut mit Dockerfile im Root image: meldestelle/server:latest container_name: meldestelle-server restart: unless-stopped ports: - "8080:8080" 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 # Optional: 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:-DeinSicheresPgAdminPasswort!} # 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