services: # PostgreSQL Database (separate container) postgres: image: postgres:16-alpine container_name: ldpv2-postgres environment: POSTGRES_DB: ldpv2 POSTGRES_USER: ldpv2_user POSTGRES_PASSWORD: ldpv2_password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data networks: - ldpv2-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ldpv2_user -d ldpv2"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped # Unified Application Container (Frontend + Backend + Nginx) app: build: context: . dockerfile: Dockerfile container_name: ldpv2-app depends_on: postgres: condition: service_healthy environment: # Database configuration DB_HOST: postgres DB_USERNAME: ldpv2_user DB_PASSWORD: ldpv2_password # JWT configuration JWT_SECRET: ${JWT_SECRET:-your-secret-key-change-in-production-minimum-512-bits-for-hs512-algorithm} # Java options JAVA_OPTS: "-Xms256m -Xmx512m" ports: - "80:80" networks: - ldpv2-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80/"] interval: 30s timeout: 10s retries: 3 start_period: 90s restart: unless-stopped # Optional: Mount logs directory for easier debugging volumes: - app_logs:/var/log/supervisor volumes: postgres_data: driver: local app_logs: driver: local networks: ldpv2-network: driver: bridge