Skip to main content

Deployment

RSSHub provides a painless deployment process if you are equipped with basic programming knowledge, you may open an issue if you believe you have encountered a problem not listed here, the community will try to sort it out asap.

The deployment may involve the followings:

  1. Command line interface
  2. Git
  3. Node.js
  4. npm or yarn

Deploy for public access may require:

  1. Nginx
  2. Docker or docker-compose
  3. Redis
  4. Heroku
  5. Google App Engine
  6. Fly.io
  7. Zeabur
  8. Sealos

Docker Image

We recommend using the latest version diygod/rsshub (i.e. diygod/rsshub:latest) of the docker image.

When the latest version is unstable, you can use the image with a date tag for temporary use. For example:

$ docker pull diygod/rsshub:2021-06-18

You can back to the latest version when the code has been fixed and rebuild the image.

To enable puppeteer, diygod/rsshub:chromium-bundled is a good choice. If date specified, it will become: diygod/rsshub:chromium-bundled-2021-06-18.

Another approach to enable puppeteer is deploying with Docker Compose. However, it consumes more disk space and memory. By modifying docker-compose.yml, you can use diygod/rsshub:chromium-bundled instead to reduce the disk space and memory consumption.

Docker Compose Deployment

Install

Download docker-compose.yml

$ wget https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml

Check if any configuration needs to be changed

$ vi docker-compose.yml  # or your favorite editor

Create a docker volume to persist Redis caches

$ docker volume create redis-data

Launch

$ docker-compose up -d

Update

Remove old containers

$ docker-compose down

Repull the latest image if you have downloaded the image before. It is helpful to resolve some issues.

$ docker pull diygod/rsshub

Then repeat the installation steps

Configuration

Edit environment in docker-compose.yml

Docker Deployment

tip

To enable puppeteer, replace diygod/rsshub with diygod/rsshub:chromium-bundled in EACH command.

Install

Execute the following command to pull RSSHub's docker image.

$ docker pull diygod/rsshub

Start an RSSHub container

$ docker run -d --name rsshub -p 1200:1200 diygod/rsshub

Visit http://127.0.0.1:1200, and enjoy it! ✅

Execute the following command to stop RSSHub.

$ docker stop rsshub

Update

Remove the old container

$ docker stop rsshub
$ docker rm rsshub

Then repeat the installation steps

Configuration

The simplest way to configure RSSHub container is via system environment variables.

For example, adding -e CACHE_EXPIRE=3600 will set the cache time to 1 hour.

$ docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=3600 -e GITHUB_ACCESS_TOKEN=example diygod/rsshub

This deployment method does not include puppeteer (unless using diygod/rsshub:chromium-bundled instead) and Redis dependencies. Use the Docker Compose deployment method or deploy external dependencies yourself if you need it.

To configure more options please refer to Configuration.

Kubernetes Deployment (Helm)

RSSHub can be installed in Kubernetes using the Helm Chart from RSSHub Helm Chart

Ensure that the following requirements are met:

  • Kubernetes 1.16+
  • Helm version 3.9+ is installed

Install

Add NaturalSelection Labs chart repository to Helm:

helm repo add nsl https://naturalselectionlabs.github.io/helm-charts

You can update the chart repository by running:

helm repo update

And install it with the helm command line:

helm install my-release nsl/rsshub

Update

To upgrade the my-release RSSHub deployment:

helm upgade my-release nsl/rsshub

Uninstall

To uninstall/delete the my-release RSSHub deployment:

helm delete my-release

Installing with custom values

helm install my-release nsl/rsshub \
--set="image.tag=2023-12-04" \
--set="replicaCount=2"

Install with HA mode

replicaCount: 3

puppeteer:
replicaCount: 2

Install with external Redis

redis:
# -- Disable internal redis
enabled: false
env:
# -- other env --
REDIS_URL: redis://external-redis:6379/

To configure more values please refer to RSSHub Helm Chart.

Ansible Deployment

This Ansible playbook includes RSSHub, Redis, browserless (uses Docker) and Caddy 2

Currently only support Ubuntu 20.04

Requires sudo privilege and virtualization capability (Docker will be automatically installed)

Install

sudo apt update
sudo apt install ansible
git clone https://github.com/DIYgod/RSSHub.git ~/RSSHub
cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# When prompt to enter a domain name, enter the domain name that this machine/VM will use
# For example, if your users use https://rsshub.example.com to access your RSSHub instance, enter rsshub.example.com (remove the https://)

