先把结论给你
你的 Ubuntu 笔记本(【你的笔记本】)已经能全自动完成“每日 AI 热榜 → 20 条精选 → 8 张小红书配图”,全程不消耗任何 AI Token。整个系统通过阿里云服务器的 frp 隧道远程管理,n8n 每天 09:00 自动抓取新浪财经 7×24、新浪科技、网易要闻、百度热点四家媒体热点,用 AI 关键词过滤出 20 条后调用渲染服务出图。目前只差最后两步“接线”:飞书群机器人提醒和发布中心表写入,完成后你每天只需在手机点一下发布。
阅读地图:本文按搭建顺序分五步——①远程通道(frp 隧道)→ ②远程控制(SSH)→ ③配图渲染系统 → ④n8n 每日工作流 → ⑤半自动发布(待配项)。每步都有命令、判断标准和排障方法。
费用说明:frp 是免费开源软件,阿里云服务器只是多个端口转发,不新增任何费用;笔记本是家庭设备,电费忽略不计。唯一硬件要求:阿里云安全组和宝塔防火墙放行 3 个端口(见第二步)。
一、整体架构
【你的服务器IP】:7000
frpc 客户端
n8n 15678
工作流 id=100
网易·百度 四源→AI 过滤 20 条
端口 9100 出图
文案+图片+状态
打开即可发布
30 秒完成
二、第一步:打通远程通道(frp 隧道)
笔记本在家内网,公网无法直连,所以用一台有公网 IP 的服务器(你的阿里云)做“中转站”,把笔记本的 SSH 和 n8n 端口映射到公网。frp 分两端:frps(服务器端)和 frpc(笔记本端)。
1. 阿里云安装 frps(服务端)
cd /opt && wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz && tar -zxvf frp_0.61.1_linux_amd64.tar.gz && cd frp_0.61.1_linux_amd64 && mkdir -p /etc/frp && TOKEN=$(openssl rand -hex 16) && printf 'bindPort = 7000\nauth.method = "token"\nauth.token = "%s"\n' "$TOKEN" > /etc/frp/frps.toml && cp frps /usr/local/bin/frps && nohup /usr/local/bin/frps -c /etc/frp/frps.toml > /var/log/frps.log 2>&1 &
完成判断:执行 ss -tlnp | grep 7000,能看到 frps 监听 7000 即成功。
2. 笔记本安装 frpc(客户端)
cd /opt && wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz && tar -zxvf frp_0.61.1_linux_amd64.tar.gz && cd frp_0.61.1_linux_amd64 && sudo cp frpc /usr/local/bin/frpc
写配置(把 token 换成服务器端生成的同一把钥匙,路径 /etc/frp/frpc.toml):
serverAddr = "【你的服务器IP】"
serverPort = 7000
auth.method = "token"
auth.token = "你的TOKEN"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 15622
[[proxies]]
name = "n8n"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5678
remotePort = 15678
启动(日志写家目录避免权限问题):
nohup sudo /usr/local/bin/frpc -c /etc/frp/frpc.toml > ~/frpc.log 2>&1 &
完成判断:cat ~/frpc.log 出现 [ssh] start proxy success 和 [n8n] start proxy success 即成功。
3. 放行端口
| 端口 | 用途 | 谁监听 | 在哪里放行 |
|---|---|---|---|
| 7000 | frp 控制通道 | 阿里云 frps | 阿里云安全组 + 宝塔防火墙 |
| 15622 | SSH 远程管理笔记本 | frps 转发到笔记本 22 | 同上 |
| 15678 | n8n 网页/接口 | frps 转发到笔记本 5678 | 同上 |
4. 常见排障(实测经验)
| 现象 | 原因 | 解决 |
|---|---|---|
| Connection refused | frpc 没在运行 | 检查 ps aux | grep frpc,重新启动并看 ~/frpc.log |
| token in login doesn’t match | 两端钥匙不一致,或复制时混入隐藏字符 | 两端用 printf/tee 重写同一把新钥匙,重启两端 |
| 日志“权限不够”启动失败 | 重定向写 /var/log 无权限 | 日志改写到家目录:> ~/frpc.log |
三、第二步:远程控制(SSH 密钥)
隧道打通后,把公钥加入笔记本的 ~/.ssh/authorized_keys,即可免密全权管理笔记本:
mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '你的公钥' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
sudo systemctl enable --now ssh
之后从任何电脑可用 ssh -p 15622 用户名@【你的服务器IP】 进入笔记本。
安全提示:15622 是搭建期的“施工通道”,流水线跑稳后建议关闭公网 SSH(只留 n8n 隧道),缩小暴露面。
四、第三步:小红书配图渲染系统
配图用程序化渲染(Python + Pillow + 中文字体),不是 AI 生图——所以零 Token、零费用、秒出图,风格稳定不跑偏。
1. 两个组件
| 文件 | 作用 |
|---|---|
| ~/xhs-pipeline/render_xhs.py | 核心渲染器:读 20 条热榜 JSON,输出 8 张竖版图(1 封面 + 7 内容页,蓝底编号 + 标题 + 摘要 + 来源,风格与网站热榜页一致) |
| ~/xhs-pipeline/render_server.py | 常驻 HTTP 服务(端口 9100):n8n 容器 POST 数据过来就出图,返回 base64 图片 |
2. 启动与开机自启
cd ~/xhs-pipeline && nohup python3 render_server.py > render_server.log 2>&1 &
(crontab -l 2>/dev/null; echo '@reboot sleep 15 && cd /home/用户名/xhs-pipeline && nohup python3 render_server.py >> render_server.log 2>&1 &') | crontab -
完成判断:curl http://127.0.0.1:9100/healthz 返回 {"ok": true}。
3. 渲染效果(实测样图)



