多渠道数据采集管理平台。通过可视化界面统一管理数据源、定时计划、采集任务和通知规则,底层接入 opencli CLI 工具采集国内外主流平台内容。
支持 Docker 一键运行,对本地环境零侵入。 opencli、Chrome、所有运行时依赖均已打包在镜像内,宿主机只需安装 Docker;也可直接原生运行,复用本地已有环境。
- 数据源管理 — 支持 opencli、RSS、API、Web 爬虫、CLI 五种渠道类型,可视化配置、一键触发
- 定时计划 — 结构化频率设置(每 N 分钟 / 每小时 / 每天 / 每周 / 每月 / 指定时间),支持时区和一次性执行;可为每条计划指定专用 Agent 实例
- 采集任务 — 实时查看任务状态、执行历史、错误信息;手动触发时可临时指定 Agent 实例
- 采集记录 — 归一化展示所有采集到的数据,支持状态筛选、多选批量删除、一键清空
- 节点管理 — 管理本地与远端 Agent 节点:查看在线状态、注册时间线、按站点路由绑定;支持 Docker / Shell 一键安装,WS / HTTP 双注册模式
- AI 智能体 — 采集完成后自动调用 AI 对内容进行分析、摘要、打标等处理,结果附加到记录上;支持 Claude、OpenAI、DeepSeek、Kimi、GLM、MiniMax、Ollama 等模型提供商,内置预设 Prompt 模板,占位符自动匹配各站点实际字段
- 通知推送 — 按触发事件(新记录入库 / AI 处理完成 / 任务失败)向 Webhook、邮件、飞书、钉钉、企业微信推送,各渠道结构化配置表单,支持签名验证
- 工作节点 — 分布式模式下查看 Celery Worker 状态
| 分类 | 平台 |
|---|---|
| 🇨🇳 国内 | 小红书、Bilibili、知乎、微博、V2EX、雪球、什么值得买、Boss直聘、携程、小宇宙 |
| 🌐 Public | Hacker News、BBC、Reuters |
| 🌍 Global | Twitter/X、Reddit、YouTube、LinkedIn、Yahoo Finance、Barchart |
家庭 / 办公室有多台闲置 Mac Mini,每台登录不同平台账号,通过中心统一调度:
Mac Mini A(主控) Mac Mini B Mac Mini C
┌──────────────────┐ WS ┌─────────────────┐ WS ┌─────────────────┐
│ opencli-admin │◄──────────│ opencli-agent │ │ opencli-agent │
│ 管理界面 :8030 │◄──────────│ 登录:B站/小红书 │ │ 登录:Twitter/X │
│ API :8031 │ │ 采集国内平台 │ │ 采集海外平台 │
└──────────────────┘ └─────────────────┘ └─────────────────┘
B / C 两台 Mac Mini 用 Shell 脚本一键安装 Agent(无需 Docker),WS 反向通道注册,NAT / 跨网段均可穿透。在「节点管理」按站点绑定 Agent,任务自动路由到对应机器。
本地 Mac 负责需要登录 Cookie 的国内平台,云服务器负责公开数据的高并发抓取:
本地 Mac(家庭网络) 云服务器(公网)
┌──────────────────┐ ┌──────────────────────────┐
│ opencli-agent │──── WS ─────►│ opencli-admin(中心) │
│ 登录:微博/知乎 │ │ │
│ 小红书/B站 │ │ 内置 Agent │
└──────────────────┘ │ HackerNews / RSS / BBC │
└──────────────────────────┘
敏感账号 Cookie 留在本地,公开抓取走云端,Cookie 不出内网。
一台机器(Mac / Linux)运行所有服务,内置多个 Agent 实例并行:
docker compose up -d # 启动中心 + agent-1在「节点管理」动态添加 agent-2、agent-3,各实例独立 Chrome Profile,支持同时登录同一平台的多个账号。适合个人重度用户或小团队。
无需写代码,全程可视化配置:
- 数据源 — 添加知乎热榜、HN、Twitter 列表等
- 定时计划 — 每小时执行,绑定对应 Agent 实例
- AI 智能体 — 采集完成后自动调用 DeepSeek 提取摘要、打标签
- 通知推送 — AI 处理完成后推送到飞书群 / 企业微信
每天早晨打开飞书,已处理好的信息流等你阅读。
两种启动方式,按需选择:
直接复用宿主机已有的 opencli 和 Chrome,适合本地开发。
前置要求:Python 3.11+、Node.js 18+、Playwright MCP Bridge(原生模式浏览器驱动依赖)
# 1. 复制配置文件
cp .env.example .env
# 2. 一键启动
./start.sh| 服务 | 地址 |
|---|---|
| 管理界面 | http://localhost:5173 |
| API 文档 | http://localhost:8000/docs |
脚本自动完成:创建 Python venv、安装依赖、初始化数据库、启动 Chrome CDP、后端(热重载)、前端(HMR)。
可选参数
./start.sh --no-chrome # 跳过 Chrome(RSS/API 渠道不需要)
./start.sh --no-frontend # 仅启动后端 API
./start.sh --cdp-port 9223 # 自定义 Chrome CDP 端口停止:Ctrl+C,自动关闭所有进程。
前置要求:Docker & Docker Compose
# 1. 复制配置文件
cp .env.example .env
# 2. 按需修改 .env(最少只需改 SECRET_KEY)
# 3. 启动(默认从 Docker Hub 拉取镜像)
docker compose up -d| 服务 | 地址 |
|---|---|
| 管理界面 | http://localhost:8030 |
| API 文档 | http://localhost:8031/docs |
| Agent noVNC | http://localhost:3010 |
预构建镜像发布在 Docker Hub(xjh1994/opencli-admin-{api,frontend,agent}:0.2.0),无需本地 build 即可启动。如需从源码构建:
# 本地构建模式
docker compose -f docker-compose.yml -f docker-compose.build.yml up --build -d切换版本:
IMAGE_TAG=0.2.0 docker compose up -d停止
docker compose downopencli 渠道依赖浏览器登录态,首次使用需手动登录各平台账号。登录后状态持久保存,后续无需重复操作。
| 启动方式 | 操作 |
|---|---|
| 原生 Shell | 脚本启动后 Chrome 窗口自动打开,在其中访问平台网址登录即可。登录态保存在 ~/.opencli-admin/chrome-profile/ |
| Docker 单实例 | 打开 http://localhost:3010(noVNC),在浏览器界面中访问平台网址登录 |
| Docker 多实例 | 每个实例独立 Profile,需分别登录。agent-2 → :3011,agent-3 → :3012,以此类推 |
需要登录的平台:小红书、Bilibili、知乎、微博、Twitter/X、LinkedIn、YouTube 等。Hacker News、BBC、Reuters、RSS 等公开内容无需登录。
除本地内置 Agent,还支持将任意远端机器注册为采集节点,形成分布式采集集群。
| 模式 | 原理 | 适用场景 |
|---|---|---|
| WS 反向通道 | Agent 主动 WebSocket 连接中心,中心通过长连接推送任务 | NAT / 跨网部署,Agent 无需开放入站端口 |
| HTTP 直连 | Agent 启动后 POST 注册到中心,中心直接 HTTP 请求 Agent | 局域网,中心可直接访问 Agent |
进入管理界面 → 节点管理 → 新增节点,选择安装方式和注册模式,复制命令在目标机器上执行:
Docker 安装(推荐)
# WS 模式(NAT / 跨网)
docker run -d \
--name opencli-agent \
--restart unless-stopped \
--add-host=host.docker.internal:host-gateway \
-e CENTRAL_API_URL=http://<center-ip>:8030 \
-e AGENT_REGISTER=ws \
-p 19823:19823 \
xjh1994/opencli-admin-agent:0.2.0
# HTTP 模式(局域网)
docker run -d \
--name opencli-agent \
--restart unless-stopped \
--add-host=host.docker.internal:host-gateway \
-e CENTRAL_API_URL=http://<center-ip>:8030 \
-e AGENT_REGISTER=http \
-p 19823:19823 \
xjh1994/opencli-admin-agent:0.2.0Shell 脚本安装(无 Docker 环境)
# WS 模式
curl -fsSL http://<center>:8030/api/v1/nodes/install/agent.sh | AGENT_REGISTER=ws bash
# HTTP 模式
curl -fsSL http://<center>:8030/api/v1/nodes/install/agent.sh | AGENT_REGISTER=http bash脚本自动安装 Python 依赖(支持 --user / venv 双路径),无 systemd 时后台运行。
| 变量 | 说明 | 默认值 |
|---|---|---|
CENTRAL_API_URL |
中心 API 地址(必填) | — |
AGENT_REGISTER |
注册模式:ws | http |
ws |
AGENT_PORT |
Agent 监听端口(自动跳过冲突端口) | 19823 |
AGENT_LABEL |
可读标签 | 主机名 |
HTTP_PROXY / HTTPS_PROXY |
出站代理 | — |
在节点管理页面顶部切换:
| 模式 | 说明 |
|---|---|
| 本地模式 | API 直接驱动同 Docker 网络内的内置 Agent |
| Agent 模式 | 任务分发到已注册的远端 Agent 节点执行 |
也可通过 .env 持久设置:
COLLECTION_MODE=local # 本地(默认)
COLLECTION_MODE=agent # 远端 Agent修改 .env 后需重建容器:docker compose up -d api
每个节点记录完整的上下线事件(注册 / 上线 / 离线),在节点管理页面点击「历史」查看时间线。
Agent 支持以下控制模式,在「节点管理」页面按实例配置,无需重启容器即可切换:
| 模式 | 原理 | 适用场景 | 状态 |
|---|---|---|---|
| Bridge | opencli 1.0 + daemon.js + opencli Browser Bridge 扩展 | 需要账号登录的站点(B站、小红书、微博等),Cookie 持久保存 | ✅ 已支持 |
| CDP | opencli 0.9 + Playwright 直连 Chrome DevTools Protocol | 无需登录的公开页面,链路更简单 | ✅ 已支持 |
扩展(opencli Browser Bridge)随容器启动自动加载,无需手动安装。
默认启动单个内置 Agent 实例(agent-1)。推荐通过「节点管理」页面动态新增实例。
Agent 实例路由优先级(高 → 低):
| 优先级 | 入口 | 作用 |
|---|---|---|
| 1(最高) | 数据源列表 → 触发 → Agent 实例 | 仅本次手动触发,一次性覆盖 |
| 2 | 定时计划 → 编辑计划 → Agent 实例 | 该计划每次触发固定使用指定实例 |
| 3 | 节点管理 → 站点绑定 | 按站点自动路由 |
| 4(兜底) | — | 自动分配空闲实例(负载均衡) |
推荐工作流:在「节点管理」页将站点绑定到对应 Agent 实例一次,之后所有涉及该站点的任务均自动路由。
浏览器 Profile 持久化
每个 Agent 实例的 Profile(Cookies、LocalStorage、扩展数据等)保存在独立 Docker volume 中(agent_profile_1、agent_profile_2…),容器重启、镜像升级均不会丢失登录状态。
| 服务 | 默认端口 | .env 变量 |
|---|---|---|
| 管理界面 | 8030 | FRONTEND_PORT |
| API | 8031 | API_PORT |
| Agent noVNC(实例 1) | 3010 | NOVNC_PORT |
| Agent noVNC(实例 N) | 3010 + N−1 | 自动递增 |
| 远端 Agent | 19823 | AGENT_PORT |
编辑 .env 文件:
# 应用密钥(生产环境必须修改)
SECRET_KEY=your-random-secret-key
# 中心对外地址(远端 Agent 注册时使用,留空则自动从请求头推断)
PUBLIC_URL=http://192.168.1.1:8031
# 采集模式
COLLECTION_MODE=local # local(默认)| agent
# 任务执行模式
TASK_EXECUTOR=local # local(默认)| celery
# AI 智能体所需密钥
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...完整配置项参见 .env.example。
任务在 API 进程内 asyncio 执行,无需额外依赖,适合单机部署。
TASK_EXECUTOR=local任务通过 Celery + Redis 分发到 Worker 节点,适合高并发或多机部署。
TASK_EXECUTOR=celery
# Docker 模式下额外启动 redis + worker + beat
docker compose --profile celery up -d┌─────────────────────────────────────────────────────────────────────┐
│ 用户浏览器 │
└──────────────────────────────┬──────────────────────────────────────┘
│ HTTP
┌──────────────────────────────▼──────────────────────────────────────┐
│ Frontend(React) │
│ Dashboard · 数据源 · 任务 · 记录 · 计划 · 节点 · 通知 │
└──────────────────────────────┬──────────────────────────────────────┘
│ REST API
┌──────────────────────────────▼──────────────────────────────────────┐
│ Backend API(FastAPI) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ Scheduler│ │ Pipeline │ │ AI 处理 │ │ 通知分发 │ │
│ │ (定时/ │ │ collect │ │ Claude/ │ │ Webhook/飞书/ │ │
│ │ webhook)│ │ →store │ │ OpenAI/ │ │ 钉钉/企微/Email │ │
│ └──────────┘ └────┬─────┘ │ Ollama… │ └────────────────────┘ │
│ │ └──────────┘ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 渠道插件(Channels) │ │
│ │ opencli · RSS · REST API · Web 爬虫 · 通用 CLI │ │
│ └──────────────────────────────────────────────────────────────┘ │
└──────┬────────────────────┬───────────────────────────────────┬─────┘
│ │ │
│ CDP/Bridge │ WS 反向通道 / HTTP 直连 │ SQLite /
▼ ▼ ▼ PostgreSQL
┌─────────────┐ ┌──────────────────────┐ ┌───────────────┐
│ 内置 Agent │ │ 远端边缘节点 │ │ 数据库 │
│ (Docker) │ │ (Docker / Shell) │ │ │
│ │ │ │ └───────────────┘
│ ┌─────────┐ │ │ ┌──────────────────┐ │
│ │ Chrome │ │ │ │ agent_server.py │ │
│ │Bridge / │ │ │ │ WS ←─── 中心 │ │
│ │ CDP │ │ │ │ HTTP ──→ 中心 │ │
│ └────┬────┘ │ │ └───────┬──────────┘ │
└──────┼──────┘ └─────────┼────────────┘
│ │
▼ ▼
opencli CLI opencli CLI
目标网站(国内外平台) 目标网站(国内外平台)
| 层次 | 技术 |
|---|---|
| 前端 | React 18 + TypeScript + Vite + Tailwind CSS |
| 后端 | FastAPI + SQLAlchemy 2.0 (async) |
| 数据库 | SQLite(默认)/ PostgreSQL |
| 任务队列 | asyncio(单机)/ Celery + Redis(分布式) |
| Agent | Chromium + noVNC + opencli(Bridge/CDP 双模式,WS/HTTP 双注册模式) |
| 部署 | 原生 Shell / Docker Compose |
触发方式
├─ 手动触发(可临时指定 Agent 实例)
├─ 定时计划(cron,可绑定 Agent 实例)
└─ Webhook(HMAC 签名验证)
↓
Agent 路由(opencli 渠道)
├─ 手动指定 > 计划绑定 > 站点绑定(节点管理页)> 自动分配
↓
渠道采集
├─ 本地模式 → 直接驱动内置 Agent(bridge / cdp)
├─ Agent 模式 → 派发到注册节点
│ ├─ WS 反向通道(NAT 友好)
│ └─ HTTP 直连(局域网)
├─ RSS — feedparser
├─ API — REST / GraphQL 直连
├─ Web 爬虫 — httpx + BeautifulSoup
└─ CLI — 通用命令行工具包装
↓
数据归一化
└─ 标准字段:title / url / content / author / published_at
扩展字段:extra_* (各站点特有,如 rank / heat / play 等)
↓
去重存储(SHA-256 内容哈希)
↓
AI 智能体处理(可选)
└─ 支持:Claude · OpenAI · DeepSeek · Kimi · GLM · MiniMax · Ollama · 自定义
↓
通知推送(可选,按触发事件 + 数据源过滤)
└─ 渠道:Webhook · 飞书 · 钉钉 · 企业微信 · Email
├── backend/
│ ├── api/v1/ # FastAPI 路由(sources / tasks / records / schedules /
│ │ # nodes / browsers / notifications / workers / dashboard)
│ ├── agent_server.py # 边缘 Agent 服务(运行在远端节点,WS/HTTP 双注册)
│ ├── browser_pool.py # Agent 浏览器池(LocalBrowserPool)
│ ├── channels/ # 渠道实现(opencli / rss / api / web_scraper / cli)
│ ├── executor/ # 任务执行器(local / celery)
│ ├── models/ # SQLAlchemy 模型(含 EdgeNode / EdgeNodeEvent)
│ ├── pipeline/ # 采集流水线(collect → normalize → store → ai → notify)
│ ├── scheduler.py # 本地异步调度器
│ └── worker/ # Celery 任务定义
├── frontend/
│ └── src/
│ ├── pages/ # 页面组件(含 NodesPage 节点管理)
│ ├── components/ # 公共组件
│ └── api/ # API 客户端
├── scripts/
│ └── install-agent.sh # 一键安装 Agent(Docker / Shell,WS / HTTP)
├── docker-compose.yml
├── start.sh # 原生 shell 启动脚本
└── .env.example


