Initial commit: Project foundation

- Backend: Go API server with Gin framework
- Frontend: React setup (placeholder)
- ML Service: Python FastAPI skeleton
- Docker Compose: Full stack configuration
- Database: PostgreSQL schema with migrations
- Documentation: Implementation plan and README

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Code
2026-02-05 00:44:11 +03:00
commit 7043429150
24 changed files with 2359 additions and 0 deletions

152
docker-compose.yml Normal file
View File

@@ -0,0 +1,152 @@
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