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 管理等操作,替代传统终端工具,降低远程操作门槛。
-
核心能力:免密连接、后台任务执行、SFTP 文件传输、多会话管理
4. 第三方服务配置(必做)
| 服务 | 配置项 | 获取地址 |
|---|---|---|
| 火山引擎 AI | API Key/Secret、Endpoint、Model ID | console.volcengine.com/ark |
| 飞书推送 | App ID/Secret、Chat ID | open.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. 查看定时任务日志 |
通用排查步骤
-
查看容器日志:
docker logs -f news-bot(核心); -
验证配置文件:检查密钥、地址等是否正确;
-
测试网络连通性:确认容器能访问外网及第三方 API;
-
还原配置:回滚到最近正常的配置文件版本;
-
重新部署:删除旧容器,重新构建镜像启动。
安全最佳实践
1. 敏感信息保护
-
所有密钥(API Key、Secret 等)通过环境变量或本地配置文件挂载,禁止硬编码到代码中;
-
配置
.gitignore,排除.env、config/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 个月轮换一次核心密钥:
-
火山引擎 API Key/Secret;
-
飞书 App Secret;
-
服务器 SSH 密钥;
-
云服务访问密钥。
附录
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. 相关资源链接
-
SSH MCP 仓库:github.com/Echoqili/ss…
-
Trae-CN 官网:www.trae.cn/
-
火山引擎方舟大模型文档:www.volcengine.com/docs/82379/…
-
飞书开放平台文档:open.feishu.cn/document/
-
Docker 官方文档:docs.docker.com/
祝您阅读愉快! 🎉
如有问题,请在下面评论或者联系开发者email:1985694657@qq.com。