| 资源 | 最低配置 | 推荐配置 | 生产环境 |
|---|---|---|---|
| CPU | 1核 | 2核 | 4核+ |
| 内存 | 1GB | 2GB | 4GB+ |
| 存储 | 10GB | 20GB | 50GB+ |
| 网络 | 1Mbps | 10Mbps | 100Mbps+ |
编辑 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true,
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10
}
重启Docker:
sudo systemctl restart docker
编辑 /etc/sysctl.conf:
# 网络优化
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 文件描述符
fs.file-max = 65535
应用配置:
sudo sysctl -p
编辑 /etc/security/limits.conf:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
# 创建配置文件
cat > openclaw.json << 'EOF'
{
"providers": {
"bailian": {
"apiKey": "YOUR_API_KEY"
}
},
"agents": {
"defaults": {
"model": {
"primary": "bailian/qwen-turbo"
}
}
}
}
EOF
# 设置权限
chmod 600 openclaw.json
创建 .env 文件:
# API配置
OPENCLAW_API_KEY=YOUR_API_KEY
# 安全配置
OPENCLAW_ENABLE_TELEMETRY=false
OPENCLAW_LOG_LEVEL=warn
设置权限:
chmod 600 .env
# 创建非root用户
docker run -d \
--name openclaw \
-p 18789:18789 \
-u 1000:1000 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latest
# 启动容器(限制资源)
docker run -d \
--name openclaw \
--cpus="2" \
--memory="2g" \
--memory-swap="2g" \
--pids-limit 100 \
-p 18789:18789 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latest
创建 docker-compose.prod.yml:
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
ports:
- "18789:18789"
volumes:
- ./openclaw.json:/home/openclaw/.openclaw/openclaw.json:ro
- ./data:/home/openclaw/.openclaw/data
environment:
- OPENCLAW_LOG_LEVEL=warn
- OPENCLAW_ENABLE_TELEMETRY=false
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
restart: unless-stopped
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:18789/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- openclaw-network
networks:
openclaw-network:
driver: bridge
启动:
# 启动生产环境
docker-compose -f docker-compose.prod.yml up -d
# 查看状态
docker-compose -f docker-compose.prod.yml ps
使用Let’s Encrypt:
# 安装certbot
sudo apt install -y certbot python3-certbot-nginx
# 获取证书
sudo certbot certonly --standalone -d openclaw.example.com
创建 nginx.conf:
server {
listen 80;
server_name openclaw.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name openclaw.example.com;
ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://openclaw:18789;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
}
# 限制请求大小
client_max_body_size 10M;
}
# 启动OpenClaw
docker run -d \
--name openclaw \
--network openclaw-network \
-p 18789:18789 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latest
# 启动Nginx
docker run -d \
--name nginx \
--network openclaw-network \
-p 80:80 \
-p 443:443 \
-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
nginx:alpine
创建 Dockerfile:
# 构建阶段
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 运行阶段
FROM node:22-alpine AS runner
WORKDIR /app
# 复制构建产物
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
# 使用非root用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S openclaw -u 1001
USER openclaw
EXPOSE 18789
CMD ["node", "dist/index.js"]
# 启动容器(限制日志大小)
docker run -d \
--name openclaw \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
-p 18789:18789 \
openclaw/openclaw:latest
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
volumes:
- ./data:/home/openclaw/.openclaw/data
- ./cache:/home/openclaw/.cache
environment:
- NODE_ENV=production
- CACHE_ENABLED=true
version: '3.8'
services:
redis:
image: redis:alpine
container_name: redis
command: redis-server --appendonly yes
volumes:
- ./redis-data:/data
restart: unless-stopped
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
depends_on:
- redis
ports:
- "18789:18789"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
restart: unless-stopped
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- openclaw1
- openclaw2
openclaw1:
image: openclaw/openclaw:latest
container_name: openclaw1
volumes:
- ./data1:/home/openclaw/.openclaw
restart: unless-stopped
openclaw2:
image: openclaw/openclaw:latest
container_name: openclaw2
volumes:
- ./data2:/home/openclaw/.openclaw
restart: unless-stopped
# 初始化Swarm
docker swarm init
# 创建服务
docker service create \
--name openclaw \
--replicas 3 \
--publish 18789:18789 \
openclaw/openclaw:latest
# 查看服务
docker service ls
# 扩缩容
docker service scale openclaw=5
创建 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: openclaw
spec:
replicas: 3
selector:
matchLabels:
app: openclaw
template:
metadata:
labels:
app: openclaw
spec:
containers:
- name: openclaw
image: openclaw/openclaw:latest
ports:
- containerPort: 18789
resources:
limits:
memory: "2Gi"
cpu: "1000m"
requests:
memory: "1Gi"
cpu: "500m"
volumeMounts:
- name: data
mountPath: /home/openclaw/.openclaw
volumes:
- name: data
persistentVolumeClaim:
claimName: openclaw-pvc
---
apiVersion: v1
kind: Service
metadata:
name: openclaw
spec:
selector:
app: openclaw
ports:
- port: 18789
targetPort: 18789
type: LoadBalancer
# 启动容器(启用健康检查)
docker run -d \
--name openclaw \
--health-cmd="curl -f http://localhost:18789/health || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
-p 18789:18789 \
openclaw/openclaw:latest
# 查看健康状态
docker inspect --format='{{json .State.Health}}' openclaw
创建 prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'openclaw'
static_configs:
- targets: ['openclaw:18789']
启动Prometheus:
version: '3.8'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
ports:
- "18789:18789"
version: '3.8'
services:
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
volumes:
- ./grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
prometheus:
image: prom/prometheus
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
ports:
- "18789:18789"
version: '3.8'
services:
elasticsearch:
image: elasticsearch:8.0.0
container_name: elasticsearch
environment:
- discovery.type=single-node
volumes:
- ./es-data:/usr/share/elasticsearchasticsearch/data
logstash:
image: logstash:8.0.0
container_name: logstash
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
kibana:
image: kibana:8.0.0
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
ports:
- "18789:18789"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
创建 backup.sh:
#!/bin/bash
BACKUP_DIR="./backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="openclaw-backup-${BACKUP_DIR}.tar.gz"
mkdir -p ${BACKUP_DIR}
# 备份数据
tar -czf ${BACKUP_DIR}/${BACKUP_FILE} ./data
# 删除30天前的备份
find ${BACKUP_DIR} -name "openclaw-backup-*.tar.gz" -mtime +30 -delete
echo "Backup created: ${BACKUP_DIR}/${BACKUP_FILE}"
设置权限:
chmod +x backup.sh
使用cron:
# 编辑crontab
crontab -e
添加定时任务:
# 每天凌晨2点备份
0 2 * * * /path/to/backup.sh >> /var/log/openclaw-backup.log 2>&1
# 解压备份
tar -xzf backups/openclaw-backup-20260222_020000.tar.gz
# 启动容器(恢复数据)
docker run -d \
--name openclaw \
-p 18789:18789 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latest
version: '3.8'
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 * * *
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
ports:
- "18789:18789"
labels:
- "com.centurylinklabs.watchtower.enable=true"
创建 update.sh:
#!/bin/bash
# 拉取最新镜像
docker pull openclaw/openclaw:latest
# 停止并删除旧容器
docker stop openclaw
docker rm openclaw
# 启动新容器
docker run -d \
--name openclaw \
--restart unless-stopped \
-p 18789:18789 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latest
echo "OpenClaw updated successfully!"
A: 检查容器状态和日志:
# 查看容器状态
docker ps -a
# 查看容器日志
docker logs openclaw
# 查看退出代码
docker inspect openclaw | grep ExitCode
常见原因:
- 内存不足 → 增加内存限制
- 配置错误 → 检查
openclaw.json - 健康检查失败 → 检查健康检查配置
A: 优化措施:
-
增加资源限制
docker update --cpus="2" --memory="2g" openclaw
-
优化日志配置
docker run --log-opt max-size=10m --log-opt max-file=3
-
使用缓存
environment: - CACHE_ENABLED=true
A:
# 实时查看资源使用
docker stats openclaw
# 查看详细信息
docker inspect openclaw
# 查看磁盘使用
docker system df
API 配置详解
OpenClaw 需要配置大模型 API 才能运行,本文详细介绍各平台的配置方法
新手推荐使用配置向导自动生成配置:
# 运行配置向导
openclaw onboard --install-daemon
向导会自动:
- 检测环境和依赖
- 引导选择 API 提供商
- 帮助获取 API Key
- 自动生成配置文件
- 验证配置正确性
如果你需要手动配置,可以使用我们提供的配置模板:
# 1. 下载教程模板
templates
# 2. 查看模板目录
ls templates/
# 3. 查看模板使用指南
cat templates/README.md
模板文件说明:
| 文件 | 说明 | 使用方法 |
|---|---|---|
openclaw-template.json |
OpenClaw 主配置模板 | 复制到 ~/.openclaw/openclaw.json |
env-template.txt |
环境变量模板 | 复制到 ~/.openclaw/.env |
快速使用模板:
# 复制主配置模板
cp templates/openclaw-template.json ~/.openclaw/openclaw.json
# 复制环境变量模板
cp templates/env-template.txt ~/.openclaw/.env
# 设置正确权限(重要!)
chmod 600 ~/.openclaw/openclaw.json
chmod 600 ~/.openclaw/.env
# 编辑配置文件,填写你的 API Key
nano ~/.openclaw/openclaw.json
nano ~/.openclaw/.env
详细模板使用说明请查看:templates/README.md
OpenClaw 支持配置多个模型提供商,可以在不同场景使用不同模型:
{
"providers": {
"siliconflow": {
"api_key": "sk-xxx",
"base_url": "https://api.siliconflow.cn/v1",
"models": {
"default": "deepseek-ai/DeepSeek-V3",
"coding": "Qwen/Qwen2.5-72B-Instruct"
}
},
"zhipu": {
"api_key": "xxx",
"base_url": "https://open.bigmodel.cn/api/paas/v4",
"models": {
"default": "GLM-4-Plus"
}
}
},
"default_provider": "siliconflow"
}
- 日常对话:使用 DeepSeek-V3 等高性价比模型
- 编程任务:使用专门的编程模型(如 Qwen-Code)
- 复杂推理:使用 GLM-4-Plus 或 Qwen-Max
- 批量处理:使用轻量模型降低成本
Q: API Key 保存在哪里?
A: OpenClaw 的配置文件位于 ~/.openclaw/config.json,API Key 会安全存储在此文件中。
Q: 如何查看 API 使用量?
A: 登录各平台控制台查看,OpenClaw 也提供 openclaw usage 命令查看统计。
Q: 多个 API Key 如何管理?
A: 可以配置多个提供商,通过环境变量或配置文件切换。
OpenClaw v2026.4.25 全面升级了 TTS 语音系统,支持多种语音提供商。
# 启用 TTS
openclaw config set tts.enabled true
# 设置提供商 (推荐 Azure Speech)
openclaw config set tts.provider azure
# 设置语音角色
openclaw config set tts.voice zh-CN-XiaoxiaoNeural
# 测试 TTS
/tts latest
| 提供商 | 推荐场景 | 价格 |
|---|---|---|
| Azure Speech | 企业级应用 | 中等 |
| Xiaomi | 中文场景 | 便宜 |
| Volcengine | 中文场景 | 中等 |
| ElevenLabs | 高质量需求 | 较贵 |
详细配置指南
TTS 语音配置指南
OpenClaw v2026.4.25 全面升级了 TTS(Text-to-Speech)语音系统,支持多种语音提供商和高级功能。本指南将帮助你配置和使用 TTS 功能。
- 多提供商支持: Azure Speech、Xiaomi、Volcengine、ElevenLabs 等
- 语音角色: 支持个性化语音角色配置
- 会话级控制: 每个聊天可以独立配置 TTS
- 自动语音: 支持自动将消息转换为语音
/tts latest– 语音朗读最新消息/tts on– 开启自动 TTS/tts off– 关闭自动 TTS/tts voice <voice_name>– 切换语音角色
在 ~/.openclaw/openclaw.json 中添加 TTS 配置:
{
"tts": {
"enabled": true,
"provider": "azure",
"voice": "zh-CN-XiaoxiaoNeural",
"autoTts": false
}
}
# 启用 TTS
openclaw config set tts.enabled true
# 设置提供商
openclaw config set tts.provider azure
# 设置语音角色
openclaw config set tts.voice zh-CN-XiaoxiaoNeural
# 关闭自动 TTS
openclaw config set tts.autoTts false
# 查看 TTS 配置
openclaw config get tts
# 测试 TTS 功能
/tts latest
Azure Speech 是微软提供的高质量语音服务,支持多种语言和语音角色。
-
获取 API 密钥
- 访问 Azure Portal
- 创建 Speech 资源
- 获取 API 密钥和区域
-
配置 OpenClaw
# 设置 Azure Speech 配置 openclaw config set tts.provider azure openclaw config set tts.azure.apiKey "your-api-key" openclaw config set tts.azure.region "eastasia"
-
选择语音角色
# 中文女声 openclaw config set tts.voice zh-CN-XiaoxiaoNeural # 中文男声 openclaw config set tts.voice zh-CN-YunxiNeural # 英文女声 openclaw config set tts.voice en-US-JennyNeural
| 语言 | 女声 | 男声 |
|---|---|---|
| 中文 | zh-CN-XiaoxiaoNeural | zh-CN-YunxiNeural |
| 英文 | en-US-JennyNeural | en-US-GuyNeural |
| 日文 | ja-JP-NanamiNeural | ja-JP-KeitaNeural |
| 韩文 | ko-KR-SunHiNeural | ko-KR-InJoonNeural |
小米语音合成是小米提供的中文语音服务,适合中文场景。
-
获取 API 密钥
- 访问 小米 MiMo 开放平台
- 申请 TTS API 访问权限
- 获取 API 密钥
-
配置 OpenClaw
# 设置 Xiaomi 配置 openclaw config set tts.provider xiaomi openclaw config set tts.xiaomi.apiKey "your-api-key"
-
选择语音角色
# 中文女声 openclaw config set tts.voice xiaomi-female # 中文男声 openclaw config set tts.voice xiaomi-male
火山引擎是字节跳动提供的云服务,支持高质量中文语音合成。
-
获取 API 密钥
- 访问 火山引擎控制台
- 开通语音合成服务
- 获取 API 密钥和 App ID
-
配置 OpenClaw
# 设置 Volcengine 配置 openclaw config set tts.provider volcengine openclaw config set tts.volcengine.apiKey "your-api-key" openclaw config set tts.volcengine.appId "your-app-id"
-
选择语音角色
# 中文女声 openclaw config set tts.voice volcengine-female # 中文男声 openclaw config set tts.voice volcengine-male
ElevenLabs 提供高质量的语音合成,支持语音克隆和情感控制。
-
获取 API 密钥
- 访问 ElevenLabs
- 注册账号并获取 API 密钥
-
配置 OpenClaw
# 设置 ElevenLabs 配置 openclaw config set tts.provider elevenlabs openclaw config set tts.elevenlabs.apiKey "your-api-key"
-
选择语音角色
# 使用预设语音 openclaw config set tts.voice elevenlabs-rachel # 使用自定义语音(需要先克隆) openclaw config set tts.voice elevenlabs-custom-id
OpenClaw 提供多种预设语音角色:
# 查看可用语音角色
openclaw tts voices list
# 使用预设角色
openclaw config set tts.voice zh-CN-XiaoxiaoNeural
-
上传音频样本
# 上传音频文件进行克隆 openclaw tts clone --name "my-voice" --file "sample.wav"
-
使用克隆的语音
# 使用自定义语音 openclaw config set tts.voice "cloned:my-voice"
使用 SSML(Speech Synthesis Markup Language)控制语音效果:
<speak>
<prosody rate="slow" pitch="+10%">
这是一个慢速高音的示例。
</prosody>
<break time="500ms"/>
<prosody rate="fast" pitch="-10%">
这是一个快速低音的示例。
</prosody>
</speak>
在聊天中开启自动 TTS:
# 开启当前会话自动 TTS
/tts on
# 关闭当前会话自动 TTS
/tts off
# 查看当前会话 TTS 状态
/tts status
配置全局自动 TTS:
# 开启全局自动 TTS
openclaw config set tts.autoTts true
# 关闭全局自动 TTS
openclaw config set tts.autoTts false
为特定代理配置自动 TTS:
{
"agents": {
"defaults": {
"tts": {
"autoTts": true,
"voice": "zh-CN-XiaoxiaoNeural"
}
}
}
}
在 WhatsApp 中使用 TTS:
# 朗读最新消息
/tts latest
# 朗读指定数量的消息
/tts latest 5
配置 WhatsApp 自动语音回复:
{
"channels": {
"whatsapp": {
"tts": {
"autoReply": true,
"voice": "zh-CN-XiaoxiaoNeural"
}
}
}
}
症状: 使用 /tts 命令没有声音
解决方案:
# 检查 TTS 配置
openclaw config get tts
# 检查提供商配置
openclaw config get tts.azure # 或其他提供商
# 测试提供商连接
openclaw tts test
症状: 合成的语音不自然
解决方案:
- 尝试不同的语音角色
- 调整语速和音调参数
- 升级到更高质量的提供商
症状: TTS 合成需要很长时间
解决方案:
- 使用本地 CLI 提供商
- 选择更快的语音角色
- 检查网络连接
症状: 某些语言不支持
解决方案:
- 检查提供商的语言支持列表
- 使用支持目标语言的提供商
- 考虑使用多语言提供商
# 查看 TTS 详细日志
openclaw logs tts
# 测试 TTS 提供商
openclaw tts test --provider azure
# 查看可用语音
openclaw tts voices list --provider azure
# 重置 TTS 配置
openclaw config unset tts
| 提供商 | 延迟 | 质量 | 价格 | 推荐场景 |
|---|---|---|---|---|
| Azure Speech | 低 | 高 | 中 | 企业级应用 |
| Xiaomi | 低 | 中 | 低 | 中文场景 |
| Volcengine | 低 | 高 | 中 | 中文场景 |
| ElevenLabs | 中 | 极高 | 高 | 高质量需求 |
| Local CLI | 极低 | 中 | 免费 | 本地部署 |
启用 TTS 缓存减少重复合成:
{
"tts": {
"cache": {
"enabled": true,
"maxSize": "100MB",
"ttl": "7d"
}
}
}
配置并发 TTS 请求:
{
"tts": {
"concurrency": {
"max": 5,
"queue": true
}
}
}
- 使用环境变量存储 API 密钥
- 定期轮换 API 密钥
- 限制 API 密钥权限
# 使用环境变量
export TTS_API_KEY="your-api-key"
openclaw config set tts.azure.apiKey "$TTS_API_KEY"
配置 TTS 访问控制:
{
"tts": {
"access": {
"allowedUsers": ["user1", "user2"],
"deniedUsers": ["user3"]
}
}
}