我如何使用 Rails 8 构建完整功能的 SaaS 并一键部署

发布: (2026年1月8日 GMT+8 17:34)
5 min read
原文: Dev.to

Source: Dev.to

关于如何使用 Rails 8 构建全功能 SaaS 并通过一条命令部署的封面图片

当我决定构建 MatGoat,一个武术学院管理平台时,我只有一个目标:保持简单

没有 Kubernetes。没有微服务。没有复杂的 CI/CD 流水线。只用一个可以通过单条命令部署的 Rails 单体应用。

下面就是我的实现方式。

技术栈

  • Rails 8.1 搭配 Hotwire(Turbo + Stimulus)
  • PostgreSQL 作为数据库
  • Kamal 2 用于部署
  • Hetzner Cloud 托管(约 €20/月)
  • Solid Queue 处理后台任务
  • Tailwind CSS 负责样式

仅此而已。没有 webpack。没有 Node.js 构建步骤。没有 Redis 集群。没有独立的任务服务器基础设施。

为什么 Rails 8 改变了一切

Rails 8 引入了我称之为 “Solid 三位一体” 的特性:

  • Solid Queue – 基于数据库的任务处理
  • Solid Cache – 基于数据库的缓存
  • Solid Cable – 基于数据库的 Action Cable

这意味着在大多数场景下我不需要 Redis。我的后台任务、缓存和实时更新都运行在同一个处理业务数据的 PostgreSQL 数据库上。

少管理一个服务,少出错一个点。

一条命令完成部署

完整的部署过程只有:

kamal deploy

Kamal 会处理:

  • 构建 Docker 镜像
  • 推送到镜像仓库
  • 零停机时间发布新版本
  • 执行数据库迁移
  • 通过 Let’s Encrypt 管理 SSL 证书

我的 deploy.yml 只有约 100 行,定义了 Web 服务器、任务工作者、PostgreSQL 数据库、Redis(生产环境下用于 Action Cable)以及自动备份到 S3 的数据库。

向下扩展的架构

大多数架构文章都在讨论向上扩展。但对独立开发者和小团队而言,向下扩展更有价值。

MatGoat 运行在 Hetzner 上。整个基础设施每月花费不足 Netflix 订阅费用,却能支撑:

  • 多租户学院管理
  • 通过 WebSocket 实时课堂报名
  • 视频内容分发
  • 学员进度追踪
  • 自动化课程排程

当(如果)需要扩容时,我只需在 Kamal 配置的 servers 数组中再添加一台服务器。就是这么简单。

我没有的东西

  • 没有容器编排平台
  • 没有托管数据库服务
  • 没有独立的 CDN 配置
  • 基础设施即代码仅限于 Kamal 配置

我一点也不想念这些。

维护故事

每天,我都会运行:

kamal deploy

如果出现问题:

kamal rollback

需要查看日志?

kamal logs

需要打开 Rails 控制台?

kamal console

精神负担极低。我把时间花在开发功能上,而不是与基础设施搏斗。

收获

你并不需要复杂的架构就能打造真实的产品。Rails 8 加上 Kamal 为你提供:

  • 简洁:一种语言、一个框架、一个部署工具
  • 快速:几分钟完成部署,而不是数小时
  • 成本效益:所有东西都运行在单台 VPS 上
  • 可维护性:部件更少,故障点更少

如果你是独立开发者或小团队,考虑一下是否真的需要那个 Kubernetes 集群。有时,乏味的方案才是正确的选择。

Back to Blog

相关文章

阅读更多 »