Blog · Deploy guides

How to self-host RSSHub in 2026: its Compose file, two commands and HTTPS

By the Pethost team · · 7 min read

You want an RSSHub instance of your own, so that your feeds do not depend on a public one, and you want it at an address with HTTPS without setting up a server. RSSHub ships a Docker Compose file, and on Pethost a Compose file is a project. Delete two lines of it, run pethost deploy, then give RSSHub its address with one more command. RSSHub, Redis and Browserless started in 1 minute 38 seconds.

In short
  • The file is RSSHub's own: docker-compose.yml from its repository, with RSSHub, Redis for the cache and Browserless for routes that need a browser.
  • One edit: delete the two ports lines. HTTPS comes through the address, so the port is not published as well.
  • Two commands: pethost deploy, then pethost domain add rsshub.yourname.pethost.app rsshub:1200.
  • What it takes: about 700 MB of memory for the three services together, of the machine's 3 GB.
  • The price: €9.99 a month for a machine of 2 vCPU, 3 GB and 30 GB that runs RSSHub and every other project you have. There is no free tier.

What you need to self-host RSSHub in 2026

Three things: RSSHub's Compose file, the pethost command and a Pethost account.

The file is in RSSHub's repository, and its deployment page recommends it. Put it into a folder of its own, whose name becomes the project's name:

mkdir rsshub && cd rsshub
curl -O https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml

The command is one program, installed by one line. Every command it has is in the CLI's reference.

curl -fsSL https://pethost.dev/install.sh | sh      # macOS, Linux
irm https://pethost.dev/install.ps1 | iex           # Windows, in PowerShell

The account needs a plan. If you are not signed in, pethost deploy opens your browser and signs you in. If you have no plan yet, it shows you where to choose one, and waits.

One edit to RSSHub's docker-compose.yml

The service rsshub begins like this in the file:

services:
    rsshub:
        image: diygod/rsshub # or ghcr.io/diygod/rsshub
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'

Delete the two lines ports: and - '1200:1200'. On your own server they open port 1200 to the world over plain HTTP. On Pethost readers reach RSSHub through its address, over HTTPS, and the proxy on your machine passes each request to port 1200 inside the project. The machine refuses an address for a port that is also published, since it would answer both ways.

Nothing else in the file changes. Redis keeps its volume, and the health checks and depends_on run as RSSHub wrote them.

Deploy RSSHub with pethost deploy

Run pethost deploy in the folder. This is the whole screen:

$ pethost deploy
Name it [rsshub]:    it will live at https://rsshub.sam.pethost.app
✓ Packed 1 file, 2 KB
✓ Uploaded straight to your machine
✓ Started in 1 min 38 s
  · deployed docker-compose.yml as compose.yaml
  More than one port listens, so no address was given. Give it to the one that is the site:
    pethost domain add rsshub.sam.pethost.app browserless:3000
    pethost domain add rsshub.sam.pethost.app redis:6379
    pethost domain add rsshub.sam.pethost.app rsshub:1200
    pethost domain add rsshub.sam.pethost.app rsshub:9464
Wrote .pethost (commit it). Next:   pethost logs -f

All three services run now. The machine saw four ports that listen and does not guess which one is the site. It prints the command for each. RSSHub answers on 1200, so take that one:

$ pethost domain add rsshub.sam.pethost.app rsshub:1200
rsshub (.pethost)
✓ rsshub.sam.pethost.app → rsshub:1200
https://rsshub.sam.pethost.app

Redis and Browserless get no address and no published port: only RSSHub reaches them, by their names. This is the project after that:

$ pethost
rsshub · https://rsshub.sam.pethost.app
browserless	healthy	since 2026-10-10T13:13:52Z	listens on 3000	memory 363 MB
redis	healthy	since 2026-10-10T13:13:52Z	listens on 6379	memory 58 MB
rsshub	healthy	since 2026-10-10T13:13:52Z	listens on 1200, 9464	memory 284 MB
3 services run · last deploy succeeded 2026-10-10T13:22:56Z

Ask your RSSHub for a feed

Open the address: the welcome page answers 200, and so does /healthz. A route is its path after the address, as on any instance. We asked for a GitHub user's repositories:

$ curl https://rsshub.sam.pethost.app/github/repos/DIYgod
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:atom="http://www.w3.org/2005/Atom" … version="2.0"><channel><title>DIYgod&#39;s GitHub repositories</title>…

