跳转到内容

OpenClaw 高级配置指南:Nginx 反向代理、性能优化与最佳实践

OpenClaw 高级配置

当您熟悉了 OpenClaw 的基础操作并在 VPS 上成功通过 Docker 部署后,本教程将带您深入探索高级功能与优化技巧,从而发挥出 OpenClaw 的最大潜能,构建企业级的 AI 智能体平台。

目录

  1. 使用 Nginx / 1Panel 绑定独立域名
  2. 配置 HTTPS 与 SSL 证书
  3. 自定义快捷指令与工作流
  4. 多任务并发调度与性能优化
  5. 高级安全配置
  6. 监控与日志管理
  7. 备份与灾难恢复
  8. 插件开发与扩展
  9. 生产环境部署清单

1. 使用 Nginx / 1Panel 绑定独立域名

为了方便访问、提升安全性并支持 API 调用,我们强烈建议为您的 OpenClaw 绑定一个独立的域名,并开启 HTTPS 加密。

为什么需要域名和 HTTPS?

  • 🔒 安全性:HTTPS 加密传输,防止数据被窃听或篡改
  • 🌐 易用性:域名比 IP 地址更容易记忆和分享
  • 📱 移动端支持:某些移动应用要求 HTTPS 连接
  • 🔑 API 集成:第三方服务通常要求 HTTPS 端点
  • 📊 SEO 优化:搜索引擎优先索引 HTTPS 网站
  • 浏览器信任:避免浏览器的"不安全"警告

方法一:直接使用 Nginx 配置反向代理

如果您熟悉 Nginx 原生配置,这是最灵活的方式。

1.1 安装 Nginx

bash
# Ubuntu/Debian
sudo apt update
sudo apt install nginx -y

# 启动 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# 验证安装
nginx -v
# 期望输出:nginx version: nginx/1.x.x

1.2 创建 Nginx 配置文件

/etc/nginx/sites-available 目录中新建配置文件:

bash
sudo nano /etc/nginx/sites-available/openclaw

添加以下配置内容:

nginx
# HTTP 服务器块(用于重定向到 HTTPS)
server {
    listen 80;
    listen [::]:80;
    server_name claw.yourdomain.com;  # 替换为您的域名

    # Let's Encrypt 验证路径
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    # 其他所有请求重定向到 HTTPS
    location / {
        return 301 https://$server_name$request_uri;
    }
}

# HTTPS 服务器块
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name claw.yourdomain.com;  # 替换为您的域名

    # SSL 证书路径(稍后由 certbot 自动配置)
    ssl_certificate /etc/letsencrypt/live/claw.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/claw.yourdomain.com/privkey.pem;

    # SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # 安全头
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # 客户端请求大小限制(根据需求调整)
    client_max_body_size 50M;

    # 反向代理配置
    location / {
        proxy_pass http://127.0.0.1:8080;  # 转发到本地 Docker 映射端口
        proxy_http_version 1.1;
        
        # WebSocket 支持(如果需要)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 标准代理头
        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_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # 缓冲设置
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        proxy_busy_buffers_size 8k;
    }

    # 静态文件缓存优化
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        proxy_pass http://127.0.0.1:8080;
        expires 30d;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # 健康检查端点(可选)
    location /health {
        proxy_pass http://127.0.0.1:8080/health;
        access_log off;
    }
}

1.3 启用配置

bash
# 创建符号链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/

# 测试配置文件语法
sudo nginx -t

# 如果测试通过,重新加载 Nginx
sudo systemctl reload nginx

1.4 申请并配置 SSL 证书

使用 Certbot 自动申请 Let's Encrypt 免费证书:

bash
# 安装 Certbot 和 Nginx 插件
sudo apt install certbot python3-certbot-nginx -y

# 创建 certbot 验证目录
sudo mkdir -p /var/www/certbot

# 申请证书(交互式)
sudo certbot --nginx -d claw.yourdomain.com

# 或者非交互式(适合脚本)
sudo certbot --nginx -d claw.yourdomain.com --non-interactive --agree-tos --email your-email@example.com

Certbot 会自动:

  • 验证域名所有权
  • 申请 SSL 证书
  • 修改 Nginx 配置以使用证书
  • 设置自动续期

1.5 验证 HTTPS 配置

bash
# 测试 SSL 配置
sudo nginx -t

