本文全面概述了 Gumroad 基础设施仓库,重点介绍 CI/CD 流水线、部署流程、开发环境设置和基础设施编排。此仓库包含支持 Gumroad 电子商务平台的 DevOps 工具、构建配置和部署自动化。
该基础设施包括 Docker 容器化、Nomad 编排、多环境配置管理、自动化测试流水线,以及与众多外部服务的集成,包括 AWS、支付处理器和电子邮件服务提供商。
Gumroad 基础设施围绕基于 Docker 的容器化部署构建,使用 HashiCorp Nomad 进行编排,并通过复杂的 CI/CD 流水线实现自动化。该系统支持多种环境,具备全面的配置管理和外部服务集成。
来源
构建和部署流水线使用 Buildkite 进行主要的 CI/CD 编排,并使用 GitHub Actions 进行自动化代码质量检查。该系统构建 Docker 镜像,为多种环境编译资产,并使用 Nomad 编排部署到预发布和生产环境。
来源
该基础设施使用广泛的基于环境的配置管理,支持开发、预发布和生产环境。配置包括 AWS 服务、支付处理器、电子邮件服务提供商以及众多第三方集成。
| 环境类型 | 配置文件 | 目的 |
|---|---|---|
| 开发 | .env.development | 本地开发设置 |
| 测试 | .env.test | 测试环境隔离 |
| 预发布 | 分支特定变量 | 预发布部署 |
| 生产 | .env.production.example | 生产模板 |
来源
该系统使用 Docker 进行容器化,针对不同环境和构建阶段有特定配置。
来源
开发工作流程包括全面的质量门、自动化测试以及带有业务逻辑限制的部署控制。
《.cursorrules》文件定义了全面的开发标准,包括
| 标准 | 指南 | 示例 |
|---|---|---|
| 技术栈 | 最新版本的 Ruby、Rails、TypeScript、React | Ruby 3.x, Rails 7.x |
| 代码风格 | 句子大小写标题,代码中不加注释 | "Create product" 而不是 "Create Product" |
| 队列管理 | Sidekiq 队列优先级:critical、default、low、mongo | 对大多数后台作业使用 low |
| 导入模式 | Tree-shaking 友好的导入方式 | import debounce from "lodash/debounce" |
| 命名约定 | product 而不是 link,buyer/seller 而不是 customer/creator | 变量命名一致性 |
| 功能开发 | 新功能使用功能标志 | 渐进式发布机制 |
| 作业模式 | Sidekiq 作业类名以“Job”结尾 | ProcessBacklogJob、CalculateProfitJob |
来源
资产编译和交付系统支持多种环境,并针对预发布和生产部署进行优化构建。
该系统使用 AWS S3 和 CloudFront 用于资产存储和全球内容分发
| 服务 | 环境变量 | 目的 |
|---|---|---|
| S3 存储 | AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY | 资产存储凭据 |
| CloudFront | CLOUDFRONT_KEYPAIR_ID、CLOUDFRONT_PRIVATE_KEY | CDN 分发 |
| 文件下载 | FILE_DOWNLOAD_DISTRIBUTION_URL_DEV/PROD | 下载 URL |
| HLS 流媒体 | HLS_DISTRIBUTION_URL_DEV/PROD | 视频流 |
| Media Convert | MEDIACONVERT_ENDPOINT、MEDIACONVERT_QUEUE_TEMPLATE | 视频处理 |
来源
该仓库使用全面的 Git 配置,包含广泛的忽略模式,用于开发工件、构建输出和敏感数据。
《.gitignore》配置排除了多种类型的文件
| 类别 | 文件/模式 | 目的 |
|---|---|---|
| 开发文件 | *.swo、*.swp、.DS_Store、.idea | 编辑器和操作系统工件 |
| 构建工件 | /public/packs、/public/assets/、app/javascript/utils/routes.* | 生成的文件 |
| 依赖项 | /node_modules、/vendor/bundle | 包管理器目录 |
| 配置 | .env、.env.*.local、/config/credentials/ | 环境变量和敏感信息 |
| 基础设施 | *.nomad、nomad/、docker/base/Gemfile* | 部署配置 |
| 证书 | nomad/certs、docker/local-nginx/certs/ | SSL 证书 |
| 日志和临时文件 | log/*、tmp、dump.rdb、nohup.out | 运行时数据 |
来源
Gumroad 是一个复杂的 Rails 应用程序,具有多个相互连接的系统,旨在为创作者提供一个完整的电子商务平台。该架构将用户管理、产品处理、支付处理和通信等关注点进行分离,所有这些都通过一个全面的 API 层连接在一起。
本概述为理解代码库奠定了基础,每个特定子系统的更详细文档可在链接的维基页面中查阅。