Put that address into your feed reader in place of the public instance's. To use a name of your own, such as rss.example.com, run pethost domain add rss.example.com rsshub:1200. It prints the one DNS record to make, a CNAME to your machine's name, and the certificate comes by itself once the name resolves.

Configure RSSHub: variables and the Browserless token

RSSHub's settings are the variables under environment in the file. Change one and run pethost deploy again:

$ pethost deploy
rsshub (.pethost)
✓ Packed 2 files · uploaded · started in <1 s
  · kept the project's .env
  · deployed docker-compose.yml as compose.yaml
  · kept the project's x-pethost
  It answers 200.
https://rsshub.sam.pethost.app

One value is not in the file but read from outside it. RSSHub and Browserless share a token, written as ${BROWSERLESS_TOKEN:-rsshub}, which is rsshub until you set it. Set your own with one command. It goes into the project's .env file on the machine, and both services start again with it:

$ pethost env set BROWSERLESS_TOKEN=$(openssl rand -hex 16)
rsshub (.pethost)
✓ /.env has BROWSERLESS_TOKEN now. Deployed in 31 s.

Browserless took the most memory of the three. The comments in RSSHub's file say how to run without it, or with the image that has Chromium inside.

Update RSSHub

The file's image has no tag, so it is the newest one on the day of the first deploy. RSSHub publishes an image for each day, tagged with its date. To update at a moment you choose, name a tag in the file and deploy again:

        image: diygod/rsshub:2026-10-10

If a version goes wrong, pethost rollback puts the file before it back, and your machine keeps the three versions before the current one. An AI agent can do all of this for you through Pethost's MCP server: how an agent deploys and looks after a project.

What you get for the price

Pethost is €9.99 a month for everything you host, on 2 vCPU, 3 GB of memory and 30 GB of disk. RSSHub with Redis and Browserless took about 700 MB of that memory, so the same machine has room for your other projects, such as Umami beside it. There is no fee per project and nothing metered: a reader that asks for forty feeds every ten minutes costs nothing more.

What is already done on it: HTTPS with certificates that renew themselves, nightly backups kept for 14 days, SSH into any container, every request counted, and a Compose project that runs from its own file. The machine is always on, so a feed reader's request never waits for a cold start. The plans are on the pricing part of the first page.

Every project, labeled. Six projects on one Starter machine, each with its address and its requests of the last day.
The Pethost panel's first page: the machine's CPU, memory and disk, and six projects as cards.

Pethost is the best pick for

  • People who read many feeds and want an instance that only they use
  • Solo developers who host RSSHub beside their own projects, on one bill
  • People whose agent deploys for them: Claude Code or Codex deploys the Compose file and reads its logs
  • Small groups who share one instance among friends or a team

Look elsewhere if

  • You run a public instance for thousands of readers and need several regions

Questions

Can I self-host RSSHub with Docker Compose without managing a server?

Yes. On Pethost RSSHub's own docker-compose.yml is the project: delete its two ports lines, run pethost deploy and give RSSHub its address with pethost domain add. HTTPS, the proxy and the backups are already there.

Which port does RSSHub use?

1200. On Pethost you do not publish it: the address goes to rsshub:1200, and readers come over HTTPS on the usual port.

How much memory does self-hosted RSSHub need?

On our test machine the three services of RSSHub's Compose file took about 700 MB: Browserless 363 MB, RSSHub 284 MB and Redis 58 MB. A Starter machine has 3 GB.

Do I need Redis and Browserless to run RSSHub?

RSSHub's Compose file runs both: Redis is its cache, and Browserless serves the routes that need a browser. The comments in the file say which lines to remove to run without Browserless.

How do I update a self-hosted RSSHub?

Name a newer image tag in docker-compose.yml, for example the day's date, and run pethost deploy. pethost rollback goes back to the file before it.

What does it cost to self-host RSSHub on Pethost?

€9.99 a month for the Starter machine of 2 vCPU, 3 GB and 30 GB, with no fee per project and nothing counted per request: the same machine runs your other apps and sites. There is no free tier. Prices are without VAT.

The screens are deploys of the Compose file in RSSHub's repository, with the images of that day and pethost 0.2.1, on a test machine of ours. The account in them is the example one, sam.

  1. RSSHub: deployment
  2. RSSHub: docker-compose.yml
  3. RSSHub: configuration
  4. pethost, the command line of Pethost

Put your projects online today

A machine of your own, as many projects as fit, one flat price. Nothing metered, nothing billed on top.

Host all your projects for €9.99/mo