菜单

概述

相关源文件

本文全面概述了 Gumroad 基础设施仓库,重点介绍 CI/CD 流水线、部署流程、开发环境设置和基础设施编排。此仓库包含支持 Gumroad 电子商务平台的 DevOps 工具、构建配置和部署自动化。

该基础设施包括 Docker 容器化、Nomad 编排、多环境配置管理、自动化测试流水线,以及与众多外部服务的集成,包括 AWS、支付处理器和电子邮件服务提供商。

基础设施架构

Gumroad 基础设施围绕基于 Docker 的容器化部署构建,使用 HashiCorp Nomad 进行编排,并通过复杂的 CI/CD 流水线实现自动化。该系统支持多种环境,具备全面的配置管理和外部服务集成。

整体基础设施架构

来源

CI/CD 管道架构

构建和部署流水线使用 Buildkite 进行主要的 CI/CD 编排,并使用 GitHub Actions 进行自动化代码质量检查。该系统构建 Docker 镜像,为多种环境编译资产,并使用 Nomad 编排部署到预发布和生产环境。

来源

基础设施组件

配置管理系统

该基础设施使用广泛的基于环境的配置管理,支持开发、预发布和生产环境。配置包括 AWS 服务、支付处理器、电子邮件服务提供商以及众多第三方集成。

环境配置

环境类型配置文件目的
开发.env.development本地开发设置
测试.env.test测试环境隔离
预发布分支特定变量预发布部署
生产.env.production.example生产模板

外部服务集成

来源

Docker 和容器管理

该系统使用 Docker 进行容器化,针对不同环境和构建阶段有特定配置。

Docker 配置

来源

开发工作流程和质量保证

开发工作流程包括全面的质量门、自动化测试以及带有业务逻辑限制的部署控制。

开发质量流水线

开发准则和标准

.cursorrules》文件定义了全面的开发标准,包括

标准指南示例
技术栈最新版本的 Ruby、Rails、TypeScript、ReactRuby 3.x, Rails 7.x
代码风格句子大小写标题,代码中不加注释"Create product" 而不是 "Create Product"
队列管理Sidekiq 队列优先级:criticaldefaultlowmongo对大多数后台作业使用 low
导入模式Tree-shaking 友好的导入方式import debounce from "lodash/debounce"
命名约定product 而不是 linkbuyer/seller 而不是 customer/creator变量命名一致性
功能开发新功能使用功能标志渐进式发布机制
作业模式Sidekiq 作业类名以“Job”结尾ProcessBacklogJobCalculateProfitJob

来源

资产流水线和内容分发

资产编译和交付系统支持多种环境,并针对预发布和生产部署进行优化构建。

资产流水线架构

内容分发配置

该系统使用 AWS S3 和 CloudFront 用于资产存储和全球内容分发

服务环境变量目的
S3 存储AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY资产存储凭据
CloudFrontCLOUDFRONT_KEYPAIR_IDCLOUDFRONT_PRIVATE_KEYCDN 分发
文件下载FILE_DOWNLOAD_DISTRIBUTION_URL_DEV/PROD下载 URL
HLS 流媒体HLS_DISTRIBUTION_URL_DEV/PROD视频流
Media ConvertMEDIACONVERT_ENDPOINTMEDIACONVERT_QUEUE_TEMPLATE视频处理

来源

版本控制和 Git 配置

该仓库使用全面的 Git 配置,包含广泛的忽略模式,用于开发工件、构建输出和敏感数据。

Git 忽略模式

.gitignore》配置排除了多种类型的文件

类别文件/模式目的
开发文件*.swo*.swp.DS_Store.idea编辑器和操作系统工件
构建工件/public/packs/public/assets/app/javascript/utils/routes.*生成的文件
依赖项/node_modules/vendor/bundle包管理器目录
配置.env.env.*.local/config/credentials/环境变量和敏感信息
基础设施*.nomadnomad/docker/base/Gemfile*部署配置
证书nomad/certsdocker/local-nginx/certs/SSL 证书
日志和临时文件log/*tmpdump.rdbnohup.out运行时数据

开发工件管理

来源

结论

Gumroad 是一个复杂的 Rails 应用程序,具有多个相互连接的系统,旨在为创作者提供一个完整的电子商务平台。该架构将用户管理、产品处理、支付处理和通信等关注点进行分离,所有这些都通过一个全面的 API 层连接在一起。

本概述为理解代码库奠定了基础,每个特定子系统的更详细文档可在链接的维基页面中查阅。