AWS Elastic Beanstalk项目settings.py环境变量配置与本地运行问题
AWS Elastic Beanstalk Django项目本地+生产兼容配置方案
一、ALLOWED_HOSTS 核心配置
给两种实用方案,按需选择:
- 本地文件隔离法(推荐)
- 在项目根目录新建
local_settings.py,写入:ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] - 在
settings.py末尾添加这段代码:try: from .local_settings import * except ImportError: pass - 把
local_settings.py放进.gitignore,避免上传到EB。生产环境自动读取EB环境变量配置的ALLOWED_HOSTS,本地启动时会加载这个文件的配置。
- 在项目根目录新建
- 环境变量区分法
在settings.py里通过环境变量判断运行环境:
然后去EB控制台的环境属性里添加import os # 默认本地环境,EB中需设置为production ENVIRONMENT = os.getenv('ENVIRONMENT', 'local') if ENVIRONMENT == 'production': # EB环境属性中设置ALLOWED_HOSTS为生产域名,多个用逗号分隔 ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',') else: ALLOWED_HOSTS = ['127.0.0.1', 'localhost']ENVIRONMENT=production,以及ALLOWED_HOSTS=your-app.elasticbeanstalk.com(替换为你的实际生产域名)。
二、os.getenv vs os.environ 怎么选?
直接用os.getenv就好。它支持设置默认值,比如os.getenv('DB_PORT', '5432'),就算环境变量未配置也不会报错崩溃;而os.environ['DB_PORT']如果变量不存在会直接抛出KeyError,容错性差。统一用os.getenv,代码更规范也更安全。
三、EB环境属性要不要加127.0.0.1?
完全没必要。EB生产环境的请求都是通过外部域名或负载均衡发起的,127.0.0.1是EC2实例的本地回环地址,生产场景根本用不上,添加后纯属多余,甚至可能带来不必要的安全风险。
内容的提问来源于stack exchange,提问作者Paweł Pedryc
相关产品推荐
相关产品推荐

