version: '3.8' services: # Event Analytics API event-analytics-api: build: context: . dockerfile: Dockerfile container_name: event-analytics-api ports: - "3000:3000" environment: - NODE_ENV=production - MONGODB_URI=mongodb://admin:password123@mongodb:27017/event_analytics?authSource=admin - REDIS_URL=redis://redis:6379 - REDIS_CACHE_URL=redis://redis:6379/1 - REDIS_QUEUE_URL=redis://redis:6379/2 - REDIS_RATE_LIMIT_URL=redis://redis:6379/3 - JWT_SECRET=your-super-secret-jwt-key-change-in-production - API_RATE_LIMIT_WINDOW_MS=900000 - API_RATE_LIMIT_MAX_REQUESTS=1000 - EVENT_BUFFER_TIMEOUT_MS=5000 - EVENT_BUFFER_MAX_SIZE=1000 - QUERY_CACHE_TTL=300 - DEDUPLICATION_TTL=3600 - CORS_ORIGIN=http://localhost depends_on: mongodb: condition: service_healthy redis: condition: service_healthy restart: unless-stopped networks: - event-analytics-network healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Frontend Application event-analytics-frontend: build: context: ./frontend dockerfile: Dockerfile args: REACT_APP_API_URL: http://localhost/api/v1 REACT_APP_API_KEY: sample-api-key-789 container_name: event-analytics-frontend ports: - "80:80" environment: - REACT_APP_API_URL=http://localhost/api/v1 - REACT_APP_API_KEY=sample-api-key-789 depends_on: event-analytics-api: condition: service_healthy restart: unless-stopped networks: - event-analytics-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # MongoDB Database mongodb: image: mongo:7.0 container_name: event-analytics-mongodb ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password123 - MONGO_INITDB_DATABASE=event_analytics volumes: - mongodb_data:/data/db - ./scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro restart: unless-stopped networks: - event-analytics-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Redis Cache & Queue redis: image: redis:7.2-alpine container_name: event-analytics-redis ports: - "6379:6379" command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis_data:/data restart: unless-stopped networks: - event-analytics-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 start_period: 40s # MongoDB Express (Optional - for database management) mongo-express: image: mongo-express:1.0.0 container_name: event-analytics-mongo-express ports: - "8081:8081" environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=admin - ME_CONFIG_MONGODB_ADMINPASSWORD=password123 - ME_CONFIG_MONGODB_URL=mongodb://admin:password123@mongodb:27017/ - ME_CONFIG_BASICAUTH_USERNAME=admin - ME_CONFIG_BASICAUTH_PASSWORD=password123 depends_on: mongodb: condition: service_healthy restart: unless-stopped networks: - event-analytics-network profiles: - dev # Redis Commander (Optional - for Redis management) redis-commander: image: rediscommander/redis-commander:latest container_name: event-analytics-redis-commander ports: - "8082:8081" environment: - REDIS_HOSTS=local:redis:6379 depends_on: redis: condition: service_healthy restart: unless-stopped networks: - event-analytics-network profiles: - dev volumes: mongodb_data: driver: local redis_data: driver: local networks: event-analytics-network: driver: bridge