version: '3.8' services: payment-api: build: . ports: - "8080:8080" environment: - DATABASE_HOST=postgres - DATABASE_PORT=5432 - DATABASE_NAME=payments - DATABASE_USER=postgres - DATABASE_PASSWORD=postgres - REDIS_ADDR=redis:6379 depends_on: postgres: condition: service_healthy redis: condition: service_started volumes: - ./config:/app/config - ./web:/app/web networks: - payment-network postgres: image: postgres:15 environment: POSTGRES_DB: payments POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - postgres_data:/var/lib/postgresql/data - ./migrations/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 networks: - payment-network redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - redis_data:/data ports: - "6379:6379" networks: - payment-network # Optional: PostgreSQL admin interface pgadmin: image: dpage/pgadmin4:latest environment: PGADMIN_DEFAULT_EMAIL: admin@example.com PGADMIN_DEFAULT_PASSWORD: admin PGADMIN_CONFIG_SERVER_MODE: 'False' ports: - "5050:80" depends_on: - postgres networks: - payment-network volumes: postgres_data: redis_data: networks: payment-network: driver: bridge