# 重新加载 Nginx
sudo systemctl reload nginx

# 访问 https://claw.yourdomain.com 验证

# 使用在线工具测试 SSL 等级
# https://www.ssllabs.com/ssltest/

1.6 设置证书自动续期

Let's Encrypt 证书有效期为 90 天,Certbot 会自动设置续期任务:

bash
# 查看定时任务
sudo crontab -l

# 应该看到类似内容:
# 0 */12 * * * certbot renew --quiet

# 手动测试续期(不会实际续期,仅模拟)
sudo certbot renew --dry-run

# 查看续期日志
sudo cat /var/log/letsencrypt/letsencrypt.log

方法二:使用 1Panel 等可视化面板管理

对于不熟悉命令行操作的用户,我们强烈推荐新手使用 1Panel 控制面板来管理,它提供了图形化界面,让配置变得简单直观。

2.1 安装 1Panel(如果尚未安装)

bash
# 一键安装 1Panel
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

💡 提示:如果您还未安装 1Panel,请参考我们全站的「1Panel 面板安装指南」

2.2 配置反向代理

  1. 登录 1Panel 控制面板

    • 访问 https://your-server-ip:port
    • 使用管理员账户登录
  2. 创建网站

    • 在左侧菜单找到 「网站」「创建网站」
    • 选择 「反向代理」 类型
  3. 填写配置信息

    主域名:claw.yourdomain.com
    目标 URL:127.0.0.1:8080
    代号:openclaw(自动生成)
  4. 启用 HTTPS

    • 勾选 「申请 HTTPS 证书」
    • 选择 Let's Encrypt
    • 输入邮箱地址
    • 点击「确定」
  5. 高级配置(可选)

    • 点击「高级配置」标签
    • 可以自定义:
      • 缓存策略
      • 请求限制
      • 安全头
      • WebSocket 支持
  6. 完成

    • 点击「确定」按钮
    • 等待证书申请完成(通常 1-2 分钟)
    • 访问 https://claw.yourdomain.com 验证

2.3 1Panel 的优势

  • 图形化界面:无需编写配置文件
  • 一键 HTTPS:自动申请和续期证书
  • 实时监控:查看网站流量和性能
  • 备份管理:定期自动备份配置
  • 日志查看:方便的日志浏览和搜索
  • 安全防护:内置 WAF 和防 CC 攻击

方法三:使用 Caddy(现代化替代方案)

Caddy 是一个现代化的 Web 服务器,默认自动启用 HTTPS,配置更简洁。

3.1 安装 Caddy

bash
# 添加 Caddy 官方仓库
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# 安装 Caddy
sudo apt update
sudo apt install caddy -y

3.2 配置 Caddyfile

bash
sudo nano /etc/caddy/Caddyfile

添加以下内容:

