stacks/miniflux: self-hosted RSS reader + News group on homepage

Adds Miniflux on ana-docker as the unified inbox for tech blogs,
Hacker News, lobste.rs, and selected subreddits. Reddit serves clean
RSS for any sub at https://reddit.com/r/<sub>/.rss, so subreddit
follows fold into the same inbox as everything else — no Reddit
account needed, no manual polling.

Stack:
  stacks/miniflux/
    compose.yaml          — miniflux + bundled postgres:16
    .env.example          — placeholders for DB password + admin user
    starter-feeds.opml    — initial subscriptions (HN, Lobste.rs,
                            r/selfhosted, r/homelab, r/LocalLLaMA, r/nba)
    README.md             — deploy / OPML import / r/nba spoiler
                            block-list / backup / update flow

Postgres bundled with the stack (not pfi-postgres) — single-user RSS
DB is tiny and the bundle keeps the dependency graph flat.

Homepage gets a new 'News' group at the TOP of the Main tab (above
Monitoring) so the Miniflux card sits prominently. The card itself
auto-discovers via the homepage.* labels on the miniflux container.

Per-feed block-list rule for r/nba documented in README — Reddit's
RSS titles for game threads include scores ("Lakers 108 - Warriors
102 [Final]") which spoil the game; a regex catches the score
patterns and skips those entries while keeping discussion/highlights.

Deploy:
  scripts/elway ana-docker --playbook playbooks/deploy-miniflux.yaml

Then edit /opt/docker/compose/miniflux/.env on the host to fill in
the two CHANGE_ME passwords and `docker compose up -d` again.
This commit is contained in:
vh
2026-04-26 11:52:50 -07:00
parent ec6b7edb06
commit 6c96ffef01
6 changed files with 361 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>
<title>Starter feeds — fleet ops + selfhosting + LLM + sports</title>
</head>
<body>
<outline text="Tech aggregators" title="Tech aggregators">
<outline type="rss" text="Hacker News" title="Hacker News"
xmlUrl="https://news.ycombinator.com/rss"
htmlUrl="https://news.ycombinator.com/" />
<outline type="rss" text="Lobste.rs" title="Lobste.rs"
xmlUrl="https://lobste.rs/rss"
htmlUrl="https://lobste.rs/" />
</outline>
<outline text="Subreddits — selfhosting / homelab / LLM" title="Subreddits — selfhosting">
<outline type="rss" text="r/selfhosted" title="r/selfhosted"
xmlUrl="https://www.reddit.com/r/selfhosted/.rss"
htmlUrl="https://www.reddit.com/r/selfhosted" />
<outline type="rss" text="r/homelab" title="r/homelab"
xmlUrl="https://www.reddit.com/r/homelab/.rss"
htmlUrl="https://www.reddit.com/r/homelab" />
<outline type="rss" text="r/LocalLLaMA" title="r/LocalLLaMA"
xmlUrl="https://www.reddit.com/r/LocalLLaMA/.rss"
htmlUrl="https://www.reddit.com/r/LocalLLaMA" />
</outline>
<outline text="Subreddits — sports (apply spoiler block-list, see README)" title="Subreddits — sports">
<outline type="rss" text="r/nba" title="r/nba"
xmlUrl="https://www.reddit.com/r/nba/.rss"
htmlUrl="https://www.reddit.com/r/nba" />
</outline>
</body>
</opml>