🚀 使用 Docker Compose 部署 RSSHub(RSS 聚合服务)
🚀 使用 Docker Compose 部署 RSSHub
RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,它能够为众多不符合 RSS 标准的现代网站内容生成 RSS 订阅源,实现"万物皆可 RSS"。 借助活跃的开源社区力量,RSSHub 目前已适配数百家网站的上千项内容。
📦 项目简介
核心特点
| 特点类别 | 具体说明 |
|---|---|
| 内容覆盖 | 支持大量网站,包括但不限于社交媒体、新闻、博客、论坛等,方便用户通过RSS订阅器(如FreshRSS、Tiny Tiny RSS)获取更新。 |
| 扩展性 | 采用模块化设计,新的 RSS 规则可以通过编写 JavaScript 程序来扩展。 |
| 部署灵活 | 支持多种部署方式,包括 Docker 容器化部署、Docker Compose 编排部署(推荐)、手动部署等。 |
| 生态工具 | 提供 RSSHub-Radar(浏览器插件)、RSSAID(Android)、RSSBUD(iOS)等辅助工具,帮助用户快速发现和订阅 RSS。 |
自建优势 * 稳定性提升:避免因官方公共实例访问压力大、目标站点反爬策略或网络问题导致的访问限制或中断。 * 自定义需求:可以针对一些特殊网址自定义解析规则。 * 隐私与控制:所有数据掌握在自己手中,服务自控,满足隐私保护需求。
📦 项目简介2
RSSHub 是一款开源的 RSS 订阅源聚合工具,核心功能是将各类网站、平台(如社交媒体、新闻站点、博客等)的内容转换为标准化 RSS 订阅源,解决 “无官方 RSS 源” 或 “源格式不统一” 的问题。通过 RSSHub,用户可在一个 RSS 阅读器中集中订阅所有关注的内容,无需逐个访问平台。
本次部署为 完整生产级方案,包含三大组件:
- RSSHub 核心服务:提供 RSS 源生成与接口服务;
- Browserless Chrome:提供无头浏览器环境,用于渲染 JavaScript 动态加载的内容(如需要登录或动态渲染的页面);
- Redis 缓存:缓存生成的 RSS 内容,减少重复请求,提升访问速度。
核心特点
- 丰富的订阅源:内置数千种网站的 RSS 规则(如 GitHub、B 站、知乎、新闻站点等),支持自定义规则扩展;
- 动态内容支持:通过 Browserless Chrome 渲染 JavaScript 生成的内容,解决静态爬虫无法获取动态数据的问题;
- 缓存加速:基于 Redis 缓存 RSS 内容,降低源站压力,提升订阅加载速度;
- 轻量部署:容器化部署,三个服务总资源占用低(1 核 2GB 内存即可稳定运行);
- 高可用性:配置健康检查与自动重启,服务异常时自动恢复;
- 开源免费:完全开源,支持二次开发与自定义规则。
📋 部署前准备
1.环境要求
确保你的服务器已安装 Docker 和 Docker Compose。你可以通过在终端执行 docker -v 和 docker compose version 来验证。对于 CentOS 7.6 系统,可参考以下步骤安装:
# 更新系统并安装依赖
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 官方仓库并安装
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose (版本号可更新至最新稳定版)
sudo curl -SL https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2.资源检查
* 端口:确认 1200 端口未被其他程序占用,或计划使用其他端口。
* 磁盘空间:确保有足够空间存储 Redis 缓存数据。
* 网络:服务器需要能正常访问目标网站。
⚙️ 配置 Docker Compose
1.创建项目目录
创建一个目录(如 rsshub)用于存放所有相关文件,并进入该目录。
mkdir -p /opt/rsshub && cd /opt/rsshub
2.创建 docker-compose.yml 文件
将提供的配置内容粘贴到新创建的 docker-compose.yml 文件中。这个配置定义了三个服务:
* rsshub:主服务,使用 diygod/rsshub:chromium-bundled 镜像,此镜像已包含 Puppeteer,可用于处理需要浏览器渲染的页面。
* browserless:一个无头 Chrome 服务,供 RSSHub 通过 WebSocket 调用以处理需要浏览器渲染的页面。
* redis:缓存数据库,用于存储临时数据,提升访问速度并减少对目标网站的请求压力。
3.关键配置说明
* 镜像选择:配置中直接使用了 diygod/rsshub:chromium-bundled 镜像,它包含了 Chromium 浏览器,无需额外启用 browserless 服务也能处理需要浏览器渲染的路由。但配置中仍保留了 browserless 服务并通过 PUPPETEER_WS_ENDPOINT 环境变量关联,这可能为了更优的资源管理或特定功能。
* 端口映射:"1200:1200" 表示将宿主机的 1200 端口映射到 RSSHub 容器的 1200 端口。你可以按需修改宿主机端口,例如 "8080:1200"。
* 缓存配置:通过 CACHE_TYPE 和 REDIS_URL 环境变量配置 Redis 缓存,这能显著提高响应速度和减轻目标网站压力。
* 持久化存储:Redis 服务配置了名为 redis-data 的卷,确保缓存数据在容器重启后不会丢失。
* 健康检查:各服务均配置了健康检查,有助于 Docker Compose 管理服务状态。
⚙️ 配置 Docker Compose2
用户提供的配置已包含完整服务联动,核心是启用浏览器渲染与缓存,无需大幅修改,仅需理解关键参数:
1. 编写 docker-compose.yml 文件
在 /opt/rsshub 目录创建 docker-compose.yml,复制以下内容(关键项已标注说明):
services:
# 1. RSSHub 核心服务
rsshub:
# two ways to enable puppeteer:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
#image: diygod/rsshub
# 镜像选择:chromium-bundled 包含 Chrome 依赖,支持需要渲染的订阅源
image: diygod/rsshub:chromium-bundled
restart: always # 服务异常时自动重启
ports:
- "1200:1200" # 端口映射:主机 1200 → 容器 1200(RSS 服务端口)
environment:
NODE_ENV: production # 生产环境模式
CACHE_TYPE: redis # 启用 Redis 缓存(提升性能)
REDIS_URL: "redis://redis:6379/" # Redis 连接地址(通过容器名访问)
PUPPETEER_WS_ENDPOINT: "ws://browserless:3000" # 连接 Browserless Chrome(用于动态渲染) # marked
healthcheck:
# 健康检查:定期访问健康接口,确保服务可用
test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on:
- redis # 依赖 Redis 启动后再启动
- browserless # 依赖 Browserless 启动后再启动 # marked
# 2. Browserless Chrome(动态内容渲染服务)
browserless: # marked
image: browserless/chrome # 提供无头 Chrome 环境 # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked # 禁用核心转储(减少磁盘占用)
soft: 0 # marked
healthcheck:
# 健康检查:验证浏览器服务是否可用
test: ["CMD", "curl", "-f", "http://localhost:3000/pressure"]
interval: 30s
timeout: 10s
retries: 3
# 3. Redis 缓存服务
redis:
image: redis:alpine # 轻量 Alpine 版本,适合缓存场景
restart: always
volumes:
- redis-data:/data # 缓存数据持久化(命名卷,自动创建)
healthcheck:
# 健康检查:验证 Redis 连接
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 5s
# 命名卷:存储 Redis 缓存数据(自动创建,无需手动管理)
volumes:
redis-data:
2. 关键配置说明(新手必知)
| 配置项 | 作用与注意事项 |
|---|---|
image: diygod/rsshub:chromium-bundled |
必须使用此镜像!包含 Chrome 依赖,支持需要动态渲染的订阅源(如 JavaScript 加载的内容);若用基础镜像 diygod/rsshub,部分源会失效。 |
CACHE_TYPE: redis |
启用 Redis 缓存后,重复访问的 RSS 源会从缓存读取,减少源站请求与加载时间,建议保留。 |
PUPPETEER_WS_ENDPOINT |
连接 Browserless Chrome 的关键配置,删除后无法渲染动态内容,导致部分源(如需要登录的页面)无法生成 RSS。 |
depends_on |
确保 RSSHub 在 Redis 和 Browserless 启动后再启动,避免 “依赖服务未就绪” 的错误。 |
🚀 启动与验证
1.启动服务
在 docker-compose.yml 文件所在目录下,执行以下命令来后台启动所有服务:
docker-compose up -d
2.检查服务状态 使用以下命令查看容器是否正常运行:
docker-compose ps
如果状态(State)栏显示为 Up,则表明容器已成功启动。
3.查看日志 如果某个服务启动异常,可以通过日志来排查问题:
docker-compose logs rsshub # 查看RSSHub应用日志
docker-compose logs redis # 查看Redis日志
4.验证服务
在浏览器中输入 http://你的服务器IP:1200。如果看到 RSSHub 的欢迎界面,说明服务已成功运行。 你可以尝试访问一个内置的路由,例如 /005tv/zx/latest,若能返回预期的 RSS 内容,则证明所有组件工作正常。
(2)验证服务可用性
- 访问健康检查接口:打开浏览器或执行
curl http://服务器IP:1200/healthz,返回OK说明 RSSHub 运行正常; - 访问默认 RSS 源:输入
http://服务器IP:1200/baidu/news(百度新闻 RSS 源),若显示 XML 格式的 RSS 内容,说明服务正常。
🔧 基础配置与使用
1.使用自建 RSSHub 服务
在你的 RSS 阅读器(如 FreshRSS、Tiny Tiny RSS)中添加订阅时,将官方演示实例 https://rsshub.app/xxx/xxx 中的域名替换为你自建服务的地址即可,例如 http://你的服务器IP:1200/xxx/xxx。
2.配置 RSS 阅读器集成
* 一些自托管的 RSS 阅读器(如 Awesome TTRSS)可以与自建的 RSSHub 实例集成。
* 推荐使用 Docker 的桥接网络,将 RSSHub 容器和 RSS 阅读器容器接入同一自定义网络,并通过容器名称进行服务发现,例如在 Awesome TTRSS 中通过 http://rsshub:1200 访问 RSSHub,这样可以实现内网直连,降低延迟,提升安全性。
3.环境变量配置
你可以通过修改 docker-compose.yml 文件中 rsshub 服务下的 environment 部分来调整 RSSHub 的行为。例如:
* 缓存时间:可以添加 CACHE_EXPIRE: 3600 来设置缓存过期时间(秒)。
* 其他配置:如针对特定网站配置 Access Token 等,请参考 RSSHub 官方文档。
🔧 基础配置与使用2
RSSHub 的核心使用场景是 “获取订阅源 URL→添加到 RSS 阅读器”,新手可按以下步骤操作:
1. 步骤 1:获取 RSS 订阅源 URL
RSSHub 内置了大量网站的订阅规则,格式为 http://服务器IP:1200/规则路径,举例几个常用源:
- 百度新闻:
http://服务器IP:1200/baidu/news - GitHub trending(每日热门仓库):
http://服务器IP:1200/github/trending/daily - B 站 UP 主视频:
http://服务器IP:1200/bilibili/user/video/UP主ID(如 UP 主 “罗翔说刑法” ID 为 15677353,URL 为http://.../bilibili/user/video/15677353) - 知乎专栏:
http://服务器IP:1200/zhihu/column/专栏ID
查询更多规则:参考 RSSHub 官方规则列表,搜索目标网站名称即可获取规则路径。
2. 步骤 2:添加到 RSS 阅读器
将获取的 URL 添加到任意 RSS 阅读器(如 Feedly、Inoreader、国产 “轻快 RSS” 等):
- 打开 RSS 阅读器,点击 “添加订阅”;
- 粘贴 RSS 源 URL(如
http://192.168.1.100:1200/bilibili/user/video/15677353); - 确认添加后,阅读器会定期同步该源的更新内容。
3. 步骤 3:自定义规则(进阶)
若需要订阅未内置的网站,可自定义规则:
1.在部署目录创建 rules 文件夹,用于存放自定义规则文件:
mkdir -p rules && cd rules
2.创建规则文件(如 myrule.js),参考 官方规则开发文档 编写逻辑;
3.修改 docker-compose.yml,为 rsshub 服务添加规则目录挂载:
volumes:
- ./rules:/app/routes/myrules # 自定义规则挂载到容器内
4.重启服务生效:docker compose restart rsshub。
🔄 维护与管理
1.更新服务 当有新版本发布时,可以按照以下步骤更新 RSSHub 及相关服务:
# 进入docker-compose.yml所在目录
cd /opt/rsshub
# 拉取最新的RSSHub镜像 (可先指定日期标签的镜像测试稳定性)
docker-compose pull rsshub
# 重新创建并启动容器
docker-compose up -d
# 清理无用的旧镜像
docker image prune
2.数据备份
定期备份 Redis 数据至关重要。由于在 docker-compose.yml 中配置了名为 redis-data 的卷,你可以找到该卷的实际存储路径(使用 docker volume inspect rsshub_redis-data 查看 Mountpoint)并进行备份。 备份前建议执行 docker-compose exec redis redis-cli SAVE 确保数据已持久化。
3.服务卸载
如需停止并移除所有容器、网络,但保留数据卷(以便后续使用):
docker-compose down
如需彻底删除所有数据(包括数据库数据),在上述命令后加上 -v 参数:
docker-compose down -v
4. 调整缓存策略(可选)
默认缓存时间由 RSSHub 自动管理,若需自定义,可在 rsshub 服务的 environment 中添加参数:
environment:
# 示例:全局缓存时间 10 分钟(单位秒)
CACHE_EXPIRE: 600
# 针对特定规则设置缓存(如百度新闻 5 分钟)
CACHE_EXPIRE_baidu_news: 300
🐛 常见问题排查
| 问题现象 | 可能原因与解决方案 |
|---|---|
| 容器启动失败 | 1. 检查 docker-compose.yml 文件格式是否正确,例如缩进、冒号后的空格等。2. 执行 docker-compose logs [服务名] 查看具体错误日志。 |
无法访问 http://服务器IP:1200 |
1. 确认服务器防火墙是否开放了 1200 端口。2. 检查 docker-compose ps 确认所有容器状态是否为 Up。 |
部分路由解析失败,提示 Fetch Error 或 no response |
1. 目标网站结构可能已发生变化,导致 RSSHub 原有解析规则失效。 可关注 RSSHub GitHub 仓库的 Issues 或提交问题。 2. 对于需要浏览器渲染的路由,确认 browserless 服务正常运行,并且 PUPPETEER_WS_ENDPOINT 配置正确。3. 网络问题,确保你的服务器可以访问目标网站。 |
| RSSNext/Follow 项目添加自建实例报错 | 检查提供的 RSSHub 实例地址配置格式是否正确,确保没有多余的空格或特殊字符。 |
| 性能或内存问题 | 1. 检查服务器资源(CPU、内存、磁盘)使用情况。 2. 对于资源受限设备(如 Orange Pi),可考虑调整 Docker 容器资源限制,优化 Redis 缓存策略。 |
希望这篇教程能帮助你顺利搭建属于自己的 RSSHub 服务,享受高效、可控的信息订阅体验!如果在部署和使用过程中遇到更多问题,RSSHub 的官方文档和活跃的 GitHub 社区是寻求帮助的好去处。
🐛 常见问题排查2
1. 订阅源返回 “404 Not Found”
-
原因 1:规则路径错误(如拼写错误、ID 不正确)。解决:参考 官方规则列表 确认路径,例如 B 站 UP 主 ID 需为纯数字(非用户名)。
-
原因 2:该网站无内置规则,需自定义规则。解决:按 “基础配置与使用” 中的步骤编写自定义规则。
2. 订阅源内容空白或不更新
-
原因 1:源站内容需动态渲染,但 Browserless 未正常工作。解决:
- 检查 Browserless 容器状态:
docker compose ps browserless,确保状态为Up; - 查看 Browserless 日志:
docker compose logs browserless,若有 “Chrome 启动失败”,重启容器:docker compose restart browserless。 - 原因 2:缓存未更新(内容停留在旧版本)。解决:清理 Redis 缓存:
docker exec -it rsshub_redis_1 redis-cli flushall,等待 1 分钟后重新访问。
- 检查 Browserless 容器状态:
3. 服务占用内存过高(服务器卡顿)
-
原因:Browserless Chrome 渲染时占用大量内存(尤其是同时处理多个动态源)。
解决: 1. 限制 Browserless 内存使用:在
browserless服务添加deploy: resources: limits: memory: 1G; 2. 减少动态源订阅数量,或延长缓存时间(减少渲染频率)。
4. 日志显示 “请求被源站拒绝”
-
原因:源站限制频繁请求(反爬虫机制)。
解决: 1. 延长缓存时间(如
CACHE_EXPIRE: 1800即 30 分钟); 2. 为 RSSHub 添加代理(在rsshub服务的environment中添加PROXY: http://代理IP:端口)。
通过以上步骤,新手可成功部署 RSSHub 并实现多平台内容聚合。RSSHub 适合内容爱好者集中管理订阅,后续可探索自定义域名、HTTPS 配置(通过 Nginx 反向代理)等进阶功能,具体参考 RSSHub 官方文档。