Production-ready Docker Compose deployment for Hanzo AI Platform.
- Docker Engine 24.0+ with Compose support
- Domain with DNS configured
- DigitalOcean droplet (recommended:
s-8vcpu-16gb-amd)
# 1. Clone repository
git clone https://github.com/hanzoai/platform
cd platform/docker
# 2. Configure environment
cp .env.example .env
vim .env # Fill in your values
# 3. Deploy
./deploy.sh deployPublished on Docker Hub:
hanzoai/gateway:latest- Inference proxy (Node.js) ~200MBhanzoai/platform:latest- Manager UI (Next.js) ~464MBhanzoai/nexus:latest- Orchestrator (Rust) buildinghanzo-node:latest- Local inference (Python) building
Internet
β
β
Caddy (443)
β β
Platform (3000) Gateway (3001)
β β
PostgreSQL Redis
β β
Nexus (8080) Hanzo-Node (8000)
Required:
DOMAIN- Your domain (e.g., hanzo.ai)ACME_EMAIL- Email for Let's EncryptPOSTGRES_PASSWORD- Database passwordNEXTAUTH_SECRET- Auth secret (32+ chars)GRAFANA_PASSWORD- Grafana admin password
Optional:
DIGITALOCEAN_API_KEY- For DO integrationDEEPSEEK_API_KEY- DeepSeek providerOPENAI_API_KEY- OpenAI providerANTHROPIC_API_KEY- Anthropic provider
See .env.example for full list.
Configure DNS A records:
platform.hanzo.ai β YOUR_SERVER_IP
gateway.hanzo.ai β YOUR_SERVER_IP
api.hanzo.ai β YOUR_SERVER_IP
metrics.hanzo.ai β YOUR_SERVER_IP
./deploy.sh deployDeploys:
- PostgreSQL (database)
- Redis (cache)
- Gateway (inference proxy)
- Platform (management UI)
- Caddy (reverse proxy + SSL)
./deploy.sh monitoringAdds:
- Prometheus (metrics)
- Grafana (dashboards)
Access: https://metrics.hanzo.ai
./deploy.sh inferenceAdds:
- Hanzo-Node (local LLM inference)
Requires:
- GPU (NVIDIA) or CPU with 16GB+ RAM
- Model files in
/modelsvolume
./deploy.sh status# All services
./deploy.sh logs
# Specific service
./deploy.sh logs gateway
# Follow
docker compose -f compose.yml logs -f./deploy.sh restart gateway
./deploy.sh restart platform./deploy.sh stop./deploy.sh down# Start with dev overrides
docker compose -f compose.yml -f compose.dev.yml up
# Or manually
cd ..
make dev-gateway # Terminal 1
make dev-platform # Terminal 2# Gateway
cd ../gateway
docker build -f docker/Dockerfile -t hanzoai/gateway:custom .
# Platform
cd ../platform
docker build -f docker/Dockerfile -t hanzoai/platform:custom .
# Use custom images
docker compose -f compose.yml up -d# Scale gateway to 5 replicas
docker compose -f compose.yml up -d --scale gateway=5
# Scale platform to 3 replicas
docker compose -f compose.yml up -d --scale platform=3Edit compose.yml:
services:
gateway:
deploy:
resources:
limits:
cpus: '2'
memory: 2GCaddy automatically provisions Let's Encrypt certificates.
View certificates:
docker compose -f compose.yml exec caddy caddy trustNever commit .env to git. Use:
# Docker secrets (Swarm)
echo "my-password" | docker secret create db_password -
# Or environment variables
export POSTGRES_PASSWORD="$(openssl rand -base64 32)"# UFW
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable# Check logs
docker compose -f compose.yml logs gateway
# Restart service
docker compose -f compose.yml restart gateway
# Force recreate
docker compose -f compose.yml up -d --force-recreate gateway# Check PostgreSQL
docker compose -f compose.yml exec postgres pg_isready -U hanzo
# View connections
docker compose -f compose.yml exec postgres psql -U hanzo -c "SELECT * FROM pg_stat_activity;"# Check Redis
docker compose -f compose.yml exec redis redis-cli ping
# View info
docker compose -f compose.yml exec redis redis-cli info# Check Caddy logs
docker compose -f compose.yml logs caddy
# Force renewal
docker compose -f compose.yml exec caddy caddy reload --force- GitHub Issues: https://github.com/hanzoai/platform/issues
- Discord: https://discord.gg/hanzoai
- Email: support@hanzo.ai
MIT License - see LICENSE file for details.