菜单

环境变量

相关源文件

本文档涵盖了 Gumroad 平台使用的环境变量配置系统,包括开发、测试、暂存和生产环境。它详细介绍了控制数据库连接、外部服务集成、安全设置和部署参数的配置变量的结构、类别和管理。

有关安全凭据部署和管理的信息,请参阅凭据管理

环境结构概述

Gumroad 代码库使用全面的环境变量系统,为每个部署环境提供独特的配置。配置通过多个 .env 文件进行组织,这些文件提供了模板和特定于环境的覆盖。

来源: .env.development1-37 .env.test1-29 .env.example1-237 .env.production.example1-324

数据库配置变量

该平台使用多个数据库系统,为生产环境提供特定于环境的连接参数和副本配置。

主要数据库系统

变量类别开发测试生产
MySQL 主库DATABASE_HOST="127.0.0.1"DATABASE_HOST="127.0.0.1"DATABASE_HOST=<已配置>
MongoDB 日志记录MONGO_DATABASE_URL="localhost:27017"MONGO_DATABASE_URL="localhost:27017"MONGO_DATABASE_URL=<已配置>
Redis 缓存REDIS_HOST="localhost:6379/0"REDIS_HOST="localhost:6379/10"REDIS_HOST=<已配置>
ElasticsearchELASTICSEARCH_HOST="http://:9200"ELASTICSEARCH_HOST="http://:9200"ELASTICSEARCH_HOST=<已配置>

数据库副本配置

生产环境使用多个数据库副本进行负载分发和高可用性

来源: .env.development1-21 .env.test1-20 .env.production.example1-47

外部服务集成变量

该平台集成了众多外部服务,每个服务都需要特定的 API 凭据和配置参数。

支付网关配置

AWS 服务配置

该平台广泛使用 AWS 服务,并提供专用的凭据集

服务类别关键变量目的
S3 存储AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY通用 S3 访问
CloudFront CDNCLOUDFRONT_KEYPAIR_IDCLOUDFRONT_PRIVATE_KEY内容分发
媒体处理MEDIACONVERT_ENDPOINTMEDIACONVERT_ROLE视频处理
HLS 流媒体HLS_DISTRIBUTION_URL_DEVHLS_PIPELINE_ID_PROD视频流

来源: .env.example38-170 .env.production.example101-240

电子邮件服务配置

该平台使用多个电子邮件服务提供商,具有特定于环境的 API 密钥和域配置。

来源: .env.example101-126 .env.production.example164-188

安全和加密变量

该平台通过各种加密密钥和身份验证令牌实现多层安全。

加密配置

可变目的环境使用
STRONGBOX_GENERAL用于安全存储的 RSA 私钥所有环境
STRONGBOX_GENERAL_PASSWORDRSA 密钥解密的密码所有环境
DEVISE_SECRET_KEYRails 身份验证密钥所有环境
OBFUSCATE_IDS_CIPHER_KEYID 混淆加密仅生产环境
MAILER_HEADERS_ENCRYPTION_KEY_V1邮件头加密仅生产环境

辅助小部件安全

来源: .env.development26-30 .env.test25-28 .env.production.example202-215

特定于环境的变量管理

不同的环境需要不同的配置来进行数据库隔离、服务终结点和安全参数。

开发环境环境变量

开发环境(.env.development1-37)提供本地服务连接,安全要求最低

  • 本地数据库连接到 127.0.0.1
  • 单个 Puma 工作进程(PUMA_WORKER_PROCESSES=1
  • 简化的 Redis 配置,具有数据库分离
  • 用于 STRONGBOX_GENERALDEVISE_SECRET_KEY 的测试加密密钥

测试环境隔离

测试环境(.env.test1-29)维护与开发数据的严格隔离

  • 单独的数据库名称(gumroad_test vs gumroad_development
  • 不同的 Redis 数据库索引(10-13 vs 0-3)
  • 独立的 MongoDB 集合(gumroad_log_test
  • 相同的加密密钥以保持一致性

生产配置结构

生产环境(.env.production.example1-324)包含完整的配置

  • 多个数据库副本配置
  • 特定于环境的服务终结点(_DEV vs _PROD 后缀)
  • 完整的外部服务集成变量
  • 高级部署配置(DEPLOY_TAGNGINX_TAGWEIGHT

来源: .env.development1-37 .env.test1-29 .env.production.example306-324

变量加载和优先级

Rails 应用程序通过分层系统加载环境变量,其中特定于部署的变量覆盖模板配置。该系统支持基于文件的配置和运行时环境变量注入,用于安全凭据管理。

环境变量通过 ENV['VARIABLE_NAME'] 调用在整个 Rails 应用程序中使用,并与 GlobalConfig.dig 方法集成,用于访问嵌套配置,特别是 webhook 密钥和服务特定参数。

来源: .env.example46-48 .env.production.example109-111