Update

cd ~/RSSHub/scripts/ansible
sudo ansible-playbook rsshub.yaml
# When prompt to enter a domain name, enter the domain name that this machine/VM will use
# For example, if your users use https://rsshub.example.com to access your RSSHub instance, enter rsshub.example.com (remove the https://)

Manual Deployment

The most direct way to deploy RSSHub, you can follow the steps below to deployRSSHub on your computer, server or anywhere.

Install

Execute the following commands to download the source code

$ git clone https://github.com/DIYgod/RSSHub.git
$ cd RSSHub

Execute the following commands to install dependencies (Do not add the --production parameter for development).

pnpm install --prod

Launch

Under RSSHub's root directory, execute the following commands to launch

pnpm start

Or use PM2

$ pm2 start lib/index.js --name rsshub

Visit http://127.0.0.1:1200/, and enjoy it! ✅

Refer to our Guide for usage. Replace https://rsshub.app/ with http://localhost:1200 in any route example to see the effect.

Configuration

tip

On arm/arm64, this deployment method does not include puppeteer dependencies. To enable puppeteer, install Chromium from your distribution repositories first, then set CHROMIUM_EXECUTABLE_PATH to its executable path.

Debian:

$ apt install chromium
$ echo >> .env
$ echo 'CHROMIUM_EXECUTABLE_PATH=chromium' >> .env

Ubuntu/Raspbian:

$ apt install chromium-browser
$ echo >> .env
$ echo 'CHROMIUM_EXECUTABLE_PATH=chromium-browser' >> .env

RSSHub can be configured by setting environment variables.

Create a .env file in the root directory of your project. Add environment-specific variables on new lines in the form of NAME=VALUE. For example:

CACHE_TYPE=redis
CACHE_EXPIRE=600

Please notice that it will not override already existed environment variables, more rules please refer to dotenv

This deployment method does not include Redis dependencies. Use the Docker Compose deployment method or deploy external dependencies yourself if you need it.

To configure more options please refer to Configuration.

Update

Under RSSHub's directory, execute the following commands to pull the latest source code for RSSHub

$ git pull

Then repeat the installation steps.

A tip for Nix users

To install nodejs, yarn and jieba (to build documentation) you can use the following nix-shell configuration script.

let
pkgs = import <nixpkgs> {};
node = pkgs.nodejs-12_x;
in pkgs.stdenv.mkDerivation {
name = "nodejs-yarn-jieba";
buildInputs = [node pkgs.yarn pkgs.pythonPackages.jieba];
}

Deploy to Railway

Automatic updates are included.

Deploy on Railway

Deploy to Heroku

Notice

Update

Heroku no longer offers free product plans.

Heroku accounts with unverified payment methods have only 550 hours of credit per month (about 23 days), and up to 1,000 hours per month with verified payment methods.

Instant deploy (without automatic update)

Deploy to Heroku

Automatic deploy upon update

  1. Fork RSSHub to your GitHub account.
  2. Deploy your fork to Heroku: https://heroku.com/deploy?template=URL, where URL is your fork address (e.g. https://github.com/USERNAME/RSSHub).
  3. Configure automatic deploy in Heroku app to follow the changes to your fork.
  4. Install Pull app to keep your fork synchronized with RSSHub.

Deploy to Sealos(use Redis as cache)

Automatic updates are included.

Deploy to Sealos

Deploy to Vercel (ZEIT Now)

Instant deploy (without automatic update)

Deploy to Vercel

Automatic deploy upon update

  1. Fork RSSHub to your GitHub account.
  2. Deploy your fork to Vercel: Login Vercel with your GitHub account, create and deploy new Vercel project with your RSSHub repository.
  3. Install Pull app to keep your fork synchronized with RSSHub.

Deploy to Fly.io

Method 1: Fork

  1. Fork RSSHub to your GitHub account;

  2. Clone the source code from your fork

    $ git clone https://github.com/<your username>/RSSHub.git
    $ cd RSSHub
  3. Sign up for Fly.io and install the flyctl CLI;

  4. Run fly launch and choose a unique name and region to deploy;

  5. Use fly secrets set KEY=VALUE to configure some modules;

  6. Set up automatic deployment via GitHub Actions;

  7. (Optional) Use fly certs add your domain to configure a custom domain, and follow the instructions to configure the related domain resolution at your DNS service provider (you can check the domain configuration status on the Dashboard Certificate page).