五、第四步:n8n 每日热榜工作流
1. 数据源(四源媒体独立抓取,不依赖豆包)
| 媒体源 | 接口 | 特点 |
|---|---|---|
| 新浪财经 7×24 | https://zhibo.sina.com.cn/api/zhibo/feed?zhibo_id=152 | 财经快讯 JSON,AI/科技要闻占比高,带时间 |
| 新浪科技滚动 | https://feed.mix.sina.com.cn/api/roll/get?pageid=153&lid=2516 | 科技滚动新闻 JSON,实时更新 |
| 网易要闻 | https://news.163.com/special/cm_yaowen20200213/ | 要闻 JSONP,含摘要字段 |
| 百度热点 | https://top.baidu.com/api/board?platform=wise&tab=realtime | 实时热搜词,补充大众关注点 |
2. 工作流逻辑
n8n 工作流(id=100)共两个节点:Schedule 触发器(每天 09:00)→ Code 节点(并行抓取四源媒体 → AI 关键词过滤(AI/大模型/智能体/OpenAI/芯片/机器人等)→ 科技关键词补足 → 标题去重 → 编号 1-20 → POST 172.18.0.1:9100/render 出图)。渲染服务在笔记本宿主机,n8n 容器通过网关 172.18.0.1 访问它。全程零 API Key、零飞书凭证、零 Token 消耗。
3. 导入命令
docker cp ~/xhs-pipeline/workflow_daily_hot_xhs_v3.json n8n:/tmp/wf.json
docker exec n8n n8n import:workflow --input=/tmp/wf.json
完成判断:docker exec n8n n8n list:workflow 能看到该工作流;在 n8n 网页(公网 15678)里可打开检查。
六、第五步:半自动发布(剩最后两步接线)
为什么半自动:小红书没有个人官方发布 API,全自动 RPA 有封号风险,所以策略是机器做重活、人做点发布。
| 环节 | 现状 | 需要你做的 |
|---|---|---|
| 抓取 + 配图 | 已完成(四源媒体独立抓取,无需任何凭证) | 无——第二天 09:00 自动运行 |
| 飞书提醒 | 待接线 | 在飞书群加“自定义机器人”复制 Webhook 给我 |
| 发布中心表 | 待接线 | 需要飞书开放平台 App ID/Secret(n8n 写表用;不接也能手动发布) |
| 小红书发布 | 手动 | 每天收提醒后粘贴发布(30 秒) |
☐ 飞书群添加自定义机器人,拿到 Webhook 地址
☐ 激活工作流(active=1),观察第一个 09:00 自动运行
七、日常维护清单
| 事项 | 命令/位置 |
|---|---|
| 检查渲染服务 | curl http://127.0.0.1:9100/healthz(笔记本上) |
| 检查 frpc 隧道 | tail ~/frpc.log;公网测 curl http://【你的服务器IP】:15678 |
| 查看今日配图 | ~/xhs-pipeline/output/ 目录(当日日期_xhs_01.png 起) |
| n8n 运行记录 | n8n 网页 → 左侧「Executions」查看每次执行结果 |
| 笔记本重启后 | frpc 需手动重启(或后续补 systemd 自启);渲染服务已自动拉起 |
边界提醒:四源均为公开接口,个别源偶发限流/反爬时,工作流会自动跳过该源、由其余源补足;若四源全部失败(如断网),会返回“今日无数据”并跳过出图,不影响次日。数据与图片仅用于你自己的账号发布,请勿搬运他人版权内容。