跳到主要内容

Miniflux 部署教程:Docker、RSS 订阅与个人阅读器

通过 Docker Compose 部署 Miniflux 与 PostgreSQL,创建管理员、添加 RSS 并配置域名及数据备份。

用一个服务集中订阅 RSS

Miniflux 把不同网站的 RSS 更新放进一个阅读器,适合在电脑与手机之间同步未读状态。它需要 PostgreSQL 保存订阅、文章和账号。

本文使用 Linux、Docker Compose 与宿主机 Caddy。先准备 rss.example.com 域名,已有 Docker 安装和 HTTPS 教程可作为前置阅读。

生成凭证并建立 Compose

下面命令只用于首次安装。它遇到已有 .env 或 postgres 路径就会停止;维护已有实例时保留原凭据和数据库目录,不要重新生成密码。

bash;使用前请核对本文前提。
bash <<'BASH'
set -euo pipefail
umask 077
mkdir -p "$HOME/miniflux"
cd "$HOME/miniflux"
if [ -e .env ] || [ -L .env ] || [ -e postgres ] || [ -L postgres ]; then
    printf '%s\n' '已有凭据或数据库目录,停止初始化;请保留原文件。' >&2
    exit 1
fi
db_password="$(openssl rand -hex 24)"
admin_password="$(openssl rand -hex 24)"
test -n "$db_password" && test -n "$admin_password"
(set -C; printf "DB_PASSWORD=%s\nADMIN_PASSWORD=%s\n" "$db_password" "$admin_password" > .env)
BASH

确认命令成功退出后再继续。PostgreSQL 的 POSTGRES_PASSWORD 只在空数据目录初始化时设置数据库密码;已有数据库不会因 .env 换了密码而同步更新。

将下面配置保存成 compose.yml。PostgreSQL 固定为 17,数据目录与该大版本匹配。

yaml;使用前请核对本文前提。
services:
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: miniflux
      POSTGRES_USER: miniflux
      POSTGRES_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD}
    volumes:
      - ./postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U miniflux -d miniflux"]
      interval: 10s
      timeout: 5s
      retries: 10
  miniflux:
    image: miniflux/miniflux:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8082:8080"
    environment:
      DATABASE_URL: postgres://miniflux:${DB_PASSWORD:?set DB_PASSWORD}@db:5432/miniflux?sslmode=disable
      RUN_MIGRATIONS: "1"
      CREATE_ADMIN: "1"
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: ${ADMIN_PASSWORD:?set ADMIN_PASSWORD}
      BASE_URL: https://rss.example.com
    depends_on:
      db:
        condition: service_healthy

启动与域名访问

bash;使用前请核对本文前提。
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 miniflux
caddyfile;使用前请核对本文前提。
rss.example.com {
    reverse_proxy 127.0.0.1:8082
}

域名需换成自己的,并同步修改 BASE_URL。Caddy 运行在宿主机时使用此本地映射;其他代理环境按对应网络设置。

登录并添加订阅

使用 admin 和 .env 中生成的 ADMIN_PASSWORD 登录,添加一个有效 RSS 地址,查看能否刷新出文章。订阅入口通常是网站提供的 feed URL,不是任意首页地址。

首次初始化完成后,可以从环境中移除 CREATE_ADMIN、ADMIN_USERNAME、ADMIN_PASSWORD 并重建容器,账号已经保存在数据库中。不要删除数据库目录。

升级和备份

将实际运行的 Miniflux 版本记录下来,需要固定版本时把 latest 改成对应稳定标签。升级前导出 PostgreSQL 数据,保留 compose.yml 与 .env。

PostgreSQL 升级大版本需要逻辑导出恢复或专门升级流程,不能只把 17 改成 18。RSS 阅读器占用随订阅、文章数量和保留时间变化,磁盘用量增加时检查数据保留设置。

OPML 导入与抓取失败

导入前保留原 OPML 文件,导入后检查分类、来源地址和重复订阅。OPML 保存的是订阅列表,历史文章、收藏和已读状态要通过完整数据库备份保留。

单个来源抓取失败时检查 feed 地址、认证、响应状态和服务器网络;所有来源同时停止更新时,先查应用、数据库和任务状态。来源更新不频繁时,按实际更新周期安排抓取。