在群晖上部署全功能 RSS 订阅托管服务:实现基于 FreshRSS 自部署和多端访问
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
在完成将书库以及播客订阅服务从公有云迁移到自己的群晖服务器之后,我的下一个进行「私有化部署」的云服务就是老大难的 RSS 订阅托管,作为一个每天都需要访问大量海内外科技资讯的互联网从业者,RSS 订阅一直都是我获取资讯最为重要的渠道,而此前我一直都将大量的订阅源集中托管在诸如 Feedly 或者 inoreader 这样的公有云平台中,但这些订阅托管服务都存在国内访问不畅、客户端夹杂平台广告甚至是各种功能上的限制,所以当考虑到未来 RSS 订阅托管依旧是需要高频访问的服务时,我开始考虑将 RSS 订阅托管服务也迁移到个人的 NAS 上。
将 RSS 托管订阅服务迁移到群晖这样的 NAS 上,我选择了可以直接使用源码部署的 FreshRSS,由于 FreshRSS 基于 PHP,对部署设备环境要求较低,群晖上使用相关的网络服务组件就可以实现灵活部署,也非常方便使用文本编辑器等工具来实现配置文件的修改;相比目前最为常用的自部署服务 Tiny Tiny RSS,FreshRSS 部署难度要更低,同时移动客户端的选择也更为丰富。
另外选择源码部署而不是更简单的「一键 Docker」,主要原因是我的订阅源大多来自海外的资讯源,因此需要让群晖可以更好的进行外网访问,而 Docker 本身存在的网络环境隔离,进行代理服务的配置就变的非常繁琐,再加上我们还需要根据各自网络环境的不同对项目源码进行相应的修改,因此直接源码部署反而是最为方便的。
以下部署方案基于最新的 DSM 7.0,作者采用的是 VMM 挂载 VDSM 的形式实现,从而实现了物理硬件环境的隔离。如果你使用 DSM 6.x 也可以进行参考,但不确保可以完全实现。
和此前使用 Docker 部署相关的「自部署」服务有所不同的是, RSS 订阅服务由于牵涉到本机环境以及网络,因此要进行一系列的预先配置,首先就是需要让群晖访问海外的部分网站。
具体的服务部署这里不再赘述,需要说明的是群晖支持配置代理网络的。打开「控制面板」- 「网络」-「常规」中,勾选「通过代理服务器」链接并配置地址以及端口,并勾选上「对于本地地址不使用代理服务器」,这里需要说明的是群晖的代理服务只支持 HTTP 代理,所以进行代理服务配置的时候可千万不要弄错了。
之后我们就需要在群晖上安装一系列的套件来搭建部署环境,实际上如果你了解到互联网项目部署,那么下面安装的一系列的服务套件其实就是将群晖打造成一个「私有云服务器」并部署一个「网站」。
首先打开「套件中心」,找到「Web Station」下载并安装,这个套件可以让你在群晖里面发布网站。
紧接着我们需要再下载一个「Apache HTTP Server 2.4」,这个套件其实是通过部署 FreshRSS 时用来作为其 HTTP 服务器。
对应的是我们还需要下载一个 PHP 作为后端套件,这里我选择的是 PHP 7.3 版本,当然你也可以选择比较新的 PHP 7.4。
由于 FreshRSS 需要将数据以及配置信息存储到数据库中,因此我们还需要安装数据库服务,DSM 7.0 默认只有一种数据库,所以只能选择 MariaDB 10。
下载安装过程中需要配置数据库用户名以及密码,注意这里端口是 3306(如果是 DSM 6.x,则是 3307),最后打开 MariaDB 10 后在「信息」处勾选「启用 TCP/IP 连接」。
最后为了更方便的管理数据库,我们这里还需要安装「phpMyAdmin」。至此在部署前的所有准备工作都已经完成,接下来就可以进行一系列的部署操作了。
首先,我们需要打开 FreshRSS 的官网首页并直接下载最新的源码部署包,然后将下载下来的压缩包解压并复制到群晖的 web 目录中的 freshrss 文件夹中。
接着,我们打开 Web Station 来创建一个「网页服务门户」,选择「新增」-「创建服务门户」,然后选择「虚拟主机」。
弹出的虚拟主机服务新建窗口中选择「基于端口」,在端口上勾选 HTTP 并设置端口号(我设置为83),「文档根目录」定位到刚才我梦新建的「freshrss」。HTTP 后端服务器选择「Apache HTTP Server 2.4」。PHP 选择 PHP 7.3,最后点击确定完成虚拟主机的创建。
在 Web Station 选择 PHP 设置,然后选中刚才我们使用的 PHP 版本(我选择的是 PHP 7.3),然后点击「编辑」来配置 PHP。
在弹出的编辑配置文件中切换到「扩展名」选项卡,全选扩展并点击「保存」。
然后打开群晖的 File Ststion,定位到 freshrss
文件夹,在文件夹上点击右键「属性」,切换到「权限」选项卡并点击「高级选项卡」,勾选「使基层权限显示化」。
然后选中「http」用户以及用户组,点击「编辑」后在「权限编辑器」中勾选「写入」权限,然后点击「确认」。这里主要是确保 http 用户可以读写项目目录。
编辑完属性之后,在属性页面中再勾选上「应用到这个文件夹、子文件夹及文件」,使得权限可以继承到子文件夹,最后再点击「确定」完成设置。
最后我们打开套件「phpMyAdmin」,实际上这里其实就是基于网页的数据库配置工具,登录的用户名以及密码就是你的安装的 MariaDB 10 的数据库用户名和密码。
进入到数据库设置页面之后,我们需要为 freshrss 创建一个单独的数据库,这里点击左侧的「新建」,然后在新建数据库的名称上输入「freshrss」,并点击创建,至此我们就将 FreshRSS 完全部署到了我们的群晖中。
上面流程只是将 FreshRSS 部署到了群晖中,下面我们则需要进行安装,首先我们使用http://<群晖内网地址>:83
访问 FreshRSS 的安装页面。
语言上选择「中文」然后点击 「Submit」,紧接着会直接进入到配置检查,这里如果你此前跟着步骤仔细处理了 PHP 的扩展以及文件夹的权限,那么这里应该是「一片绿灯」。
点击下一步来到「数据库配置」,这里选择数据库类型为「MySQL」,然后在主机上输入127.0.0.1:3306
,用户名填上你的数据库用户名,密码则是你之前创建的数据库密码,数据库则输入前面创建的「freshrss」(注意大小写),然后表前缀输入「freshrss_」.
在下面的「常规配置」中,则输入你的默认用户名和密码来登录 FreshRSS,认证方式保持不变。
最后如果显示「完成安装」则表示整个安装过程已经顺利完成。至此基本的安装过程已经全部结束了。你可以使用刚才设置的用户名和密码来登录群晖中的 FreshRSS 订阅服务了。
登录之后不会有任何订阅源,所以第一步需要做的就是将自己收藏的订阅源加入其中,此前我已经从 inoreader 中导出呢我自己的订阅源,因此我需要将这些订阅源导入到 FreshRSS 中。
首先点击左上方的「订阅管理」,然后再选择左边侧边栏上的「导入/导出」-「导入」,选择前面导入的订阅源合集文件,然后点击导入,如果你网络配置没问题,会在页面上方看到你的订阅源的导入进度。
这时候回到「订阅管理」,检查这里有没有抓取失败的订阅源,尤其是如果你有很多海外媒体的订阅源,好在前面我已经完成了代理配置,因此我原先放在 inoreader 中的订阅源都抓取成功了。
这时候回到订阅首页,可以看到之前的订阅源文件夹结构都被完美复刻。至此我们可以在网页端来阅读我们的 RSS 订阅了——虽然现阶段只能使用浏览器,且只能在本地局域网内进行浏览查看。
那么如何使用在其他设备上浏览器订阅,并且在互联网中访问我们在群晖搭建的 FreshRSS 服务呢?在 FreshRSS 首先我们需要打开相关的 API 开关,使得其支持通过手机客户端访问。
这里点击 FreshRSS 右上方的「配置」,然后在「管理」中找到「认证」,然后勾选最下方的「允许 API 访问」。同时为了方便后面在后台刷新订阅源,最好勾选上「允许匿名刷新文章」以及「允许匿名阅读默认用户的文章」。
然后打开「配置」-「用户账户」,滚动到页面下方会显示出「API 管理」,这里你可以设置专门用手机客户端访问的密码,然后点击下方的 API 链接则会打开 API 访问测试页面,FreshRSS 支持以 Greader 的形式以及 Fever 的形式来进行输出。但由于我们在配置 FreshRSS 是在内网进行配置的,因此这里只会显示内网的地址,并且测试 API 的页面中显示还需要对配置 PHP 文件进行修改。
因此我们这里需要做的是通过类似 DDNS 或者内网映射的形式从外网访问群晖,具体方法就不在本篇文章中再详细赘述了。这里我使用的是 Frp 内网映射来实现通过域名+端口访问群晖。
使用浏览器访问群晖 DSM 系统,打开 File Station 定位到 FreshRSS 的源码项目路径(在 web 这个根目录下面),然后找到 /data/config.php
并使用 文本编辑器打开。
找到 'base_url'
这一行,然后将后面的地址修改成了映射的外网 IP 或者域名地址,然后点击保存。这时候再刷新刚才 FreshRSS 配置页面中的 API 测试页面,如果配置正确这里会显示「Pass」。这样我们就可以使用各种平台的客户端来进行访问了。
但由于 FreshRSS 并不支持自动抓取订阅源,所以我们还需要使用群晖的计划任务功能,实现定时的订阅源抓取。这里我们在 FreshRSS 的首页的控制栏最右侧找到「获取」按钮,在上面点击右键「复制链接地址」。
在群晖的「控制面板」-「计划任务」中,新增「计划的任务」-「用户定义的脚本」,然后在创建任务的页面中设置任务名称(使用英文或者数字)以及使用的账号。
在计划选项卡中,日期下设置为每天运行,在时间栏中设定运行频率为「每10分钟」,并将最后运行时间设定为一天的最后(23:50)。
在任务设置中,在用户定义的脚本中输入:curl '<刚才复制的链接>'
。 并点击确认。
完成之后在「设置」中勾选「保存输出的结果」并将其放在一个特定的文件夹中,这主要是可以知晓脚本的运行情况。
紧接着点击运行脚本即可,后面脚本就会定时刷新获取最新的 RSS 订阅内容了。
搞定了通过互联网访问群晖内的 FreshRSS,接下来我们就可以使用客户端来使用或者访问了,相比 Tiny Tiny RSS,FreshRSS 由于支持两种 API 访问协议,因此在客户端选择上相当多。
首先是 Android 端,这里我选择的是 FeedMe,打开直接选择 RSS 托管服务时直接选择 FreshRSS,然后输入你的 FreshRSS 的 API 地址、用户名和密码。需要注意的是这里输入的地址使用的是 Google Reader compatible API,并且需要输入完整的地址(最后以 greader.php 结尾)。
配置正确的话 FeedMe 就会自动同步并且下载订阅了,使用方法其实和其他公共 RSS 订阅托管平台类似,这里就不详细赘述了。
iOS 端则可以使用 Reeder 这个老牌的订阅工具,版本不一定需要最新的 5.0,事实上旧版本(4.x)也支持 FreshRSS 订阅服务,这里同样在添加订阅服务时选择 「SELF-HOSTED」中的「FreshRSS」,然后登录添加的 API 地址也选择 greader 的 API(完整填写),然后等待抓取订阅即可。
类似的还有 macOS 的 Reeder,其实操作方式都类似,这里就不详细具体展开说了,当然阅读效果也是比较类似的。
而 Windows 平台上则可以选择 Fluent Reader 这样一款免费的 RSS 阅读器来订阅 FreshRSS 的服务,不过和前面提到的几款阅读器不太相同的是,这里需要选择 Fever API 来进行订阅。
Fluent Reader 除了支持 Windows 之外,还支持 macOS,同样还有对应的 iOS 以及 Android 客户端,并且都可以基于 Fever API 来进行订阅,如果你想找一个全终端的版本,那么 Fluent Reader 更为全面且合适。
经过一番设置之后,我终于将 RSS 订阅托管服务从公有云服务 inoreader 迁移到了群晖中,并实现了在互联网上使用终端完成订阅。虽然就功能而言,商业化的 RSS 托管服务更全面但往往有广告以及很多限制(很多公有云订阅托管都对订阅源数量限制),而自托管的服务则限制少,自由开发可定制,如果你和我一样更希望将一些常用服务放在自己的 NAS 上,那么这篇 FreshRSS 的自部署可能会对你有所帮助。
> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃
> 想申请成为少数派作者?冲!