Skip to content

🚀 使用 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 内容,减少重复请求,提升访问速度。

核心特点

  1. 丰富的订阅源:内置数千种网站的 RSS 规则(如 GitHub、B 站、知乎、新闻站点等),支持自定义规则扩展;
  2. 动态内容支持:通过 Browserless Chrome 渲染 JavaScript 生成的内容,解决静态爬虫无法获取动态数据的问题;
  3. 缓存加速:基于 Redis 缓存 RSS 内容,降低源站压力,提升订阅加载速度;
  4. 轻量部署:容器化部署,三个服务总资源占用低(1 核 2GB 内存即可稳定运行);
  5. 高可用性:配置健康检查与自动重启,服务异常时自动恢复;
  6. 开源免费:完全开源,支持二次开发与自定义规则。

📋 部署前准备

1.环境要求 确保你的服务器已安装 DockerDocker Compose。你可以通过在终端执行 docker -vdocker 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_TYPEREDIS_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)验证服务可用性

  1. 访问健康检查接口:打开浏览器或执行 curl http://服务器IP:1200/healthz,返回 OK 说明 RSSHub 运行正常;
  2. 访问默认 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” 等):

  1. 打开 RSS 阅读器,点击 “添加订阅”;
  2. 粘贴 RSS 源 URL(如 http://192.168.1.100:1200/bilibili/user/video/15677353);
  3. 确认添加后,阅读器会定期同步该源的更新内容。

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 Errorno 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 未正常工作。解决

    1. 检查 Browserless 容器状态:docker compose ps browserless,确保状态为 Up
    2. 查看 Browserless 日志:docker compose logs browserless,若有 “Chrome 启动失败”,重启容器:docker compose restart browserless
    3. 原因 2:缓存未更新(内容停留在旧版本)。解决:清理 Redis 缓存:docker exec -it rsshub_redis_1 redis-cli flushall,等待 1 分钟后重新访问。

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 官方文档