caddy
claw.yourdomain.com {
    # 自动 HTTPS(无需额外配置)
    
    # 反向代理
    reverse_proxy 127.0.0.1:8080 {
        header_up Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
    
    # 安全头
    header {
        Strict-Transport-Security "max-age=31536000;"
        X-Frame-Options "SAMEORIGIN"
        X-Content-Type-Options "nosniff"
        X-XSS-Protection "1; mode=block"
    }
    
    # 日志
    log {
        output file /var/log/caddy/openclaw.log
        format json
    }
}

3.3 启动 Caddy

bash
# 测试配置
caddy validate

# 重启 Caddy
sudo systemctl restart caddy
sudo systemctl enable caddy

# 查看日志
sudo journalctl -u caddy -f

Caddy 的优势

  • 🚀 自动 HTTPS:无需手动配置证书
  • 📝 简洁配置:配置文件更易读
  • 🔄 自动重载:配置更改自动生效
  • 📊 内置指标:提供 Prometheus 指标

2. 配置 HTTPS 与 SSL 证书

2.1 SSL 证书类型对比

证书类型验证级别适用场景价格
DV (Domain Validation)域名验证个人网站、博客免费-$$
OV (Organization Validation)组织验证企业网站$$-$$$
EV (Extended Validation)扩展验证金融、电商$$$-$$$$
通配符证书域名验证多子域名$$-$$$

对于 OpenClaw,DV 证书(如 Let's Encrypt)完全足够

2.2 手动配置 SSL 证书(不使用 Certbot)

如果您已有 SSL 证书文件:

nginx
server {
    listen 443 ssl http2;
    server_name claw.yourdomain.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;
    
    # 如果使用证书链
    ssl_trusted_certificate /path/to/chain.pem;

    # ... 其他配置
}

2.3 SSL 安全最佳实践

nginx
# 只允许安全的协议和加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

# 启用 OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# DH 参数(增强安全性)
# 生成命令:openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# HSTS(HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

2.4 测试 SSL 配置

使用以下工具测试您的 SSL 配置:

  1. SSL Labs - 全面的 SSL 测试
  2. Security Headers - 检查安全头
  3. Mozilla Observatory - 综合安全评估

目标评级:A 或 A+


3. 自定义快捷指令与工作流

OpenClaw 的强大之处在于其灵活的自动化能力。通过自定义快捷指令和工作流,您可以实现复杂的业务逻辑。

3.1 工作流基础概念

工作流(Workflow)由以下组件构成:

触发器 (Trigger) → 条件 (Condition) → 动作 (Action) → 结果 (Result)

常见触发器

  • ⏰ 定时任务(Cron)
  • 📨 收到消息
  • 📧 收到邮件
  • 🔄 API 调用
  • 📁 文件变化
  • 🌐 网页更新

常见动作

  • 📤 发送消息
  • 📝 创建文档
  • 🗄️ 数据库操作
  • 🌐 HTTP 请求
  • 📊 生成报告
  • 🔔 发送通知

3.2 配置文件格式

OpenClaw 的工作流配置采用 YAML 或 JSON 格式。以下是几个实用示例:

示例 1:每日晨报自动生成

yaml
# config/workflows/daily-report.yaml
workflow:
  name: "每日晨报"
  description: "每天早上 8 点生成并发送晨报"
  
  trigger:
    type: cron
    schedule: "0 8 * * *"  # 每天 8:00
    timezone: "Asia/Shanghai"
  
  steps:
    - name: "获取天气信息"
      action: http_request
      params:
        url: "https://api.weather.com/v1/current"
        method: GET
        headers:
          Authorization: "Bearer ${WEATHER_API_KEY}"
        query:
          city: "Beijing"
      output: weather_data
    
    - name: "获取新闻摘要"
      action: ai_generate
      params:
        model: "gpt-4-turbo"
        prompt: |
          请总结今天的科技新闻,包括:
          1. AI 领域重要进展
          2. 重大产品发布
          3. 行业趋势分析
          限制在 500 字以内。
      output: news_summary
    
    - name: "获取股票行情"
      action: http_request
      params:
        url: "https://api.finance.com/v1/stocks"
        method: GET
        query:
          symbols: "AAPL,GOOGL,MSFT"
      output: stock_data
    
    - name: "生成晨报"
      action: template_render
      params:
        template: |
          📰 每日晨报 - {{ date }}
          
          🌤️ 天气:{{ weather_data.temperature }}°C, {{ weather_data.condition }}
          
          📈 股市概览:
          - AAPL: {{ stock_data.AAPL.price }} ({{ stock_data.AAPL.change }}%)
          - GOOGL: {{ stock_data.GOOGL.price }} ({{ stock_data.GOOGL.change }}%)
          - MSFT: {{ stock_data.MSFT.price }} ({{ stock_data.MSFT.change }}%)
          
          📝 科技新闻:
          {{ news_summary }}
          
          ---
          由 OpenClaw 自动生成
      output: report_content
    
    - name: "发送到 Telegram"
      action: send_message
      params:
        platform: telegram
        chat_id: "${TELEGRAM_CHAT_ID}"
        message: "{{ report_content }}"
        parse_mode: markdown
    
    - name: "保存到文件"
      action: write_file
      params:
        path: "/app/data/reports/daily-{{ date }}.md"
        content: "{{ report_content }}"

示例 2:网站监控与告警

yaml
# config/workflows/website-monitor.yaml
workflow:
  name: "网站监控"
  description: "每 5 分钟检查网站可用性,异常时发送告警"
  
  trigger:
    type: cron
    schedule: "*/5 * * * *"  # 每 5 分钟
  
  steps:
    - name: "检查网站状态"
      action: http_request
      params:
        url: "https://your-website.com"
        method: GET
        timeout: 10
        expected_status: 200
      output: check_result
      on_error:
        - name: "发送告警"
          action: send_message
          params:
            platform: telegram
            chat_id: "${ADMIN_CHAT_ID}"
            message: |
              🚨 网站告警
              
              网站:https://your-website.com
              状态:{{ check_result.status_code }}
              时间:{{ now }}
              错误:{{ check_result.error }}
            priority: high
        
        - name: "记录日志"
          action: write_log
          params:
            level: error
            message: "Website down: {{ check_result.error }}"
        
        - name: "尝试重启服务"
          action: execute_command
          params:
            command: "docker restart openclaw"
            timeout: 30

示例 3:社交媒体自动发布

yaml
# config/workflows/social-media-post.yaml
workflow:
  name: "社交媒体自动发布"
  description: "从 RSS 订阅获取文章,自动发布到多个平台"
  
  trigger:
    type: rss_feed
    url: "https://your-blog.com/feed.xml"
    interval: 3600  # 每小时检查一次
  
  steps:
    - name: "获取最新文章"
      action: parse_rss
      params:
        feed_url: "${RSS_FEED_URL}"
        max_items: 5
      output: articles
    
    - name: "过滤已发布"
      action: filter
      params:
        input: "{{ articles }}"
        condition: "item.published > last_check_time"
      output: new_articles
    
    - name: "生成社交媒体文案"
      action: ai_generate
      params:
        model: "claude-3-sonnet"
        prompt: |
          请将以下文章标题和摘要改写成适合 Twitter 的简短文案:
          
          标题:{{ article.title }}
          摘要:{{ article.summary }}
          
          要求:
          - 长度不超过 280 字符
          - 包含 2-3 个相关 hashtag
          - 语气活泼有趣
          - 结尾添加文章链接
      output: social_text
    
    - name: "发布到 Twitter"
      action: post_to_twitter
      params:
        text: "{{ social_text }}"
        media: "{{ article.image }}"
      credentials:
        api_key: "${TWITTER_API_KEY}"
        api_secret: "${TWITTER_API_SECRET}"
        access_token: "${TWITTER_ACCESS_TOKEN}"
        access_secret: "${TWITTER_ACCESS_SECRET}"
    
    - name: "发布到 LinkedIn"
      action: post_to_linkedin
      params:
        title: "{{ article.title }}"
        content: "{{ article.summary }}"
        url: "{{ article.link }}"
      credentials:
        access_token: "${LINKEDIN_ACCESS_TOKEN}"
    
    - name: "记录发布历史"
      action: write_to_database
      params:
        table: "social_posts"
        data:
          article_id: "{{ article.id }}"
          platforms: ["twitter", "linkedin"]
          published_at: "{{ now }}"

示例 4:JSON 格式的自定义命令

如果您更喜欢 JSON 格式:

json
{
  "commands": [
    {
      "name": "auto-report",
      "trigger": "cron",
      "schedule": "0 8 * * *",
      "timezone": "Asia/Shanghai",
      "action": "generate_report",
      "parameters": {
        "target": "yesterday_metrics",
        "format": "pdf",
        "recipients": ["admin@example.com"],
        "include_charts": true
      },
      "retry": {
        "max_attempts": 3,
        "delay_seconds": 60
      }
    },
    {
      "name": "backup-database",
      "trigger": "cron",
      "schedule": "0 2 * * 0",
      "action": "execute_command",
      "parameters": {
        "command": "pg_dump -U openclaw openclaw > /backups/db-$(date +%Y%m%d).sql",
        "timeout": 300
      },
      "notifications": {
        "on_success": {
          "platform": "telegram",
          "message": "✅ 数据库备份成功"
        },
        "on_failure": {
          "platform": "telegram",
          "message": "❌ 数据库备份失败:{{ error }}",
          "priority": "high"
        }
      }
    },
    {
      "name": "clean-old-logs",
      "trigger": "cron",
      "schedule": "0 3 1 * *",
      "action": "cleanup",
      "parameters": {
        "directory": "/app/logs",
        "pattern": "*.log",
        "older_than_days": 30,
        "dry_run": false
      }
    }
  ]
}

3.3 高级工作流特性

条件分支

yaml
steps:
  - name: "检查温度"
    action: get_weather
    output: weather
  
  - name: "条件判断"
    action: conditional
    conditions:
      - if: "{{ weather.temperature }} > 30"
        then:
          - action: send_message
            params:
              message: "🌡️ 高温预警!今天气温高达 {{ weather.temperature }}°C"
      - if: "{{ weather.temperature }} < 10"
        then:
          - action: send_message
            params:
              message: "🥶 低温提醒!注意保暖,今天气温 {{ weather.temperature }}°C"
      - else:
          - action: send_message
            params:
              message: "🌤️ 今天天气宜人,气温 {{ weather.temperature }}°C"

并行执行

yaml
steps:
  - name: "并行获取数据"
    action: parallel
    tasks:
      - name: "获取天气"
        action: get_weather
        output: weather
      - name: "获取新闻"
        action: get_news
        output: news
      - name: "获取股票"
        action: get_stocks
        output: stocks
  
  - name: "整合数据"
    action: merge_data
    params:
      sources: ["weather", "news", "stocks"]

错误处理

yaml
steps:
  - name: "主要任务"
    action: complex_task
    on_error:
      strategy: "retry"
      max_retries: 3
      retry_delay: 30
      fallback:
        - name: "备用方案"
          action: alternative_task
        - name: "通知管理员"
          action: send_alert
          params:
            message: "主要任务失败,已启用备用方案"

3.4 工作流管理命令

bash
# 列出所有工作流
docker exec -it openclaw openclaw workflow list

# 查看工作流详情
docker exec -it openclaw openclaw workflow show daily-report

# 手动触发工作流
docker exec -it openclaw openclaw workflow run daily-report

# 禁用工作流
docker exec -it openclaw openclaw workflow disable daily-report

# 启用工作流
docker exec -it openclaw openclaw workflow enable daily-report

# 删除工作流
docker exec -it openclaw openclaw workflow delete old-workflow

# 导入工作流
docker exec -it openclaw openclaw workflow import /path/to/workflow.yaml

# 导出工作流
docker exec -it openclaw openclaw workflow export daily-report > daily-report.yaml

4. 多任务并发调度与性能优化

如果您的 VPS 性能强劲(如 4核 8G 以上),可以通过调整配置来显著提升 OpenClaw 的处理能力。

4.1 调整并发限制

编辑 docker-compose.yml 文件,增加环境变量参数:

yaml
services:
  openclaw:
    # ... 其他配置 ...
    environment:
      - MAX_CONCURRENT_TASKS=50        # 最大并发任务数
      - MEMORY_LIMIT=4096M             # 内存限制
      - CPU_LIMIT=3.5                  # CPU 限制(核数)
      - WORKER_THREADS=8               # 工作线程数
      - QUEUE_SIZE=1000                # 任务队列大小
      - TASK_TIMEOUT=300               # 任务超时时间(秒)
    deploy:
      resources:
        limits:
          cpus: '4.0'
          memory: 4G
        reservations:
          cpus: '1.0'
          memory: 1G

参数说明

参数说明推荐值
MAX_CONCURRENT_TASKS最大并发任务数1核: 5, 2核: 10, 4核: 50
MEMORY_LIMIT内存限制根据可用内存的 50-70%
CPU_LIMITCPU 限制总核数的 80%
WORKER_THREADS工作线程数CPU 核数的 2 倍
QUEUE_SIZE任务队列大小100-1000
TASK_TIMEOUT单个任务超时60-600 秒

更改后,重新应用配置:

bash
cd /opt/openclaw
docker compose up -d

4.2 数据库优化

SQLite 优化(小型部署)

sql
-- 连接到 SQLite 数据库
docker exec -it openclaw sqlite3 /app/data/database.db

-- 启用 WAL 模式(提高并发性能)
PRAGMA journal_mode=WAL;

-- 设置同步模式
PRAGMA synchronous=NORMAL;

-- 调整缓存大小(单位:页,通常 4KB/页)
PRAGMA cache_size=-64000;  -- 64MB

-- 优化查询
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
CREATE INDEX IF NOT EXISTS idx_tasks_created ON tasks(created_at);
CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp);

-- 定期维护
VACUUM;
ANALYZE;

PostgreSQL 优化(中大型部署)

yaml
# docker-compose.yml 中添加 PostgreSQL 服务
services:
  db:
    image: postgres:15-alpine
    container_name: openclaw-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: openclaw
      POSTGRES_USER: openclaw
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    command:
      - postgres
      - -c
      - max_connections=200
      - -c
      - shared_buffers=512MB
      - -c
      - effective_cache_size=1536MB
      - -c
      - maintenance_work_mem=128MB
      - -c
      - checkpoint_completion_target=0.9
      - -c
      - wal_buffers=16MB
      - -c
      - default_statistics_target=100
      - -c
      - random_page_cost=1.1
      - -c
      - effective_io_concurrency=200
      - -c
      - work_mem=4MB
      - -c
      - min_wal_size=1GB
      - -c
      - max_wal_size=4GB
    networks:
      - openclaw-network

4.3 缓存策略

启用 Redis 缓存

yaml
services:
  redis:
    image: redis:7-alpine
    container_name: openclaw-redis
    restart: unless-stopped
    command: >
      redis-server
      --maxmemory 512mb
      --maxmemory-policy allkeys-lru
      --appendonly yes
      --save 900 1
      --save 300 10
      --save 60 10000
    volumes:
      - ./redis-data:/data
    networks:
      - openclaw-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 3

  openclaw:
    # ... 其他配置 ...
    environment:
      - CACHE_BACKEND=redis
      - REDIS_URL=redis://redis:6379/0
      - CACHE_TTL=3600  # 缓存过期时间(秒)
    depends_on:
      redis:
        condition: service_healthy

缓存键策略

python
# 示例:缓存 API 响应
cache_key = f"api_response:{endpoint}:{hash(params)}"
cached_result = redis.get(cache_key)

if cached_result:
    return json.loads(cached_result)
else:
    result = fetch_from_api(endpoint, params)
    redis.setex(cache_key, 3600, json.dumps(result))  # 缓存 1 小时
    return result

4.4 负载均衡(多实例部署)

对于高负载场景,可以部署多个 OpenClaw 实例:

yaml
services:
  openclaw-1:
    image: openclaw/core:latest
    container_name: openclaw-1
    ports:
      - "8081:8080"
    environment:
      - INSTANCE_ID=1
      - MAX_CONCURRENT_TASKS=25
    volumes:
      - ./data-1:/app/data
      - ./config:/app/config
    networks:
      - openclaw-network

  openclaw-2:
    image: openclaw/core:latest
    container_name: openclaw-2
    ports:
      - "8082:8080"
    environment:
      - INSTANCE_ID=2
      - MAX_CONCURRENT_TASKS=25
    volumes:
      - ./data-2:/app/data
      - ./config:/app/config
    networks:
      - openclaw-network

  nginx:
    image: nginx:alpine
    container_name: openclaw-lb
    ports:
      - "8080:80"
    volumes:
      - ./nginx-lb.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - openclaw-1
      - openclaw-2
    networks:
      - openclaw-network

Nginx 负载均衡配置

nginx
upstream openclaw_backend {
    least_conn;  # 最少连接算法
    server openclaw-1:8080 weight=1 max_fails=3 fail_timeout=30s;
    server openclaw-2:8080 weight=1 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    
    location / {
        proxy_pass http://openclaw_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

4.5 性能监控

使用 Docker Stats

bash
# 实时监控资源使用
docker stats openclaw

# 输出示例:
# CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O
# abc123         openclaw   45.23%    1.2GiB / 4GiB      30.00%    1.5GB / 500MB

集成 Prometheus + Grafana

yaml
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: openclaw-prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./prometheus-data:/prometheus
    ports:
      - "9090:9090"
    networks:
      - openclaw-network

  grafana:
    image: grafana/grafana:latest
    container_name: openclaw-grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
    volumes:
      - ./grafana-data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - openclaw-network

Prometheus 配置

yaml
# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'openclaw'
    static_configs:
      - targets: ['openclaw:8080']
    metrics_path: '/metrics'

访问 http://your-server:3000 查看 Grafana 仪表板。


5. 高级安全配置

5.1 访问控制

IP 白名单

nginx
# Nginx 配置
location / {
    allow 192.168.1.0/24;   # 允许内网
    allow 203.0.113.0/24;   # 允许特定公网 IP
    deny all;                # 拒绝其他所有
    
    proxy_pass http://127.0.0.1:8080;
}

HTTP 基本认证

nginx
location / {
    auth_basic "OpenClaw Admin Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    proxy_pass http://127.0.0.1:8080;
}
bash
# 创建密码文件
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.htpasswd admin
# 输入密码

5.2 API 速率限制

nginx
# 定义速率限制区域
limit_req_zone $binary_remote_addr zone=openclaw_api:10m rate=10r/s;

server {
    location /api/ {
        limit_req zone=openclaw_api burst=20 nodelay;
        limit_req_status 429;
        
        proxy_pass http://127.0.0.1:8080;
    }
}

5.3 防止 DDoS 攻击

nginx
# 限制连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location / {
        limit_conn addr 10;  # 每个 IP 最多 10 个并发连接
        limit_conn_status 429;
        
        proxy_pass http://127.0.0.1:8080;
    }
}

5.4 Web 应用防火墙(WAF)

使用 ModSecurity 增强安全性:

bash
# 安装 ModSecurity
sudo apt install libnginx-mod-http-modsecurity -y

# 启用 OWASP 核心规则集
sudo git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsecurity-crs
nginx
server {
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsecurity.conf;
    
    # ... 其他配置
}

5.5 审计日志

yaml
# OpenClaw 配置
logging:
  level: info
  format: json
  outputs:
    - type: file
      path: /app/logs/audit.log
      max_size: 100MB
      max_backups: 10
      compress: true
    - type: syslog
      address: udp://localhost:514
      facility: local0
  audit:
    enabled: true
    log_authentication: true
    log_authorization: true
    log_data_access: true
    retention_days: 90

6. 监控与日志管理

6.1 日志轮转

配置 Logrotate 防止日志文件过大:

bash
sudo nano /etc/logrotate.d/openclaw
conf
/opt/openclaw/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0644 root root
    postrotate
        docker exec openclaw kill -USR1 1
    endscript
}

