用海外云服务器搭建Miniflux自建RSS阅读器(RSSHub订阅全网)完整教程(2026最新版)

📅 · ChengziCloud - 一站式云端服务

Meta Description: 手把手教你用海外云服务器搭建Miniflux自建RSS阅读器,配合RSSHub把微博、B站、知乎等没有RSS的网站变成订阅源;含PostgreSQL安装、Docker Compose部署、Nginx反向代理、Let's Encrypt HTTPS、备份升级与常见问题,附服务器配置推荐与价格对比。

> 关键词:Miniflux搭建、自建RSS阅读器、RSSHub部署、海外云服务器、Docker Compose、PostgreSQL、Nginx反向代理、Let's Encrypt、RSS订阅教程、服务器实战搭建

前言

你有没有这种感觉:想看的公众号更新了却刷不到,收藏的技术博客要靠算法推荐才偶尔想起来,关注的 UP 主动态被信息流稀释得无影无踪。我们订阅了很多东西,但这些订阅关系其实并不掌握在自己手里——平台随时可以改算法、降权、关停接口,甚至把收费墙挪到你面前。

RSS(Really Simple Syndication)是互联网上最早、也最「干净」的订阅协议。它不推荐、不追踪、不插广告,只是老老实实告诉你「这个网站更新了一篇新文章」。而自建 RSS 阅读器,就是把这些订阅关系重新拿回自己手里:数据存在你自己的服务器上,界面由你决定,谁也不能替你决定什么该看、什么不该看。

本教程做的事很简单:

1. 用一台海外云服务器部署 Miniflux——一个极简、极快、用 Go 写的自建 RSS 阅读器; 2. 再部署 RSSHub——一个「什么都能变成 RSS」的转换器,把微博、B站、知乎、Telegram 频道这些本来没有 RSS 的内容,转换成标准订阅源; 3. 最后配上域名、Nginx 反向代理和 Let's Encrypt 免费 HTTPS,做成一个只属于你自己的信息入口。

Miniflux 当前稳定版为 2.3.3(2026-07-24 发布)。它有一个非常鲜明的特点:只支持 PostgreSQL 数据库,这是官方明确写死的设计,不是配置问题。理解这一点,后面的部署就顺理成章了。

> 🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持。

一、方案选型:自建 RSS 阅读器该怎么挑

在动手之前,先花两分钟把「自建 RSS 阅读器」这一类的几个主流方案分清楚。它们解决的问题相似,但前提条件差别很大,选错了会事倍功半。

| 方案 | 技术栈 | 数据库 | 界面风格 | 适合谁 | 代价 | |------|--------|--------|---------|--------|------| | Miniflux | Go 单二进制 | 仅 PostgreSQL | 极简、键盘优先、无花哨 | 只想要「读」、追求轻快省资源的人 | 功能刻意克制,没有插件系统 | | FreshRSS | PHP | SQLite/MySQL/PostgreSQL | 信息密度高、扩展多 | 想要丰富主题与插件、习惯 PHP 环境的人 | 需要 PHP-FPM,资源占用高于 Miniflux | | Tiny Tiny RSS | PHP | PostgreSQL/MySQL | 功能最全但界面偏旧 | 需要强大过滤规则与多用户的老用户 | 上手重、维护活跃度不如当年 | | Feedly / Inoreader | SaaS 托管 | 厂商托管 | 漂亮、多端同步 | 不想折腾、只想开箱即用的人 | 免费额度受限、数据在别人手里、可能被墙 |

选 Miniflux 的理由很直接:它只有几 MB 内存占用,即便是几百个订阅源,CPU 也几乎可以忽略;它用一个静态编译的 Go 二进制发布,部署和升级都干净利落;同时它内置了 Let's Encrypt 自动签证书、媒体代理防追踪、全文搜索(借助 PostgreSQL)等实用能力。对于「一个人、一台小服务器、想要一个能长期稳定跑的信息入口」这个场景,它就是最省心的答案。

需要特别提醒的两条边界,避免你误判它的能力:

