Docker Compose Multi-Container
Production-grade Docker Compose setup with PostgreSQL, Redis caching, and monitoring.
🏗️ Architecture
- openclaw - Main application
- postgres - Persistent data storage
- redis - Caching layer
- ollama - Local LLM (optional)
- nginx - Reverse proxy with SSL
1
Complete docker-compose.yml
yaml
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
depends_on:
- postgres
- redis
environment:
# OPENAI_API_KEY=${OPENAI_API_KEY} # Uncomment if using Cloud LLM
- DATABASE_URL=postgresql://openclaw:${DB_PASSWORD}@postgres:5432/openclaw
- REDIS_URL=redis://redis:6379
volumes:
- openclaw-data:/root/.openclaw
- ./workspace:/workspace
networks:
- openclaw-network
ports:
- "8080:8080"
postgres:
image: postgres:16-alpine
container_name: openclaw-db
restart: unless-stopped
environment:
- POSTGRES_USER=openclaw
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=openclaw
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- openclaw-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U openclaw"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: openclaw-cache
restart: unless-stopped
volumes:
- redis-data:/data
networks:
- openclaw-network
command: redis-server --appendonly yes
ollama:
image: ollama/ollama:latest
container_name: openclaw-llm
restart: unless-stopped
volumes:
- ollama-data:/root/.ollama
networks:
- openclaw-network
ports:
- "11434:11434"
# GPU support (uncomment for NVIDIA)
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
networks:
openclaw-network:
driver: bridge
volumes:
openclaw-data:
postgres-data:
redis-data:
ollama-data:
Create .env file
bash
OPENAI_API_KEY=your-openai-api-key
DB_PASSWORD=your-secure-database-password
📋 Management Commands
bash
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop all services
docker-compose down
# Remove all data (fresh start)
docker-compose down -v
# Update images
docker-compose pull && docker-compose up -d
# Enter openclaw container
docker-compose exec openclaw /bin/bash
# Backup database
docker-compose exec postgres pg_dump -U openclaw openclaw > backup.sql
# Pull Ollama model
docker-compose exec ollama ollama pull llama2
Full Stack Running!
Your production Docker Compose stack is ready at http://localhost:8080
Was this helpful?