How to Self-Host FreshRSS on a VPS
Take back control of your reading with a self-hosted RSS reader. Install FreshRSS on a VPS with Docker and sync it to your favourite mobile app.

FreshRSS is a fast, self-hosted RSS feed aggregator — your own private, ad-free news reader that pulls together blogs, news sites, YouTube channels and more. Self-hosting means no algorithm deciding what you see and no reader service shutting down on you. This guide installs it with Docker and HTTPS, and connects a mobile app.
Why self-host an RSS reader?
RSS puts you in control: you follow sources directly, in chronological order, with no tracking. Hosting your own means your subscriptions and read state are yours forever, synced across devices through FreshRSS's built-in API. It's a lightweight service that runs happily on the smallest VPS.
Prerequisites
- A VPS with Docker installed — run Docker on a VPS.
- A domain with an A record, e.g.
rss.example.com.
Deploy FreshRSS with Compose
FreshRSS can use SQLite for a simple single-user setup, or Postgres/MySQL for larger installs. We'll pair it with Caddy for automatic HTTPS.
mkdir -p ~/freshrss && cd ~/freshrss
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
environment:
- TZ=Europe/London
- CRON_MIN=*/20
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- freshrss
volumes:
caddy_data:
Caddyfile:
rss.example.com {
reverse_proxy freshrss:80
}
The CRON_MIN setting tells FreshRSS to refresh feeds every 20 minutes. Start it:
docker compose up -d
Finish setup
Open https://rss.example.com and run the installer: choose SQLite (fine for personal use), create your admin account, and you land in the reader.

Add feeds and import your OPML
Click Subscription management to add feeds by URL. Migrating from another reader? Export an OPML file from it and import it here in one step — all your subscriptions come across at once. Organise feeds into categories so your reading stays tidy.
Read on your phone
FreshRSS exposes the Google Reader and Fever APIs, so it works with popular mobile RSS apps. Enable the API under Settings → Authentication, set an API password, then in your app choose "FreshRSS" or "Google Reader API", enter your server URL and credentials, and your feeds and read state sync across every device.
Lock the firewall
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
FreshRSS is a great first self-hosted app because it's so light — a perfect companion to the other services in 12 best self-hosted apps to run on a VPS.
Extensions, filters and full-text
FreshRSS is extensible, and a few additions make it far more powerful:
- Filters: set rules to auto-mark, star or discard articles by keyword, so noisy feeds only surface what you care about.
- Extensions: drop community extensions into the
extensionsfolder you mounted — popular ones add reading-time estimates, sticky feeds and better mobile styling. - Full-text retrieval: some feeds only publish a summary. FreshRSS can fetch the full article for those feeds so you read everything in one place instead of clicking through.
Following sites without an obvious feed
Not every site advertises RSS any more, but most still have one. Try appending /feed, /rss or /atom to a site's URL, or paste the homepage into FreshRSS's subscription box — it will often discover the feed automatically. YouTube channels, subreddits, GitHub releases and podcasts all expose feeds too, so you can follow videos, code releases and audio right alongside your news. Set the refresh cron to a sensible interval and FreshRSS quietly gathers everything for you to read on your own schedule, in chronological order, with no algorithm in the way.
Multiple users and reading anywhere
FreshRSS is happy to serve a household or a small team. As the admin you can create additional user accounts under *Settings → Users*, each with their own private subscriptions and read state — one instance, many independent readers. That makes it an efficient thing to self-host, since a single tiny container covers everyone.
For reading on the move, the built-in API is the key. Enable it under *Settings → Authentication*, set an API password, and connect any compatible mobile reader using the Google Reader or Fever protocol — your feeds, folders and read/unread state stay in sync across the web UI and every device. Because your subscriptions live on your server, switching phones or apps never means rebuilding your reading list. Keep the container updated with a quick docker compose pull && docker compose up -d, and back up the data directory, which holds your feeds and read history.
FAQ
Is FreshRSS hard to run?
No — it's one of the easiest self-hosted apps. With SQLite it's a single container and it sips resources, running on even the smallest VPS.
Can I use my phone's RSS app with FreshRSS?
Yes. FreshRSS supports the Google Reader and Fever APIs, so most popular mobile readers sync with it once you enable the API.
Does FreshRSS support YouTube and podcasts?
Yes. YouTube channels expose RSS feeds you can subscribe to, and podcast feeds are RSS too, so you can follow both.
How often does it fetch new articles?
As often as you configure the refresh cron — every 20 minutes in this setup. You can also refresh manually any time.
Your reading, your rules. FreshRSS runs beautifully on an affordable VPS — pick a plan on the pricing page.