- Miniflux 不是「稍后读」工具,也不是笔记工具。 它的「保存文章」是把条目推送到 Pinboard、Instapaper、Wallabag 这类第三方服务,而不是自己囤内容。想要「收藏并检索自己读过的东西」,那是文档管理/知识库的活,应该考虑 Paperless-ngx、Wiki.js 这类工具。 - Miniflux 没有插件系统,也不支持加载外部样式表。 官方在 FAQ 里把这条写得很清楚:主题是内嵌进二进制的,要加主题只能提 PR。这不是偷懒,而是它的「极简哲学」——功能有意保持少而精,所以它才能一直这么快、这么稳。

读懂这两条边界,你就不会拿它去干它不擅长的事。而它真正擅长的事——把一堆分散的信息源,变成每天早上打开就能安静读完的一页——后面几节会一步步搭出来。

> 📌 一句话边界:Miniflux 管「读」,RSSHub 管「源」,PostgreSQL 管「存」,Nginx 管「门面」。 四者各司其职,缺一不可。

二、服务器配置推荐与购买

Miniflux 本体非常轻,但整套「阅读器 + RSSHub」的信息入口,资源消耗会被两个东西拉高:

- RSSHub 需要 Node.js 运行时,比 Miniflux 重得多; - 部分 RSSHub 路由需要真实浏览器渲染(比如某些登录墙/JS 页面),这时要额外跑一个 Chromium 容器,内存占用会明显上升。

所以配置要按「你要不要 RSSHub、要不要浏览器渲染」分档:

| 使用场景 | CPU | 内存 | 硬盘 | 带宽 | 推荐系统 | 月费参考 | |---------|-----|------|------|------|---------|---------| | 只跑 Miniflux(几百个订阅源) | 1核 | 1GB | 25GB SSD | 1TB | Ubuntu 22.04 | $5-6/月 | | Miniflux + PostgreSQL(个人主力) | 1核 | 1GB | 25-50GB SSD | 1-2TB | Ubuntu 22.04 | $6-12/月 | | Miniflux + RSSHub + Redis(推荐) | 2核 | 2GB | 50GB SSD | 2TB | Ubuntu 22.04 | $12-18/月 | | 上浏览器渲染 + 多用户(重度) | 2核 | 4GB | 80GB SSD | 4TB | Ubuntu 22.04 | $24/月 |

海外云服务器价格对比(Linux,按月计费,价格为公开官网参考价):

| 服务商 | 入门档 | 推荐档(2核2G) | 进阶档(2核4G) | 数据中心 | 优点 | |--------|--------|----------------|----------------|---------|------| | DigitalOcean Droplet | $4(512MB/1vCPU/10GB/500GB) | $12(2GB/1vCPU/50GB/2TB) | $24(4GB/2vCPU/80GB/4TB) | 全球 14+ 区域 | 文档最完善、新手最友好 | | AWS Lightsail | $5(0.5GB/2vCPU/20GB/1TB) | $12(2GB/2vCPU/60GB/3TB) | $24(4GB/2vCPU/80GB/4TB) | 全球多区域(含亚太) | 固定月费、含静态 IP | | 阿里云国际版 ECS | 约 $4-6 | 约 $12-18 | 约 $20-30 | 香港/新加坡/硅谷 | 中文面板、国内支付、延迟低 | | 腾讯云国际版 CVM | 约 $4-6 | 约 $12-18 | 约 $20-30 | 香港/新加坡/东京 | 低延迟到国内、中文支持 |

> 声明:本文价格数据采集于 2026 年 10 月,仅为公开官网参考区间,实际以各厂商官网实时报价为准;金额单位均为美元(USD)。DigitalOcean 与 AWS Lightsail 为当日直读官价,阿里云国际版 / 腾讯云国际版为公开区间。

选购建议:

