PassNAT LogoPassNAT

自建 RSS 阅读器 FreshRSS:飞牛 NAS Docker 部署,关注的更新汇到一页,配内网穿透在外面也能刷

作者

小编

发布时间

Curving abstract shapes with an orange and blue gradient

项目介绍

FreshRSS 是一个自己部署的 RSS 阅读器。你关注的网站、博客、播客、视频频道,只要它对外提供订阅地址,就可以一条条加进来;之后这些站点更新了什么,它自己去抓回来,全部按时间排在同一页里,不用一个网站一个网站地翻,也不用等谁推给你。

东西放在哪儿是它跟在线阅读服务最大的区别:订阅列表、抓回来的文章、你标了星的内容,全部落在你自己 NAS 的一个目录里,备份的时候把那个文件夹拷走就是一份完整备份。项目在 GitHub 上开源(AGPL-3.0),并且提供了打好的官方镜像,NAS 上拉下来就能跑,不用自己构建。

它本身很轻:一个容器就够,数据库用内置的 SQLite,不需要再起一个数据库容器;实测装完并抓完订阅,容器占用也就几十兆内存,放在 NAS 上常年开着不心疼。

部署安装

装在自己的 NAS 上之后,它默认只能在家里的网络里打开 —— 人出了门,或者换了台机器,就看不到了。而 RSS 阅读器恰恰是那种「随手就想刷一下」的东西,只能在家用等于废了一半。家里没有公网 IP 的话,可以用 帕斯内网穿透 把它开放到公网,飞牛的应用中心里就能直接装到插件,不用另外找工具。下面这套流程在飞牛 NAS 上从头到尾走一遍。

第一步:准备编排文件

下面这份编排可以直接用,只有一处需要按自己的情况改:冒号左边的宿主端口。

1services:
2 freshrss:
3 image: freshrss/freshrss:latest
4 container_name: freshrss
5 restart: unless-stopped
6 ports:
7 # 左边 3032 是 NAS 上对外的端口,浏览器敲它;右边 80 是容器里的
8 - "3032:80"
9 environment:
10 # 不填的话文章时间会差八小时
11 TZ: Asia/Shanghai
12 volumes:
13 # 订阅和文章都落在 NAS 的这个目录里,备份直接把文件夹拷走
14 - ./data:/var/www/FreshRSS/data
15 - ./extensions:/var/www/FreshRSS/extensions
16

端口:冒号左边的 3032 是待会儿在浏览器里输的宿主端口,也是建隧道时要填的那个;右边的 80 是容器内部的端口,不要动。3032 如果被别的容器占了,换一个没用过的即可。

时区:TZ 填 Asia/Shanghai。这一行不填的话,文章上显示的时间会跟本地差八小时,按时间排序看起来就很奇怪。

数据目录:./data 是订阅列表和抓回来的文章,./extensions 是以后装扩展用的。两个都是相对于编排文件所在目录的,所以整个项目文件夹拷走就是一份完整备份。

镜像标签跟着官方文档走用 latest 就行,不建议自己钉一个具体的版本号 —— 钉死之后上游更新了你这边还停在旧版。

第二步:在飞牛上建 Compose 项目

打开飞牛的 Docker 应用,切到 Compose,点右上角的新增项目。项目名称填 freshrss。

路径这一栏点开,在「我的文件」下面挑一个空文件夹选中 —— 这个文件夹以后就是这个项目的家,编排文件和上面说的 data、extensions 两个目录都会放在里面。

来源选「创建 docker-compose.yml」,把上面那份编排整段贴进去。

下面「创建项目后立即启动」勾上,点创建。镜像下载八十多兆,拉完很快就跑起来了。

第三步:用内网穿透开放到公网

容器跑起来之后,先别急着在内网点来点去 —— 下一步直接把它开放到公网,后面的安装向导、建管理员、加订阅全部在公网地址上做,能省掉一轮返工。

在飞牛的应用中心里搜 PassNAT,装上,账号登一次。打开插件点创建隧道:名字随便起;协议选 TCP;本地 IP 这一栏留空就好,默认就是 127.0.0.1,不用去查 NAS 的局域网地址;本地端口填上面那个 3032。

建好之后点开详情,按电源键把它启动,状态转成运行中。面板上那个「IP:端口」就是在外面要用的公网地址,后面所有操作都用它。

第四步:在公网地址上走安装向导

用刚拿到的公网地址打开,第一次进来是安装向导,一共五步,几十秒就能走完。

第一步选语言。下拉里是有简体中文的,选上之后从第二步开始,向导和装完之后的整个界面就都是中文的了。

第二步是环境自检,PHP 版本、扩展、目录权限一项项列出来,官方镜像跑的话全部是「正常」,这一页没有表单,点下面的「下一步」链接继续。

第三步是数据库配置,默认就是 SQLite,什么都不用填,直接提交。这也是为什么这一期只要一个容器:不需要另外起 MySQL 或者 PostgreSQL。

第四步建管理员。用户名 1 到 39 个字符,字母数字和 . _ @ - 都行;认证方式保持默认的「网页表单」;密码至少 7 位。这一步就是这个实例唯一的管理员账号,填完提交。

第五步会显示安装成功,下面有一个「完成安装」的链接 —— 一定要点它,不点的话配置不会真正写下去,回到首页还会跳回安装向导。点完就是登录页,用刚建的账号进去。

怎么用

第一次进去,左边订阅树里已经有一条「FreshRSS releases」了,那是它自带的官方更新源。不过右边多半是空的 —— 文章要等一次抓取才会进来。点上面那排图标里最右边的「更新订阅源」,十来条更新立刻就排进来了,未读数直接标在订阅名旁边。

点开一条,正文直接在下面展开,不用跳去原网站;往下看的过程中它会自动标成已读,想留着的点一下星标就进收藏。上面那排图标还能切换只看未读、只看收藏,以及普通视图和阅读视图。

加自己的源就在左上角的「订阅管理」里:点「添加订阅源」,把订阅地址贴进去点添加就行。很多网站会在页脚放一个 RSS 图标,也有不少博客的订阅地址就是域名后面加 /feed 或者 /rss。加进来之后可以给它归到某个分类下面,订阅多了之后按分类看会清爽很多。

抓取的频率在「配置 - 归档」里调,最小自动刷新间隔从 20 分钟到一周都能选。想立刻看到新内容,随时点一下「更新订阅源」就行。

一些使用上的细节

数据都在项目文件夹的 data 目录里,包括订阅列表和抓回来的文章正文。想搬到另一台机器,把整个文件夹拷过去、用同样的编排起一个容器就能接着用。

从 1.30.0 开始,它默认不去抓局域网地址上的订阅源(127.0.0.1、192.168 开头这些)。如果你想订阅家里另一台机器上某个服务生成的订阅地址,去「管理 - 系统配置」里找到 Internal host allowlist 那一栏,一行一条地把要放行的 host:port 或者网段填进去就可以了。

这个实例只有你一个人用的话,管理员账号就够了;要给家里人各开一个,「管理 - 用户管理」里可以再加,各人的订阅和已读状态互不干扰。

如果暂时不想让外面访问,去 PassNAT 插件里把那条隧道的电源关掉就行,内网照常用,不用动容器。