6.2 集中式日志(ELK Stack)

yaml
services:
  elasticsearch:
    image: elasticsearch:8.11.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    volumes:
      - ./es-data:/usr/share/elasticsearch/data
    networks:
      - openclaw-network

  kibana:
    image: kibana:8.11.0
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - openclaw-network

  logstash:
    image: logstash:8.11.0
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
    depends_on:
      - elasticsearch
    networks:
      - openclaw-network

6.3 告警配置

yaml
# 告警规则
alerts:
  - name: "高 CPU 使用率"
    condition: "cpu_usage > 80% for 5m"
    severity: warning
    notification:
      - type: telegram
        chat_id: "${ADMIN_CHAT_ID}"
        message: "⚠️ CPU 使用率过高:{{ cpu_usage }}%"
  
  - name: "内存不足"
    condition: "memory_usage > 90% for 2m"
    severity: critical
    notification:
      - type: telegram
        chat_id: "${ADMIN_CHAT_ID}"
        message: "🚨 内存严重不足:{{ memory_usage }}%"
      - type: email
        to: "admin@example.com"
  
  - name: "服务宕机"
    condition: "service_status == down"
    severity: critical
    notification:
      - type: telegram
        chat_id: "${ADMIN_CHAT_ID}"
        message: "🚨 OpenClaw 服务已宕机!"
      - type: sms
        phone: "+86138xxxxxxxx"

