docker-compose.yml•2.79 kB
version: '3.8'
services:
# F1 MCP Server
f1-mcp-server:
build:
context: .
dockerfile: Dockerfile
ports:
- "${PORT:-3000}:3000"
- "${METRICS_PORT:-9090}:9090"
environment:
- NODE_ENV=${NODE_ENV:-production}
- PORT=3000
- API_VERSION=v1
- API_KEY_REQUIRED=${API_KEY_REQUIRED:-false}
- API_KEYS=${API_KEYS:-}
- RATE_LIMIT_ENABLED=true
- RATE_LIMIT_WINDOW_MS=60000
- RATE_LIMIT_MAX_REQUESTS=100
- REDIS_ENABLED=true
- REDIS_HOST=redis
- REDIS_PORT=6379
- POSTGRES_ENABLED=true
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DATABASE=f1_mcp
- CACHE_ENABLED=true
- CACHE_TTL=300
- LIVE_CACHE_TTL=10
- METRICS_ENABLED=true
- METRICS_PORT=9090
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_FORMAT=${LOG_FORMAT:-json}
depends_on:
- redis
- postgres
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health/live"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Redis for caching and session storage
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# Postgres for persistent storage
postgres:
image: postgres:15-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=f1_mcp
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
# Prometheus for metrics (optional)
prometheus:
image: prom/prometheus:latest
ports:
- "9091:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: unless-stopped
profiles:
- monitoring
# Grafana for visualization (optional)
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
profiles:
- monitoring
volumes:
redis-data:
postgres-data:
prometheus-data:
grafana-data: