Docker Deployment
Production Docker deployment guide for InferXgate.
This guide covers deploying InferXgate with Docker for production environments.
Quick Start
git clone https://github.com/jasmedia/inferxgate.git
cd inferxgate
cp .env.example .env
# Edit .env with your configuration
docker-compose up -d
Production Docker Compose
version: '3.8'
services:
inferxgate:
image: ghcr.io/jasmedia/inferxgate:latest
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://postgres:${DB_PASSWORD}@db:5432/inferxgate
- REDIS_URL=redis://redis:6379
- JWT_SECRET=${JWT_SECRET}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- REQUIRE_AUTH=true
- LOG_LEVEL=info
- LOG_JSON=true
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
dashboard:
image: ghcr.io/jasmedia/inferxgate-dashboard:latest
ports:
- "80:80"
environment:
- API_URL=http://inferxgate:3000
depends_on:
- inferxgate
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=inferxgate
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
postgres_data:
redis_data:
Environment File
Create .env:
# Database
DB_PASSWORD=your-secure-db-password
# Authentication
JWT_SECRET=your-32-char-minimum-secret-key
# Provider API Keys
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
SSL/TLS with Traefik
services:
traefik:
image: traefik:v2.10
command:
- "--api.dashboard=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
inferxgate:
labels:
- "traefik.enable=true"
- "traefik.http.routers.inferxgate.rule=Host(`api.yourdomain.com`)"
- "traefik.http.routers.inferxgate.tls.certresolver=letsencrypt"
Scaling
Run multiple instances:
docker-compose up -d --scale inferxgate=3
Monitoring
Add Prometheus and Grafana:
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3001:3000"
volumes:
- grafana_data:/var/lib/grafana
Backup
Backup PostgreSQL:
docker-compose exec db pg_dump -U postgres inferxgate > backup.sql
Restore:
cat backup.sql | docker-compose exec -T db psql -U postgres inferxgate
Updates
docker-compose pull
docker-compose up -d