RSSHub/docs/install/README.md

493 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebar: auto
---
# 部署
部署 RSSHub 需要基本的计算机编程常识,如果您在部署过程中遇到无法解决的问题请到 [issues](https://github.com/DIYgod/RSSHub/issues) 寻找类似的问题或 [向我们提问](https://github.com/DIYgod/RSSHub/issues/new/choose),我们会尽快给您答复
部署涉及到以下基本编程常识:
1. 命令行操作
2. [Git](https://git-scm.com/)
3. [Node.js](https://nodejs.org/)
4. [npm](https://www.npmjs.com/get-npm) 或 [yarn](https://yarnpkg.com/zh-Hans/docs/install)
部署到可外网访问则可能涉及到:
1. [Nginx](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/)
2. [Docker](https://www.docker.com/get-started) 或 [docker-compose](https://docs.docker.com/compose/install/)
3. [Redis](https://redis.io/download)
4. [Heroku](https://devcenter.heroku.com/articles/getting-started-with-nodejs)
5. [Google App Engine](https://cloud.google.com/appengine/)
## Docker Compose 部署
### 安装
下载 [docker-compose.yml](https://github.com/DIYgod/RSSHub/blob/master/docker-compose.yml)
```bash
wget https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml
```
创建 volume 持久化 Redis 缓存
```bash
$ docker volume create redis-data
```
启动
```bash
$ docker-compose up -d
```
### 更新
删除旧容器
```bash
$ docker-compose down
```
然后重复安装步骤
### 添加配置
修改 [docker-compose.yml](https://github.com/DIYgod/RSSHub/blob/master/docker-compose.yml) 中的 `environment` 进行配置
## Docker 部署
### 安装
运行下面的命令下载 RSSHub 镜像
```bash
$ docker pull diygod/rsshub
```
然后运行 RSSHub 即可
```bash
$ docker run -d --name rsshub -p 1200:1200 diygod/rsshub
```
在浏览器中打开 <http://127.0.0.1:1200/>enjoy it! ✅
您可以使用下面的命令来关闭 RSSHub
```bash
$ docker stop rsshub
```
### 更新
删除旧容器
```bash
$ docker stop rsshub
$ docker rm rsshub
```
然后重复安装步骤
### 添加配置
配置运行在 docker 中的 RSSHub最便利的方法是使用 docker 环境变量
以设置缓存时间为 1 小时举例,只需要在运行时增加参数:`-e CACHE_EXPIRE=3600`
```bash
$ docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=3600 -e GITHUB_ACCESS_TOKEN=example diygod/rsshub
```
该部署方式不包括 puppeteer 和 redis 依赖,如有需要请改用 Docker Compose 部署方式或自行部署外部依赖
更多配置项请看 [#配置](#pei-zhi)
## 手动部署
部署 `RSSHub` 最直接的方式,您可以按照以下步骤将 `RSSHub` 部署在您的电脑、服务器或者其他任何地方
### 安装
首先是下载 `RSSHub` 的源码
```bash
$ git clone https://github.com/DIYgod/RSSHub.git
$ cd RSSHub
```
下载完成后,需要安装依赖
使用 `npm`
```bash
$ npm install
```
`yarn`
```bash
$ yarn
```
由于众所周知的原因,在中国使用 `npm` 下载依赖十分缓慢,建议挂一个代理或者考虑使用 [NPM 镜像](https://npm.taobao.org/)
然后在 `RSSHub` 文件夹中运行下面的命令就可以启动
```bash
$ npm start
```
```bash
$ yarn start
```
或使用 [PM2](https://pm2.io/doc/zh/runtime/quick-start/)
```bash
$ pm2 start lib/index.js --name rsshub
```
在浏览器中打开 <http://127.0.0.1:1200/>enjoy it! ✅
详细使用说明参照 [指南](https://docs.rsshub.app/),替换所有路由例子中的 `https://rsshub.app/``http://localhost:1200` 即可正常使用
### 添加配置
可以通过设置环境变量来配置 RSSHub
在项目根目录新建一个 `.env` 文件,每行以 `NAME=VALUE` 格式添加环境变量,例如
```env
CACHE_TYPE=redis
CACHE_EXPIRE=600
```
注意它不会覆盖已有的环境变量,更多规则请参考 [dotenv](https://github.com/motdotla/dotenv)
该部署方式不包括 puppeteer 和 redis 依赖,如有需要请改用 Docker Compose 部署方式或自行部署外部依赖
更多配置项请看 [#配置](#pei-zhi)
### 更新
`RSSHub` 文件夹中运行下面的命令就从 github 仓库拉取最新版本
```bash
$ git pull
```
然后重复安装步骤
## 部署到 Heroku
[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub)
## 部署到 Vercel (Zeit Now)
[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/DIYgod/RSSHub)
## 部署到 Google App Engine
### 准备
[Before you begin](https://cloud.google.com/appengine/docs/flexible/nodejs/quickstart)
按照这里的引导完成 GCP 账号设置,创建 GCP 项目,创建 App Engine 项目,开通付费功能(必须),安装 git 与 gcloud 工具。并完成 gcloud 工具的初始化,初始化具体方式 [请查看这个链接](https://cloud.google.com/sdk/gcloud/?hl=zh-CN)。如果你不打算在本地调试本项目,可以不安装 Node.js 环境。
请注意GAE 免费用量不支持 Flexible Environment部署到 Flexible Environment 前请确认收费标准。
Node.JS 的 standard environment 仍在测试中,您可能会在部署或使用中遇到某些不可预期的问题。
运行 `git clone https://github.com/DIYgod/RSSHub.git` 拉取本项目的最新版本。
### app.yaml 配置
#### 部署到 Flexible Environment
在 RSSHub 项目根目录下建立一个 app.yaml 文件,内容示例如下:
```yaml
# [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 资源配置,可以自行修改,硬盘最低为 10G
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
network:
forwarded_ports:
- 80:1200
- 443:1200
# 以下是环境配置示例,具体可配置项见本文档配置章节
env_variables:
CACHE_EXPIRE: '300'
# [END app_yaml]
```
#### 部署到 standard environment
在 RSSHub 项目根目录下建立一个 app.yaml 文件,内容示例如下:
```yaml
# [START app_yaml]
runtime: nodejs8
network:
forwarded_ports:
- 80:1200
- 443:1200
# 以下是环境配置示例,具体可配置项见本文档配置章节
env_variables:
CACHE_EXPIRE: '300'
# [END app_yaml]
```
## Play with Docker
如果想要测试因为反爬规则导致无法访问的路由,您可以点击下方按钮拉起一套免费,临时,专属于您的 RSSHub
[![Try in PWD](https://raw.githubusercontent.com/play-with-docker/stacks/master/assets/images/button.png)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml)
::: warning 注意
- 需要 [DockerHub](https://hub.docker.com) 账号
- [Play with Docker](https://labs.play-with-docker.com/) 一次仅能使用 4 小时,不能作为持久化解决方案,应当用于测试 / 验证路由规则
- 如果部署完成后不能看到自动识别的端口,请手动点击顶部按钮`open port`并输入`1200`
- 有的时候 PWD 会抽风,如果遇到点击`Start`后空白页面,或者拉起失败,请重试
:::
### 安装
在 RSSHub 项目根目录下运行
```bash
gcloud app deploy
```
进行项目部署,如果您需要变更 app.yaml 文件名称或者变更部署的项目 ID 或者指定版本号等,请参考 [Deploying a service](https://cloud.google.com/appengine/docs/flexible/nodejs/testing-and-deploying-your-app#deploying_a_service_2)。
部署完成后可访问您的 Google App Engine URL 查看部署情况。
## 配置
通过设置环境变量来配置 RSSHub
### 缓存配置
RSSHub 支持 `memory``redis` 两种缓存方式
`CACHE_TYPE`: 缓存类型,可为 `memory``redis`,设为空可以禁止缓存,默认为 `memory`
`CACHE_EXPIRE`: 路由缓存过期时间,单位为秒,默认 `5 * 60`
`CACHE_CONTENT_EXPIRE`: 内容缓存过期时间,每次访问会重新计算过期时间,单位为秒,默认 `1 * 60 * 60`
`REDIS_URL`: Redis 连接地址redis 缓存类型时有效),默认为 `redis://localhost:6379/`
`REDIS_PASSWORD`: Redis 连接密码redis 缓存类型时有效)
### 代理配置
部分路由反爬严格,可以配置使用代理抓取。
可通过**代理 URI**或**代理选项**两种方式来配置代理当两种配置方式同时被设置时RSSHub 将会使用**代理 URI**中的配置。
#### 代理 URI
`PROXY_URI`: 代理 URI支持 socks4, socks5, http, https
> 代理 URI 的格式为:
>
> - `{protocol}://{host}:{port}`
> - `{protocol}://{username}:{password}@{host}:{port}` (带身份凭证)
>
> 一些示例:
>
> - `socks4://127.0.0.1:1080`
> - `socks5://user:pass@127.0.0.1:1080` (用户名为 `user`, 密码为 `pass`)
> - `socks://127.0.0.1:1080` (protocol 为 socks 时表示 `socks5`)
> - `http://127.0.0.1:8080`
> - `http://user:pass@127.0.0.1:8080`
> - `https://127.0.0.1:8443`
#### 代理选项
`PROXY_PROTOCOL`: 使用代理,支持 sockshttphttps
`PROXY_HOST`: 代理服务器域名或 IP
`PROXY_PORT`: 代理服务器端口
`PROXY_AUTH`: 给代理服务器的身份验证凭证,`Proxy-Authorization: Basic ${process.env.PROXY_AUTH}`
`PROXY_URL_REGEX`: 启用代理的 URL 正则表达式,默认全部开启 `.*`
### 用户认证
`protected_route.js` 内的路由将启用 HTTP Basic Authentication 认证
支持该认证协议的阅读器,在添加源地址时,需要在源地址前添加认证信息,例如:`http://usernam3:passw0rd@rsshub.app/protected/rsshub/routes`。
对于不支持该认证协议的阅读器,请参考 [访问控制配置](#fang-wen-kong-zhi-pei-zhi)。
`HTTP_BASIC_AUTH_NAME`: Http basic authentication 用户名,默认为 `usernam3`,请务必修改
`HTTP_BASIC_AUTH_PASS`: Http basic authentication 密码,默认为 `passw0rd`,请务必修改
### 访问控制配置
RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行访问控制。开启任意选项将会激活全局访问控制,没有访问权限将会导致访问被拒绝。
#### 黑白名单
- `WHITELIST`: 白名单,设置白名单后黑名单无效
- `BLACKLIST`: 黑名单
黑白名单支持 IP 和路由,设置多项时用英文逗号 `,` 隔开,例如 `WHITELIST=1.1.1.1,2.2.2.2,/qdaily/column/59`
#### 访问密钥 / 码
- `ACCESS_KEY`: 访问密钥,用于直接访问所有路由或者生成访问码
访问码为 访问密钥 + 路由 共同生成的 md5例如
| 访问密钥 | 路由 | 生成过程 | 访问码 |
| ----------- | ----------------- | ---------------------------------------- | -------------------------------- |
| ILoveRSSHub | /qdaily/column/59 | md5('/qdaily/column/59' + 'ILoveRSSHub') | 0f820530128805ffc10351f22b5fd121 |
- 此时可以通过 `code` 访问路由,例如:<https://rsshub.app/qdaily/column/59?code=0f820530128805ffc10351f22b5fd121>
- 或使用访问密钥 `key` 直接访问所有路由,例如:<https://rsshub.app/qdaily/column/59?key=ILoveRSSHub>
访问密钥 / 码与黑白名单的访问控制关系如下:
| | 正确访问密钥 / 码 | 错误访问密钥 / 码 | 无访问密钥 / 码 |
| ---------- | ----------------- | ----------------- | --------------- |
| 在白名单中 | ✅ | ✅ | ✅ |
| 在黑名单中 | ✅ | ❌ | ❌ |
| 无黑白名单 | ✅ | ❌ | ❌ |
### 其他应用配置
`PORT`: 监听端口,默认为 `1200`
`SOCKET`: 监听 Unix Socket默认 `null`
`LISTEN_INADDR_ANY`: 是否允许公网连接,默认 `1`
`TITLE_LENGTH_LIMIT`: 限制输出标题的字节长度,一个英文字符的长度为 1 字节,部分语言如中文,日文,韩文或阿拉伯文等,统一算作 2 字节,默认 `100`
`REQUEST_RETRY`: 请求失败重试次数,默认 `2`
`DEBUG_INFO`: 是否在首页显示路由信息,默认 `true`
`LOGGER_LEVEL`: 指明输出到 console 和日志文件的日志的最大 [等级](https://github.com/winstonjs/winston#logging-levels),默认 `info`
`NODE_NAME`: 节点名,用于负载均衡,识别当前节点
`PUPPETEER_WS_ENDPOINT`: 用于 puppeteer.connect 的浏览器 websocket 链接,见 [browserWSEndpoint](https://zhaoqize.github.io/puppeteer-api-zh_CN/#?product=Puppeteer&version=v1.14.0&show=api-browserwsendpoint)
`SENTRY`: [Sentry](https://sentry.io) dsn用于错误追踪
`DISALLOW_ROBOT`: 阻止搜索引擎收录,默认开启,设置 false 或 0 关闭
`HOTLINK_TEMPLATE`: 用于处理描述中图片的链接,绕过防盗链等限制,留空不生效。用法参考 [#2769](https://github.com/DIYgod/RSSHub/issues/2769)。可以使用 [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL#Properties) 的所有属性,格式为 JS 变量模板。例子:`${protocol}//${host}${pathname}`, `https://i3.wp.com/${host}${pathname}`
### 部分 RSS 模块配置
- pixiv 全部路由:[注册地址](https://accounts.pixiv.net/signup)
- `PIXIV_USERNAME`: Pixiv 用户名
- `PIXIV_PASSWORD`: Pixiv 密码
- disqus 全部路由:[申请地址](https://disqus.com/api/applications/)
- `DISQUS_API_KEY`: Disqus API
- twitter 全部路由:[申请地址](https://apps.twitter.com)
- `TWITTER_CONSUMER_KEY`: Twitter Consumer Key支持多个 key用英文逗号 `,` 隔开
- `TWITTER_CONSUMER_SECRET`: Twitter Consumer Secret支持多个 key用英文逗号 `,` 隔开,顺序与 key 对应
- `TWITTER_TOKEN_{id}`: 对应 id 的 Twitter token`{id}` 替换为 id值为 `consumer_key consumer_secret access_token access_token_secret` 用逗号隔开,即:`{consumer_key},{consumer_secret},{access_token},{access_token_secret}`
- youtube 全部路由:[申请地址](https://console.developers.google.com/)
- `YOUTUBE_KEY`: YouTube API Key支持多个 key用英文逗号 `,` 隔开
- telegram - 贴纸包路由:[Telegram 机器人](https://telegram.org/blog/bot-revolution)
- `TELEGRAM_TOKEN`: Telegram 机器人 token
- github 全部路由:[申请地址](https://github.com/settings/tokens)
- `GITHUB_ACCESS_TOKEN`: GitHub Access Token
- bilibili 用户关注视频动态路由
- `BILIBILI_COOKIE_{uid}`: 对应 uid 的 b 站用户登录后的 Cookie 值,`{uid}` 替换为 uid`BILIBILI_COOKIE_2267573`获取方式1. 打开 <https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8> 2. 打开控制台 3. 切换到 Network 面板 4. 刷新 5. 点击 dynamic_new 请求 6. 找到 Cookie
- 语雀 全部路由:[注册地址](https://www.yuque.com/register)
- `YUQUE_TOKEN`: 语雀 Token[获取地址](https://www.yuque.com/settings/tokens)。语雀接口做了访问频率限制,为保证正常访问建议配置 Token详见 [语雀开发者文档](https://www.yuque.com/yuque/developer/api#5b3a1535)。
- 邮箱 邮件列表路由:
- `EMAIL_CONFIG_{email}`: 邮箱设置,替换 `{email}` 为 邮箱账号,邮件账户的 `@` 替换为 `.`,例如 `EMAIL_CONFIG_xxx.qq.com`。内容格式为 `password=密码&host=服务器&port=端口`,例如 `password=123456&host=imap.qq.com&port=993`
- 吹牛部落 栏目更新
- `CHUINIU_MEMBER`: 吹牛部落登录后的 x-member获取方式1. 登陆后点开文章正文 2. 打开控制台 3. 刷新 4. 找到 <http://api.duanshu.com/h5/content/detail/> 开头的请求 5. 找到请求头中的 x-member
- 微博 个人时间线路由:[申请地址](https://open.weibo.com/connect)
- `WEIBO_APP_KEY`: 微博 App Key
- `WEIBO_APP_SECRET`: 微博 App Secret
- `WEIBO_REDIRECT_URL`: 微博登录授权回调地址,默认为 `RSSHub 地址/weibo/timeline/0`,自定义回调地址请确保最后可以转跳到 `RSSHub 地址/weibo/timeline/0?code=xxx`
- 饭否 全部路由:[申请地址](https://github.com/FanfouAPI/FanFouAPIDoc/wiki/Oauth)
- `FANFOU_CONSUMER_KEY`: 饭否 Consumer Key
- `FANFOU_CONSUMER_SECRET`: 饭否 Consumer Secret
- `FANFOU_USERNAME`: 饭否登录用户名、邮箱、手机号
- `FANFOU_PASSWORD`: 饭否密码
- Last.fm 全部路由:[申请地址](https://www.last.fm/api/)
- `LASTFM_API_KEY`: Last.fm API Key
- 北大未名 BBS 全站十大
- `PKUBBS_COOKIE`: BBS 注册用户登录后的 Cookie 值获取方式1. 登录后打开论坛首页 2. 打开控制台 3. 刷新 4. 找到 <https://bbs.pku.edu.cn/v2/home.php> 请求 5. 找到请求头中的 Cookie
- nhentai torrent: [注册地址](https://nhentai.net/register/)
- `NHENTAI_USERNAME`: nhentai 用户名或邮箱
- `NHENTAI_PASSWORD`: nhentai 密码
- discuz cookies 设定
- `DISCUZ_COOKIE_{cid}`: 某 Discuz 驱动的论坛,用户注册后的 Cookie 值cid 可自由设定,取值范围[00, 99], 使用 discuz 通用路由时,通过指定 cid 来调用该 cookie
- Sci-hub 设置,用于科学期刊路由。
- `SCIHUB_HOST`: 可访问的 sci-hub 镜像地址,默认为 `https://sci-hub.tw`