1. 先想清楚要不要 RSSHub。 只要 Miniflux 的,1核1G 甚至更小就够;一旦要跑 RSSHub 加浏览器渲染,直接上 2核2G 起步。 2. 系统一律选 Ubuntu 22.04 / 24.04 或 Debian 12。 Miniflux 官方 Debian 包要求 Debian ≥ 8 或 Ubuntu ≥ 16.04,但新系统在 Docker 和 PostgreSQL 上少踩坑。CentOS 7 已 EOL,除非有历史包袱,否则别在新机上用它。 3. 优先选离你近的亚太节点(香港/新加坡/东京/首尔),打开阅读器的速度会明显更快。

> 💡 新手建议:直接选香港或新加坡节点的 2核2G,既能跑 Miniflux 也能跑 RSSHub,延迟低、中文面板、价格实惠。通过 5.chengzicloud.cloud 购买可享额外折扣。

三、环境准备:系统初始化与 PostgreSQL 安装

买好服务器后,用 SSH 登录(把下面命令里的 your-server-ip 换成你的公网 IP):

`bash ssh root@your-server-ip `

第1步:更新系统并安装基础工具

`bash // Ubuntu 22.04 / 24.04 / Debian 12 apt update && apt upgrade -y apt install -y curl wget git vim ufw ca-certificates

// 设置时区(方便看日志) timedatectl set-timezone Asia/Shanghai `

配置基础防火墙,只放行 SSH、HTTP、HTTPS:

`bash ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable `

第2步:安装并初始化 PostgreSQL

这是整套方案里唯一不能省、也最容易被忽略的一步。官方在 Requirements 页面写得很死板:只支持 PostgreSQL >= 11。所以先把数据库装好。

`bash apt install -y postgresql postgresql-contrib systemctl enable --now postgresql systemctl status postgresql `

接着创建 Miniflux 专用的数据库和用户。不要图省事直接用默认的 postgres 超级用户跑 Miniflux,权限太大不安全:

`bash // 切换到 postgres 用户 sudo -u postgres -i

// 创建专用用户(会提示你输入两遍密码) createuser -P miniflux

// 创建归属该用户的数据库 createdb -O miniflux miniflux2

// 验证一下 psql -l | grep miniflux

// 退出 postgres 用户 exit `

到这里,你会得到一个连接串。请把它记下来,后面 Miniflux 要用:

`text postgres://miniflux:你的密码@127.0.0.1:5432/miniflux2?sslmode=disable `

> ⚠️ 一个官方文档里明写、却极多人踩的坑:如果你的数据库密码里含有 ^、@、# 这类特殊字符,并且使用 URL 形式(postgres://...)填写 DATABASE_URL,Go 语言从 1.10 起会做 URL 校验并直接报错 net/url: invalid userinfo。两种解法:要么把密码做 URL 编码,要么改用「键值对」形式而非 URL 形式,例如 user=miniflux password=... dbname=miniflux2 sslmode=disable。最省事的做法是——别在密码里用特殊字符。

四、部署 Miniflux:Docker Compose 是首选

Miniflux 提供三种安装方式:官方 Debian/RPM 包、预编译二进制、Docker 镜像。本教程主推 Docker Compose——它把 Miniflux 和 PostgreSQL 组合成一个可复现、可备份、可一键升级的栈,最适合实战。

第3步:安装 Docker 与 Compose 插件

`bash // 官方一键脚本(Ubuntu/Debian) curl -fsSL https://get.docker.com | sh

// 启用并设置开机自启 systemctl enable --now docker

// 验证(同时确认 compose 子命令可用) docker --version docker compose version `

> 💡 Docker 的详细用法与可视化管理可以参考站内 Docker + Portainer 部署教程,两者可以无缝配合——用 Portainer 的图形界面管理这里的容器同样很方便。

第4步:编写 docker-compose.yml

新建目录并写入配置。这个文件同时定义了 Miniflux 应用和它依赖的 PostgreSQL:

`bash mkdir -p /opt/miniflux && cd /opt/miniflux vim docker-compose.yml `

写入以下内容(注意把密码换成你自己的强密码):

