CommaFeed 是 Google Reader 风格的自托管 RSS 阅读器,基于 Java + React/TypeScript 构建。支持 Docker 一键部署、多用户管理、4 种布局和暗色主题,原生编译启动快内存占用低,所有数据本地存储,隐私安全可控。
🎤 引言
还记得 2013 年 Google Reader 关闭那天多少 RSS 党哭晕吗?十几年过去,托管服务要么收费要么跑路,自托管领域倒是冒出了不少好项目。但如果你最怀念的是 Google Reader 那套三栏式 + 快捷键的经典操作逻辑,这个 GitHub 上 CommaFeed 就是你要找的那个 —— 名字直接致敬「Comma」+「Feed」组合,UI 和交互几乎复刻 Google Reader。
它不是花哨的现代化 RSS 客户端(FreshRSS、Miniflux 那种极简风),而是 让老用户一秒找回熟悉感 的自托管方案。Java 后端 + React 前端,原生编译后启动只要几秒,2GB 内存就能跑起来。
⭐ 核心功能
1. Google Reader 经典布局
三栏式设计:左栏订阅源、中栏文章列表、右栏阅读区。所有操作逻辑(j/k 切换文章、s 标星、m 标记已读、v 打开原文)都沿用 Google Reader 快捷键,老用户零学习成本。
2. 4 种阅读布局可选
不喜欢经典三栏?CommaFeed 提供 4 种布局切换:
- Magazine:杂志风卡片流
- Cinema:单栏全屏阅读
- Title only:仅标题列表
- Classic:Google Reader 原版三栏
3. 暗色主题 + 自定义样式
内置暗色主题,长期盯屏党友好。支持自定义 CSS,把阅读区调成你喜欢的字体、间距、配色。
4. 多用户支持
一份部署可以创建多个账号,适合团队/家庭共用,每个人订阅各自的源、互不干扰。管理员账号可统一管理用户。
5. 完整 RSS 功能
- OPML 导入/导出(迁移老订阅源超方便)
- 自动抓取 + 离线缓存(出差没网也能看历史)
- 全文检索(即使订阅源只输出摘要也能搜到正文)
- 文章归档(按日期/标签分组)
6. 插件扩展
支持自定义 fetcher 和 enrichment hook,比如自动抓取原文替换摘要、识别视频/音频内容等。
📥 安装使用
方式一:Docker Compose(推荐)
version: '3'
services:
commafeed:
image: athou/commafeed:latest
container_name: commafeed
restart: unless-stopped
ports:
- "8082:8082"
volumes:
- ./data:/app/data
environment:
- DATABASE_URL=jdbc:postgresql://db:5432/commafeed
- DATABASE_USER=commafeed
- DATABASE_PASSWORD=your_password_here
depends_on:
- db
db:
image: postgres:15-alpine
container_name: commafeed-db
restart: unless-stopped
volumes:
- ./postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=commafeed
- POSTGRES_USER=commafeed
- POSTGRES_PASSWORD=your_password_here启动后访问 http://your-ip:8082,默认管理员账号密码都是 admin,登录后立刻改密码。
方式二:单容器 H2 数据库(试用)
docker run -d \
--name commafeed \
-p 8082:8082 \
-v /opt/commafeed:/app/data \
athou/commafeed:latestH2 数据库适合测试和小规模使用,生产建议换 PostgreSQL。
方式三:原生编译包(性能党)
从 Releases 下载对应平台的 native 包:
# Linux 示例
wget https://github.com/Athou/commafeed/releases/latest/download/commafeed-linux-amd64.zip
unzip commafeed-linux-amd64.zip
./commafeed原生编译启动时间 < 1 秒,内存占用比 JVM 版本低 60%+。
导入 OPML 订阅源
从老 RSS 阅读器导出 OPML → CommaFeed 设置 → Import/Export → 上传 OPML → 全部订阅自动同步。
🎯 适用场景
Google Reader 遗老 —— 如果你 2013 年那批 RSS 重度用户,CommaFeed 就是为你们打造的。
个人隐私党 —— 数据全部本地存储,没有任何第三方追踪,订阅习惯、阅读历史都在自己服务器上。
团队知识管理 —— 多用户功能让小团队可以共享一个 RSS 池,技术博客、行业资讯统一管理。
NAS 用户 —— Docker 部署简单,资源占用低,扔到家里 NAS 上常年挂着毫无压力。
快捷键流 —— 习惯键盘流操作的人会爱上 CommaFeed 的 j/k/s/m 等快捷键,比鼠标点来点去效率高太多。
不适合谁:追求极致现代 UI 的人 —— 它故意保留经典风格,不喜欢 Google Reader 那套的人会觉得「老气」。
🔍 对比/替代方案
| 工具 | 类型 | 优势 | 劣势 |
|---|---|---|---|
| CommaFeed | 自托管 Java | Google Reader 经典、快捷键流、多用户 | UI 偏复古、原生包少 |
| FreshRSS | 自托管 PHP | 轻量、扩展丰富、中文友好 | UI 现代但无经典模式 |
| Miniflux | 自托管 Go | 极简、API 完善、Go 单文件 | 单用户、风格简洁 |
| Tiny Tiny RSS | 自托管 PHP | 老牌项目、插件生态完善 | UI 复杂、配置繁琐 |
| Inoreader | 托管服务 | 零部署、跨端同步 | 收费、订阅上限 |
| Feedly | 托管服务 | AI 推荐、UI 现代 | 收费、隐私顾虑 |
关键差异:CommaFeed 的核心定位是 「Google Reader 体验 + 自托管隐私」,适合既要老操作逻辑又要数据自主的用户。其他项目要么走向现代化(FreshRSS/Miniflux),要么还是太复杂(TT-RSS)。
⚠️ 注意事项
1. Java 资源占用
虽然原生编译后内存占用大幅下降,但 Docker 默认走的还是 JVM 镜像。1GB 内存以下的小机器建议:
- 用 native 镜像代替 JVM 镜像
- 启用 JVM 主动释放内存参数(README 有说明)
2. 默认账号安全
Docker 启动后默认 admin/admin,首次登录立刻改密码。如果是公网部署,建议同时:
- 修改默认端口(8082 → 其他)
- 加 Nginx 反向代理 + HTTPS
- 启用 fail2ban 防爆破
3. 订阅源抓取频率
CommaFeed 默认每 30 分钟抓取一次订阅源。如果订阅了上千个源,数据库压力会比较大:
-- 可以调低抓取频率(设置 → 管理)
UPDATE _category SET polling_timeout = 3600000; -- 改 1 小时4. 迁移成本
想从 Inoreader/Feedly 迁出?导出 OPML 时注意:
- 部分付费订阅源可能不包含在 OPML 里
- 标签和文件夹结构有时会丢失
- 建议先小规模测试再全量迁移
5. 中文支持
UI 已基本完成 i18n,但部分翻译略生硬。可以自行修改 i18n/ 下的 JSON 文件改进。
6. 移动端
CommaFeed 本身没官方移动 App,但响应式设计在手机浏览器能用。更优解:用 Reeder 或 NetNewsWire 通过 Fever API 接入 CommaFeed。
✅ 总结
CommaFeed 是个很纯粹的项目 —— 不追求花哨功能、不追新潮 UI,就想把 Google Reader 那套体验完整搬到自托管场景下。对于从那个时代过来的 RSS 重度用户,它是最舒服的选择。
优点:
- ✅ Google Reader 原版操作逻辑,零学习成本
- ✅ 原生编译启动快、资源占用低
- ✅ 多用户、4 种布局、暗色主题齐全
- ✅ Java + React 技术栈稳定,活跃维护
- ✅ 自托管 + 本地存储,隐私可控
缺点:
- ⚠️ UI 设计偏老气,不适合追新潮的用户
- ⚠️ Docker JVM 镜像内存占用相对较高(建议用 native 包)
- ⚠️ 移动端体验一般,需要第三方 App 配合
推荐指数:⭐⭐⭐⭐(4/5)—— 如果你怀念 Google Reader,或者想给团队搭个共享 RSS 池,CommaFeed 是当下最稳妥的自托管选择之一。
🔗 GitHub 仓库:https://github.com/Athou/commafeed
🌐 在线演示:https://www.commafeed.com
📦 Releases:https://github.com/Athou/commafeed/releases
📄 许可协议:Apache-2.0