VPS 自建 RSS 阅读器(FreshRSS/Miniflux):夺回你的信息主权(2026)

算法推荐让你信息茧房?本文讲清为什么还需要 RSS、FreshRSS 与 Miniflux 及 Tiny Tiny RSS 的对比、VPS 上 Docker 部署、订阅源管理、移动端配合(Reeder/NetNewsWire)以及用 RSSHub 抓取公众号与知乎。

延伸阅读

更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用Ollama AI系列(2):VPS上的AI推理与API应用【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPSARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?Ollama AI系列(2):VPS上的AI推理与API应用

一、为什么算法推荐时代还需要 RSS

打开任意 App,你看到的内容早已不是按时间排序,而是被一套推荐算法重新排列过。算法追求停留时长,于是它不断投喂你更爱看、更刺激的东西,结果就是「信息茧房」:你的视野被悄悄收窄,而真正重要的更新反而被埋没。RSS 恰恰相反,它把选择权交还给你——你订阅谁,就只看谁;更新按时间线排列,没有插队的广告,也没有「猜你喜欢」。

很多人以为 RSS 在 2013 年 Google Reader 关闭后就死了,事实并非如此。RSS/Atom 至今仍是博客、新闻站、技术文档、开源仓库最通用的开放标准。区别只在于:当年你依赖一家大厂的云阅读器,如今更稳妥的做法是把阅读器架在自己的 VPS 上。数据存在你控制的服务器,订阅列表、已读未读、收藏文章都归你自己,迁移也只需导出一个 OPML 文件。对注重隐私、厌倦被投喂的人来说,自托管 RSS 是夺回信息主权的第一步。

二、三大自托管阅读器横评:FreshRSS / Miniflux / Tiny Tiny RSS

想在 VPS 上自建,首先得选软件。目前社区最活跃的三款都是开源、可自托管的 Web 阅读器,但设计哲学和资源占用差别很大。

  • FreshRSS:2012 年启动,用 PHP 加自研的 Minz 框架写成,连 Composer 都不需要。它兼容 SQLite、MySQL/MariaDB、PostgreSQL 多种数据库,插件和扩展生态丰富,支持分组、过滤、全文搜索、多用户。官方 Docker 镜像默认基于 Debian,并提供了 amd64、arm64、arm/v7 多架构支持。最新稳定版是 1.27.1,GitHub 上累计超过 1.3 万 Star、82 个正式发布。资源占用属于中等水平,适合想要「功能全面又不太折腾」的人。
  • Miniflux:用 Go 语言写成,打包成一个静态二进制文件,后端只认 PostgreSQL。它的信条是「极简且固执己见」,界面干净、没有广告和追踪、键盘操作顺手,自带强大的过滤规则(自动打标签、改写或删除内容)。因为 Go 的天然高效,它资源占用极低,1 核 1G 的小鸡都能轻松跑。缺点是高级插件较少,早期版本不能为每个源单独设刷新间隔。它提供 REST API 和 Fever 兼容接口。
  • Tiny Tiny RSS(TT-RSS):2005 年由 Andrew Dolgov(网名 fox)创建,是资格最老的自托管阅读器,同样基于 PHP,历史上用 MySQL,自 2025 年 4 月 28 日起已移除 MySQL 支持、仅剩 PostgreSQL。它的插件系统极其强大,几乎能实现任何定制。但原作者于 2025 年 10 月 3 日宣布退休,并在 11 月 1 日正式关闭了 tt-rss.org 的全部基础设施(官网、代码仓库、论坛)。好消息是项目已由社区接手,新仓库在 github.com/tt-rss/tt-rss 继续维护,老用户无需立刻迁移。

一句话总结:要功能全面选 FreshRSS,要极简省资源选 Miniflux,而 TT-RSS 虽仍可用,但已是社区接管的「遗产项目」,新用户更建议前两者。

三、VPS 准备与 Docker 环境

先说硬件:FreshRSS 跑在 SQLite 上,1 核 1G 内存的入门 VPS 就够个人使用;若开启 MariaDB/PostgreSQL 并多用户共享,建议 1 核 2G 起步。Miniflux 更省,512M 内存都能跑。系统推荐 Debian 12 或 Ubuntu 24.04 LTS,长期支持、包新、踩坑少。

第一步装 Docker 与 Docker Compose:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
apt install docker-compose-v2

第二步准备域名与反代。把一条 A 记录指向服务器 IP,再用 Caddy 或 Nginx 做反向代理并申请 Let's Encrypt 的免费 HTTPS 证书——RSS 阅读器带账号密码,明文 HTTP 无异于把订阅列表公开。防火墙只放行 80、443,以及临时调试用的端口。这一切准备好,部署就只是改几行 compose 的事。

四、FreshRSS 部署:关键 docker-compose 与初始化

下面是一份生产可用的 FreshRSS compose,使用 MariaDB 做后端(个人轻量也可把数据库换成 SQLite,去掉 db 段即可):

services:
  freshrss:
    image: freshrss/freshrss:1.27.1
    container_name: freshrss
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - TZ=Asia/Shanghai
      - CRON_MIN=13,43
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions
    depends_on:
      - db
  db:
    image: mariadb:11
    container_name: freshrss-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=换成你的强密码
      - MYSQL_DATABASE=freshrss
      - MYSQL_USER=freshrss
      - MYSQL_PASSWORD=再换一个强密码
    volumes:
      - freshrss_db:/var/lib/mysql
volumes:
  freshrss_data:
  freshrss_extensions:
  freshrss_db:

