FreshRSS + RSSHub + Cloudflare Tunnel 部署记录
这篇文章记录我在一台 Ubuntu 服务器上搭建 FreshRSS + RSSHub + Cloudflare Tunnel 的完整过程,目标是:
- 自托管 RSS 阅读器(FreshRSS)
- 用 RSSHub 给无原生 RSS 的站点补源
- 通过 Cloudflare Tunnel 对外发布,尽量不直接暴露源站端口
- 给后续“每日资讯摘要 / 推送自动化”打基础
一、最终架构
1 | [Browser/Mobile] |
域名路由:
rss.yangc.cc.cd->http://freshrss:80hub.yangc.cc.cd->http://rsshub:1200
二、部署内容
1) Docker 与 Compose
服务器已安装 Docker Engine(含 compose 插件),服务运行正常。
2) 项目目录
services/rss-stack/docker-compose.ymlservices/rss-stack/.env.exampleservices/rss-stack/.gitignore
3) 服务清单
freshrss-db:PostgreSQL 16freshrss:FreshRSSrsshub-redis:Redis 7rsshub:RSSHubcloudflared:Cloudflare Tunnel Connector
当时用于调试的端口映射:
8081:80(FreshRSS)1200:1200(RSSHub)
三、关键配置
FreshRSS
TZ=Asia/Shanghai- 自动安装参数(启用 API、数据库连接、默认 admin 用户)
RSSHub
NODE_ENV=productionCACHE_TYPE=redisREDIS_URL=redis://rsshub-redis:6379/
Cloudflared
Token 模式启动:
1 | tunnel --no-autoupdate run --token ${CF_TUNNEL_TOKEN} |
四、Cloudflare Tunnel 路由
同一个 Tunnel(rss-stack)下配置两条 Public Hostname:
rss.yangc.cc.cd->http://freshrss:80hub.yangc.cc.cd->http://rsshub:1200
说明:
- 一个 Tunnel 承载多个子域名即可。
- Path 建议留空(匹配所有路径),避免误配置导致访问异常。
五、验证结果
服务状态
docker compose ps 显示 5 个容器全部正常。
健康检查
https://hub.yangc.cc.cd/healthz返回okhttps://rss.yangc.cc.cd返回302(跳转 FreshRSS 登录页)
一次典型问题
出现过“手机可访问、电脑报 ERR_CONNECTION_CLOSED”的情况,最终判断:
- 服务端与 Tunnel 正常
- 更可能是本地网络 / DNS / 代理环境问题
排查建议:
- 关闭本机代理/VPN
- 清 DNS 缓存或切换 DNS
- 无痕模式 / 更换浏览器
- 手机热点测试,排除当前网络拦截
六、完整配置示例(已脱敏)
以下配置可直接参考使用;所有密钥、密码、Token 均已替换为占位符,请按你自己的环境填写。
docker-compose.yml
1 | services: |
.env.example
1 | # Cloudflare Tunnel Token(替换为你自己的) |
七、常用运维命令
1 | # 启动 / 更新栈 |
八、下一步
- 在 FreshRSS 里按主题做分类(技术 / AI / 安全 / 产品)
- 用 RSSHub 补齐没有原生 RSS 的信源
- 固定“每日摘要模板”,形成稳定输入
- 接入 agent 定时任务,自动生成并推送日报
如果你也在做“个人信息流基础设施”,这套组合(FreshRSS + RSSHub + Tunnel)非常值得一试:成本低、可控性高、可持续迭代。
评论
评论插件加载失败
正在加载评论插件