7. 备份与灾难恢复

7.1 自动备份脚本

创建备份脚本:

bash
#!/bin/bash
# /opt/openclaw/scripts/backup.sh

set -e

# 配置
BACKUP_DIR="/opt/backups/openclaw"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="openclaw_backup_${DATE}.tar.gz"

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 停止服务
echo "Stopping OpenClaw..."
cd /opt/openclaw
docker compose down

# 创建备份
echo "Creating backup..."
tar -czf ${BACKUP_DIR}/${BACKUP_FILE} \
    -C /opt/openclaw \
    data/ \
    config/ \
    .env \
    docker-compose.yml

# 启动服务
echo "Starting OpenClaw..."
docker compose up -d

# 清理旧备份
echo "Cleaning old backups..."
find ${BACKUP_DIR} -name "openclaw_backup_*.tar.gz" -mtime +${RETENTION_DAYS} -delete

# 上传到云存储(可选)
# aws s3 cp ${BACKUP_DIR}/${BACKUP_FILE} s3://your-bucket/backups/

echo "Backup completed: ${BACKUP_FILE}"

设置定时任务:

bash
# 每天凌晨 2 点执行备份
chmod +x /opt/openclaw/scripts/backup.sh
crontab -e

# 添加:
0 2 * * * /opt/openclaw/scripts/backup.sh >> /var/log/openclaw-backup.log 2>&1

