为什么要自己搭建 RSS 服务

在 2020 年的今天,各种推荐算法和信息流已经很完善了,而选择使用 RSS 这种获取信息的方式,一方面是为了不陷入推荐算法的信息茧房,另一个原因是为了能够无障碍获取到外文信息。

在云服务器价格基本上算是白菜价的今天,拥有一台属于自己的云主机已经非常容易;另外,选择国外大部分云主机,随之附送的是通畅的网络,可以自由的获取信息。

今天我们讨论的就是通过国外云主机,通过搭建 RSS 平台来无障碍获取外文信息。

为什么选择 FreshRSS

因为目前使用的 RSS 阅读器是 Reeder,而 Reeder 支持的自建 RSS 服务只剩下了 FreshRSS 和 Google Reader API 以及 Fever(Reeder 不推荐),综合社区活跃度、第三方 App 支持程度、上手难度以及灵活性,最终选择了 FreshRSS。

安装

我们只是为了方便的获取信息,所以所有步骤都按照最简单的方式来做。

这里选择 Docker 方式来部署 FreshRSS,部署简单,快速可用。

安装前需要准备的环境有:

  • 一个 Linux 主机
  • Docker / Podman
  • 域名
  • FreshRSS

安装 Docker

首先,SSH 登录 Linux 主机,安装 Docker:

$ curl -fsSL https://get.docker.com/ -o get-docker.sh   # 下载安装脚本
$ sh get-docker.sh  # 执行安装脚本,需要 root 权限

安全起见,不建议使用 root 用户运行 Docker,这时就需要把普通用户加入到 Docker 用户组,然后通过普通用户运行(如果一直使用 root 用户的话可略过这一步):

$ usermod -aG docker your-username  # 需要 root 用户权限

然后退出重新登录,这时普通用户就可以执行 Docker 命令了。

验证 Docker 是否成功安装,输入 docker run helloworld

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

这时 Docker 便安装成功并可以使用了。

安装及运行 FreshRSS

首先创建虚拟网络:

$ docker network create freshrss-network

建议:使用 Traefik 反向代理平台,可以自动申请 Let'sEncrypt 的 SSL 证书,增加网络安全性。

搭建 traefik 以及 Let's Encrypt:

  • 在 DNS 服务商提前将(子)域名配置到主机所在 IP

首先创建准备环境

$ docker volume create traefik-letsencrypt
$ docker volume create traefik-tmp

然后运行 Traefik、Let'sEncrypt:

$ docker run -d --restart unless-stopped --log-opt max-size=10m \
  -v traefik-letsencrypt:/etc/traefik/acme \
  -v traefik-tmp:/tmp \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --net freshrss-network \
  -p 80:80 \
  -p 443:443 \
  --name traefik traefik:1.7 --docker \
  --loglevel=info \
  --entryPoints='Name:http Address::80 Compress:true Redirect.EntryPoint:https' \
  --entryPoints='Name:https Address::443 Compress:true TLS TLS.MinVersion:VersionTLS12 TLS.SniStrict:true TLS.CipherSuites:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA' \
  --defaultentrypoints=http,https --keeptrailingslash=true \
  --acme=true --acme.entrypoint=https --acme.onhostrule=true --acme.tlsChallenge \
  --acme.storage=/etc/traefik/acme/acme.json --acme.email=your-email@example.net
# 最后的 your-email@example.net 需要修改为自己的 email 地址

运行 FreshRSS

首先为 FreshRSS 创建数据保存位置:

$ docker volume create freshrss-data
$ docker volume create freshrss-extensions

接着运行 FreshRSS:

$ docker run -d --restart unless-stopped --log-opt max-size=10m \
  -v freshrss-data:/var/www/FreshRSS/data \
  -v freshrss-extensions:/var/www/FreshRSS/extensions \
  -e 'CRON_MIN=4,34' \
  -e TZ=Asia/Shanghai \
  --net freshrss-network \
  --label traefik.port=80 \
  --label traefik.frontend.rule='Host:freshrss.example.net' \
  --label traefik.frontend.headers.forceSTSHeader=true \
  --label traefik.frontend.headers.STSSeconds=31536000 \
  --name freshrss freshrss/freshrss

其中:

-e 'CRON_MIN=4,34'  设置定时刷新
-e TZ=Europe/Paris  设置时区
--net freshrss-network  设置 FreshRSS 使用的网络为之前创建的 freshrss-network
--name freshrss freshrss/freshrss   Docker 容器命名
--label*    配置和 traefik 相关的参数,如果不需要 traefik 可以删除,并且替换为如下参数:
-p 8080:80 \    表示 FreshRSS 将运行在 Docker 容器内的 80 端口,以及映射到外部的 8080 端口

基本使用

配置

FreshRSS 安装完成即可使用。通过浏览器访问 https://ip(没有配置 SSL 打开 http://ip:8080/),如图:
 


语言选择中文,点击提交并进入下一步,选择默认参数即可。在常规配置处创建第一个用户(默认也是管理员用户),认证方式保持默认,方便在 Reeder 中使用:
 


一切安装完成,就可以进入下面的界面:
 


点击右上角的齿轮图表进入管理-系统设置,可以进行更详细的配置:

 

 

  • 管理-系统配置-实例名称:自定义该系统的名称
  • 管理-用户管理:管理用户,包括创建、删除、修改密码等
  • 管理-认证:配置认证方式。打开允许 API 访问 (用于手机应用)以便在 Reeder 等第三方阅读器中使用
  • 配置-用户账户:可修改当前用户密码,以及*API 管理(在 Reeder 中登录时使用的口令)

其他配置按照个人需要修改,如主题等。修改完成点击底部提交按钮生效。

导入及管理

如果之前使用的是类似 Feedly 的平台,可以通过导出 opml 格式的订阅源信息,将自己的订阅源导出,再导入 FreshRSS 中。

在首页的订阅管理处,点击导入/导出
 


选择需要导入的订阅源文件,点击导入,等待片刻,原本的订阅源便导入了 FreshRSS 中。

 

单独添加订阅源也很方便,点击Add a feed or category,在Add a feed处添加订阅源即可:
 

 

上方的Add a category用于添加分类。

添加后会跳转到订阅源的详细信息,其中包括基本设置、信息过滤及归档设置、信息展示设置等:
 

 

 

 

此时重新回到首页可以看到订阅信息已经刷新出来:
 

 

第三方客户端支持

Reeder 中可以直接添加 FreshRSS 的订阅源,添加完成后使用体验和 Feedly 是一样的。

点击添加账户,滑到最下方,找到 FreshRSS,点击进入添加界面:
 

 

输入服务器地址(域名或者IP)、用户名及密码(密码为之前用户设置中的 API 密码):
 

 

设置完成就可以看到订阅信息已经同步过来了:
 

 

现在我们已经搭建好了一个 RSS 平台(更像是 RSS 中转站),只要我们的云主机还能访问,我们就能够方便的通过 FreshRSS 获取互联网信息。