工具部署|FreshRSS|Docker · 一键自托管

公众号、App 信息流越刷越杂,真正想追的博客、技术周刊、开源项目更新却经常被算法淹没。开源项目 FreshRSS 是一款老牌的自托管 RSS 阅读器 / 聚合器:把想看的站点订阅进来,按分类集中阅读,没有推荐算法、没有广告,Docker 一条命令就能跑起来,自带简体中文界面,还兼容 Google Reader / Fever API,手机上用 Reeder、FeedMe、Fluent Reader 等客户端同步阅读。

协议为 AGPL-3.0,个人自用完全免费。项目持续活跃(GitHub 16000+ Star),本文实测版本 1.30.4(2026-10 发布)。默认用 SQLite 存储,单用户几十 MB 内存即可,小内存 VPS、NAS、树莓派都能轻松跑;多人使用也可以换成 PostgreSQL / MySQL。

技术栈:PHP 8 · Apache · SQLite / PostgreSQL / MySQL · Cron 定时抓取 · Docker 一键部署

你将得到什么

  • 三种阅读视图:普通列表、全局总览(按分类分块)、沉浸式阅读视图,支持键盘快捷键
  • 订阅源按分类管理,支持 RSS / Atom / JSON Feed,也能用 XPath / CSS 选择器把没有 RSS 的网页「做成」订阅源
  • OPML 导入导出,从 Feedly、Inoreader、Tiny Tiny RSS 等迁移很方便
  • 收藏、标签、自定义查询、全文搜索、按关键字自动标记已读 / 过滤
  • 统计页:已读 / 未读、每日文章数、分类占比、「长时间未更新」与「空闲订阅源」检查
  • Google Reader / Fever API,配合手机 / 桌面客户端同步阅读进度
  • 多用户、主题切换、社区扩展(AI 摘要、全文抓取、自动刷新等)
  • 演示只监听 127.0.0.1,不直接暴露公网

环境要求

  • 已安装 Docker(含 Compose 插件)的 Linux / macOS / Windows,镜像同时提供 x86 与 ARM
  • 单用户 SQLite 模式内存占用很小;订阅较多、多人共用时建议外接 PostgreSQL
  • 容器内 Web 端口为 80,示例映射到本机 8383

官方仓库:github.com/FreshRSS/FreshRSS,文档:freshrss.github.io/FreshRSS。本文实机镜像为 freshrss/freshrss:latest(1.30.4)。

第一步:Docker Compose 启动

新建目录写入 docker-compose.yml。端口只绑定本机,对外由反向代理(Nginx/Caddy/1Panel 的 OpenResty)提供 HTTPS。CRON_MIN 表示每小时第几分钟自动抓取订阅;FRESHRSS_INSTALL / FRESHRSS_USER 两个变量可以在首次启动时自动完成安装并创建管理员,省去网页安装向导(不想写在文件里也可以删掉,首次打开网页按向导走):

mkdir -p ~/freshrss && cd ~/freshrss

# docker-compose.yml
services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    ports:
      - "127.0.0.1:8383:80"
    environment:
      TZ: Asia/Shanghai
      CRON_MIN: "3,33"          # 每小时 03 分、33 分各抓取一次
      FRESHRSS_INSTALL: |-
        --api-enabled
        --base-url https://rss.example.com
        --default-user admin
        --language zh-CN
      FRESHRSS_USER: |-
        --user admin
        --password 改成你的强密码
        --api-password 改成单独的API密码
        --email you@example.com
        --language zh-CN
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
docker compose up -d
docker logs -f freshrss   # 看到 “FreshRSS successfully installed” 和 Apache 启动即可

不用 Compose 的话,一条 docker run 也行(首次打开网页走安装向导):

docker run -d --name freshrss --restart unless-stopped \
  -p 127.0.0.1:8383:80 -e TZ=Asia/Shanghai -e CRON_MIN=3,33 \
  -v ./data:/var/www/FreshRSS/data \
  -v ./extensions:/var/www/FreshRSS/extensions \
  freshrss/freshrss:latest

第二步:登录

打开 http://127.0.0.1:8383(或你的域名)进入登录页,用上面创建的账号登录。界面语言已经是简体中文,后续也可以在「设置 → 显示」里随时切换:

FreshRSS 登录页
登录页:用户名 + 密码,可勾选 30 天内保持登录

第三步:导入订阅源

新装好的 FreshRSS 只有一个官方 Releases 订阅。点左上角「订阅管理 → 添加订阅源或分类」,粘贴站点地址或 RSS 地址即可添加,FreshRSS 会自动发现网页里的 Feed;也能先建好「科技资讯」「技术博客」「开源动态」这样的分类再归档:

FreshRSS 添加订阅源或分类
添加订阅源 / 分类 / 动态 OPML 列表,高级选项里可以设置抓取方式、认证与 XPath 规则

