如何根据开发/生产部署环境调整Elastic Beanstalk配置?
在Elastic Beanstalk上管理Django开发/生产环境变量的简便方法
1. 用Elastic Beanstalk原生工具设置环境变量
这是最省心的方案,完全不用改代码或配置文件:
- 控制台操作:打开EB环境的配置页面,找到「软件」选项卡,直接添加生产环境的环境变量,这些变量会自动覆盖
.ebextensions里的测试值。 - CLI操作:执行
eb setenv API_KEY=生产密钥 DB_HOST=生产数据库地址,给生产环境单独配置敏感信息,开发环境保持.ebextensions里的测试配置就行。 - 优势:生产密钥不会出现在代码仓库里,安全性更高,也不用维护多套配置文件。
2. 在.ebextensions里加环境判断
利用EB配置文件支持的Jinja2模板语法,根据环境名称自动切换变量:
创建.ebextensions/env.config文件,内容如下:
option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: myproject.settings # 根据环境名称判断加载对应变量 {% if 'prod' in elasticbeanstalk.environment.name %} API_KEY: prod-xxxxxxxxx REDIS_URL: prod-redis.example.com {% else %} API_KEY: test-xxxxxxxxx REDIS_URL: test-redis.example.com {% endif %}
只要你的生产环境名称带prod(比如myapp-prod),就会自动加载生产变量,开发环境用测试值,不用手动修改配置。
3. 维护多套配置目录,部署前切换
如果开发和生产的配置差异很大(比如生产需要额外的Nginx配置、依赖包版本不同),可以建两套配置目录:
- 项目里创建
.ebextensions-dev和.ebextensions-prod,分别放对应环境的配置文件。 - 部署前用简单脚本切换:
# 部署开发环境 cp -r .ebextensions-dev/. .ebextensions/ eb deploy dev-environment # 部署生产环境 cp -r .ebextensions-prod/. .ebextensions/ eb deploy prod-environment
这种方式适合配置差异大的场景,能彻底隔离两套环境的配置。
4. 拆分Django的settings文件
把Django的配置拆分成通用和环境专属两部分:
- 新建
settings/base.py放通用配置,settings/dev.py和settings/prod.py分别放开发和生产的专属配置(比如DEBUG开关、敏感变量)。 - 在EB环境里设置
DJANGO_SETTINGS_MODULE变量:开发环境设为myproject.settings.dev,生产环境设为myproject.settings.prod。 - 敏感变量还是建议用EB控制台设置,在settings里通过
os.environ.get('API_KEY')获取,避免硬编码密钥。
内容的提问来源于stack exchange,提问作者Arham
相关产品推荐
相关产品推荐

