凌晨4点23分,我盯着那台老旧VPS发呆。它问我想不想让它永远保持年轻,我说"想",然后Docker出现了。
5分钟部署、零依赖污染、一键升级、环境隔离。Docker是OpenClaw生产环境部署的官方推荐方式,比裸机部署安全10倍,比手动配置快100倍。
# 一键安装Docker
curl -fsSL https://get.docker.com | sh
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version # Docker version 24.0.7
mkdir -p ~/openclaw-docker
cd ~/openclaw-docker
# 创建必要目录
mkdir -p {data,logs,skills,custom-skills}
version: '3.8'
services:
openclaw:
image: openclaw/gateway:latest
container_name: openclaw-gateway
restart: unless-stopped
ports:
- "3000:3000" # Gateway端口
- "8080:8080" # Admin面板
volumes:
# 数据持久化
- ./data:/data
- ./logs:/logs
- ./skills:/app/skills:ro
- ./custom-skills:/app/custom-skills:ro
# 配置文件
- ./config.yaml:/app/config.yaml:ro
# 时区同步
- /etc/localtime:/etc/localtime:ro
environment:
- NODE_ENV=production
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
# 资源限制
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
# config.yaml
gateway:
port: 3000
host: "0.0.0.0"
models:
default:
provider: anthropic
model: claude-3-5-sonnet-20241022
api_key: ${ANTHROPIC_API_KEY}
channels:
telegram:
enabled: false # 按需启用
# bot_token: ${TELEGRAM_TOKEN}
# .env文件(永远不要提交到Git)
ANTHROPIC_API_KEY=sk-ant-xxxxx
OPENAI_API_KEY=sk-xxxxxx
# 可选渠道密钥
TELEGRAM_TOKEN=123456:ABC-DEF
DISCORD_TOKEN=MTIxxx
# 时区
TZ=Asia/Shanghai
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f openclaw
# 确认运行状态
docker ps | grep openclaw
添加Watchtower实现自动更新:
# docker-compose.yml 添加
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_POLL_INTERVAL=86400 # 每天检查
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=true
# nginx.conf
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# 使用acme.sh申请证书
~/.acme.sh/acme.sh --issue -d your-domain.com --nginx
# 自动续期
crontab -e
0 3 * * * ~/.acme.sh/acme.sh --cron
# 查看容器状态
docker-compose ps
# 重启服务
docker-compose restart openclaw
# 更新到最新版本
docker-compose pull openclaw
docker-compose up -d
# 进入容器内部
docker exec -it openclaw-gateway /bin/sh
# 备份数据
tar -czf backup-$(date +%Y%m%d).tar.gz data/ logs/ config.yaml
# 恢复数据
tar -xzf backup-20260117.tar.gz
docker-compose restart