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:
Manual Deployment
Manually deploy a new RSSHub
instance to a location of your choice.
Download RSSHub
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
Using npm
$ npm install
Or yarn
$ yarn
Launch
Under RSSHub
's root directory, execute the following commands to launch
$ npm start
Or
$ yarn start
Visit http://127.0.0.1:1200/, and enjoy it! ✅
tip
Refer to our Guide for usage. Replace https://rsshub.app/
with http://localhost:1200
in any route example to see the effect.
Update
Under RSSHub
's directory, execute the following commands to pull the latest source code for RSSHub
$ git pull
Configuration
RSSHub
reads its configurations from lib/config.js
or system 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
To configure more options please refer to Configuration.
Use Redis for caching
By default, RSSHub
caches everything for 5 minutes in RAM. Redis support is built-in.
tips
Unless you are expecting high traffic or deploying in cluster-mode, Redis is not necessary.
Change CACHE_TYPE
to redis
, RSSHub will try to connect to redis://localhost:6379/
. For changing the target address, please refer to Configuration.
Docker Deployment
Execute the following command to pull RSSHub's docker image.
$ docker pull diygod/rsshub
Start a 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
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
To configure more options please refer to Configuration.
docker-compose Deployment
- Create a docker volume to persist Redis caches
$ docker volume create redis-data
Copy
lib/config.js
tolib/config/config.js
, to avoid conflicts with master branch. Git will ignore this file as it contains sensitive information.Change
environment
section in docker-compose.yml to configure the corresponding optionPUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
skips puppeteer Chromium installation. Default to 1, requirespuppeteerWSEndpoint
inlib/config.js
to be set with a remote Chrome Websocket address, otherwise relevant routes will not work.USE_CHINA_NPM_REGISTRY=1
avoids GFW npm registry interference in mainland China. Default to 0.
Deploy
$ docker-compose up -d
- Update
$ git pull
$ docker-compose build
$ docker-compose up -d
Heroku Deployment
Google App Engine(GAE) Deployment
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.
Pull
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]
Launch
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
Configuration
Application Configurations
RSSHub
reads its configurations from lib/config.js
or environment variables.
TIP
Use environment variables is recommended to avoid conflicts during upgrade.
PORT
: listening port, default to 1200
SOCKET
: listening Unix Socket, default to null
CACHE_TYPE
: cache type, memory
or redis
, empty this value will disable caching, default to memory
CACHE_EXPIRE
: route cache expiry time in seconds, default to 5 * 60
CACHE_CONTENT_EXPIRE
: content cache expiry time in seconds, it will be recalculated when it is accessed, default to 1 * 60 * 60
LISTEN_INADDR_ANY
: open up for external access, default to 1
REQUEST_RETRY
: retries allowed for failed requests, default to 2
DEBUG_INFO
: display route information on homepage for debugging purpose, default to true
TITLE_LENGTH_LIMIT
: limit the length of feed title generated in bytes, an English alphabet counts as 1 byte, the rest such as Chinese, Japanese, Korean or Arabic counts as 2 bytes by design, default to 100
REDIS_URL
: Redis target address(invalid when CACHE_TYPE
is set to memory), default to redis://localhost:6379/
REDIS_PASSWORD
: Redis password(invalid when CACHE_TYPE
is set to memory)
HTTP_BASIC_AUTH_NAME
: Http basic authentication username, default to usernam3
, please change asap
HTTP_BASIC_AUTH_PASS
: Http basic authentication password, default to passw0rd
, please change asap
LOGGER_LEVEL
: specifies the maximum level of messages to the console and log file, default to info
PROXY_PROTOCOL
: Using proxy, Supports socks, http, https
PROXY_HOST
: host or IP of the proxy
PROXY_PORT
: port of the proxy
PROXY_AUTH
: credentials to authenticate a user agent to proxy server, Proxy-Authorization: Basic ${process.env.PROXY_AUTH}
PROXY_URL_REGEX
: regex for url of enabling proxy, default to .*
NODE_NAME
: node name, used for load balancing, identify current node
PUPPETEER_WS_ENDPOINT
: Browser websocket endpoint which can be used as an argument to puppeteer.connect, refer to browserWSEndpoint
SENTRY
: Sentry dsn, used for error tracking
User Authentication
Routes in protected_route.js
will be protected using HTTP Basic Authentication.
When adding feeds using RSS readers with HTTP Basic Authentication support, authentication information is required, eg:http://usernam3:passw0rd@localhost:1200/protected/rsshub/rss.
Route-specific Configurations
pixiv
: RegistrationPIXIV_USERNAME
: Pixiv usernamePIXIV_PASSWORD
: Pixiv password
disqus
: API Key applicationDISQUS_API_KEY
: Disqus API
twitter
: Application creationTWITTER_CONSUMER_KEY
: Twitter Consumer Key, support multiple keys, split them with,
TWITTER_CONSUMER_SECRET
: Twitter Consumer Secret, support multiple keys, split them with,
TWITTER_TOKEN_{id}
: Twitter token's corresponding id, replace{id}
with the id, the value is a combination ofconsumer_key consumer_secret access_token access_token_secret
by a comma,
. Eg.{consumer_key},{consumer_secret},{access_token},{access_token_secret}
.
youtube
: API Key applicationYOUTUBE_KEY
: YouTube API Key
telegram
: Bot applicationTELEGRAM_TOKEN
: Telegram bot token
github
: Access Token applicationGITHUB_ACCESS_TOKEN
: GitHub Access Token
mail
:EMAIL_CONFIG_{email}
: Mail setting, replace{email}
with the email account, replace@
in email account with.
, eg.EMAIL_CONFIG_xxx.gmail.com
. the value is in the format ofpassword=password&host=server&port=port
, eg.password=123456&host=imap.gmail.com&port=993
Access Control
Access control includes a whitelist and a blacklist, which is configured via middleware/access-control.js
or environment variables.
Support IP
and Route
, use ,
as the delimiter to separate multiple values. When both are defined, values in BLACKLIST
will be disregarded.
BLACKLIST
: the blacklistWHITELIST
: the blacklist. When set, values inBLACKLIST
are disregarded.