Miniflux 是一个非常好用的 RSS 自托管方案,支持自建,支持多种客户端,支持多种订阅方式。 最近由于在折腾 Archivebox,需要将 Miniflux 中的 Starred Feed 作为一个 Feed 输出,以便于 导入星标条目到 Archivebox。 Miniflux 本身并不支持这个功能,但是其提供了 API,可以比较简单的导出 Starred 内容。
备选方案🔗
如果是自己使用 Python 写的话,可以利用 https://github.com/miniflux/python-client 这个库,配合 feedgen 也能写个大概的,核心代码大概如下:
import miniflux
from feedgen.feed import FeedGenerator
client = miniflux.Client("https://miniflux.example.com", api_key="api_key")
entries = client.get_entries(starred=True, limit=50)
def create_rss_page(data):
fg = FeedGenerator()
fg.title('Miniflux Starred Feed')
fg.link(href='https://miniflux.wogong.net', rel='self')
fg.language('en')
fg.description('Miniflux Starred Feed')
for entry in data['entries']:
fe = fg.add_entry()
fe.id(entry['id'])
fe.title(entry['title'])
fe.link(href=entry['url'])
fe.description('nothing')
fe.author(name=entry['author'])
fe.pubDate(entry['published_at'])
rss_feed = fg.rss_str(pretty=True)
fg.rss_file('rss.xml')
return rss_feed
但是本着不自己造轮子的原则,找到了一些现成的工具,例如
- Small CLI which can be used to export all your miniflux RSS feeds into an OPML file and to export all starred/bookmarked entries https://github.com/rogierlommers/miniflux-exporter
- Atom feed exporter for Miniflux starred items https://github.com/erdnaxe/miniflux-luma
两个项目的 star 数都寥寥,miniflux 有这么小众么,第一个工具尝试了一下,导出 starred item 出问题了, 估计太久没维护,提交了一个 issue https://github.com/rogierlommers/miniflux-exporter/issues/8
第二个项目同样有问题,编译都没通过,我对 go 也是两眼抹黑,同样提交了 issue https://github.com/erdnaxe/miniflux-luma/issues/1
这个作者反应迅速,直接修复了,而且可以通过 web 方式提供 feed,决定就用他了。
Docker-compose 部署🔗
当然可以选择直接用编译好的二进制文件,但是我还是喜欢用 docker-compose 来部署,方便管理。
这也不只是一个偏好问题,多维护一个独立的 Web 服务显然是不合理的,而且这个服务只是 Miniflux
的附属,所以要是能集成到 miniflux 的 docker-compose 中就好了。一番折腾,获得如下的
docker-compose.yaml
文件:
version: '3.4'
services:
miniflux:
image: miniflux/miniflux:latest
ports:
- "127.0.0.1:8080:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- DEBUG=0
- CREATE_ADMIN=1
- ADMIN_USERNAME=
- ADMIN_PASSWORD=
db:
image: postgres:latest
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=
volumes:
- miniflux-db:/var/lib/postgresql/data
- ./back:/back
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
luma:
build: miniflux-luma
ports:
- "127.0.0.1:8081:8080"
command: -endpoint http://miniflux:8080 -listen-addr 0.0.0.0:8080
volumes:
- ./miniflux-luma/api_token:/api_token
volumes:
miniflux-db:
miniflux-luma 官方并没有提供 Dockerfile,可参考我的仓库 https://github.com/wogong/miniflux-luma
之后无论是自己反代 8081 端口还是通过 Cloudflare Tunnel 反代,都可以方便的使用了。 和 miniflux 共同维护也比较方便,挂了一个另一个也没意义了反正。