`yaml services: miniflux: image: miniflux/miniflux:2.3.3 restart: always ports: - "127.0.0.1:8080:8080" depends_on: db: condition: service_healthy environment: - DATABASE_URL=postgres://miniflux:请改成强密码@db/miniflux2?sslmode=disable - RUN_MIGRATIONS=1 - CREATE_ADMIN=1 - ADMIN_USERNAME=admin - ADMIN_PASSWORD=请改成强密码 - BASE_URL=https://rss.example.com - POLLING_FREQUENCY=60 - CLEANUP_ARCHIVE_READ_DAYS=60 healthcheck: test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"] interval: 30s timeout: 10s retries: 3 db: image: postgres:18 restart: always environment: - POSTGRES_USER=miniflux - POSTGRES_PASSWORD=请改成强密码 - POSTGRES_DB=miniflux2 volumes: # Postgres 18 用 /var/lib/postgresql;17 及更早用 /var/lib/postgresql/data - miniflux-db:/var/lib/postgresql healthcheck: test: ["CMD", "pg_isready", "-U", "miniflux"] interval: 10s start_period: 30s volumes: miniflux-db: `

几个必须理解的点:

- ports 绑定在 127.0.0.1:8080 而不是 0.0.0.0:8080。这是刻意的:让 Miniflux 只监听本机,外部一律通过后面的 Nginx 反向代理进来,避免应用端口直接暴露在公网。 - RUN_MIGRATIONS=1 是有意显式开启的。 官方 FAQ 专门解释了「为什么不自动执行 SQL 迁移」:因为只有一个进程应该同时操作数据库结构,多容器/编排场景下自动迁移会出问题。所以这是一个「需要你确认」的开关,不是遗漏。 - CREATE_ADMIN / ADMIN_USERNAME / ADMIN_PASSWORD 只在首次创建时生效。 首启后建议把这三行删掉——账号已经建好了,留在配置里没有意义,反而多一份泄露风险。 - PostgreSQL 卷路径要按版本区分:Postgres 18 的 PGDATA 是 /var/lib/postgresql,17 及更早是 /var/lib/postgresql/data。挂错路径会导致数据「看着没存进去」。 - BASE_URL 今天就填对。它同时决定 HTML 里的链接和 Cookie 的路径,填错会出现「登录后跳转异常」「邮件里的链接打不开」之类的问题。

第5步:启动并创建管理员

`bash cd /opt/miniflux docker compose up -d

// 查看启动日志,确认没有报错 docker compose logs -f miniflux `

如果看到类似 Listening on 127.0.0.1:8080 且没有迁移错误,就说明起来了。本机验证一下:

`bash curl -I http://127.0.0.1:8080/ `

返回 200 OK 或 302 都属正常(未登录时会重定向到登录页)。

> 📌 备用安装法(裸二进制 / Debian 包):如果你不想用 Docker,官方也提供 Debian 包与 RPM 包。用 apt 仓库安装时,配置写在 /etc/miniflux.conf(systemd 会从这里读环境变量),然后依次执行 miniflux -migrate -config-file /etc/miniflux.conf、miniflux -create-admin -config-file /etc/miniflux.conf,再 systemctl restart miniflux。注意:Debian 包要求 Debian ≥ 8 或 Ubuntu ≥ 16.04,且每次升级后都必须手动跑一次迁移。

关键配置参数速查

以下是实战中最常调的几个环境变量(完整清单见官方 Configuration 页面):

| 变量 | 默认值 | 作用 | 建议 | |------|--------|------|------| | LISTEN_ADDR | 127.0.0.1:8080 | 监听地址 | 反代后保持默认(仅本机) | | BASE_URL | http://localhost | 生成链接与 Cookie 路径 | 必改为你的域名 | | HTTPS | 关闭 | 强制 Cookie 带 Secure 并下发 HSTS | 反代走 HTTPS 时设为 1 | | POLLING_FREQUENCY | 60(分钟) | 后台拉取一批源的时间间隔 | 源多可降到 30,但别太激进 | | FORCE_REFRESH_INTERVAL | 30(分钟) | 手动刷新允许的最小间隔 | 保持默认即可 | | CLEANUP_ARCHIVE_READ_DAYS | 60 | 已读条目归档天数 | 想永久保留设 -1 | | CLEANUP_ARCHIVE_UNREAD_DAYS | 180 | 未读条目归档天数 | 同上 | | MEDIA_PROXY_MODE | http-only | 媒体代理范围 | 保持默认,避免混合内容与追踪 | | METRICS_COLLECTOR | 关闭 | 暴露 /metrics 给 Prometheus | 需要监控时设 1 | | FETCH_BILIBILI_WATCH_TIME | 关闭 | 抓取 B 站视频时长显示为阅读时长 | B 站党设 1 |

