2015年搭的Tiny Tiny RSS利用率并不高,反而是养成了读完RSS unread的好习惯,因此还给Inoreader付费了几年。

后来计划(plan)赶不上变化,又陆续收到几封邮件介绍新功能,兴冲冲跑去试用被告知Support Plan不行,得Pro Plan。

所以还是得靠开源项目和自己。这次用的是Miniflux和docker-compose,资源占用少,部署和维护简单——如果不升级数据库。

部署

Miniflux是用go写的,docker image只有十几M,内存和CPU占用也几乎可以忽略不计。

部署分三步:

  • 添加域名A记录指向VPS IP,确认生效
  • 下载和修改docker-compose.ymlCaddyfile,改成你的域名和邮箱。(如果80/443端口被占用了,记得也要改,这个caddy image号称支持非80端口申请SSL证书但是我没测试过)
  • docker-compose up -d --remove-orphans数次,等服务都起来了,按照gist里的命令进container创建用户

就可以导入OPML开始阅读了。

维护

维护也很简单:

  • 升级版本:分别找到minifluxcaddy的新版本,修改docker-compose.yml,然后docker-compose up -d --remove-orphans
  • 服务器迁移:把整个目录拷到新机器,跑起来(此时会用旧机器申请到的SSL,所以能直接启动),修改DNS指向新IP,生效后关闭旧实例

(可选)Postgres升级

Postgresql本身的升级频率不高,(所以?)步骤复杂许多,主要用到pg_upgrade。在部署和本文编写期间,Postgres从12升到了13。

有人做了现成的工具,但是我没能跑成功,只好手动来做。

# 关机备份
cd /root/rss
docker-compose down
mkdir -p ../pgup
cd ../pgup
cp -rp ../rss/miniflux-db miniflux-db-bak-12

# 新建13数据库,启动完成后C-c退出
docker run --rm -e POSTGRES_USER=miniflux -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=tmp -v /root/rss/miniflux-db-13:/var/lib/postgresql/data postgres:13-alpine

# 进container升级,旧数据库mount为/dbold
docker run -it --rm -e POSTGRES_USER=miniflux -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=tmp -v /root/pgup/miniflux-db-bak-12:/dbold -v /root/rss/miniflux-db-13:/var/lib/postgresql/data postgres:13-alpine bash

# 安装postgres 12
# 用`postgres --version`检查路径:本文升级时postgres 13在/usr/local/bin,apk安装的12在/usr/bin
apk update
apk add postgresql
/usr/local/bin/postgres --verion
/usr/bin/postgres --verion

# 升级
#  the data directory for the old cluster  (-d DATADIR)
#  the data directory for the new cluster  (-D DATADIR)
#  the "bin" directory for the old version (-b BINDIR)
#  the "bin" directory for the new version (-B BINDIR)
su - postgres
POSTGRES_USER=miniflux POSTGRES_PASSWORD=secret /usr/local/bin/pg_upgrade -d /dbold -D /var/lib/postgresql/data -b /usr/bin -B /usr/local/bin -U miniflux

# (可选)default level of optimizer statistics
## 新tab启动cluster
docker exec -it [8e2ea4199d8d] bash
su - postgres
/usr/local/bin/postgres -D /var/lib/postgresql/data
## 老tab,跑完后C-c两个tab
./analyze_new_cluster.sh

# 用新数据库和数据目录启动
# docker-compose.yml:12-alpine => 13-alpine, miniflux-db => miniflux-db-13
cd ../rss
docker-compose up -d --remove-orphans

升级后按照changelog描述,重建index,减少硬盘占用:

root@localhost:~/rss# docker exec -it rss-db bash
bash-5.0# psql -U postgres
psql (13.0)
Type "help" for help.

postgres=# REINDEX database miniflux;
ERROR:  can only reindex the currently open database
postgres=# \c miniflux;
You are now connected to database "miniflux" as user "postgres".
miniflux=# REINDEX database miniflux;
REINDEX
miniflux=# ^D\q
bash-5.0# exit

root@localhost:~/rss# du -sh mini*
262M	miniflux-db
210M	miniflux-db-13