services: postgres: image: postgres:16-alpine container_name: plc-mirror-db restart: unless-stopped ports: - "5432:5432" environment: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U plc_user -d plc_mirror"] interval: 10s timeout: 5s retries: 5 command: [ "postgres", "-c", "log_statement=all", "-c", "log_duration=on", "-c", "log_min_duration_statement=0", "-c", "max_connections=200", "-c", "shared_preload_libraries=pg_stat_statements" ] networks: - plc-network api: build: . container_name: plc-api restart: unless-stopped command: ["./api"] ports: - "3000:3000" volumes: - ./plc.toml:/app/plc.toml:ro depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/_health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - plc-network mirror: build: . container_name: plc-mirror restart: unless-stopped command: ["./mirror"] volumes: - ./plc.toml:/app/plc.toml:ro depends_on: postgres: condition: service_healthy networks: - plc-network volumes: postgres_data: driver: local networks: plc-network: driver: bridge