Django部署到Apache后无法读取.env环境变量,如何解决?
解决Apache部署Django时环境变量缺失的问题
下面提供几种可行的方案,帮你让Apache加载Django所需的环境变量:
方案一:直接在Apache配置中设置变量
打开你的Apache主配置文件(httpd.conf)或站点专属的虚拟主机配置文件,用SetEnv指令逐个声明环境变量:
SetEnv SECRET_KEY "your-actual-secret-key" SetEnv DATABASE_URL "mysql://user:password@localhost/db_name"
如果变量数量较多,可以把所有SetEnv指令单独存到一个配置文件(比如env.conf),再在主配置里用Include /path/to/env.conf引入,方便管理。
方案二:在wsgi.py中加载.env文件
如果你的项目依赖.env文件,可直接在Django的wsgi.py里加载它,确保Apache启动时能读取到变量:
import os from dotenv import load_dotenv # 用绝对路径定位.env文件,避免路径问题 project_dir = os.path.dirname(os.path.abspath(__file__)) load_dotenv(os.path.join(project_dir, '.env')) # 原有Django启动代码 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
注意要先安装python-dotenv包:pip install python-dotenv。
方案三:设置Apache系统级环境变量
编辑Apache的系统环境配置文件(不同系统路径不同):
- Debian/Ubuntu:
/etc/apache2/envvars - CentOS/RHEL:
/etc/sysconfig/httpd
在文件末尾添加环境变量:
export SECRET_KEY="your-actual-secret-key" export DATABASE_URL="mysql://user:password@localhost/db_name"
修改后重启Apache服务生效。
注意事项
- 确保
.env文件的权限设置正确,Apache运行用户(比如www-data)要有读取权限 - 不要把
.env文件放在Web可访问的目录下,防止敏感信息泄露 - 如果使用mod_wsgi守护进程模式,优先选择方案二,避免环境变量上下文不一致的问题
内容的提问来源于stack exchange,提问作者user3347778
相关产品推荐
相关产品推荐

