docker-compose.prod.yml•2.82 kB
services:
# Main application
image-gen-mcp:
build: .
container_name: image-gen-mcp
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001" # Bind to localhost only, nginx will proxy
environment:
- PROVIDERS__OPENAI__API_KEY=${PROVIDERS__OPENAI__API_KEY}
- PROVIDERS__GEMINI__API_KEY=${PROVIDERS__GEMINI__API_KEY:-}
- REDIS_URL=redis://redis:6379/0
- STORAGE_BASE_PATH=/app/storage
- CACHE_ENABLED=true
- CACHE_BACKEND=redis
- LOG_LEVEL=INFO
- SERVER_PORT=3001
volumes:
- ./storage:/app/storage
- ./logs:/app/logs
depends_on:
- redis
networks:
- app-network
command: ["python", "-m", "image_gen_mcp.server", "--transport", "streamable-http", "--port", "3001", "--host", "0.0.0.0", "--cors"]
healthcheck:
test: ["CMD", "python", "-c", "import sys, urllib.request; sys.exit(0 if urllib.request.urlopen('http://localhost:3001').getcode() == 200 else 1)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Redis cache
redis:
image: redis:7-alpine
container_name: image-gen-mcp-redis
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379" # Bind to localhost only
volumes:
- redis_data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- app-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
# Monitoring - Prometheus
prometheus:
image: prom/prometheus:latest
container_name: image-gen-mcp-prometheus
restart: unless-stopped
ports:
- "127.0.0.1:9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
networks:
- app-network
# Monitoring - Grafana
grafana:
image: grafana/grafana:latest
container_name: image-gen-mcp-grafana
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- grafana_data:/var/lib/grafana
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards
networks:
- app-network
volumes:
redis_data:
driver: local
prometheus_data:
driver: local
grafana_data:
driver: local
networks:
app-network:
driver: bridge