轻松上手OpenClaw之抓取新闻

17 阅读7分钟

OpenClaw + Trae-CN + SSH MCP:新闻抓取与推送系统技术指南

基于 Trae-CN IDE 和 SSH MCP 工具,实现 OpenClaw 新闻推送系统的开发、部署和运维全流程


📋 目录

  • 项目简介
  • 环境准备
  • 本地开发配置
  • SSH MCP 配置
  • 服务器部署
  • 日常运维
  • 故障排查
  • 安全最佳实践
  • 附录

项目简介

核心能力

该项目是一款自动化新闻抓取与推送系统,聚焦实用场景落地,核心功能包括:

  • 🕷️ 多源新闻抓取:从 ZAKER 等平台自动抓取最新资讯,支持自定义抓取数量;
  • 🤖 AI 智能处理:集成火山引擎方舟大模型,完成新闻分类、摘要生成及配图制作;
  • 📱 多端推送:对接飞书开放平台,将处理后的新闻推送到指定群聊;
  • ⏰ 定时调度:默认每天 10:30/22:30 自动执行,支持自定义 Cron 表达式;
  • 📊 数据留存:自动存储新闻历史记录、执行日志及生成的图片文件。

Trae快速部署OpenClaw

开启极简养虾,用 TRAE 快速部署 OpenClaw

技术栈说明

模块核心技术
后端开发Node.js + Axios(请求)+ Cheerio(解析)
AI 能力火山引擎方舟大模型 API
可视化Canvas(新闻摘要图生成)
消息推送飞书开放平台 API
部署运维Docker/Docker Compose
开发工具链Trae-CN IDE + SSH MCP(远程管理)

环境准备

1. 本地开发环境

必备软件(版本要求)
# Node.js (v22+,建议 LTS 版本)
node -v
# Git (任意稳定版本)
git --version
# Trae-CN IDE (最新版)
# 下载地址:https://www.trae.cn/
可选工具(提升效率)
  • Windows:Windows Terminal + PowerShell 7+

  • Mac/Linux:系统自带终端 + zsh/bash

2. 服务器环境

基础规格要求
  • 操作系统:Ubuntu 20.04+/CentOS 7+(Linux 发行版)

  • 容器引擎:Docker 20.10+、Docker Compose v2+

  • 资源配置:内存 ≥ 1GB,磁盘 ≥ 10GB,需外网访问权限

环境校验命令

# 检查 Docker 版本
docker -v
docker compose version
# 检查网络连通性
ping -c 2 www.baidu.com

3. SSH MCP 工具

SSH 是 Trae-CN 内置的远程服务器管理MCP插件,可一站式完成 SSH 连接、命令执行、文件传输、Docker 管理等操作,替代传统终端工具,降低远程操作门槛。

  • 仓库地址:github.com/Echoqili/ss…

  • 核心能力:免密连接、后台任务执行、SFTP 文件传输、多会话管理

4. 第三方服务配置(必做)

服务配置项获取地址
火山引擎 AIAPI Key/Secret、Endpoint、Model IDconsole.volcengine.com/ark
飞书推送App ID/Secret、Chat IDopen.feishu.cn/
腾讯云(可选)CloudBase 环境 ID、密钥console.cloud.tencent.com/cloudbase
⚠️ 所有密钥需妥善保管,禁止提交到代码仓库!

本地开发配置

1. 代码拉取与依赖安装


# 克隆代码仓库(以 Gitee 为例)
git clone https://gitee.com/xxx/openclaw-feishu.git
cd openclaw-feishu
# 安装项目依赖
npm install

2. 环境变量配置


# 复制模板文件
cp .env.example .env
# 编辑配置文件(替换为实际值)
# Windows:notepad .env
# Mac/Linux:vim .env
.env 核心配置示例

# 火山引擎 AI 配置
VOLCANO_API_KEY=your_api_key
VOLCANO_API_SECRET=your_api_secret
VOLCANO_ENDPOINT=https://ark.cn-beijing.volces.com/api/v3/chat/completions
VOLCANO_MODEL=your_model_id

# 飞书配置
FEISHU_APP_ID=your_app_id
FEISHU_APP_SECRET=your_app_secret
FEISHU_CHAT_IDS=chat_id1,chat_id2

# 业务配置
NEWS_LIMIT=50          # 单次抓取新闻数量
CRON_EXPRESSION=30 10,22 * * *  # 定时任务表达式

3. 本地测试与调试


# 测试模式(仅执行逻辑,不实际推送)
npm run test
# 手动执行一次完整流程
npm run once
# 开发模式(监听文件变化,自动重启)
npm run dev

