193 lines
7.6 KiB
YAML
193 lines
7.6 KiB
YAML
version: '3.8'
|
|
|
|
# ═══════════════════════════════════════════════════════════
|
|
# 🐍 OPHION - Full Observability Stack
|
|
# Single docker compose up for complete observability platform
|
|
# ═══════════════════════════════════════════════════════════
|
|
|
|
x-ophion-common: &ophion-common
|
|
restart: unless-stopped
|
|
networks:
|
|
- ophion
|
|
|
|
services:
|
|
# ─────────────────────────────────────────────────────────
|
|
# 📦 INSTRUMENTATION INIT CONTAINER
|
|
# Downloads all OpenTelemetry agents for all languages
|
|
# ─────────────────────────────────────────────────────────
|
|
instrumentation:
|
|
build:
|
|
context: ./deploy/instrumentation
|
|
dockerfile: Dockerfile
|
|
container_name: ophion-instrumentation
|
|
volumes:
|
|
- otel_agents:/otel
|
|
command: ["echo", "Agents ready in /otel"]
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 🐍 OPHION Server (Go API)
|
|
# ─────────────────────────────────────────────────────────
|
|
server:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/docker/Dockerfile.server
|
|
container_name: ophion-server
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
- PORT=8080
|
|
- DATABASE_URL=postgres://ophion:ophion@postgres:5432/ophion?sslmode=disable
|
|
- CLICKHOUSE_URL=clickhouse://default:@clickhouse:9000/ophion
|
|
- REDIS_URL=redis://redis:6379
|
|
- AGENT_KEY=${AGENT_KEY:-ophion-secret-agent-key-2024}
|
|
- JWT_SECRET=${JWT_SECRET:-ophion-jwt-secret-change-in-production}
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 🖥️ OPHION Dashboard (Next.js)
|
|
# ─────────────────────────────────────────────────────────
|
|
dashboard:
|
|
build:
|
|
context: ./dashboard
|
|
dockerfile: Dockerfile
|
|
container_name: ophion-dashboard
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
- NEXT_PUBLIC_API_URL=
|
|
- API_URL=http://server:8080
|
|
- NODE_ENV=production
|
|
depends_on:
|
|
- server
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 📊 OpenTelemetry Collector
|
|
# Central receiver for all instrumented applications
|
|
# ─────────────────────────────────────────────────────────
|
|
otel-collector:
|
|
image: otel/opentelemetry-collector-contrib:0.96.0
|
|
container_name: ophion-otel-collector
|
|
command: ["--config=/etc/otel-collector-config.yaml"]
|
|
volumes:
|
|
- ./deploy/docker/otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
|
|
ports:
|
|
- "4317:4317" # OTLP gRPC
|
|
- "4318:4318" # OTLP HTTP
|
|
- "8889:8889" # Prometheus metrics
|
|
- "13133:13133" # Health check
|
|
environment:
|
|
- OPHION_SERVER=http://server:8080
|
|
- AGENT_KEY=${AGENT_KEY:-ophion-secret-agent-key-2024}
|
|
depends_on:
|
|
- server
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:13133/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 🐘 PostgreSQL (Metadata, Users, Alerts)
|
|
# ─────────────────────────────────────────────────────────
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
container_name: ophion-postgres
|
|
environment:
|
|
POSTGRES_USER: ophion
|
|
POSTGRES_PASSWORD: ophion
|
|
POSTGRES_DB: ophion
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ophion"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 📈 ClickHouse (Metrics, Traces, Logs - High Volume)
|
|
# ─────────────────────────────────────────────────────────
|
|
clickhouse:
|
|
image: clickhouse/clickhouse-server:24.1
|
|
container_name: ophion-clickhouse
|
|
ports:
|
|
- "9000:9000" # Native protocol
|
|
- "8123:8123" # HTTP interface
|
|
volumes:
|
|
- clickhouse_data:/var/lib/clickhouse
|
|
environment:
|
|
- CLICKHOUSE_DB=ophion
|
|
healthcheck:
|
|
test: ["CMD", "clickhouse-client", "--query", "SELECT 1"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 🔴 Redis (Cache, Pub/Sub, Rate Limiting)
|
|
# ─────────────────────────────────────────────────────────
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: ophion-redis
|
|
command: redis-server --appendonly yes
|
|
volumes:
|
|
- redis_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
<<: *ophion-common
|
|
|
|
# ─────────────────────────────────────────────────────────
|
|
# 🤖 OPHION Agent (System Metrics)
|
|
# Collect host metrics and send to server
|
|
# ─────────────────────────────────────────────────────────
|
|
agent:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/docker/Dockerfile.agent
|
|
container_name: ophion-agent
|
|
environment:
|
|
- OPHION_SERVER=http://server:8080
|
|
- OPHION_API_KEY=${AGENT_KEY:-ophion-secret-agent-key-2024}
|
|
- OPHION_INTERVAL=30s
|
|
- OPHION_DOCKER=true
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
depends_on:
|
|
server:
|
|
condition: service_healthy
|
|
<<: *ophion-common
|
|
|
|
networks:
|
|
ophion:
|
|
driver: bridge
|
|
name: ophion-network
|
|
|
|
volumes:
|
|
postgres_data:
|
|
clickhouse_data:
|
|
redis_data:
|
|
otel_agents:
|
|
name: ophion-otel-agents
|