version: '3.8'
services:
oxirs-chat:
build:
context: ../..
dockerfile: ai/oxirs-chat/Dockerfile
container_name: oxirs-chat
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./data:/app/data
- ./config:/app/config
- ./datasets:/app/datasets:ro
environment:
- RUST_LOG=${RUST_LOG:-info}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
- COHERE_API_KEY=${COHERE_API_KEY:-}
- GROQ_API_KEY=${GROQ_API_KEY:-}
- MISTRAL_API_KEY=${MISTRAL_API_KEY:-}
- PUBMED_API_KEY=${PUBMED_API_KEY:-}
networks:
- oxirs-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 3s
retries: 3
start_period: 10s
deploy:
resources:
limits:
cpus: '2.0'
memory: 4G
reservations:
cpus: '1.0'
memory: 2G
redis:
image: redis:7-alpine
container_name: oxirs-redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- oxirs-network
command: redis-server --appendonly yes
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
prometheus:
image: prom/prometheus:latest
container_name: oxirs-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
networks:
- oxirs-network
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
grafana:
image: grafana/grafana:latest
container_name: oxirs-grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- oxirs-network
depends_on:
- prometheus
networks:
oxirs-network:
driver: bridge
volumes:
redis-data:
prometheus-data:
grafana-data: