本文档涵盖了 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=<已配置> |
| Elasticsearch | ELASTICSEARCH_HOST="http://:9200" | ELASTICSEARCH_HOST="http://:9200" | ELASTICSEARCH_HOST=<已配置> |
生产环境使用多个数据库副本进行负载分发和高可用性
来源: .env.development1-21 .env.test1-20 .env.production.example1-47
该平台集成了众多外部服务,每个服务都需要特定的 API 凭据和配置参数。
该平台广泛使用 AWS 服务,并提供专用的凭据集
| 服务类别 | 关键变量 | 目的 |
|---|---|---|
| S3 存储 | AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY | 通用 S3 访问 |
| CloudFront CDN | CLOUDFRONT_KEYPAIR_ID、CLOUDFRONT_PRIVATE_KEY | 内容分发 |
| 媒体处理 | MEDIACONVERT_ENDPOINT、MEDIACONVERT_ROLE | 视频处理 |
| HLS 流媒体 | HLS_DISTRIBUTION_URL_DEV、HLS_PIPELINE_ID_PROD | 视频流 |
来源: .env.example38-170 .env.production.example101-240
该平台使用多个电子邮件服务提供商,具有特定于环境的 API 密钥和域配置。
来源: .env.example101-126 .env.production.example164-188
该平台通过各种加密密钥和身份验证令牌实现多层安全。
| 可变 | 目的 | 环境使用 |
|---|---|---|
STRONGBOX_GENERAL | 用于安全存储的 RSA 私钥 | 所有环境 |
STRONGBOX_GENERAL_PASSWORD | RSA 密钥解密的密码 | 所有环境 |
DEVISE_SECRET_KEY | Rails 身份验证密钥 | 所有环境 |
OBFUSCATE_IDS_CIPHER_KEY | ID 混淆加密 | 仅生产环境 |
MAILER_HEADERS_ENCRYPTION_KEY_V1 | 邮件头加密 | 仅生产环境 |
来源: .env.development26-30 .env.test25-28 .env.production.example202-215
不同的环境需要不同的配置来进行数据库隔离、服务终结点和安全参数。
开发环境(.env.development1-37)提供本地服务连接,安全要求最低
127.0.0.1PUMA_WORKER_PROCESSES=1)STRONGBOX_GENERAL 和 DEVISE_SECRET_KEY 的测试加密密钥测试环境(.env.test1-29)维护与开发数据的严格隔离
gumroad_test vs gumroad_development)gumroad_log_test)生产环境(.env.production.example1-324)包含完整的配置
_DEV vs _PROD 后缀)DEPLOY_TAG、NGINX_TAG、WEIGHT)来源: .env.development1-37 .env.test1-29 .env.production.example306-324
Rails 应用程序通过分层系统加载环境变量,其中特定于部署的变量覆盖模板配置。该系统支持基于文件的配置和运行时环境变量注入,用于安全凭据管理。
环境变量通过 ENV['VARIABLE_NAME'] 调用在整个 Rails 应用程序中使用,并与 GlobalConfig.dig 方法集成,用于访问嵌套配置,特别是 webhook 密钥和服务特定参数。