services: # 1️⃣ PostgreSQL-Server postgres: image: postgres:16-alpine restart: unless-stopped dns: - 1.1.1.1 - 8.8.8.8 environment: - POSTGRES_USER=${POSTGRES_USER:-vaultwarden} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-vaultwarden} - POSTGRES_DB=${POSTGRES_DB:-vaultwarden} volumes: - "${PG_DATA:-./pgdata}:/var/lib/postgresql/data" healthcheck: test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER:-vaultwarden}"] interval: 10s timeout: 5s retries: 5 # 2️⃣ Vaultwarden-Service vaultwarden: image: vaultwarden/server:latest restart: unless-stopped depends_on: postgres: condition: service_healthy environment: - DOMAIN=https://${DOMAIN:-localhost} - WEBSOCKET_ENABLED=true - SIGNUPS_ALLOWED=${SIGNUPS_ALLOWED:-false} - ADMIN_TOKEN=${ADMIN_TOKEN} # TLS KONFIGURATION - ROCKET_TLS={certs="/data/ssl/cert.pem",key="/data/ssl/key.pem"} - DATABASE_URL=postgresql://${POSTGRES_USER:-vaultwarden}:${POSTGRES_PASSWORD:-vaultwarden}@postgres:5432/${POSTGRES_DB:-vaultwarden} volumes: - "${VW_DATA:-./vw-data}:/data" # Wir mounten den lokalen certs-Ordner direkt in den Container - "${CERT_DATA:-./certs}:/certs:ro" ports: - "${HOST_HTTP:-4430}:80" healthcheck: test: ["CMD", "curl", "-f", "-k", "https://localhost:80/alive"] interval: 30s timeout: 10s retries: 3