version: '3.8' services: # Database postgres: image: postgres:latest environment: POSTGRES_DB: labfusion POSTGRES_USER: labfusion POSTGRES_PASSWORD: labfusion_password volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - labfusion-network # Redis for message bus redis: image: redis:latest ports: - "6379:6379" volumes: - redis_data:/data networks: - labfusion-network # Java Spring Boot API Gateway api-gateway: build: context: ./services/api-gateway dockerfile: Dockerfile ports: - "8080:8080" environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/labfusion - SPRING_DATASOURCE_USERNAME=labfusion - SPRING_DATASOURCE_PASSWORD=labfusion_password - REDIS_HOST=redis - REDIS_PORT=6379 depends_on: - postgres - redis networks: - labfusion-network # Python FastAPI Service Adapters service-adapters: build: context: ./services/service-adapters dockerfile: Dockerfile ports: - "8000:8000" environment: - REDIS_HOST=redis - REDIS_PORT=6379 - POSTGRES_URL=postgresql://labfusion:labfusion_password@postgres:5432/labfusion depends_on: - postgres - redis networks: - labfusion-network # React Frontend frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:3000" environment: - REACT_APP_API_URL=http://localhost:8080 - REACT_APP_WEBSOCKET_URL=ws://localhost:8080/ws depends_on: - api-gateway networks: - labfusion-network # API Documentation Service api-docs: build: context: ./services/api-docs dockerfile: Dockerfile ports: - "8083:8083" environment: - API_GATEWAY_URL=http://api-gateway:8080 - SERVICE_ADAPTERS_URL=http://service-adapters:8000 - METRICS_COLLECTOR_URL=http://metrics-collector:8081 - NOTIFICATION_SERVICE_URL=http://notification-service:8082 depends_on: - api-gateway - service-adapters networks: - labfusion-network volumes: postgres_data: redis_data: networks: labfusion-network: driver: bridge