一、Folo 到底是什么

入门

RSS(一种网站主动推送新文章的通用格式,类似"订阅报纸")存在很多年了,问题是大多数阅读器界面老旧、只能看文字。Folo 想解决的就是这件事:把 RSS 做成一条现代信息流。

你可以把它理解成一个私人信箱。你告诉它"我关心哪些网站、哪些博主、哪些播客",之后这些来源的新内容会自动投递进来,按时间排好,不用你一个个去刷。

它同时提供三种使用方式:桌面客户端(Windows / macOS / Linux)、手机 App(iOS / Android)、以及网页版。数据在账号里同步,换设备不用重新订阅。

Folo 官方项目展示图

Folo 的官方托管服务在 app.folo.is,注册即可用。本文重点讲的是自己部署一套,适合在意数据归属、或者想给团队内部用的读者。


二、自己部署前,先想清楚一件事

入门

Folo 和普通自托管项目不太一样:它依赖云端账号服务来同步订阅和阅读状态。也就是说,即使你部署了服务端,客户端仍然需要连上一个 Folo 后端才能正常登录。

这意味着自托管主要面向两类人:

  • 想搭建内部团队版,自己控制账号和数据存储
  • 想基于它做二次开发,比如接入自己的 AI 模型或改界面

如果你只是想用 Folo 看资讯,直接用官方客户端就够了,不必折腾服务器。下面的内容针对前两类读者。

三、部署前置条件

入门

在动手之前,请先确认环境。缺任何一项都会在后面的步骤里报错。

  • 一台能联网的 Linux 服务器,建议 2 核 4G 内存起步,因为要同时跑数据库、缓存和多个服务
  • Docker 与 Docker Compose:Docker 是一种把软件打包成"集装箱"、随处可运行的工具,Compose 则是用来一次启动多个集装箱的清单文件
  • Node.js 20 以上 + pnpm:项目主体是 TypeScript 写的,本地构建需要它
  • 一个域名(可选但强烈建议):手机 App 登录时用 IP 地址会很不方便

如果服务器在国内,拉取 Docker 镜像可能较慢,建议提前配置镜像加速,否则第一步就会卡住。

四、用 Docker 快速跑起来

进阶 · 推荐细读

先把源码下载到服务器上:

git clone https://github.com/RSSNext/Folo.git
cd Folo

项目采用 monorepo(一个仓库里放多个子项目)结构,服务端代码集中在 apps/ 目录下。首次运行前需要装依赖:

corepack enable
pnpm install

接着准备环境变量文件。项目根目录通常会有示例文件,复制一份再改:

cp .env.example .env

打开 .env,至少需要关注这几项:

变量 作用 说明
DATABASE_URL 数据库连接地址 指向 PostgreSQL 服务
REDIS_URL 缓存连接地址 用于会话和队列
BETTER_AUTH_SECRET 登录凭证签名密钥 随便填一串长随机字符
PORT 服务监听端口 默认 2233 左右,冲突时改这里

改完后启动:

docker compose up -d

-d 表示后台运行。第一次启动会拉镜像和建表,耐心等几分钟,然后用下面的命令看日志确认没有报错:

docker compose logs -f

看到服务开始监听端口,就说明起来了。浏览器访问 http://你的服务器IP:端口 即可。

Folo 界面示意

五、配置要点与常见坑

进阶 · 推荐细读

部署完之后,最容易出问题的不是代码,而是下面这几处配置。

端口冲突。如果服务器上已经跑了别的 Web 服务,2233 之类的默认端口很可能被占用。用 ss -tlnp 查看当前占用的端口,再回到 .env 里改。

数据持久化。数据库和上传的文件必须挂载到宿主机目录,否则容器一删数据就没了。Compose 文件里通常写成 volumes 段落,注意确认路径指向的是服务器的真实磁盘,而不是容器内部。

反向代理。反向代理(用一台服务器转发请求到内部服务,类似公司前台帮你转接电话)能让你的域名指向 Folo,并顺便解决 HTTPS 证书问题。Nginx 里大致这样写:

server {
    listen 443 ssl;
    server_name folo.example.com;

    location / {
        proxy_pass http://127.0.0.1:2233;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

客户端连不上。自建服务端时,客户端需要手动填写服务器地址。如果一直转圈,先确认手机和服务器在网络上能互通,再检查是否被防火墙拦了端口。

六、日常运维:升级与备份

深入 · 老手可选

跑起来只是开始,长期使用更考验运维习惯。

升级要分两步走。先拉取新代码,再重建容器:

git pull
docker compose pull
docker compose up -d --build

注意数据库结构在版本之间可能变化,升级前务必先备份,不要跳过。

备份的核心是两样东西:PostgreSQL 的数据目录(或定期导出的 SQL 文件),以及 .env 文件本身。前者丢了订阅记录就没了,后者丢了密钥就要重新配置。

docker compose exec db pg_dump -U postgres folo > backup_$(date +%F).sql

建议把这条命令写进定时任务,每天凌晨跑一次,并把文件同步到另一台机器。备份只有放在不同的地方才算备份。

如果这套服务是给团队用的,建议再配一个监控告警,至少能在服务挂掉时收到通知,而不是等同事来问"怎么打不开了"。

七、写在最后

Folo 的价值在于把分散的信息源收拢成一条流,而自托管的意义在于这条流归你自己管。对新手来说,先用官方客户端体验一周,确认它真的适合你的阅读习惯,再考虑自建也不迟。

服务器部署这件事,第一次总会遇到几个报错。把日志读一遍、把端口和路径核对一遍,绝大多数问题都能自己解决。

项目信息

项目 值
仓库 RSSNext/Folo
语言 TypeScript
Star 39,010
Fork 2,132
主页 https://app.folo.is

参考链接

延伸阅读

想继续探索?这些同领域的教程可能也适合你: