【技术实践】Docker部署RSSHub服务完整指南

文章概要:详细记录使用Docker Compose部署RSSHub RSS聚合服务的完整过程,包括Redis缓存配置、Nginx反向代理设置和常见问题解决方案

📋 基本信息

  • 环境:Ubuntu 22.04 / Docker 24.x / Nginx Proxy Manager

  • 涉及技术:Docker, Redis, Nginx, RSSHub

  • 难度等级:⭐⭐⭐☆☆

  • 预计用时:45分钟


🎯 目标与背景

要解决的问题

部署一个稳定、高性能的RSSHub服务,为RSS阅读器提供丰富的内容源聚合功能,支持微博、GitHub、知乎等多平台内容抓取。

应用场景

  • 个人RSS阅读服务搭建

  • 团队内容聚合平台

  • 与Miniflux等RSS阅读器配合使用


🚀 具体实现

环境准备

# 创建服务目录
cd /opt/services
mkdir rsshub && cd rsshub

详细步骤

步骤1:环境配置文件创建

创建环境变量配置文件:

cat > .env << 'EOF'
# RSSHub 基础配置
RSSHUB_PORT=1200
RSSHUB_HOST=0.0.0.0

# 缓存配置
CACHE_TYPE=redis
CACHE_EXPIRE=300

# Redis 安全配置
REDIS_PASSWORD=rsshub_redis_password

# 访问控制
ACCESS_KEY=your_access_key_here

# 请求限制
RATE_LIMIT_MAX=100
RATE_LIMIT_DURATION=60

# 系统配置
TZ=Asia/Shanghai
LOG_LEVEL=info
EOF

步骤2:Docker Compose配置

创建容器编排文件:

version: '3.8'

services:
  rsshub:
    image: diygod/rsshub:latest
    container_name: rsshub
    restart: unless-stopped
    ports:
      - "1200:1200"
    environment:
      - NODE_ENV=production
      - CACHE_TYPE=redis
      - REDIS_URL=redis://redis:6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - ACCESS_KEY=${ACCESS_KEY}
      - RATE_LIMIT_MAX=${RATE_LIMIT_MAX}
      - RATE_LIMIT_DURATION=${RATE_LIMIT_DURATION}
      - TZ=${TZ}
      - LOG_LEVEL=${LOG_LEVEL}
    depends_on:
      - redis
    volumes:
      - ./config:/app/config
    networks:
      - rsshub_network

  redis:
    image: redis:7-alpine
    container_name: rsshub_redis
    restart: unless-stopped
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    networks:
      - rsshub_network

volumes:
  redis_data:
    driver: local

networks:
  rsshub_network:
    driver: bridge

步骤3:自定义配置优化

# 创建配置目录
mkdir -p config

# 创建高级配置文件
cat > config/config.js << 'EOF'
module.exports = {
    cache: {
        type: process.env.CACHE_TYPE || 'redis',
        expire: process.env.CACHE_EXPIRE || 300,
    },
    
    ua: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    
    requestTimeout: 30000,
    
    feature: {
        allow_user_hotlink_template: false,
        allow_user_supply_unsafe_domain: false,
    },
    
    anticrawler: true,
    requestRetry: 3,
};
EOF

步骤4:服务启动与验证

# 启动所有服务
docker compose up -d

# 检查服务状态
docker compose ps

# 查看启动日志
docker compose logs -f rsshub

⚠️ 问题解决

问题1:容器启动失败

现象:RSSHub容器无法正常启动,日志显示端口被占用

解决方案

# 检查端口占用情况
sudo netstat -tulpn | grep 1200

# 如有冲突,修改端口映射
# 在docker-compose.yml中将1200改为其他端口

原因分析:系统中可能已有服务占用1200端口,需要更换映射端口或停止冲突服务

问题2:Redis连接失败

现象:RSSHub日志显示无法连接Redis数据库

解决方案

# 验证Redis服务状态
docker compose exec redis redis-cli -a ${REDIS_PASSWORD} ping

# 重启Redis服务
docker compose restart redis

原因分析:Redis密码配置不匹配或网络连接问题导致

问题3:部分路由无法访问

现象:某些特定平台的RSS路由返回空内容或错误

解决方案

# 检查网络连接
docker compose exec rsshub ping -c 3 www.google.com

# 配置代理(如需要)
# 在.env中添加PROXY_URI配置

🔧 进阶优化

性能优化配置

在docker-compose.yml中添加资源限制,防止内存占用过高:

services:
  rsshub:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

Nginx反向代理设置

通过Nginx Proxy Manager配置HTTPS访问:

  1. 添加代理主机:rsshub.example.com

  2. 转发地址:localhost:1200

  3. 启用SSL证书自动申请

  4. 高级配置添加缓存头设置

监控脚本部署

#!/bin/bash
# 创建服务监控脚本
cat > monitor_rsshub.sh << 'EOF'
#!/bin/bash
cd /opt/services/rsshub

if ! docker compose ps | grep -q "Up"; then
    echo "$(date): RSSHub containers restarting..."
    docker compose up -d
fi

if ! curl -s http://localhost:1200 > /dev/null; then
    echo "$(date): RSSHub service not responding, restarting..."
    docker compose restart rsshub
fi
EOF

chmod +x monitor_rsshub.sh

# 添加定时任务
echo "*/5 * * * * /opt/services/rsshub/monitor_rsshub.sh >> /var/log/rsshub_monitor.log 2>&1" | crontab -

📚 参考资料


💡 总结与思考

关键要点

  1. 缓存策略至关重要:Redis缓存显著提升响应速度,合理设置过期时间平衡性能与实时性

  2. 资源限制必不可少:通过Docker资源限制防止服务占用过多系统资源

  3. 监控机制保障稳定:定时检查服务状态,自动重启故障容器确保服务可用性

后续计划

  • [ ] 集成Prometheus监控指标收集

  • [ ] 添加更多自定义路由支持

  • [ ] 研究分布式部署方案提升可用性


文章信息

  • 首发:https://blog.example.com

  • 更新:2025-07-27

  • 分类:技术学习 > Docker实践

  • 许可:CC BY-NC-SA 4.0


如有问题或建议,欢迎在评论区交流 💬