Railway

Deploy Fresh RSS

Feedly alternative. Self-hosted RSS/Atom feed aggregator

Deploy Fresh RSS

/var/lib/postgresql/data

Just deployed

/var/www/FreshRSS/data

FreshRSS logo

Deploy and Host FreshRSS on Railway

FreshRSS is a self-hosted RSS and Atom feed aggregator that gives back the reading experience Google Reader took away. It fetches every site, blog, newsletter and YouTube channel you follow on a schedule you control, stores the articles in your own database, and presents them in a fast, keyboard-driven reader with categories, filter rules and full-text search. It speaks the Google Reader and Fever sync APIs, so the same account drives native clients such as Reeder and NetNewsWire. AGPL-3.0 licensed and maintained since 2013, it is the most widely deployed open-source feed reader there is.

Self-host FreshRSS on Railway and this template wires up the two pieces a durable reader needs. The FreshRSS service runs the official freshrss/freshrss image behind Apache, serving the web UI and the sync APIs on your public Railway domain, with a built-in cron that refreshes feeds twice an hour — no external scheduler to host. A Postgres service holds every feed, article, tag and read/unread flag, and a persistent volume carries the configuration, favicons and caches.

FreshRSS Railway architecture

Getting Started with FreshRSS on Railway

Set ADMIN_USERNAME and ADMIN_PASSWORD before deploying — those two values are all the template asks for. The username must be plain ASCII letters and digits, and the password should avoid spaces and shell wildcards. On first boot the container installs FreshRSS against Postgres and creates that admin account, so there is no setup wizard and no default password left lying around.

Sign in and you will see the Main stream with one seeded feed. Add your own from Subscription management → Add a feed or category: paste a URL such as https://news.ycombinator.com/rss and pick a category. FreshRSS resolves the feed, downloads its favicon and imports recent articles immediately. Moving from another reader? Import / export takes an OPML file and brings every subscription across at once.

To confirm the deployment is healthy, open the gear menu and choose Installation check — it verifies the PHP extensions, the data volume's writability and the database connection, and every line should be green. Visit /api/ for the Google Reader and Fever endpoint addresses plus a live configuration test. Registration is disabled out of the box, so the instance stays private unless you open it.

FreshRSS main stream listing unread Rust Blog and Hacker News articles FreshRSS reading view showing a full Rust Blog article FreshRSS subscription management listing three subscribed feeds

About Hosting FreshRSS

Hosted readers decide what you see, monetise your reading habits, and disappear when the business model changes. Self-hosting FreshRSS puts the loop under your control: your subscription list, your retention policy, your refresh interval. Teams run it as a shared intelligence feed — competitor blogs, security advisories, changelogs — where a hosted product means another per-seat subscription. Among the alternatives Miniflux is leaner and deliberately featureless while Tiny Tiny RSS is denser; FreshRSS sits in between.

Key features:

  • Multi-user accounts, each with their own subscriptions and settings
  • Google Reader and Fever sync APIs for native mobile and desktop clients
  • Filter rules that auto-tag, auto-star or auto-read incoming articles
  • Full-text search across everything received, plus saved user queries
  • Web scraping via CSS or XPath selectors for sites with no feed
  • OPML import and export, and WebSub for near-instant delivery

The architecture is deliberately small. FreshRSS is the only public service, running Apache with mod_php and a cron daemon in one container; Postgres stays private on Railway's internal network. The volume holds config.php, favicons and caches — what must survive a redeploy but does not belong in the database.

Why Deploy FreshRSS on Railway

Railway removes the server administration that self-hosting a PHP application usually brings.

  • Postgres is provisioned, networked and backed up with no configuration
  • TLS and a public domain are issued automatically on first deploy
  • The persistent volume survives every redeploy and image update
  • Health checks and automatic restarts keep the reader available
  • Feed refresh runs inside the app container — no separate scheduler

Common Use Cases

  • A personal reading hub replacing Feedly or Inoreader, synced to a phone over the Fever or Google Reader API.
  • Competitive monitoring, one category per competitor, with filter rules that star anything mentioning your product.
  • Release and security tracking from GitHub release Atom feeds and vendor advisories.
  • A newsletter reader that is not your inbox, via a mail-to-RSS bridge.

