1. 为什么选择阿里云ECS自建RSSHub
最近几年RSS订阅重新火了起来,作为一个老网民,我发现自己越来越依赖这种简洁高效的信息获取方式。但现实很骨感,很多平台的官方RSS接口要么关闭要么不稳定。这时候RSSHub这个开源项目就成了救星——它能给几乎所有网站生成RSS订阅源。
用过官方demo站点后,我发现两个痛点:一是访问经常被拦截,二是公共实例有请求频率限制。自建就成了最佳选择。相比其他云服务,阿里云ECS的优势很明显:首先是价格透明,按量付费最低0.12元/小时;其次是网络质量稳定,特别适合需要长期运行的服务;最重要的是资源完全自主可控,想装什么环境都行。
不过自建过程确实踩了不少坑,比如Node.js版本冲突、依赖安装报错、进程守护配置等。下面我就把完整的搭建过程,包括这些坑的解决方案,一步步分享给大家。
2. 环境准备:从零配置Node.js环境
2.1 服务器基础配置
首先登录阿里云控制台,建议选择CentOS 7.9或Ubuntu 20.04这些长期支持版本。配置方面,1核2G的共享型实例就够用了(实测RSSHub内存占用不到500MB)。重点是要在安全组里提前开放1200端口(TCP协议),这是RSSHub的默认服务端口。
连接服务器后先做基础更新:
yum update -y # CentOS apt update && apt upgrade -y # Ubuntu2.2 Node.js环境搭建
官方推荐Node.js 12.0以上版本,但很多系统自带的还是老版本。我遇到过最离谱的是CentOS 7默认只有Node.js 4.2.6,直接装依赖会报错。推荐用nvm管理多版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install 16.14.2 # 当前LTS版本 nvm alias default 16验证安装:
node -v # 应显示v16.14.2 npm -v # 对应版本号如果遇到命令找不到的问题,检查PATH是否包含~/.nvm/versions/node/v16.14.2/bin。也可以手动软链:
ln -s ~/.nvm/versions/node/v16.14.2/bin/node /usr/local/bin/node ln -s ~/.nvm/versions/node/v16.14.2/bin/npm /usr/local/bin/npm3. RSSHub部署实战
3.1 获取源码与依赖安装
克隆项目仓库(建议用国内镜像加速):
git clone https://github.com.cnpmjs.org/DIYgod/RSSHub.git cd RSSHub安装依赖时常见两个坑:
- 网络超时:可以换淘宝镜像源
- 权限问题:不要用root运行
解决方案:
npm config set registry https://registry.npmmirror.com npm install --production --unsafe-perm如果遇到node-gyp编译错误,需要安装编译工具链:
yum groupinstall "Development Tools" # CentOS apt install build-essential python3 # Ubuntu3.2 配置与启动服务
复制示例配置文件并修改:
cp config.example.js config.js nano config.js重点配置项:
module.exports = { // 监听所有网卡 host: '0.0.0.0', // 缓存时间(秒) cache: { ttl: 5 * 60, }, // 请求频率限制 requestLimit: { max: 30, } }测试启动:
npm start用另一台机器测试访问:
curl http://<服务器IP>:1200/test4. 服务守护与优化
4.1 使用PM2持久化运行
直接npm start会在退出终端时停止服务,需要进程守护。PM2是最佳选择:
npm install pm2 -g pm2 start lib/index.js --name rsshub --node-args="--max-old-space-size=256"常用管理命令:
pm2 save # 保存进程列表 pm2 startup # 创建开机启动服务 pm2 logs rsshub # 查看日志4.2 内存泄漏防护
RSSHub偶尔会出现内存泄漏,可以通过以下方式缓解:
- 在PM2启动时添加
--max-old-space-size参数限制内存 - 设置定时重启:
pm2 start lib/index.js --name rsshub --cron-restart="0 3 * * *"4.3 日志与监控
建议配置日志轮转:
pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 100M pm2 set pm2-logrotate:retain 305. 实际使用技巧
5.1 路由使用示例
获取B站UP主动态:
https://你的域名/bilibili/user/dynamic/401742377获取知乎热榜:
https://你的域名/zhihu/hotlist5.2 性能调优
对于高频率更新的源,可以调整缓存时间:
// config.js cache: { ttl: 3 * 60, // 3分钟 refresh: 30 // 提前30秒刷新 }5.3 安全防护
建议在阿里云安全组设置IP白名单,或者配置基础认证:
// config.js authentication: { username: 'admin', password: '你的密码' }这套方案在我的2核4G阿里云ECS上稳定运行了半年多,日均处理5000+请求毫无压力。最大的经验就是一定要用PM2做进程守护,并且定期检查日志。如果遇到异常流量,及时调整requestLimit配置项。