前言

最近准备自建一个rss阅读器(被互联网大厂的网络服务背刺过几次以后,我已经倾向于能自建的服务都自建)。

上一次使用rss阅读器可能还得追溯到10多年前的google reader,自从google突然宣布关闭reader服务以后,我也就在没有用过rss阅读器。而且这些年的互联网发展趋势,确实是从开放走向封闭,博客由盛而衰,内容社区也是往往是限制必须注册登录后内容可见,更有甚者甚至都不对搜索引擎开放收录,大搞私域流量。

回到正题,这次是要自建一个rss阅读器服务。首先是了解了以下现在可选的自建rss阅读起服务有哪些。这里看到【这篇博客】整理的表格。

我最后选择的是miniflux有两个原因,其一是考虑到资源占用,因为我可能需要把服务部署到性能孱弱的arm盒子上,其二是前两个服务用的都是php方案,我对php不熟,虽然都支持docker一键部署,但考虑到如果原生部署,miniflux只需要一个预编译的go二进制包就行了。


部署

miniflux官方的文档提供了部署教程,英语阅读没有障碍的话可以直接看官方文档。

我选择了docker-compose部署,所以非常简单,只需要准备一份docker-compose.yml文件即可。miniflux官方文档里已经提供了docker-compose.yml的模板,只需要根据自己的需求调整一些配置即可。

以下是官网模板在2024/09/06提供的模板,模板具有时效性,请留意官网模板可能会有更新变动。

services:
  miniflux:
    image: miniflux/miniflux:latest
    ports:
      - "80:8080"
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=test123
  db:
    image: postgres:15
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=miniflux
    volumes:
      - miniflux-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "miniflux"]
      interval: 10s
      start_period: 30s
volumes:
  miniflux-db:

从yml文件中可以看到需要安装两个服务,一个是miniflux本体,另一个是数据库postgres。实测amd64版本的两个服务的镜像占用大概500MB的存储空间。

根据自己的需求,我对配置模板做了简单调整,调整的内容做了注释

services:
  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux            # 指定容器名称
    user: 1000:1000                     # 这里指定用非root账户运行容器
    restart: always                     # 增加重启策略
    ports:
      - "80:8080"                       # 指定端口以后记得防火墙放行
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://miniflux:123456@db/miniflux?sslmode=disable # 注意修改数据库密码
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=test123
    healthcheck:                        # 增加服务的健康检查
      test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
  db:
    image: postgres:15
    container_name: postgres            # 指定容器名称
    user: 1000:1000                     # 这里指定用非root账户运行容器
    restart: always                     # 增加重启策略
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=123456        # 注意修改数据库密码
      - POSTGRES_DB=miniflux
    volumes:
      - ./data:/var/lib/postgresql/data #这里指定数据库保存位置
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "miniflux"]
      interval: 10s
      start_period: 30s

完成docker-compose.yml的编辑以后,就可以一键部署了

docker-compose up -d

部署成功以后,打开浏览器,输入http://host_ip:80就可以访问miniflx惹。


一些问题

用docker方式部署好miniflux以后,我在添加订阅源的时候碰到了网络问题,无论添加任何订阅源,都会提示dial tcp: lookup xxx.com: i/o timeout,也就是网络异常,不管是添加的国内可以访问的网站源,还是国内无法访问的网站源,都弹这个错误提示。

最后经过排查,是因为我禁止了docker调整防火墙,也就是在/etc/docker/daemon.json中设置了iptables:false,因为我希望由ufw来唯一控制网络端口的开放规则。最后删掉daemon.json中的iptables:false的配置,然后重启docker.service服务,miniflux的网络问题就解决了。


参考文章

  1. 完整的 RSS 解决方案:自建 RSSHub 与 Miniflux
  2. Miniflux Documentation

喝杯奶茶