4. Trae调试配置

在项目根目录创建 .vscode/launch.json,支持一键调试:


{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "执行新闻推送",
      "program": "${workspaceFolder}/src/main.js",
      "args": ["--once"],
      "envFile": "${workspaceFolder}/.env",
      "console": "integratedTerminal"
    }
  ]
}

SSH MCP 配置

1. 基础连接配置(Trae内操作)

通过 Trae-CN 调用 SSH MCP 工具,完成服务器连接配置:


// 1. 配置服务器信息(执行后自动保存)
mcp_ssh_ssh_config({
  host: "你的服务器IP",
  port: 22,
  username: "root", // 建议使用非 root 用户
  password: "你的服务器密码" // 或使用 private_key_path 指定密钥文件
});

// 2. 建立 SSH 连接
const session = await mcp_ssh_ssh_connect({
  host: "你的服务器IP",
  username: "root"
});
// 保存 session_id,后续操作需使用
console.log("会话ID:", session.session_id);

2. 核心操作示例


// 执行远程命令(查看 Docker 容器)
await mcp_ssh_ssh_execute({
  session_id: session.session_id,
  command: "docker ps | grep news-bot"
});

// 上传本地配置文件到服务器
await mcp_ssh_ssh_file_transfer({
  session_id: session.session_id,
  local_path: "./config/config.json",
  remote_path: "/root/openclaw/config/config.json",
  direction: "upload"
});

// 后台执行 Docker 构建任务
await mcp_ssh_ssh_background_task({
  session_id: session.session_id,
  command: "cd /root/openclaw && docker build -t news-bot:latest ."
});

服务器部署

方式一:SSH MCP 一键部署(推荐)


// 1. 连接服务器
const session = await mcp_ssh_ssh_connect({
  host: "你的服务器IP",
  username: "root",
  password: "你的密码"
});

// 2. 拉取代码 + 构建镜像 + 启动容器
await mcp_ssh_ssh_execute({
  session_id: session.session_id,
  command: `
    # 创建项目目录
    mkdir -p /root/openclaw && cd /root/openclaw
    # 拉取最新代码
    git clone https://gitee.com/xxx/openclaw-feishu.git .
    # 构建 Docker 镜像
    docker build -t news-bot:latest .
    # 停止旧容器(如有)
    docker stop news-bot || true && docker rm news-bot || true
    # 启动新容器
    docker run -d \\
      --name news-bot \\
      -v $(pwd)/config/config.json:/app/config/config.json \\
      -v $(pwd)/output:/app/output \\
      -v $(pwd)/logs:/app/logs \\
      -e TZ=Asia/Shanghai \\
      --restart unless-stopped \\
      news-bot:latest
  `
});

方式二:Docker Compose 部署(更易维护)

1. 创建 docker-compose.yml

version: '3.8'
services:
  news-bot:
    build: .
    image: news-bot:latest
    container_name: news-bot
    volumes:
      - ./config/config.json:/app/config/config.json  # 配置文件挂载
      - ./output:/app/output                          # 图片输出目录
      - ./logs:/app/logs                              # 日志目录
      - ./history:/app/history                        # 历史记录目录
    environment:
      - TZ=Asia/Shanghai  # 时区配置(避免定时任务偏差)
    restart: unless-stopped  # 异常重启策略
    network_mode: bridge
2. 执行部署

# 上传 docker-compose.yml 到服务器 /root/openclaw 目录
# 执行部署命令
cd /root/openclaw
docker compose up -d --build

方式三:一键部署脚本

创建 deploy.sh 脚本,简化重复部署操作:


#!/bin/bash
set -e  # 遇到错误立即退出

echo "===== OpenClaw 部署开始 ====="
cd /root/openclaw

# 拉取最新代码
git pull gitee master

# 停止并删除旧容器
docker stop news-bot || true
docker rm news-bot || true

# 构建镜像
docker build -t news-bot:latest .

# 启动容器
docker run -d \
  --name news-bot \
  -v $(pwd)/config/config.json:/app/config/config.json \
  -v $(pwd)/output:/app/output \
  -v $(pwd)/logs:/app/logs \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  news-bot:latest

echo "===== 部署完成 ====="
echo "容器状态:$(docker ps | grep news-bot || echo '启动失败')"
echo "查看日志:docker logs -f news-bot"

赋予执行权限并运行:


chmod +x deploy.sh
./deploy.sh

日常运维

1. 核心运维命令