其中 FETCH_BILIBILI_WATCH_TIME 值得单独说一句:Miniflux 内置了对 B 站、YouTube、Nebula 等视频站点的「观看时长抓取」,开启后会把它显示为条目的阅读时长——对一个以中文内容为主的用户来说,这个小细节相当贴心。

五、Nginx 反向代理 + Let's Encrypt 免费 HTTPS

Miniflux 现在只在本机 127.0.0.1:8080 上跑着,要让外网安全访问,还需要一层 Nginx 做反向代理并签发证书。这一步的完整原理可以参考站内 Nginx + SSL 证书配置教程,这里只讲针对 Miniflux 的关键处理。

第6步:解析域名并安装 Nginx

先在 DNS 服务商处把子域名(例如 rss.example.com)的 A 记录指向你的服务器公网 IP,然后:

`bash apt install -y nginx systemctl enable --now nginx `

第7步:编写反向代理配置

新建 /etc/nginx/conf.d/miniflux.conf:

`nginx server { listen 80; server_name rss.example.com;

location / { proxy_pass http://127.0.0.1:8080; 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; } } `

检查并重载:

`bash nginx -t && systemctl reload nginx `

第8步:签发 Let's Encrypt 证书

`bash apt install -y certbot python3-certbot-nginx certbot --nginx -d rss.example.com --redirect --agree-tos -m [email protected] `

--redirect 会自动把 HTTP 跳到 HTTPS。签发完成后,回到 docker-compose.yml,把环境变量 HTTPS=1 和一门心思的 BASE_URL=https://rss.example.com 确认无误,然后重启:

`bash cd /opt/miniflux && docker compose up -d `

> ⚠️ Miniflux 反代的头号坑:反向代理认证与转发头。当 Miniflux 跑在反向代理后面、且你希望它信任 X-Forwarded-For / X-Forwarded-Proto / X-Real-Ip 这些头时,必须显式配置 TRUSTED_REVERSE_PROXY_NETWORKS(CIDR 列表,例如 127.0.0.1/8 或 172.16.0.0/12)。不配的话,Miniflux 不会信任这些头,你在日志里看到的客户端 IP 会全是本机地址,基于真实 IP 的限流、审计也就失去意义。如果你还想用「反向代理认证」(由前置代理注入用户身份、Miniflux 免密登录),TRUSTED_REVERSE_PROXY_NETWORKS 同样是前置必配项。 > > 另外,Miniflux 自身其实内置了 Let's Encrypt 自动签发——只要设置 CERT_DOMAIN,它会自动申请并自动续期证书。但在「Nginx 反代 + certbot」这套组合下,HTTPS 由 Nginx 终止,就不要再让 Miniflux 去签同一张证书,避免两边打架。二选一,别同时用。

第9步:首次登录与基础配置

浏览器打开 https://rss.example.com,用第 5 步创建的 admin 账号登录。建议立刻做三件事:

1. 改密码,并在设置里确认「本地认证」策略; 2. 如需更高安全性,开启 WebAuthn / Passkey(官方支持,默认关闭)——用指纹或安全密钥登录,比密码更抗撞库; 3. 打开 OPML 导入,把你在别的阅读器里导出的订阅一次性搬过来。

Miniflux 还兼容 Fever 和 Google Reader API,这意味着你可以用 Reeder、NetNewsWire、Unread 等众多现成客户端连上你的自建实例——网页端只是其中一种读法,你的手机也能用原生 App 读。

六、部署 RSSHub:把「没有 RSS 的网站」变成订阅源

