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:
Deploy for public access may require:
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
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
- Using Helm CLI
- With a custom values file
helm install my-release nsl/rsshub \
--set="image.tag=2023-12-04" \
--set="replicaCount=2"
# File custom-values.yml
## Install with "helm install my-release nsl/rsshub -f ./custom-values.yml
image:
tag: "2023-12-04"
replicaCount: 2
Install with HA mode
- HA mode without autoscaling
- HA mode with autoscaling
replicaCount: 3
puppeteer:
replicaCount: 2
autoscaling:
enabled: true
minReplicas: 3
puppeteer:
autoscaling:
enabled: true
minReplicas: 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
- yarnv1
- npm
pnpm install --prod
yarn --production
npm install --omit=dev
Launch
Under RSSHub
's root directory, execute the following commands to launch
- pnpm
- yarnv1
- npm
pnpm start
$ yarn start
$ npm 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
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 to Heroku
Notice
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)
Automatic deploy upon update
- Fork RSSHub to your GitHub account.
- Deploy your fork to Heroku:
https://heroku.com/deploy?template=URL
, whereURL
is your fork address (e.g.https://github.com/USERNAME/RSSHub
). - Configure
automatic deploy
in Heroku app to follow the changes to your fork. - Install Pull app to keep your fork synchronized with RSSHub.
Deploy to Sealos(use Redis as cache)
Automatic updates are included.
Deploy to Vercel (ZEIT Now)
Instant deploy (without automatic update)
Automatic deploy upon update
- Fork RSSHub to your GitHub account.
- Deploy your fork to Vercel: Login Vercel with your GitHub account, create and deploy new Vercel project with your RSSHub repository.
- Install Pull app to keep your fork synchronized with RSSHub.
Deploy to Fly.io
Method 1: Fork
-
Fork RSSHub to your GitHub account;
-
Clone the source code from your fork
$ git clone https://github.com/<your username>/RSSHub.git
$ cd RSSHub -
Sign up for Fly.io and install the flyctl CLI;
-
Run
fly launch
and choose a unique name and region to deploy; -
Use
fly secrets set KEY=VALUE
to configure some modules; -
(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
- Sign up for Fly.io and install the flyctl CLI;
- Create a new empty directory locally, run
fly launch
in it, and choose a unique name and instance region; - 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.
Deploy to Zeabur
- Sign up for Zeabur
- Create a new project.
- Create a new service in the project, select deploying from the marketplace.
- Add a domain name, if you use a custom domain name, you can refer to Zeabur's domain name binding document.
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.
- 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 type1200
- Sometimes PWD won't work as expected. If you encounter blank screen after
Start
, or some error during initialization, please retry