FreshRSS:不受算法控制的个人新闻源
社交网络会自行决定优先展示哪些内容。因此,项目的重要更新很容易被错过,取而代之的却是几十条推荐内容。FreshRSS 的工作方式不同:由你选择信息来源,所有新内容都会出现在一个按时间排列的信息流中。
FreshRSS 可以安装在自己的服务器上,并作为博客、新闻、软件更新、论坛、播客以及其他 RSS 或 Atom 来源的统一“收件箱”。下面将介绍该应用的功能、服务器要求,以及如何通过 Docker 和 HTTPS 将其安装在 VPS 上。
五步部署 FreshRSS
- 创建一台 Linux VPS,并将一个子域名解析到该服务器,例如
rss.example.com。 - 安装 Docker 和 Docker Compose。
- 同时运行 FreshRSS 与 Caddy,以自动启用 HTTPS。
- 打开子域名,选择 SQLite,并创建账户。
- 从 OPML 导入订阅,或手动添加网站。
完成后,即使用户的电脑处于关机状态,VPS 也会按照计划自动检查各个来源。
FreshRSS 是什么
FreshRSS 是一款免费、自托管的 RSS 和 Atom 聚合器。自托管意味着应用程序和数据库运行在由你管理的服务器上,而不是运行在云服务提供商的基础设施中。
RSS 源是一种特殊文件,网站发布新内容时会更新该文件。FreshRSS 会定期从选定的来源获取这些文件,并将其中的条目汇总到同一个界面中。未读文章、收藏内容和阅读历史可以在不同设备之间同步。
它的核心理念很简单:用户自己决定关注谁,以及按照什么顺序查看内容。FreshRSS 不会根据互动量对条目进行排序,也不会在订阅内容之间插入推荐信息。
FreshRSS 的功能
| 功能 | 用途 |
|---|---|
| 分类、状态和收藏 | 区分工作、技术和个人来源 |
| 搜索、过滤器和已保存查询 | 只显示与指定主题相关的内容 |
| OPML 导入与导出 | 快速迁移订阅列表 |
| Google Reader API 和 Fever API | 连接手机和电脑上的兼容应用 |
| WebSub | 在兼容来源发布内容后立即接收条目 |
| 多用户 | 为家庭成员或团队创建独立账户 |
| 主题和扩展 | 修改界面并增加功能 |
| XPath 和 JSON Feed | 订阅部分没有普通 RSS 或 Atom 的来源 |
已保存的查询可以变成一个独立的专题信息流,例如只显示安全相关内容,或某个特定产品的更新。结果既可以在 FreshRSS 中查看,也可以发布为 HTML 或 RSS;订阅源列表还可以使用 OPML 格式。
WebSub 允许兼容的网站主动通知 FreshRSS 有新条目发布,而不必等待下一次定时检查。为此,FreshRSS 实例必须能够通过正确的公共地址从互联网访问。
FreshRSS 对开发者和系统管理员尤其方便:项目博客、版本发布、故障报告和安全公告都可以集中在一个信息流中。对于日常阅读,它可以取代几十个打开的浏览器标签页,并在所有设备上准确同步“已读”状态。
FreshRSS 的服务器要求
FreshRSS 对资源要求不高。它支持 SQLite、PostgreSQL、MariaDB 和 MySQL;手动安装时需要 Web 服务器以及 PHP 8.1 或更高版本。官方介绍中甚至给出了在 Raspberry Pi 1 上运行 150 个订阅源和 2.2 万篇文章的测试案例。
实用的起步配置:
| 使用场景 | CPU | RAM | 存储 | 数据库 |
|---|---|---|---|---|
| 个人信息流 | 1 vCPU | 1 GB | 10–20 GB SSD | SQLite |
| 家庭或小型团队 | 1–2 vCPU | 2 GB | 20–40 GB SSD | SQLite 或外部数据库 |
| 多用户和大型归档 | 2 vCPU 起 | 4 GB 起 | 40 GB SSD 起 | PostgreSQL 或 MariaDB |
这些是参考配置,并非严格的最低要求。磁盘占用取决于来源数量、发布频率和历史记录的保留时间。如果需要全天候更新、外部访问、移动端同步和 WebSub,VPS 会比家用电脑更方便。
如何通过 Docker 在 VPS 上安装 FreshRSS
在下面的配置中,FreshRSS 运行在 Caddy 后方。Caddy 负责接收外部请求,并自动获取 TLS 证书。
你需要一台 Linux VPS、已安装并支持 docker compose 命令的 Docker、一个通过 A 记录指向服务器 IP 的子域名,以及已开放的 80 和 443 端口。
第 1 步:创建目录
sudo mkdir -p /opt/freshrss
sudo chown "$USER":"$USER" /opt/freshrss
cd /opt/freshrss第 2 步:创建 compose.yaml
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
logging:
options:
max-size: 10m
environment:
TZ: Etc/UTC
CRON_MIN: '3,33'
FRESHRSS_ENV: production
TRUSTED_PROXY: 172.16.0.0/12
volumes:
- freshrss_data:/var/www/FreshRSS/data
- freshrss_extensions:/var/www/FreshRSS/extensions
caddy:
image: caddy:2
container_name: freshrss-caddy
restart: unless-stopped
depends_on:
- freshrss
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
freshrss_data:
freshrss_extensions:
caddy_data:
caddy_config:CRON_MIN: '3,33' 会在每个小时的第 3 分钟和第 33 分钟启动订阅源检查。FreshRSS 不会以高于大约每 20 分钟一次的频率更新同一个订阅源,因此通常不需要更频繁地执行任务。
第 3 步:创建 Caddyfile
rss.example.com {
reverse_proxy freshrss:80
}将示例域名替换为你自己的域名。当 DNS 记录生效且端口可访问后,Caddy 会自动获取并续期证书。
第 4 步:启动 FreshRSS
docker compose up -d
docker compose ps可以使用以下命令查看日志:
docker compose logs -f --tail=100打开 https://rss.example.com。安装向导会检查运行环境,提示选择数据库,并创建第一个用户。对于个人服务器,选择 SQLite 最简单,因为不需要单独的数据库容器。
初始设置
FreshRSS 通常可以通过网站的普通地址自动发现 RSS 或 Atom 源。如果自动发现失败,请输入订阅源的直接 URL。Feedly、Inoreader 和其他阅读器中的订阅可以通过 OPML 方便地迁移。
建议一开始就将来源划分到不同分类中,例如“必读”“工作”“安全”“长文”和“闲暇阅读”。更新频繁的新闻网站不应把真正重要的内容挤出主信息流。
如需连接客户端应用,请在身份验证设置中启用 API,并在个人资料中设置一个独立的 API 密码。Google Reader API 地址如下:
https://rss.example.com/api/greader.php主账户密码和 API 密码最好不要设置为相同内容。
如何避免被未读内容淹没
经过少量设置后,FreshRSS 才能发挥最大价值:
- 主信息流中只保留重要来源;
- 使用过滤器自动将不需要的栏目标记为已读;
- 保存与产品、作者和主题相关的搜索查询;
- 定期查看统计信息,并删除只会制造噪音的来源。
扩展可以增加预计阅读时间、关键词高亮、图片代理、YouTube 嵌入、Webhook 通知,以及通过兼容的 LLM API 对文章进行分类等功能。第三方扩展只应从可信来源安装。
更新、安全与备份
执行以下命令更新容器:
cd /opt/freshrss
docker compose pull
docker compose up -d进行重大更新前,请先创建备份。freshrss_data 卷中保存用户设置;使用 SQLite 时,文章数据库也位于其中。如果使用扩展,还应备份 freshrss_extensions。对于 PostgreSQL、MariaDB 或 MySQL,需要单独创建数据库转储。
最低限度的安全措施:
- 使用 HTTPS;
- 创建所需账户后关闭开放注册;
- 非必要情况下不要启用匿名访问;
- 使用独立的 API 密码;
- 定期更新 FreshRSS 和扩展;
- 将备份保存在 VPS 之外。
导出 OPML 不能替代完整备份,但可以在任何兼容的 RSS 阅读器中快速恢复订阅列表。
在 tropic.host 的 VPS 上运行 FreshRSS
FreshRSS 很适合作为第一个自托管服务:它对资源要求低,可以通过 Docker 运行,并且导入订阅后立即就能带来明显价值。公网上的 VPS 可以提供全天候订阅源更新、手机访问以及 WebSub 的正常运行。
个人部署通常只需要一台小型 Linux VPS。在 tropic.host 上,可以为 FreshRSS 分配独立子域名,从入门级 VPS 开始使用,并让该服务独立于家用电脑运行。选择套餐时,稳定性、归档空间和备份比大量闲置的 CPU 性能更重要。
总结
FreshRSS 可以将几十个网站整合为一个便于管理的个人信息流,并且不进行算法排序。它支持移动客户端、过滤器、已保存查询、多用户、WebSub 和扩展,同时仍然足够轻量,可以运行在小型 VPS 上。
开始使用只需要 Docker、一个域名和 SQLite。安装完成后,请配置分类、自动更新、HTTPS 和备份。这样,FreshRSS 只会显示你选择的来源,并让用户始终掌握阅读控制权。
FAQ
FreshRSS 免费吗?
是的。FreshRSS 采用 AGPL-3.0 许可证发布。只有在应用运行于租用的 VPS 上时,才需要为基础设施付费。
FreshRSS 可以不使用域名吗?
可以,只需公开容器端口。但如果长期使用,最好配置域名和 HTTPS,这样可以简化安全访问、移动端同步和 WebSub 的使用。
FreshRSS 需要多少内存?
对于个人信息流,从 1 GB RAM 和 SQLite 开始是合理的。大型归档、多用户或其他附加服务需要更多内存。
可以添加没有 RSS 的网站吗?
有时可以。FreshRSS 支持通过 XPath 进行网页抓取,但规则需要手动配置。如果网站布局发生变化,该来源可能需要重新调整。
必须备份哪些内容?
首先是 freshrss_data 卷:使用 SQLite 时,其中包含文章数据库。还应备份 freshrss_extensions,并为任何外部数据库创建转储。