7.2 异地备份

bash
# 使用 rsync 同步到远程服务器
rsync -avz --delete /opt/backups/openclaw/ user@backup-server:/backups/openclaw/

# 或使用 rclone 同步到云存储
rclone sync /opt/backups/openclaw remote:backups/openclaw

7.3 灾难恢复流程

bash
# 1. 准备新服务器
ssh root@new-server

# 2. 安装 Docker
curl -fsSL https://get.docker.com | bash

# 3. 下载备份
scp user@backup-server:/backups/openclaw/latest.tar.gz /opt/

# 4. 解压备份
cd /opt
mkdir -p openclaw
tar -xzf latest.tar.gz -C openclaw

# 5. 启动服务
cd /opt/openclaw
docker compose up -d

# 6. 验证服务
docker ps
curl http://localhost:8080/health

8. 插件开发与扩展

8.1 插件结构

my-plugin/
├── plugin.yaml          # 插件元数据
├── main.py              # 主程序
├── requirements.txt     # Python 依赖
├── README.md            # 使用说明
└── tests/               # 测试文件

8.2 插件元数据

yaml
# plugin.yaml
name: my-custom-plugin
version: 1.0.0
description: 我的自定义插件
duthor: Your Name
license: MIT
min_openclaw_version: 2.0.0