到这一步,Miniflux 已经能愉快地读标准 RSS 了。但真正让自建阅读器「值回票价」的,是它背后的 RSSHub。

RSSHub 的定位是「Everything is RSSible」——把那些根本不提供 RSS 的站点(微博、B站、知乎、小红书、Telegram 频道、播客、GitHub 动态……)实时转换成标准 RSS 源。整个网络由超过 5000 个全球实例组成,路由由社区持续维护。把 RSSHub 和 Miniflux 放在同一台服务器上,你就拥有了一个「什么都能订阅」的入口。

第10步:用 Docker Compose 启动 RSSHub

RSSHub 默认端口是 1200,官方推荐的 Compose 部署会一并拉起 Redis(做缓存)和可选的无头浏览器。新建目录并写入配置:

`bash mkdir -p /opt/rsshub && cd /opt/rsshub vim docker-compose.yml `

写入:

`yaml services: rsshub: # 需要浏览器渲染的路由,改用 diygod/rsshub:chromium-bundled image: diygod/rsshub restart: always ports: - "127.0.0.1:1200:1200" environment: NODE_ENV: production CACHE_TYPE: redis REDIS_URL: "redis://redis:6379/" CACHE_EXPIRE: 3600 PLAYWRIGHT_WS_ENDPOINT: "ws://browserless:3000" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"] interval: 30s timeout: 10s retries: 3 depends_on: - redis - browserless browserless: image: browserless/chrome restart: always ulimits: core: hard: 0 soft: 0 redis: image: redis:alpine restart: always volumes: - redis-data:/data volumes: redis-data: `

启动:

`bash docker compose up -d docker compose logs -f rsshub `

验证服务健康:

`bash curl -I http://127.0.0.1:1200/healthz `

第11步:给 RSSHub 配一个域名并反代

为 rss.example.com 之外的另一个子域名(例如 hub.example.com)再写一份 Nginx 配置,方法同第 7、8 步,只需把 proxy_pass 指向 http://127.0.0.1:1200。签发证书后即可通过 https://hub.example.com 访问。

第12步:在 Miniflux 里订阅 RSSHub 生成的内容

RSSHub 的用法是:https://hub.example.com/<路由>。几个中文用户最常用的例子:

| 想订阅的内容 | RSSHub 路由形态 | 说明 | |-------------|----------------|------| | 某 B 站 UP 主的投稿 | /bilibili/user/video/<UID> | 追更新最实用 | | 某 B 站 UP 主的动态 | /bilibili/user/dynamic/<UID> | 含图文动态 | | 某微博用户的微博 | /weibo/user/<UID> | 需配置相应访问凭据 | | 某知乎用户的动态 | /zhihu/people/activities/<用户ID> | 追答主 | | 某 Telegram 频道 | /telegram/channel/<频道名> | 追资讯 | | 某 GitHub 仓库的 Release | /github/releases/<用户>/<仓库> | 追版本发布 |

拿到完整 URL 后,在 Miniflux 里点「添加订阅」,粘贴进去即可。从此微博、B站、知乎的更新,会和你订阅的博客、新闻一样,安静地出现在同一个列表里。

> ⚠️ RSSHub 部署的三个关键点: > 1. latest 与 chromium-bundled 的区别不是「新旧」,而是「能不能跑需要浏览器的路由」。latest 镜像不含浏览器,体积小、资源省;chromium-bundled(或改用 browserless 服务)带浏览器,能覆盖更多路由,但多消耗内存和磁盘。2核2G 的机器建议先用 latest + 独立 browserless,按需伸缩。 > 2. 架构上 arm/v7 自 2025-04-22 起已被移除,只剩 amd64 和 arm64。老款 32 位 ARM 小机器装不了新版 RSSHub。 > 3. RSSHub 是持续更新的项目,推荐用简易的 watchtower 或定期 docker compose pull && docker compose up -d 保持更新;同时给 GITHUB_ACCESS_TOKEN 之类的变量留好位置,以便提升部分路由的调用配额。

七、日常运维:备份、升级与监控

