Blog · Deploy guides
How to self-host RSSHub in 2026: its Compose file, two commands and HTTPS
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.
- The file is RSSHub's own:
docker-compose.ymlfrom its repository, with RSSHub, Redis for the cache and Browserless for routes that need a browser. - One edit: delete the two
portslines. HTTPS comes through the address, so the port is not published as well. - Two commands:
pethost deploy, thenpethost 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'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.
- €9.99 a month for the whole machine
- 1 min 38 s to start the three services
- 700 MB of memory for all of them
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.
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.
- RSSHub: deployment
- RSSHub: docker-compose.yml
- RSSHub: configuration
- 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.