本文介绍如何使用 Miniflux 搭建属于自己的 RSS 服务。

RSS 是一种消息来源格式规范,用以聚合多个网站更新的内容并自动通知网站订阅者。使用 RSS 后,网站订阅者便无需再手动查看网站是否有新的内容,同时 RSS 可将多个网站更新的内容进行整合,以摘要的形式呈现,有助于订阅者快速获取重要信息,并选择性地点阅查看。

本教程基于 Debian 11 系统且不直接使用 root 用户。如果你对使用 SSH 连接服务器和创建新用户有疑惑的话,请参考这篇博文

与 Tiny Tiny RSS 对比

Miniflux 和 Tiny Tiny RSS 是两个优秀的免费开源 RSS 聚合阅读器。

虽然 Tiny Tiny RSS 比较成熟,可是基于 PHP 编写的 Tiny Tiny RSS,实在太「重」。如果你感兴趣的话,推荐尝试 Awesome TTRSS 这个项目,Awesome TTRSS 旨在提供一个 「一站式容器化」 的 Tiny Tiny RSS 解决方案,通过提供简易的部署方式以及一些额外插件,以提升用户体验。

Miniflux 是基于 GO 编写的,程序设计极简,无外部依赖,功能却丝毫不差。

安装 Miniflux

更新 Debian 系统

为防止遇到无法拉取 HTTPS 源的情况,先运行以下命令:

sudo apt install apt-transport-https ca-certificates

你可根据机器的网络环境,自行判断是否手动更改 APT 源。

更改 APT 源

tee /etc/apt/sources.list << EOF
deb https://opentuna.cn/debian/ bullseye main contrib non-free
# deb-src https://opentuna.cn/debian/ bullseye main contrib non-free
deb https://opentuna.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://opentuna.cn/debian/ bullseye-updates main contrib non-free

deb https://opentuna.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://opentuna.cn/debian/ bullseye-backports main contrib non-free

deb https://opentuna.cn/debian-security bullseye-security main contrib non-free
# deb-src https://opentuna.cn/debian-security bullseye-security main contrib non-free
EOF

更新系统

sudo apt update && sudo apt upgrade

安装 Docker

安装 Docker 所必需的前置包

sudo apt install ca-certificates curl gnupg lsb-release

添加 Docker 官方的 GPG 密钥

curl -fsSL https://download.docker.com/linux/debian/gpg \
    | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加 Docker 稳定版仓库

echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
    https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
    | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker Engine

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io

添加当前用户至 Docker 用户组

sudo usermod -aG docker $USER

安装 Docker Compose

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

请注意将下面命令中的 v2.2.2 替换为 Docker Compose 的最新版本

sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/libexec/docker/cli-plugins/docker-compose

sudo chmod +x /usr/libexec/docker/cli-plugins/docker-compose

使用 Docker Compose 安装 Miniflux

创建 ~/miniflux 目录

mkdir ~/miniflux && cd ~/miniflux

创建 docker-compose.yml

touch docker-compose.yml

修改 docker-compose.yml 文件内容

version: '3.4'
services:
  miniflux:
    image: 'miniflux/miniflux:latest'
    restart: unless-stopped
    ports:
      - '<端口>:8080'
    depends_on:
      - db
    environment:
      - 'DATABASE_URL=postgres://miniflux:<密码>@db/miniflux?sslmode=disable'
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=<管理员用户名>
      - ADMIN_PASSWORD=<管理员密码>
    healthcheck:
      test:
        - CMD
        - /usr/bin/miniflux
        - '-healthcheck'
        - auto
  db:
    image: 'postgres:latest'
    restart: unless-stopped
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=<密码>
    volumes:
      - 'miniflux-db:/var/lib/postgresql/data'
    healthcheck:
      test:
        - CMD
        - pg_isready
        - '-U'
        - miniflux
      interval: 10s
      start_period: 30s
volumes:
  miniflux-db: null

测试 Miniflux

docker compose up -d

此时浏览器输入 IP:<端口> 应该已经可以访问 Miniflux。如无法访问,请检查服务器的防火墙设置。

安装 Nginx

安装 Nginx 所必需的前置包

sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring

添加 Nginx 官方的 GPG 密钥

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null

添加 Nginx 稳定版仓库

echo \
    "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

安装 Nginx

sudo apt update

sudo apt install nginx

申请 SSL 证书

安装 acme.sh

curl https://get.acme.sh | sh -s email=<邮箱>

开启 acme.sh 自动更新

acme.sh --upgrade --auto-upgrade

申请 SSL 证书

sudo acme.sh --issue --nginx --keylength ec-256 -d <域名>

安装 SSL 证书

sudo mkdir /etc/nginx/ssl

sudo acme.sh --install-cert --ecc -d <域名> \
    --key-file          /etc/nginx/ssl/privkey.pem \
    --ca-file           /etc/nginx/ssl/chain.pem \
    --fullchain-file    /etc/nginx/ssl/fullchain.pem \
    --reloadcmd "service nginx force-reload"

配置 Nginx

获取 dhparam.pem 文件

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

创建配置文件

sudo touch /etc/nginx/conf.d/miniflux.conf

修改配置文件

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <域名>

    location / {
        proxy_pass http://127.0.0.1:<端口>;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;

    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;

    resolver 1.1.1.1;
}

启动 Nginx

sudo systemctl start nginx

此时应该已可以通过域名访问 Miniflux。如无法访问,请检查服务器的防火墙设置。

使用 Miniflux

网页端

登录后,可在 Settings 中更改语言为简体中文,还可以修改时区和主题。

移动端

在设置 ⇨ 集成中,开启 Fever 并设置 Fever 用户名和 Fever 密码。建议搭配 FeedMe (Android) 或 Reeder (Apple) 使用。

高级功能

  • 过滤规则:最基础的 RSS 功能,可以过滤「垃圾」信息。

  • 重写规则:Miniflux 允许通过添加重写规则来实现诸如在图片下方添加图片标题,抑或是添加视频播放器。

  • 剔除规则:当 RSS 源仅提供文章摘要时,我们可以通过获取原始内容再搭配剔除规则的方式来抓取文章全部内容。

RSSHub - 万物皆可 RSS

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。

RSSHub 可以配合浏览器扩展 RSSHub Radar 和 移动端辅助 App RSSBud (iOS) 与 RSSAid (Android) 食用。

除了 RSS 阅读器之外,RSS 订阅源更是重中之重。然而,很多内容提供者 (包括但不仅限于微信公众号) 并不提供 RSS,但我们可以使用 RSSHub 来获取 RSS 订阅链接。

RSSHub 具体使用方法请参考官方文档