自建服务「搭起来」只是开始,「稳定跑一年」才是本事。Miniflux 恰恰在这一点上很让人省心——它的数据几乎全在 PostgreSQL 里,备份一个数据库就等于备份了整个阅读器。

备份:一条命令保住全部订阅

官方 FAQ 直接给出的做法就是标准 PostgreSQL 备份:

`bash // 备份(在宿主机或容器里执行) pg_dump miniflux2 -f miniflux.dump

// 恢复 psql miniflux2 < miniflux.dump `

如果 Miniflux 跑在 Docker 里,从容器内导出更稳妥:

`bash docker compose exec db pg_dump -U miniflux miniflux2 > /root/miniflux-$(date +%F).dump `

> 📌 为什么备份如此简单? 因为 Miniflux 严格遵循「十二要素应用」原则——它不把任何东西写在本地文件系统上(连网站图标 favicon 都存在数据库里!)。也就是说,没有「忘了备份某个目录」的隐患,一个 dump 就是全部。把这个 dump 定期同步到对象存储(参考站内 MinIO 对象存储部署教程),或者按 服务器备份与灾难恢复教程 做异地留存,就万无一失了。

升级:两种方式,别搞混

Docker 方式(推荐)——改好镜像 tag 后平滑重启:

`bash cd /opt/miniflux docker compose pull docker compose up -d `

Debian/RPM 包方式——升级后必须手动执行迁移,这是官方反复强调的点:

`bash apt upgrade miniflux miniflux -migrate -config-file /etc/miniflux.conf systemctl restart miniflux `

> ⚠️ 升级前先备份。 迁移是单向的,跨大版本回滚时没有备份会很难受。

自动清理:别让数据库无限膨胀

Miniflux 自带清理任务,默认每 24 小时跑一次,会移除过期会话并归档旧条目。默认策略是:

- 已读条目:超过 60 天归档; - 未读条目:超过 180 天归档; - 旧会话:超过 30 天删除。

如果你希望「永不丢弃」,把 CLEANUP_ARCHIVE_READ_DAYS 和 CLEANUP_ARCHIVE_UNREAD_DAYS 都设为 -1 即可(注意数据库会持续增长)。

监控:让它自己告诉你「还活着」

Miniflux 内建了 Prometheus 指标。打开 METRICS_COLLECTOR=1 后,它会暴露一个 /metrics 端点(默认只允许 127.0.0.1/8 访问,公网实例切记别把它直接暴露出去,或用 METRICS_ALLOWED_NETWORKS 收紧网段)。把它接进 Prometheus + Grafana,就能看到拉取数、错误率等趋势——站内 服务器监控系统搭建教程 有完整对接方法。

如果你只想要一个「服务挂了就通知我」的轻量方案,配一个 Uptime Kuma 可用性监控,对 https://rss.example.com 做探活 + 告警即可,成本几乎为零。

安全:自建服务暴露公网的第一原则

- 只开放 80/443。Miniflux(8080)和 RSSHub(1200)都绑定在 127.0.0.1,由 Nginx 统一入口; - 别把 /metrics 或数据库端口暴露公网; - 开启 Passkey/WebAuthn 或至少设置强密码,防撞库; - 启用 HTTPS=1 让 Miniflux 下发 HSTS 与 Secure Cookie。

八、常见问题 FAQ

Q1:Miniflux 能不能用 MySQL 或 SQLite? 不能。官方 Requirements 明确写死「只支持 PostgreSQL >= 11」,这是设计选择而非配置项。想要 SQLite/MySQL 的话,请改用 FreshRSS。

Q2:为什么我的 SQL 迁移没有自动执行? 这是刻意设计。官方 FAQ 说明:自动迁移在多容器/编排场景下会产生并发改表问题,所以默认关闭,需要你显式设置 RUN_MIGRATIONS=1。

Q3:ADMIN_PASSWORD 填了但登录不上? CREATE_ADMIN / ADMIN_USERNAME / ADMIN_PASSWORD 只在首次初始化、且数据库里还没有管理员时生效。如果之前已经建过 admin,改这三行不会有任何效果,请用界面的「忘记密码」或直接改数据库。

