FreshRSS on a VPS: Self-Hosted RSS Feed Reader with Multi-User and API Support

FreshRSS on a VPS: Self-Hosted RSS Feed Reader with Multi-User and API Support

FreshRSS is a self-hosted RSS and Atom feed aggregator — it fetches articles from blogs, news sites, and podcasts, presents them in a clean reader interface, and syncs read state across devices via API. It supports the Google Reader and Fever APIs, making it compatible with every major RSS reader app (Reeder, NetNewsWire, Unread, ReadKit). Feedly charges $8/month for pro features. FreshRSS is free and stores your reading history privately.

Step 1: Docker Compose Setup

<code">mkdir -p /opt/freshrss && cd /opt/freshrss
nano docker-compose.yml
<code">version: '3.8'

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: always
    ports:
      - "127.0.0.1:8080:80"
    environment:
      TZ: America/New_York
      CRON_MIN: "*/15"     # Fetch new articles every 15 minutes
      FRESHRSS_ENV: production
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions
<code">docker compose up -d

Step 2: Nginx Reverse Proxy

<code">sudo nano /etc/nginx/sites-available/freshrss
<code">server {
    listen 443 ssl http2;
    server_name rss.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/rss.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/rss.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
<code">sudo certbot --nginx -d rss.yourdomain.com
sudo systemctl reload nginx

Step 3: Initial Setup

  1. Visit https://rss.yourdomain.com
  2. FreshRSS install wizard: database (SQLite or PostgreSQL), admin username/password
  3. Settings → Archiving: set article retention (default: 3 months)
  4. Settings → Shortcuts: customize keyboard navigation

Step 4: Import Feeds (OPML)

<code"># Export from Feedly/Inoreader/other RSS readers as OPML file
# FreshRSS → Subscriptions → Import/Export → Import OPML

# Or add feeds manually:
# + (Add a feed) → paste URL → FreshRSS fetches feed metadata

# Popular feeds to start with:
# Tech news: https://hnrss.org/frontpage (Hacker News)
# Dev news: https://lobste.rs/rss
# Stack Overflow: https://stackoverflow.com/feeds/tag/linux
# Github releases: https://github.com/docker/compose/releases.atom

Step 5: Configure API for Mobile Apps

<code"># Enable Google Reader API (most widely supported):
# Settings → Authentication → API → Enable API access
# Set a separate API password (not your login password)

# Compatible apps (Google Reader API):
# - Reeder 5 (iOS/macOS): Settings → Add Account → Feedbin
#   Actually works with Google Reader API:
#   Server URL: https://rss.yourdomain.com/api/greader.php
#   Username: your FreshRSS username
#   Password: your API password

# - NetNewsWire (iOS/macOS): Add Account → FreshRSS
#   URL: https://rss.yourdomain.com
#   Username / API password

# - ReadKit, Reeder, Unread: use Google Reader or FreshRSS API endpoint

# Fever API (for apps that only support Fever):
# Enable: Settings → Authentication → Fever emulation
# URL: https://rss.yourdomain.com/api/fever.php

Step 6: Filters and Categories

<code"># Organize feeds into categories:
# Subscriptions → Manage → Categories → New Category
# Categories: "Tech", "Security", "Design", "Business"
# Drag feeds into categories

# Reading filters:
# Search → use filter operators:
# #tag          → filter by tag
# ?unread       → unread only
# ?starred      → starred/saved articles
# author:name   → filter by author
# feed:sitename → filter by feed

# Content filters (filter out noise):
# FreshRSS → Subscriptions → Edit Feed → Filtering Rules
# Title doesn't contain: "sponsored", "promoted", "advertisement"

# Global search: magnifying glass → searches all articles across all feeds

Step 7: Extensions

<code"># Popular FreshRSS extensions:
# Place in /var/www/FreshRSS/extensions/

# Readable full-content (fetch full article text for truncated feeds):
git clone https://github.com/ariel-sr/freshrss-readable.git \
    /opt/freshrss-data/extensions/Readable
docker compose restart freshrss

# Enable: Extensions → Readable → activate for specific feeds

# Other useful extensions:
# - Better Reading: keyboard shortcuts improvement
# - Reddit Embed: renders Reddit posts inline
# - YouTube API: shows YouTube thumbnails

Getting Started

FreshRSS uses under 100 MB RAM — perfect for a 1 GB Ubuntu VPS at VPS.DO. The Docker image handles the cron job for article fetching automatically. For users with 50–200+ subscriptions (common among tech professionals), self-hosted FreshRSS is faster than Feedly for searching article history and provides unlimited article archival without premium tier restrictions.

Conclusion

Self-hosted FreshRSS provides private, unlimited RSS reading — no article limits, no algorithm filtering, no read history sold to advertisers. The Google Reader and Fever API compatibility means every major RSS app on iOS, macOS, Android, and Windows works identically. For information-dense readers who rely on RSS for staying current, FreshRSS provides the chronological, unfiltered feed experience that algorithmic social media replaces with engagement optimization.

1 Comment

  • Tidew
    October 28, 2026

    How can self-hosted RSS feed readers like FreshRSS help users organize news sources, protect their data privacy, and efficiently manage information from multiple websites? Universitas Swasta Terbaik

Post Your Comment

Fast • Reliable • Affordable VPS - DO It Now!

Get top VPS hosting with VPS.DO’s fast, low-cost plans. Try risk-free with our 7-day no-questions-asked refund and start today!