Upgrade: On the homepage of your Forked repository, click "Sync fork - Update Branch" to manually update to the latest official master branch, or install the Pull GitHub app to keep your fork synchronized with upstream.

Method 2: Maintain fly.toml by yourself

  1. Sign up for Fly.io and install the flyctl CLI;
  2. Create a new empty directory locally, run fly launch in it, and choose a unique name and instance region;
  3. Edit the generated fly.toml file, add
[build]
image = "diygod/rsshub:latest"

Depending on the actual situation, you may want to use other image tags, please read the relevant content of Docker Image; 4. Modify the [env] section in fly.toml or use fly secrets set KEY=VALUE to configure some modules; 5. Execute fly deploy to start the application; 6. (Optional) Use fly certs add your domain to configure a custom domain, and follow the instructions to configure the related domain resolution at your DNS service provider (you can check the domain configuration status on the Dashboard Certificate page).

Upgrade: Enter the directory where you saved the fly.toml file and execute fly deploy to trigger the steps of pulling the latest image and starting the upgraded application.

Configure built-in Upstash Redis as cache

Run in the RSSHub folder

$ flyctl redis create

to create a new Redis database. Choose the same region as when you created the RSSHub app above, and it is recommended to enable eviction. After creation, a string in the form of redis://default:<password>@<domain>.upstash.io will be printed.

Due to a bug in a dependency, you currently need to append the family=6 parameter to the URL provided by Fly.io, i.e., use redis://default:<password>@<domain>.upstash.io/?family=6 as the connection URL.

Then configure the [env] section in fly.toml or run

$ fly secrets set CACHE_TYPE=redis REDIS_URL='<the connection URL>'

and execute fly deploy (if use the second install method) to trigger a redeployment to complete the configuration.

Deploy to PikaPods

Run RSSHub from just $1/month. Includes automatic updates and $5 free starting credit.

Run on PikaPods

Deploy to Zeabur

  1. Sign up for Zeabur
  2. Create a new project.
  3. Create a new service in the project, select deploying from the marketplace.
  4. Add a domain name, if you use a custom domain name, you can refer to Zeabur's domain name binding document.

Deploy on Zeabur

Deploy to Google App Engine(GAE)

Before You Begin

Follow the official guide for completing your GCP account settings, creating a new Node project, adding billing information (required), installing git and initializing gcloud(link). Node.js is not required if you don't plan to debug RSSHub locally.

Please note, GAE free tier doesn't support Flexible Environment, please check the pricing plan prior to deployment.

Node.js standard environment is still under beta, unknown or unexpected errors might be encountered during the deployment.

Execute git clone https://github.com/DIYgod/RSSHub.git to pull the latest code

app.yaml Settings

Deploy to Flexible Environment

Under RSSHub's root directory, create a file app.yaml with the following content:

# [START app_yaml]
runtime: custom
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
instances: 1
# app engine resources, adjust to suit your needs, the required disk space is 10 GB
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
network:
forwarded_ports:
- 80:1200
- 443:1200
# environment variables section, refer to Settings
env_variables:
CACHE_EXPIRE: '300'
# [END app_yaml]

Deploy to standard environment

Under RSSHub's root directory, create a file app.yaml with the following content:

# [START app_yaml]
runtime: nodejs8

network:
forwarded_ports:
- 80:1200
- 443:1200
# environment variables section, refer to Settings
env_variables:
CACHE_EXPIRE: '300'
# [END app_yaml]

Install

Under RSSHub's root directory, execute the following commands to launch RSSHub

gcloud app deploy

For changing the deployment project id or version id, please refer to Deploying a service section here.

You can access your Google App Engine URL to check the deployment status

Play with Docker

If you would like to test routes or avoid IP limits, etc., you may build your own RSSHub for free by clicking the button below.

Try in PWD

warning
  • DockerHub account required
  • Play with Docker instance will last for 4 hours at most. It should only be used for testing purpose
  • If deploy success but port cannot be auto-deteced,please click the open port button on the top and type 1200
  • Sometimes PWD won't work as expected. If you encounter blank screen after Start, or some error during initialization, please retry