# 查看容器运行状态
docker ps | grep news-bot
# 实时查看日志(排查问题必备)
docker logs -f news-bot
# 查看指定时间段日志
docker logs --since "2026-03-01" news-bot
# 手动触发一次推送
docker exec news-bot node src/main.js --once
# 进入容器调试
docker exec -it news-bot sh

2. 数据管理与备份


# 查看新闻历史记录
cat /root/openclaw/history/sent_news.json
# 日志备份(按日期)
cp /root/openclaw/logs/news-$(date +%Y-%m-%d).log /backup/logs/
# 配置文件备份
cp /root/openclaw/config/config.json /backup/config-$(date +%Y%m%d).json

3. 版本更新


# 进入项目目录
cd /root/openclaw
# 拉取最新代码
git pull gitee master
# 重启容器生效
docker restart news-bot

故障排查

常见问题及解决方案

问题现象排查方向解决方案
容器无法启动配置文件错误、端口占用、镜像构建失败1. 查看启动日志:docker logs news-bot
2. 检查 config.json 格式
3. 重新构建镜像
新闻抓取失败(EAI_AGAIN 错误)网络不通、DNS 解析失败1. 容器内测试网络:docker exec news-bot ping www.baidu.com
2. 重启 Docker 网络:systemctl restart docker
飞书推送失败App ID/Secret 错误、Chat ID 无权限1. 验证飞书配置:核对开放平台信息
2. 检查机器人是否在群聊中
3. 测试飞书 API 连通性
AI 分类失败火山引擎密钥错误、接口限流1. 核对 API Key/Secret
2. 查看火山引擎控制台调用记录
3. 检查接口请求格式
定时任务不执行时区错误、Cron 表达式错误1. 检查容器时区:docker exec news-bot date
2. 验证 Cron 表达式:crontab.guru/
3.
查看定时任务日志

通用排查步骤

  1. 查看容器日志:docker logs -f news-bot(核心);

  2. 验证配置文件:检查密钥、地址等是否正确;

  3. 测试网络连通性:确认容器能访问外网及第三方 API;

  4. 还原配置:回滚到最近正常的配置文件版本;

  5. 重新部署:删除旧容器,重新构建镜像启动。


安全最佳实践

1. 敏感信息保护

  • 所有密钥(API Key、Secret 等)通过环境变量或本地配置文件挂载,禁止硬编码到代码中

  • 配置 .gitignore,排除 .envconfig/config.json 等敏感文件;

  • 若敏感信息意外提交,立即轮换密钥,并通过 git rm --cached 移除仓库记录。

2. 服务器安全

  • 禁用 root 密码登录,使用 SSH 密钥认证;

  • 配置防火墙,仅开放必要端口(22/80/443);

  • 定期更新系统和 Docker 版本:apt update && apt upgrade -y

  • 限制容器权限:使用非 root 用户运行容器,配置只读文件系统(可选)。

3. Docker 安全


# 限制容器资源(避免占用过多服务器资源)
docker run --memory=1g --cpus=1.0 news-bot
# 使用非 root 用户运行容器(Dockerfile 中配置)
USER node
# 启用容器日志轮转(避免日志占满磁盘)
echo '{"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"3"}}' > /etc/docker/daemon.json
systemctl restart docker

4. 密钥轮换

建议每 3-6 个月轮换一次核心密钥:

  1. 火山引擎 API Key/Secret;

  2. 飞书 App Secret;

  3. 服务器 SSH 密钥;

  4. 云服务访问密钥。


附录

A. 常用命令速查表

场景命令示例
本地开发npm run dev / npm run test
Git 操作git pull gitee master / git commit -m "更新"
Docker 操作docker logs -f news-bot / docker restart news-bot
远程操作(SSH MCP)mcp_ssh_ssh_connect / mcp_ssh_ssh_file_transfer

B. 配置文件完整示例(config.json)


{
  "volcanoApiKey": "your_api_key",
  "volcanoApiSecret": "your_api_secret",
  "volcanoEndpoint": "https://ark.cn-beijing.volces.com/api/v3/chat/completions",
  "volcanoModel": "ep-20260304123456-xxxx",
  "feishuAppId": "cli_xxxx",
  "feishuAppSecret": "xxxx",
  "feishuChatIds": ["oc_xxxx"],
  "newsLimit": 50,
  "selectedLimit": 30,
  "outputDir": "./output",
  "historyDir": "./history",
  "logsDir": "./logs",
  "cronExpression": "30 10,22 * * *"
}

C. 相关资源链接

祝您阅读愉快! 🎉

如有问题,请在下面评论或者联系开发者email:1985694657@qq.com