在Dreamhost与Passenger WSGI环境下配置Django环境变量
嘿,针对你在Dreamhost用Passenger WSGI部署Django,想把邮箱密码这类敏感信息做成不存源码的环境变量的需求,我给你整理几个实操性强的方案,都是我自己部署时用过的:
方案1:项目级配置文件(最灵活,适合单项目)
这个方法是在项目目录里单独放一个环境变量配置文件,不会被提交到源码仓库:
- 进入你的
superlists项目根目录,创建一个名为passenger_env_vars.conf的文件 - 在文件里按
变量名=值的格式添加敏感信息,比如:EMAIL_PASSWORD=your_real_email_password DJANGO_SECRET_KEY=your_secure_secret_key - 找到项目里的
passenger_wsgi.py(如果没有就自己创建,Dreamhost的Passenger会默认读取这个文件),添加代码加载这个配置文件:
如果你不想装额外依赖,就用手动读取的方式:
要是觉得手动写麻烦,也可以用import os # 定位到配置文件的路径 env_file_path = os.path.join(os.path.dirname(__file__), 'passenger_env_vars.conf') if os.path.exists(env_file_path): with open(env_file_path, 'r') as f: for line in f: line = line.strip() # 跳过注释和空行 if line and not line.startswith('#'): key, value = line.split('=', 1) os.environ[key] = valuepython-dotenv包:先执行pip install python-dotenv,把这个包加到requirements.txt里,然后在passenger_wsgi.py里写:import os from dotenv import load_dotenv load_dotenv(os.path.join(os.path.dirname(__file__), 'passenger_env_vars.conf')) - 最后一定要把
passenger_env_vars.conf添加到.gitignore里,绝对不能提交到源码仓库!
方案2:Dreamhost面板全局设置(适合多项目共享)
如果你的多个Django项目需要共享一些环境变量,或者不想在项目里加额外文件,可以直接用控制面板设置:
- 登录Dreamhost面板,进入「Domains」->「Manage Domains」,找到你部署
superlists的域名,点击「Edit」 - 往下滑到「Passenger Settings」区域,找到「Environment Variables」输入框,按
变量名=值的格式一行一个添加,比如:EMAIL_PASSWORD=your_password DJANGO_SECRET_KEY=your_key - 保存设置后,重启Passenger生效——要么点面板里的「Restart Passenger」按钮,要么通过SSH进入
superlists目录执行touch tmp/restart.txt(没有tmp文件夹的话先建一个:mkdir -p tmp)
方案3:.htaccess配置(传统Apache/Passenger方式)
如果你习惯用Apache的配置方式,也可以通过.htaccess设置:
- 在
superlists根目录创建或编辑.htaccess文件,添加SetEnv指令:SetEnv EMAIL_PASSWORD your_actual_email_password SetEnv DJANGO_SECRET_KEY your_secret_key_here - 同样把
.htaccess加到.gitignore里,然后重启Passenger生效
最后几个关键注意点
- 在Django的
settings.py里,直接用os.environ.get()获取环境变量就行,比如:import os SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASSWORD') - 每次修改环境变量后,必须重启Passenger,否则新的变量不会生效
- 一定要确保所有包含敏感信息的文件都被排除在版本控制外,
.gitignore里要加上这些条目:passenger_env_vars.conf .htaccess
内容的提问来源于stack exchange,提问作者Dwaine
相关产品推荐
相关产品推荐

