---
title: "Deploy Fresh RSS"
description: "Feedly alternative. Self-hosted RSS/Atom feed aggregator"
category: "Other"
url: https://railway.com/deploy/fresh-rss
---

# Deploy Fresh RSS

Feedly alternative. Self-hosted RSS/Atom feed aggregator

**[Deploy Fresh RSS on Railway](https://railway.com/template/fresh-rss)**

- **Creator:** A3A
- **Category:** Other
- **Total deploys:** 1

## Template content

### Postgres https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### freshrss https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/freshrss.svg

- **Image:** freshrss/freshrss:latest
- **Health check:** /i/
- **Public domain:** Yes

## Documentation

![FreshRSS logo](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTm0Y1O3bHeX3hbpL-M4UokW4AZ9Tt_uqOU4Mm3fULPCA&s=10)

# 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](https://res.cloudinary.com/rroe4rtk/image/upload/v1786978706/400d748c-6780-417c-b25a-37c60f0830f5.png)

## 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](https://res.cloudinary.com/rroe4rtk/image/upload/v1786946880/freshrss-main-stream.png)
![FreshRSS reading view showing a full Rust Blog article](https://res.cloudinary.com/rroe4rtk/image/upload/v1786946885/freshrss-reading-view.png)
![FreshRSS subscription management listing three subscribed feeds](https://res.cloudinary.com/rroe4rtk/image/upload/v1786946887/freshrss-subscription-management.png)

## 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

- **FreshRSS** — `freshrss/freshrss:latest` ([GitHub](https://github.com/FreshRSS/FreshRSS), [Docker Hub](https://hub.docker.com/r/freshrss/freshrss)). 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

| Variable | Purpose |
|---|---|
| `ADMIN_USERNAME` | First account's username; ASCII letters and digits only |
| `ADMIN_PASSWORD` | First account's password, set at deploy time |
| `BASE_URL` | Public URL written into the config on first boot |
| `CRON_MIN` | Minutes past the hour when feeds refresh; empty disables |
| `TZ` | Timezone for the app and the refresh schedule |
| `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME` | Postgres 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](https://freshrss.github.io/FreshRSS/)

## Hardware Requirements for Self-Hosting FreshRSS

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 MB | 1–2 GB |
| Storage | 1 GB volume | 5 GB volume, plus database growth |
| Runtime | PHP 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**.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/fresh-rss
