version: '3.8' services: db: image: postgres:15 environment: POSTGRES_DB: vip_coordinator POSTGRES_PASSWORD: changeme volumes: - postgres-data:/var/lib/postgresql/data ports: - 5432:5432 healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 redis: image: redis:7 ports: - 6379:6379 keycloak: image: quay.io/keycloak/keycloak:24.0 environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_DB: postgres KC_DB_URL: jdbc:postgresql://db:5432/keycloak KC_DB_USERNAME: postgres KC_DB_PASSWORD: changeme KC_HOSTNAME_STRICT: false KC_HOSTNAME_STRICT_HTTPS: false KC_HTTP_ENABLED: true ports: - 8080:8080 command: start-dev depends_on: db: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8080/health/ready || exit 1"] interval: 30s timeout: 10s retries: 5 backend: build: context: ./backend target: development environment: DATABASE_URL: postgresql://postgres:changeme@db:5432/vip_coordinator REDIS_URL: redis://redis:6379 KEYCLOAK_SERVER_URL: http://keycloak:8080 KEYCLOAK_REALM: vip-coordinator KEYCLOAK_CLIENT_ID: vip-coordinator-frontend FRONTEND_URL: http://localhost:5173 PORT: 3000 NODE_ENV: development ports: - 3000:3000 depends_on: - db - redis - keycloak frontend: build: context: ./frontend target: development environment: VITE_API_URL: http://localhost:3000/api VITE_KEYCLOAK_URL: http://localhost:8080 VITE_KEYCLOAK_REALM: vip-coordinator VITE_KEYCLOAK_CLIENT_ID: vip-coordinator-frontend ports: - 5173:5173 depends_on: - backend volumes: postgres-data: