Openclaw docker production setup
This guide gives a clear, actionable OpenClaw Docker production setup for beginners on an Ubuntu VPS. It covers prerequisites, a working Docker Compose example, update and rollback commands, security hardening, a screenshots checklist, and troubleshooting. Use the examples below and replace placeholders with your OpenClaw image and environment values.
openclaw docker production setup: prerequisites
Before you start, ensure your VPS meets basic server requirements and that you have a provider account. This setup is provider-neutral and works with any provider. Review recommended host sizing in server requirements and secure your instance following our secure VPS guide.
- Ubuntu 20.04 or later (root or sudo user)
- SSH access to the VPS
- Domain name or public IP for routing
- Docker and Docker Compose (instructions below)
- Backups of databases and persistent volumes
Install Docker and Docker Compose
Run these commands as a user with sudo. They install Docker Engine and the modern Compose plugin. If you prefer the standalone compose binary, you can install that instead.
# Update and install dependencies
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key and repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine and Compose plugin
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Verify
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version
Example Docker Compose for OpenClaw
Below is a minimal production-oriented Compose file. Replace image names, volumes, and environment variables with your project’s values. Use an external reverse proxy (Traefik, nginx) or a cloud load balancer for TLS and routing.
version: "3.8"
services:
openclaw:
image: your-openclaw-image:stable
restart: unless-stopped
environment:
- NODE_ENV=production
- DATABASE_URL=${DATABASE_URL}
env_file:
- .env
volumes:
- openclaw_data:/var/lib/openclaw
ports:
- "8080:8080" # map to your service port
healthcheck:
test: ["CMD-SHELL","curl -f http://localhost:8080/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
volumes:
openclaw_data:
driver: local
Save this as docker-compose.yml and create a .env with secrets. For secret management in production, consider dedicated secret stores or Docker Secrets with swarm/Kubernetes.
Deployment and Update Workflow
Use a repeatable workflow for updates. The commands below assume you have the compose file under /opt/openclaw.
# SSH to server
ssh user@your-vps
cd /opt/openclaw
# Pull new image and bring up updated containers
sudo docker compose pull
sudo docker compose up -d --remove-orphans
# Verify
sudo docker compose ps
sudo docker logs -f openclaw
# Rollback (if needed): start previous image tag or use backup restore
# Example: docker compose down && docker compose up -d --no-deps openclaw@previous-tag
Notes:
- docker compose pull updates images; docker compose up -d applies changes by recreating containers.
- For near-zero-downtime updates, run multiple replicas behind a load balancer or use orchestrators that support rolling updates.
Update Section
Plan updates: take a backup, test on staging, then deploy. Example backup commands for volumes and databases:
# Backup a named volume (creates a tarball)
docker run --rm -v openclaw_data:/data -v $(pwd):/backup alpine sh -c "cd /data && tar czf /backup/openclaw_data-$(date +%F).tgz ."
# Database dump example (depends on your DB image and credentials)
# docker exec -t openclaw_db pg_dumpall -c -U postgres > dump_$(date +%F).sql
After backup, use the update workflow above. Maintain release tags so you can roll back by specifying a previous image tag in your compose file and re-deploying.
Security
Harden the host and containers:
- Run services as non-root inside containers when possible.
- Do not add users to the docker group unless necessary; that group is equivalent to root on the host.
- Use a firewall (ufw) to restrict access to application and management ports.
- Terminate TLS at a reverse proxy (Traefik, nginx) and store certificates securely.
- Use environment files with restricted permissions and consider a secrets manager for production secrets.
- Keep the host and Docker runtime updated and enable automatic security updates where appropriate.
# Basic firewall example (adjust ports to your setup)
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
# Check Docker service
sudo systemctl status docker
Resource tiers and performance considerations
Match your VPS resources to expected traffic and background jobs. Use tiers conceptually:
- Small: suitable for development, CI testing, or low-traffic proof-of-concept instances.
- Medium: suitable for light production with moderate concurrency and small background jobs.
- Large: for higher concurrency, heavy background processing, or when running additional services like caching and search on the same host.
Monitor CPU, memory, I/O, and disk usage after deploy and scale vertically or horizontally as needed. For high-availability and rolling updates, consider an orchestrator or a load balancer with multiple replicas.
Screenshots checklist
- Server console showing
sudo docker compose psoutput - Container logs for the service:
sudo docker logs -f openclaw - Version checks:
docker versionanddocker compose version - UFW or firewall rules status
- Backup artifacts list and timestamp
Troubleshooting
Common issues and how to investigate:
- Permission denied when accessing Docker socket: avoid running deployment scripts as an unprivileged user that lacks sudo, or manage permissions carefully. Check
sudo journalctl -u docker. - Port in use: run
sudo ss -tulpn | grep :8080to find conflicts, then reassign or stop the conflicting service. - Container fails on start: check logs with
sudo docker logs <container>and inspect the container withsudo docker inspect <container>. - Healthcheck failing: verify the service endpoint and adjust the healthcheck command or timeouts in the compose file.
Example quick debug commands
# Follow logs
sudo docker compose logs -f
# List containers
sudo docker ps -a
# Inspect container
sudo docker inspect openclaw
# Restart service
sudo docker compose restart openclaw
Recommendation and next steps
This guide gives a production-ready path to run OpenClaw on a Docker-based Ubuntu VPS. It’s provider-agnostic and works with any provider. For hosting choices and secure configuration, see our server requirements and secure VPS guides. When you’re ready, perform a staged rollout: test on staging, back up data, then Deploy with Docker Compose to your production VPS. Monitor closely and iterate on security and scaling as traffic grows.