entry_point: main:MyPlugin

dependencies:
  - requests>=2.28.0
  - beautifulsoup4>=4.11.0

config_schema:
  api_key:
    type: string
    required: true
    description: API 密钥
  timeout:
    type: integer
    default: 30
    description: 超时时间(秒)

8.3 插件代码示例

python
# main.py
from openclaw.plugins import PluginBase
import requests

class MyPlugin(PluginBase):
    def __init__(self, config):
        super().__init__(config)
        self.api_key = config.get('api_key')
        self.timeout = config.get('timeout', 30)
    
    def fetch_data(self, url):
        """从指定 URL 获取数据"""
        response = requests.get(
            url,
            headers={'Authorization': f'Bearer {self.api_key}'},
            timeout=self.timeout
        )
        response.raise_for_status()
        return response.json()
    
    def process(self, task):
        """处理任务"""
        url = task.get('url')
        if not url:
            raise ValueError("URL is required")
        
        data = self.fetch_data(url)
        
        # 处理数据
        result = {
            'status': 'success',
            'data': data,
            'timestamp': self.now()
        }
        
        return result
    
    def now(self):
        from datetime import datetime
        return datetime.now().isoformat()

8.4 安装和使用插件

bash
# 安装插件
docker exec -it openclaw openclaw plugin install /path/to/my-plugin

