Tropic Host

FreshRSS:它是什么,以及如何在 VPS 上安装

阅读约需 9 分钟
Tropic
FreshRSS:它是什么,以及如何在 VPS 上安装

FreshRSS:不受算法控制的个人新闻源

社交网络会自行决定优先展示哪些内容。因此,项目的重要更新很容易被错过,取而代之的却是几十条推荐内容。FreshRSS 的工作方式不同:由你选择信息来源,所有新内容都会出现在一个按时间排列的信息流中。

FreshRSS 可以安装在自己的服务器上,并作为博客、新闻、软件更新、论坛、播客以及其他 RSS 或 Atom 来源的统一“收件箱”。下面将介绍该应用的功能、服务器要求,以及如何通过 Docker 和 HTTPS 将其安装在 VPS 上。

五步部署 FreshRSS

  1. 创建一台 Linux VPS,并将一个子域名解析到该服务器,例如 rss.example.com
  2. 安装 Docker 和 Docker Compose。
  3. 同时运行 FreshRSS 与 Caddy,以自动启用 HTTPS。
  4. 打开子域名,选择 SQLite,并创建账户。
  5. 从 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 万篇文章的测试案例。

实用的起步配置:

使用场景CPURAM存储数据库
个人信息流1 vCPU1 GB10–20 GB SSDSQLite
家庭或小型团队1–2 vCPU2 GB20–40 GB SSDSQLite 或外部数据库
多用户和大型归档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,并为任何外部数据库创建转储。