Q4:从别的阅读器迁移订阅方便吗? 非常方便。Miniflux 支持 OPML 导入/导出,也支持通过 URL 导入。在原阅读器导出 OPML,再在 Miniflux 里导入即可。

Q5:手机上有 App 吗? 不需要商店下载 App 也能用——网页可「添加到主屏幕」。同时它兼容 Fever 和 Google Reader API,因此 Reeder、NetNewsWire 等第三方客户端都能直连你的自建实例。

Q6:能订阅没有 RSS 的网站吗? 这正是 RSSHub 的用途。部署 RSSHub 后,用它生成的路由 URL 作为订阅地址即可,例如 B 站 UP 主、微博用户、知乎动态、Telegram 频道等。

Q7:RSSHub 的 latest 和 chromium-bundled 该选哪个? latest 不含浏览器,轻量省资源,但部分需要浏览器渲染的路由用不了;chromium-bundled 带浏览器,覆盖更广但更吃内存。小内存机器建议 latest + 独立 browserless 服务,按需启用。

Q8:为什么订阅的图片显示不出来或提示混合内容? 因为很多源站的图片是 HTTP 的。Miniflux 的媒体代理(默认 MEDIA_PROXY_MODE=http-only)会自动代理这类内容,既解决 HTTPS 页面的混合内容告警,也顺带阻止第三方追踪。保持默认即可。

Q9:我的订阅源多久拉取一次? 默认 POLLING_FREQUENCY=60 分钟一批,且单次手动刷新有 FORCE_REFRESH_INTERVAL=30 分钟的最小间隔。源很多时可把批大小(BATCH_SIZE,默认 100)和拉取频率一起调。

Q10:数据库密码里有特殊字符,Miniflux 起不来? 是的,这是已知问题:URL 形式连接串里含 ^ 等字符会触发 net/url: invalid userinfo。请改用键值对形式,或对密码做 URL 编码,最简单是换一个不含特殊字符的强密码。

Q11:想永久保留已读文章怎么办? 把 CLEANUP_ARCHIVE_READ_DAYS 设为 -1(未读同理)。代价是数据库会持续增长,注意磁盘。

Q12:登录时显示的不是真实客户端 IP? 因为你没有配置 TRUSTED_REVERSE_PROXY_NETWORKS。反代后面要信任 X-Forwarded-For 等头,必须显式列出受信网段(如 127.0.0.1/8)。

Q13:Miniflux 能自动续期 HTTPS 证书吗? 能。设置 CERT_DOMAIN 后它内置 Let's Encrypt 自动签发与续期。但如果你用 Nginx + certbot 终止 HTTPS,就别再开这个,两边二选一。

Q14:整套方案一个月要多少钱? 只跑 Miniflux,$5-6/月的 1核1G 足够;带上 RSSHub + Redis + 无头浏览器,建议 2核2G,约 $12-18/月。相比很多 SaaS 阅读器的订阅费,自建通常更划算,而且数据完全属于你。

结语

到这里,你已经拥有一个完全属于自己的信息入口:Miniflux 安静地读,RSSHub 把全网变成源,PostgreSQL 稳稳地存,Nginx + Let's Encrypt 守住门面。它不推荐、不追踪、不插广告,也不掌握在任何一个平台手里——这正是 RSS 二十多年来最朴素、也最持久的价值。

维护它其实很简单:定期 pg_dump 备份,docker compose pull 升级,剩下的时间就安心读文章吧。如果你还想在这台服务器上继续扩展,下面这些站内教程都能无缝衔接。

延伸阅读:

- 海外云服务器搭建 Docker + Portainer 容器管理平台完整教程 - 海外云服务器 Nginx 反向代理 + Let's Encrypt SSL 证书配置教程 - 海外云服务器搭建 MySQL / PostgreSQL 数据库服务器教程 - 海外云服务器搭建 n8n 工作流自动化平台教程 - 海外云服务器搭建 Meilisearch 自建搜索引擎教程 - 海外云服务器备份与灾难恢复实战教程

> 本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。