# 列出已安装插件
docker exec -it openclaw openclaw plugin list

# 启用插件
docker exec -it openclaw openclaw plugin enable my-custom-plugin

# 配置插件
docker exec -it openclaw openclaw plugin config my-custom-plugin api_key=your_key

# 测试插件
docker exec -it openclaw openclaw plugin test my-custom-plugin

9. 生产环境部署清单

在将 OpenClaw 部署到生产环境之前,请确保完成以下检查:

9.1 安全检查

9.2 性能检查

9.3 可靠性检查

9.4 合规检查


总结与展望

恭喜您完成了 OpenClaw 的高级配置学习!现在您已经掌握了:

域名和 HTTPS 配置 - 使用 Nginx、1Panel 或 Caddy 绑定域名
自定义工作流 - 创建复杂的自动化任务
性能优化 - 调整并发、缓存和数据库
安全加固 - 访问控制、速率限制和 WAF
监控告警 - 实时监控系统状态
备份恢复 - 确保数据安全
插件开发 - 扩展 OpenClaw 功能

🚀 下一步行动

  1. 实践所学 - 立即应用这些高级配置到您的 OpenClaw 实例
  2. 加入社区 - 分享您的经验和插件
  3. 持续关注 - 关注官方更新和新特性
  4. 贡献代码 - 为 OpenClaw 项目做出贡献

📚 延伸阅读

💬 获取支持


🎉 祝贺您! 您现在已经是一位 OpenClaw 高级用户了。继续探索和实践,您将能够构建出强大的自动化系统,大幅提升工作效率!

💡 提示:收藏本页面以备将来参考。如果您觉得本教程有帮助,欢迎分享给更多朋友!