几个关键点:CRON_MIN=13,43 让容器内置的定时任务每半小时抓取一次订阅源;官方建议刷新频率大约一天两次足矣,对支持 WebSub/PubSubHubbub 的源还能做到接近实时的推送。数据全部落在命名卷里,重装容器不会丢。启动后访问 http://你的IP:8080 走网页安装向导,选数据库、建管理员账号即可;也可在命令行用 cli/do-install.phpcli/create-user.php 自动化。

如果你想走极简路线,Miniflux 的 compose 更短,因为它只依赖 PostgreSQL:

services:
  miniflux:
    image: miniflux/miniflux:2.2.14
    container_name: miniflux
    restart: unless-stopped
    ports:
      - "8080:8080"
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://miniflux:强密码@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=强密码
      - BASE_URL=https://你的域名
      - POLLING_FREQUENCY=60
  db:
    image: postgres:17-alpine
    container_name: miniflux-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=强密码
      - POSTGRES_DB=miniflux
    volumes:
      - miniflux_db:/var/lib/postgresql/data
volumes:
  miniflux_db:

五、订阅源管理:分组、过滤、OPML 导入导出

装好只是开始,真正价值在「订阅」二字。FreshRSS 支持按主题建分组(分类),比如「技术博客」「安全资讯」「个人随笔」,阅读时按组筛选。它的过滤规则很实用:可以用关键词或正则表达式自动标记、自动已读、甚至改写标题,把噪音源净化成只留你想看的内容。

从别的阅读器搬家几乎零成本——RSS 生态通用 OPML 格式。在 Feedly、Inoreader 或旧的 TT-RSS 里导出 OPML,进 FreshRSS 的「导入/导出」页面上传,几百个订阅源一次性迁移。反过来,你也能随时导出 OPML 做备份,或者换软件时带走全部订阅。

想立刻有内容可看,可以先加几个长期稳定的源,例如阮一峰的网络日志 https://www.ruanyifeng.com/blog/atom.xml、HelloGitHub 的 https://hellogithub.com/rss。对于支持 WebSub 的站点,FreshRSS 能订阅即时推送,新文章发布几秒内就出现在时间线,不必苦等定时抓取。

六、移动端:Fever API 与 Reeder / NetNewsWire

电脑上看完,手机上接着读,靠的是 API 同步。FreshRSS 同时实现了两套接口:Google Reader API(官方推荐)Fever API。文档明确提示,Google Reader 兼容接口更高效、更安全,是首选;Fever 接口功能受限、效率较低、安全性也弱一些,仅在客户端不支持前者时兜底。

开启方法很简单:在 FreshRSS 的「认证」设置里打开「允许 API 访问」,再到账户页设置一个独立的 API 密码(不要和登录密码相同)。手机端填的地址是 https://你的域名/api/fever.php(Fever 模式)或直接用 GReader 模式的域名。

能用的客户端很丰富:iOS/macOS 上的 ReederNetNewsWire(后者开源、已支持 GReader 同步)、Android 上的 Read You(开源)、FeedMe、Fluent Reader,Linux 上的 NewsFlash、Newsboat 终端客户端,以及 macOS 的 Vienna。挑一个顺手的,把服务器地址和 API 密码填进去,未读状态就能在手机和网页之间无缝同步。

七、用 RSSHub 把公众号、知乎、微博变成订阅源

很多中文内容平台——公众号、知乎、微博、B 站、小红书——本身不提供 RSS。这时候就要请出开源项目 RSSHub(作者 DIYgod)。它的口号是「万物皆可 RSS」,目前支持 400 多个站点、上千条路由,能把任意页面「凭空」生成一个标准 RSS 源。

为什么要自建而不是用公共实例 rsshub.app?因为官方实例常被限流,而微博、知乎这类反爬严格的平台,往往要配上 Cookie 才稳。在 VPS 上用 Docker 自建,十分钟就能拥有一条私有的「RSS 源工厂」:

services:
  rsshub:
    image: diygod/rsshub:latest
    container_name: rsshub
    restart: unless-stopped
    ports:
      - "1200:1200"
    environment:
      - NODE_ENV=production
      - WEIBO_COOKIES=你的微博Cookie
  redis:
    image: redis:alpine
    container_name: rsshub-redis
    restart: unless-stopped

路由很好拼,格式就是 https://你的域名/路由路径。常用例子:知乎用户动态 /zhihu/people/activities/用户ID、知乎热榜 /zhihu/hot、微博用户 /weibo/user/UID(需要 WEIBO_COOKIES)、B 站 UP 主 /bilibili/user/video/UID、豆瓣小组 /douban/group/小组ID。公众号可尝试 RSSHub 的微信相关路由,但受平台反爬影响,稳定性通常不如知乎和微博,建议配合自建实例与 Cookie 使用,并留意社区路由的更新。

浏览器装一个 RSSHub Radar 插件,打开任意网页会自动探测可用的 RSSHub 路由,复制链接丢进 FreshRSS 即可。把 RSSHub 子域名和 FreshRSS 放在同一台 VPS,阅读器里订阅 https://rsshub.你的域名/...,一个界面就能看完全网更新。

八、备份与维护策略

自托管意味着备份自己负责。核心就两件事:数据库数据卷。FreshRSS 用 MariaDB 时,写个脚本定时 mysqldump 导出;Miniflux 用 PostgreSQL,则用 pg_dump。把 dump 文件和 FreshRSS 的 data 卷一起打包,传到对象存储或另一台机器,保留最近 7 天滚动即可。

维护上,更新就是「拉新镜像、重新 up」:docker compose pull && docker compose up -d。FreshRSS 升级很平滑,注意大版本变更看一眼发行说明。反向代理的证书也要纳入备份。平时用 docker logs freshrss 看抓取报错,订阅源长时间不更新多半是源站改版或被封锁,换个地址或加 RSSHub 中转通常能解决。

#自托管 #RSS #FreshRSS #Miniflux #VPS #RSSHub #信息主权