Getting FreshRSS Running on the Old NUC

Getting FreshRSS Running on the Old NUC

Tutorials docker freshrss homelab rss self-hosting

Getting FreshRSS Running on the Old NUC (and Why I'm Done With Feedly)

I finally did the thing I've been putting off since basically March: I pulled my ancient Intel NUC out of the closet, wiped it, and set it up as a little always-on box just to run FreshRSS. It took maybe forty minutes once I actually sat down and did it, which is annoying, because I'd been dreading it for months like it was some huge project.

Quick backstory for anyone who wasn't reading this blog back when RSS readers were a whole cultural moment: I've been using Feedly since Google Reader died in 2013. Thirteen years. And I've mostly been fine with it, except every year or two they quietly nudge the free tier limits down or push a "Pro" upsell banner that won't go away, and I get annoyed enough to look at alternatives, then don't do anything about it. This time the annoyance finally turned into action, mostly because I hit their 100-feed limit and realized I didn't even know which feeds I'd want to cut. That felt like a sign I'd outgrown the free plan in a way that just meant "pay $8.99/month forever" or "actually fix this."

So, FreshRSS. If you haven't looked at it, it's a self-hosted RSS aggregator, PHP-based, been around for years, still actively maintained. The interface isn't going to win any design awards (it looks like something from 2016, honestly, because a lot of the CSS is) but it does the one job I need it to do, which is show me new posts from about 140 feeds without trying to guess what I "might also like."

The actual setup

I run everything through Docker Compose these days because I got tired of dependency hell on bare metal. Here's roughly what the compose file looks like, stripped down:

services:
  freshrss:
    image: freshrss/freshrss:latest
    ports:
      - "8080:80"
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
    environment:
      - TZ=America/Chicago
    restart: unless-stopped

That's genuinely most of it. Point your browser at port 8080, run through the setup wizard (pick SQLite unless you've got a reason not to — I don't have enough feeds to need MySQL), make an admin account, and you're aggregating feeds in under ten minutes.

The part that actually took effort was exporting my subscriptions out of Feedly as an OPML file and importing them in, because Feedly buries that export option about four menus deep now, presumably on purpose. Found it eventually under account settings, not the main settings page, which is exactly the kind of dark-pattern nonsense that made me want to leave in the first place.

What I like about it, what I don't

The good: it's fast. Genuinely fast, because it's not doing any of the AI-summary, recommended-articles, trending-now stuff that Feedly's been layering on top for the past couple years. It's just a list of things I subscribed to, in the order they were published. Novel concept, apparently.

The mobile situation is a little rougher. There's no official FreshRSS app, so you're relying on third-party clients that talk to it over the Fever or Google Reader API it exposes. I ended up going with Reeder on iOS, which costs a few bucks but works well enough that I stopped thinking about it after day two.

One thing that bugs me: if my NUC's power goes out and doesn't come back cleanly, I have to SSH in and restart the container manually more often than I'd like. I keep meaning to set up a proper watchdog for it and keep not doing it. Classic homelab problem — you build the thing, then half-maintain it forever.

Was it worth it

Yeah, honestly. Not because self-hosting is some moral victory (it isn't, and I say that as someone who used to be very smug about self-hosting everything) but because I got tired of a company deciding, on their schedule, how many feeds I'm allowed to read for free. My NUC draws maybe 15 watts sitting there doing this one job. That's a cost I can live with a lot more easily than watching another price increase land in my inbox next spring.

If you've got old hardware gathering dust and you're even a little annoyed at your current reader, it's a weekend-afternoon project, not a weekend project. Give it the forty minutes.