☰
从代码到生产环境:Dato.RSS使用Capistrano部署上云的完整指南
2026/9/25 5:34:14 网站建设 项目流程

从代码到生产环境:Dato.RSS使用Capistrano部署上云的完整指南

【免费下载链接】dato.rssThe best RSS Search experience you can find项目地址: https://gitcode.com/gh_mirrors/da/dato.rss

Dato.RSS 是一个开箱即用的 RSS 搜索引擎与 RESTful API 服务,它能把你的 RSS/Atom 源变成可搜索、可订阅的数据接口,并用机器学习(Dandelion)为每篇文章自动提取语义与情感标签。本文将带你用 Capistrano 把它从零部署到自己的云服务器上,全程大约 30 分钟。

🧩 Dato.RSS 的技术栈与部署架构

在部署前,先了解它运行所依赖的组件,这决定了服务器要装哪些软件:

  • Ruby on Rails 6.1— 核心 Web 框架,提供网页与 JSON API
  • PostgreSQL— 主数据库,同时承担全文搜索(pg_search + tsvector 索引)
  • Redis— 缓存与 Action Cable 的传输层
  • Sidekiq— 后台任务队列,负责抓取 Feed、发送 Webhook
  • Nginx + Phusion Passenger— Capistrano 通过capistrano-passenger插件自动集成
  • Node.js / Yarn— Webpacker 编译前端资源(TailwindCSS 等)

一次部署后,Capistrano 会在服务器上按releases目录版本化管理代码,支持秒级回滚。

⚙️ 一键部署前的服务器准备清单

以 Ubuntu 20.04/22.04 为例,按下面顺序安装依赖:

  1. 创建专用部署用户(与config/deploy/production.rb中的user: 'deploy'保持一致)
  2. Ruby 环境:安装git、rbenv,并安装Ruby 3.0.0——版本号由 Capfile 中的set :rbenv_ruby, '3.0.0'指定,Gemfile 也锁定了同一版本
  3. 前端依赖:Node.js 16+ 与 Yarn
  4. 数据库与缓存:PostgreSQL(启用pgcrypto扩展,项目首个迁移会自动安装)、Redis
  5. Web 服务器:Nginx + Phusion Passenger 模块
  6. SSH 免密登录:把本地公钥写入~/.ssh/authorized_keys

📦 获取代码并配置 Capistrano

克隆项目(部署账号需对仓库有访问权限):

git clone https://gitcode.com/gh_mirrors/da/dato.rss cd dato.rss bundle install

部署相关文件都集中在两处,理解它们就理解了整个流程:

文件作用
Capfile声明使用 deploy、rails、passenger、rbenv 插件与 git 源
config/deploy.rb应用名datorss、部署目录/home/deploy/datorss、保留最近 5 个版本
config/deploy/production.rb生产服务器地址、用户与角色(app / db / web)

只需把 config/deploy/production.rb 里的 IP 换成你的服务器地址,并把 config/deploy.rb 中的repo_url改为你自己的仓库地址即可。

几个值得注意的配置细节:

  • set :keep_releases, 5— 只保留最近 5 次发布,节省磁盘空间
  • append :linked_dirs, 'log', 'tmp/pids', ...— 日志与临时目录跨版本软链,发布后数据不丢失
  • set :whenever_identifier— 让定时任务标识随环境区分,避免多台机器 cron 冲突

🚀 执行第一次 Capistrano 部署

在本地项目根目录运行:

cap production deploy

Capistrano 会依次完成:检出代码 →bundle install(部署到vendor/bundle)→yarn install并预编译 Webpacker 资源 → 自动创建并迁移 PostgreSQL 数据库 → 配置 Passenger 并重启 Nginx。

生产环境的数据库连接串通过环境变量DATABASE_URL注入,见 config/database.yml;生产连接池设为 15。建议把DATABASE_URL、RAILS_MASTER_KEY等写入服务器部署用户的~/.profile,Capistrano 执行远程命令时会自动加载。

⏰ 让 RSS 自动更新:Sidekiq 与定时任务

部署完成后,别忘了启动"引擎":

  1. 启动 Sidekiq:生产并发数与队列配置在 config/sidekiq.yml(production 并发 10,队列为critical/default/low)。可用 systemd 管理,例如:

    cd /home/deploy/datorss/current bundle exec sidekiq -C config/sidekiq.yml
  2. 安装定时任务:Capfile 引入了whenever/capistrano,部署时会自动把 config/schedule.rb 注册为 cron——每 8 小时执行一次rake 'importer:run',该任务(lib/tasks/importer.rake)会过期待用 Token 并运行Service::Importer全量抓取已订阅的 Feed。

这样一来,新文章会被自动拉入数据库、建立全文索引,并通过 Webhook 推给你的订阅者。

✅ 部署验证与常用运维命令

部署完成后按下面几步验证:

  1. 浏览器访问https://你的域名,应看到 Dato.RSS 首页
  2. 调用搜索接口:curl https://你的域名/api/searches?q=ruby,返回 JSON:API 格式的文章列表
  3. 访问/feeds/new添加你的第一个 Feed,稍后在首页确认条目已被抓取

日常运维命令速查:

场景命令
发布新版本cap production deploy
一键回滚到上一版本cap production deploy:previous
重启应用cap production restart
重新编译前端资源cap production assets:precompile
查看定时任务cap production whenever:update

💡 部署常见问题排查

  • Passenger 启动失败:检查 config/puma.rb 依赖的WEB_CONCURRENCY环境变量,以及 Passenger 文档链接是否指向current目录
  • 数据库迁移卡住:确认服务器上已安装pgcrypto扩展,首次迁移会用到
  • 前端样式缺失:重新执行cap production assets:precompile,并检查服务器 Node 版本
  • 定时抓取没跑:crontab -l查看任务是否存在,日志输出在log/schedule.log

掌握以上流程后,你不仅能让 Dato.RSS 稳定运行,也等于掌握了任何 Rails 项目上云的通用套路。祝你部署顺利!🎉

【免费下载链接】dato.rssThe best RSS Search experience you can find项目地址: https://gitcode.com/gh_mirrors/da/dato.rss

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询