前两天长毛象上有人问关于 RSSHub 部署的相关问题,今天回复了之后,又去看了看官方的文档,发现官方文档有些地方写的太简略了,对于零基础的新手来说并不友好,于是今天在此尝写一篇详细的文章介绍如何部置RSSHub。

方法选择

RSSHub官方文档中提到了4种部署方法:

  • 手动部署
  • Docker
  • Heroku
  • Google App Engine

后两种因为是限定在特定平台上的方法,本文就不进行介绍了。


手动部署

  • 优点:节省空间、自定义程度高、可供自行开发调整
  • 缺点:部署操作较麻烦

Docker

  • 优点:操作简单、维护较方便
  • 缺点:占用空间较大、自定义程度低、不适合于自行开发

对于初学者来说,强烈建议使用 Docker 进行部署。



手动部署


安装 NodeJS

Linux Mac

Ubuntu

curl --silent --location https://deb.nodesource.com/setup_6.x | sudo bash -
sudo apt-get install --yes nodejs

Debian

apt-get install curl
curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
apt-get install --yes nodejs

Red Hat

curl --silent --location https://rpm.nodesource.com/setup | bash -
yum -y install nodejs

方法一:Homebrew

brew install node

方法二:Git

git clone git://github.com/nodejs/node.git
cd node
./configure
make
sudo make install

下载文件

Git Wget
git clone https://github.com/DIYgod/RSSHub.git
wget https://github.com/DIYgod/RSSHub/archive/master.zip
unzip master.zip
mv RSSHub-master RSSHub
rm master.zip

部署安装

国内

npm install --registry=https://registry.npm.taobao.org

国外

npm install

启动

npm start

尝试访问以下两个网址,如果访问成功,即安装成功。

视频演示

创建 systemd 服务

[Unit]
Description=Rsshub(https://github.com/DIYgod/RSSHub)
After=network.target
Wants=network.target

[Service]
Type=simple
User=rsshub
Group=rsshub
WorkingDirectory=/srv/app/RSSHub
Environment=
ExecStart=/bin/bash -c 'npm start'
Restart=on-failure

[Install]
WantedBy=multi-user.target

适当修改 WorkingDirectory 后,将上述内容写入 /etc/systemd/system/rsshub.service 文件中。

然后重载服务,启动、激活 RSSHub 服务。

sudo systemctl daemon-reload
sudo systemctl start rsshub.service
sudo systemctl enable rsshub.service
sudo systemctl status rsshub.service

Hint

至此手动部署 RSSHub 完成!



Docker


安装Docker

Docker安装方法请参考 Docker官方文档

下面仅介绍 Ubuntu 16.04及更高版本的安装方法。

sudo apt-get update
sudo apt-get install \
  apt-transport-https \
  ca-certificates \
  curl \
  software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
 stable"
sudo apt-get update
sudo apt-get install docker-ce

拉取 RSSHub 镜像

sudo docker pull diygod/rsshub

运行 RSSHub

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

创建服务

创建 /etc/systemd/system/docker-rsshub.service 文件。

[Unit]
Description=Rsshub container
Requires=docker.service
After=docker.service

[Service]
Restart=on-failure
ExecStart=/usr/bin/docker start -a rsshub
ExecStop=/usr/bin/docker stop -t 2 rsshub

[Install]
WantedBy=default.target

启动服务 ,启动服务前请确保 rsshub docker 已经停止。

sudo docker stop rsshub
sudo systemctl daemon-reload
sudo systemctl start docker-rsshub.service
sudo systemctl enable docker-rsshub.service
sudo systemctl status docker-rsshub.service

视频演示

Hint

至此使用 Docker 部署 RSSHub 完成!



进阶配置

完成以上安装后,可以生成大多数网站的RSS,但部分RSS需要单独配置后方可生成,如 pixivdisqustwitteryoutubetelegramgithub

下面将以 pixiv 为例介绍相应的配置方法。

手动部署

手动部署直接修改 systemd service 文件,在 Environment 中加入所需环境变量即可。可添加多个变量,变量之间使用空格分隔开来。

Description=Rsshub(https://github.com/DIYgod/RSSHub)
After=network.target
Wants=network.target

[Service]
Type=simple
User=rsshub
Group=rsshub
WorkingDirectory=/srv/app/RSSHub
Environment=PORT=1200 CACHE_TYPE=memory CACHE_EXPIRE=600 LISTEN_INADDR_ANY=0 PIXIV_USERNAME=user PIXIV_PASSWORD=password
ExecStart=/bin/bash -c 'npm start'
Restart=on-failure

[Install]
WantedBy=multi-user.target

各个环境变量含义请参考 RSSHub文档

默认情况下请不要添加环境变量,请理解环境变量含义后根据需裘添加。

Docker

修改rsshub容器启动命令,中加入所需环境变量即可。

sudo docker stop rsshub && sudo docker rm rsshub

修改前,先删去原有容器。

上面的 systemd service 文件等价于以下 docker 命令。

sudo docker run -d --name rsshub -p 1200:1200 -e PORT=1200 \
  -e CACHE_TYPE=memory -e CACHE_EXPIRE=600 -e LISTEN_INADDR_ANY=0 \
  -e PIXIV_USERNAME=user -e PIXIV_PASSWORD=password diygod/rsshub

更新RSSHub

RSSHub版本迭代较快,应当及时更新,现介绍RSSHub更新方法。

手动部署

cd /srv/app/RSSHub #进入RSSHub所在目录
git pull
npm install
sudo systemctl restart rsshub.service

Docker

sudo systemctl stop docker-rsshub.service && sudo docker rm rsshub
sudo docker pull diygod/rsshub
sudo docker run -d --name rsshub -p 1200:1200 diygod/rsshub #此条根据个人情况调整
sudo docker stop rsshub
sudo systemctl start docker-rsshub.service

删除RSSHub

手动部署

rm -rf /srv/app/RSSHub

Docker

sudo docker image rm diygod/rsshub

Nginx?

虽然使用 PORT=80LISTEN_INADDR_ANY=1 两个参数再配置好防火墙就可以直接访问了,但是不建议这样做。最好还是在RSSHub前面加上一个Nginx。

另外使用Nginx还有一些其它好处,比如说:HTTPS支持,修改请求,重定向请求……


结语

这篇文章12月初就开始写了,但之前写了一半,直到今天才抽出时间把它全部写完。也算是一个总结吧。

最后放上我的RSSHub地址,如果有需要请自行使用。

由于主机在国外,知乎RSS很容易触发反爬,所以我把它重定向到本地了。



Attention!

2018年12月31日更新

运行用户问题

如果你是手动部署的话,还存在运行用户的问题。现在让我们回顾一下,之前的 rsshub.service 文件。

User=rsshub
Group=rsshub

请注意这两行,如果不在 service文件 中指明 UserGroup 的话,运行时的用户便是 root,为了安全起见,请你用普通用户运行 RSSHub。

具体来说,便是使用普通用户(假设该用户为 rsshub)下载(git clone)、安装(npm install)RSSHub。 然后在 service文件 中,设置 UserGrouprsshub

如果你使用 Docker 的话则不存在这个问题。