Dependencies for FreshRSS

  • FreshRSSfreshrss/freshrss:latest (GitHub, Docker Hub). Web UI, sync APIs and refresh cron in one container.
  • PostgreSQL — Railway's managed Postgres, storing feeds, categories, articles, tags and read state. FreshRSS also supports SQLite and MySQL; Postgres is the right default past a handful of feeds.

Environment Variables Reference

VariablePurpose
ADMIN_USERNAMEFirst account's username; ASCII letters and digits only
ADMIN_PASSWORDFirst account's password, set at deploy time
BASE_URLPublic URL written into the config on first boot
CRON_MINMinutes past the hour when feeds refresh; empty disables
TZTimezone for the app and the refresh schedule
DB_HOST, DB_USER, DB_PASSWORD, DB_NAMEPostgres connection details, referenced from that service

Deployment Dependencies

  • Runtime: PHP 8.4 on Debian, Apache with mod_php, from the official image
  • Database: PostgreSQL 13+ (Railway provisions 18.x)
  • Docs: FreshRSS documentation

Hardware Requirements for Self-Hosting FreshRSS

ResourceMinimumRecommended
CPU1 vCPU2 vCPU
RAM512 MB1–2 GB
Storage1 GB volume5 GB volume, plus database growth
RuntimePHP 8.1+, PostgreSQL 13+PHP 8.4, Postgres 18

A few hundred feeds sit around 100–150 MB of resident memory. Storage grows with retention; the archiving policy under Configuration → Archiving is the lever there.

Self-Hosting FreshRSS with Docker

Outside Railway, the smallest useful deployment is one container with SQLite and a volume:

docker run -d --name freshrss \
  -p 8080:80 \
  -e TZ=Europe/Paris \
  -e CRON_MIN='13,43' \
  -v freshrss_data:/var/www/FreshRSS/data \
  freshrss/freshrss:latest

To skip the setup wizard and install non-interactively against Postgres — what this template does — pass the installer arguments as environment variables:

FRESHRSS_INSTALL='--default-user admin --auth-type form --api-enabled
  --db-type pgsql --db-host db --db-base freshrss
  --db-user freshrss --db-password changeme'
FRESHRSS_USER='--user admin --password changeme --language en'

Both are idempotent: the installer exits quietly once the instance is configured, so they can stay set across restarts.

How Much Does FreshRSS Cost to Self-Host?

FreshRSS is free and open source under the AGPL-3.0 licence. There is no paid tier, no seat count and no feed limit; every feature, including the sync APIs and multi-user accounts, ships in the one build. On Railway you pay only for what the two services consume — for a personal reader, a fraction of a hosted Feedly or Inoreader plan.

FAQ

What is FreshRSS?

An open-source, self-hosted RSS and Atom feed aggregator. It collects articles from the sites you subscribe to, stores them in your own database, and serves them through a web reader and through sync APIs native mobile apps understand.

What does this Railway template deploy?

Two services: FreshRSS on the official Docker image with a persistent volume and a built-in refresh cron, plus a managed PostgreSQL database. The admin account is created on first boot from the username and password you supply.

Why does the template include a PostgreSQL database?

FreshRSS can run on SQLite, but a single file is a poor home for a growing archive. Postgres handles concurrent reads from the web UI, the API and the refresh job without locking, and keeps your reading history independent of the app container.

How do I connect a mobile RSS app to my self-hosted FreshRSS?

Set an API password under Profile → API management, then point the client at https://your-domain/api/greader.php for Google Reader clients or /api/fever.php for Fever clients, using your username and that API password.

How often does FreshRSS refresh feeds, and can I change it?

CRON_MIN holds the minutes past each hour when the refresh runs — 13,43 by default. Set a single value such as 20 to refresh hourly, or clear it to disable it. Each feed also carries its own minimum interval, one hour by default, so it is only re-fetched once that has elapsed.

Can other people sign up on my instance?

No. Registration is disabled by default, so only the admin account exists. To invite others, change the setting under Administration → System configuration, or add accounts under Manage users.


Template Content

More templates in this category

View Template
Rocky Linux
[Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
42
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
52