如果之前在别的阅读器里有订阅,直接到「导入 / 导出」上传 OPML 文件,一次性搬过来;导出时还能连同收藏、标签文章一起打包备份:

FreshRSS 导入导出 OPML
导入 / 导出:支持 OPML、JSON(收藏和标签文章)和 ZIP

「订阅管理」页按分类展示所有订阅源,可以拖拽调整分类,点小齿轮单独设置每个源的抓取频率、保留策略和过滤规则:

FreshRSS 订阅管理
订阅管理:本次演示导入了少数派、IT之家、Solidot、阮一峰、美团技术团队、Hacker News 等 9 个源

第四步:日常阅读

首页是最常用的「普通视图」:左侧是首页、重要的订阅、收藏和各分类(带未读数),右侧按时间倒序列出文章,未读标红、星标为收藏,顶部可以切换只看未读、标记已读、切换视图:

FreshRSS 普通视图首页
普通视图:所有订阅按时间汇总,未读一目了然(演示数据为本机实时抓取的公开 RSS)

点开标题会在列表里就地展开全文,读完自动标为已读,按 j / k 就能上下翻篇:

FreshRSS 展开文章正文
就地展开正文:图片、代码块、引用都能正常显示

「全局视图」把每个分类做成一个卡片,适合订阅多的时候先扫一眼哪里有更新:

FreshRSS 全局视图
全局视图:按分类分块显示每个订阅源的未读数

「阅读视图」去掉侧栏和列表,只留正文,长文读起来更舒服:

FreshRSS 阅读视图
阅读视图:类似「稍后读」的沉浸式排版

第五步:统计与订阅体检

「主要统计数据」会列出总文章数、已读 / 未读 / 收藏数量,以及文章最多的前十个订阅源;往下是近 30 天每日文章数、各分类订阅源数和文章数占比,方便判断哪些源太吵、哪些可以退订:

FreshRSS 主要统计数据
主要统计:文章分布 + 前十订阅源
FreshRSS 统计图表
每日文章数柱状图与分类占比环形图

第六步:显示设置与扩展

「设置 → 显示」可以切换语言、时区、主题(内置 Origine、Nord、暗色等多套)、内容宽度和图标显示;「阅读」里可以设置默认视图、每页文章数、滚动自动标记已读等:

FreshRSS 显示设置
显示设置:语言、时区、主题与内容宽度

「扩展」页内置社区扩展列表,像 AI 摘要、Readability 全文抓取、自动刷新、YouTube 嵌入等都能一键安装;也可以直接写 User CSS / User JS 微调界面:

FreshRSS 扩展管理
扩展:社区扩展列表,按需启用

配置说明:手机 / 桌面客户端同步

  • 在「设置 → 认证」中允许 API 访问(本文的 --api-enabled 已开启),再到「账户」页设置一个单独的 API 密码(不要与登录密码相同)。
  • Google Reader API 地址:https://你的域名/api/greader.php,适用于 Reeder、FeedMe、FocusReader、Fluent Reader、NetNewsWire 等;Fever API 地址:https://你的域名/api/fever.php。
  • 没有 RSS 的网站:添加订阅时「订阅源类型」选「HTML + XPath」或「JSON + 点号」,按页面结构写规则即可生成订阅。
  • 抓取频率由 CRON_MIN 控制,也可以在每个订阅源里单独设置「刷新间隔」,避免对小站点请求过于频繁。

安全与运维建议

  • 端口不要直接映射到 0.0.0.0。教程用的是 127.0.0.1:8383,对外走带证书的反向代理,并把 --base-url 改成 https 域名;只自己用的话放在内网 / Tailscale / WireGuard 里更省心。
  • 单人使用时到「管理 → 系统配置」把「最大注册用户数」保持为 1,不要开放注册。
  • 备份:定期打包 ./data(包含配置和每个用户的 db.sqlite),或者在「导入 / 导出」里导出 OPML + 收藏。
  • 反向代理在子路径或启用了 HTTPS 时,记得设置 TRUSTED_PROXY 环境变量,让 FreshRSS 正确识别客户端 IP 与协议。
  • 升级:docker compose pull && docker compose up -d,升级前先备份 ./data。
  • 演示用完可删:docker compose down && rm -rf ./data ./extensions。

小结

FreshRSS 把「自己决定看什么」这件事还给了读者:订阅、分类、已读同步、统计和扩展都齐全,中文界面完整,资源占用极低,一个容器就能长期稳定运行。想摆脱信息流算法、集中追踪博客和开源项目动态的话,自托管一套 FreshRSS 再配上手机客户端,体验非常顺手。

项目地址:https://github.com/FreshRSS/FreshRSS(AGPL-3.0)

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容