Categories
Deployment DevOps Docker Learning Productivity

Miniflux: self-hosted RSS reader

In an attempt to stay more updated with the things that are happening online, I’ve recently started following the top stories on Hackernews via the Telegram channel. But I’ve very quickly realized that it is just not part of my routine to check news via telegram.

What about RSS readers? I remember using Google Reader donkey’s years ago before it was abruptly shut down and I never did get back to RSS readers from then on; probably something to do with the trauma of losing all my news feed suddenly without a good alternative.

In my search for something that just “works”, Dickson hooked me up again with another recommendation that does exactly what I ask for: works.

TLDR; it’s a very simple and opinionated RSS reader that has a self-hosted option.

Setup

It was so simple that I got the docker up and running on my Synology NAS within minutes. Here’s the docker-compose.yml file that I used to get up and running. Docs on configurable parameters

version: '3'
services:
  miniflux:
    image: miniflux/miniflux:latest
    expose:
      - 8080
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://YOUR_USER:[email protected]/miniflux?sslmode=disable
      - BASE_URL=https://YOUR_DOMAIN
      # - RUN_MIGRATIONS=1
    healthcheck:
      test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
  db:
    image: postgres:latest
    environment:
      - POSTGRES_USER=YOUR_USER
      - POSTGRES_PASSWORD=YOUR_PASSWORD
    volumes:
      - miniflux-db:/var/lib/postgresql/data
volumes:
  miniflux-db:
networks:
  default:
    external:
      name: nginx-proxy-manager_default

This service was then exposed via Nginx Proxy Manager which relies on mTLS to establish a connection with Cloudflare (my CDN of choice). More details on how I setup the network can be found on the post of Setting up Webdav.

When adding your feed, an extremely useful option to enable is Fetch original content. This allows the service to fetch the full content instead of the half-ass articles where you have to “click to read more”. This saves me a ton of time from not having to be redirected for every single damn article.

Once you’ve added your RSS feed of choice, this is what it looks like.

Access to feed

Miniflux has a web app that you can pretty much use out of the box regardless of which platform you’re on. But if you want an mobile app of your choice, you can enable Fever API integration on Miniflux which most RSS readers seem to be able to integrate with.

The one recommended to me was Fiery Feeds (iOS), it worked perfectly for me. I honestly do not know enough about RSS readers to recommend for other platforms, but there is definitely enough integration options on Miniflux that it should be able to satisfy your needs.

What it looks like on Fiery Feeds

Issues faced

I struggled for perhaps an hour because of some CSP settings that causes JavaScript to be blocked on the Miniflux’s web app. I eventually narrowed down to Rocket Loader, which is a JS lazy loading optimizer. I am not sure what exactly it does but it messed up the loading of a important library which cause many of the action links to fail.

Disabling Rocker Loader worked. But it was an undesirable solution, since I’m losing performance for no reason. The correct solution would be to fix the CSP headers somehow; but I couldn’t get the correct syntax for overriding content-security-policy on Nginx. This would be something I’ll be looking into over the weekends.

Now what?

I’ve invested time and energy into a solution that should help me keep up to date with news.

  • Will this help me read more?
  • Will I procrastinate and let the articles pile up?
  • Will this become part of my routine?

I don’t know /laugh. This is day 1 of implementation and it’s a miracle that I’ve managed to write about it. Time alone will tell if I’ve made an insane bargain on the use of my time or this setup is going down the drain.

(p.s. shoutout to Dickson for a great recommendation as always)

Leave a Reply