version: '3.8' services: # VictoriaLogs - Log database victorialogs: image: victoriametrics/victoria-logs:latest container_name: victorialogs ports: - "9428:9428" volumes: - vlogs-data:/victoria-logs-data command: - "-storageDataPath=/victoria-logs-data" - "-retentionPeriod=30d" networks: - vlogs-network restart: unless-stopped # vmalert - Alerting engine vmalert: image: victoriametrics/vmalert:latest container_name: vmalert ports: - "8880:8880" volumes: - vmalert-rules:/etc/vmalert/rules command: - "-datasource.url=http://victorialogs:9428" - "-rule=/etc/vmalert/rules/*.yml" - "-notifier.url=http://alertmanager:9093" depends_on: - victorialogs - alertmanager networks: - vlogs-network restart: unless-stopped # Alertmanager - Alert notifications alertmanager: image: prom/alertmanager:latest container_name: alertmanager ports: - "9093:9093" volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml - alertmanager-data:/alertmanager command: - "--config.file=/etc/alertmanager/alertmanager.yml" - "--storage.path=/alertmanager" networks: - vlogs-network restart: unless-stopped # PostgreSQL - Application database postgres: image: postgres:15-alpine container_name: postgres environment: POSTGRES_DB: ${DB_NAME:-vlogs_manager} POSTGRES_USER: ${DB_USER:-vlogs} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data - ./backend/migrations:/docker-entrypoint-initdb.d ports: - "5432:5432" networks: - vlogs-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-vlogs}"] interval: 10s timeout: 5s retries: 5 # Go Backend API backend: build: context: ./backend dockerfile: Dockerfile container_name: backend ports: - "8080:8080" environment: DB_HOST: postgres DB_PORT: 5432 DB_NAME: ${DB_NAME:-vlogs_manager} DB_USER: ${DB_USER:-vlogs} DB_PASSWORD: ${DB_PASSWORD} VLOGS_URL: http://victorialogs:9428 VMALERT_URL: http://vmalert:8880 ML_SERVICE_URL: http://ml-service:8000 JWT_SECRET: ${JWT_SECRET} VMALERT_RULES_DIR: /app/rules volumes: - vmalert-rules:/app/rules depends_on: postgres: condition: service_healthy victorialogs: condition: service_started vmalert: condition: service_started ml-service: condition: service_started networks: - vlogs-network restart: unless-stopped # Python ML Service ml-service: build: context: ./ml-service dockerfile: Dockerfile container_name: ml-service ports: - "8000:8000" environment: VLOGS_URL: http://victorialogs:9428 MODEL_DIR: /app/models volumes: - ml-models:/app/models networks: - vlogs-network restart: unless-stopped # React Frontend frontend: build: context: ./frontend dockerfile: Dockerfile args: VITE_API_BASE_URL: http://localhost:8080/api/v1 container_name: frontend ports: - "3000:80" depends_on: - backend networks: - vlogs-network restart: unless-stopped volumes: vlogs-data: postgres-data: vmalert-rules: ml-models: alertmanager-data: networks: vlogs-network: driver: bridge