Flask生产环境中如何通过.env文件传递环境变量配置?
Flask生产环境环境变量配置指南
核心原则:生产环境别依赖.env文件
本地开发用.env是为了便捷,但生产环境绝对不要用.env文件存储敏感变量——一来部署环境(云服务器、容器等)有更安全的原生变量管理机制,二来文件存储敏感数据易泄露,也不利于批量维护。
生产环境变量配置方案
1. 云服务平台内置管理
主流云平台(AWS、阿里云、腾讯云、Heroku等)都提供专门的环境变量/密钥管理功能:
- 直接在控制台添加键值对(如数据库URL、API密钥),加密存储且权限可控
- 应用启动时自动将变量加载到
os.environ,和本地读取逻辑完全一致,无需修改代码 - 支持批量修改,不会像文件那样存在泄露风险
2. 容器化部署(Docker/K8s)
如果用容器部署:
- Docker:单变量用
docker run -e KEY=VALUE传递,批量变量可临时用--env-file指定本地文件(别把这个文件打包进镜像);更安全的方式是用Docker Secrets管理敏感数据 - Kubernetes:用
Secret资源存储敏感变量,通过环境变量或挂载卷让Pod读取,避免明文暴露
3. 传统服务器部署
自己搭建VM或物理机时:
- 在服务器的系统配置文件(如
/etc/profile、~/.bashrc)或应用启动脚本中添加export KEY=VALUE语句,重启终端或启动脚本后,os.environ即可读取 - 用Ansible等配置工具批量推送变量,保证多台机器配置一致
4. GitHub Actions的正确用法
GitHub Actions适合CI/CD环节传递变量,而非生产环境变量存储:
- 在仓库「Settings → Secrets and variables → Actions」中添加批量敏感变量,加密存储
- 在Workflow文件中用
${{ secrets.KEY_NAME }}引用,比如部署时传递给服务器或容器 - 注意:这只是传递手段,生产环境变量最终要存在部署环境的安全存储中,别让Actions直接写入生产服务器的文件
代码适配建议
你用了应用工厂模式,保持现有代码逻辑即可——继续用os.environ.get("KEY_NAME")读取变量,生产环境的变量会自动加载到环境中,无需额外修改。示例:
def create_app(): app = Flask(__name__) app.config["DATABASE_URL"] = os.environ.get("DATABASE_URL") app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY") # 其他配置逻辑 return app
关键注意事项
- 永远不要将生产环境敏感变量提交到代码仓库,哪怕是加密后的文件
- 生产环境必须关闭
FLASK_DEBUG,可通过设置FLASK_ENV=production或代码中强制app.debug = False实现 - 定期轮换敏感变量(如数据库密码、API密钥),利用平台批量修改功能提升效率
内容的提问来源于stack exchange,提问作者Angel
相关产品推荐
相关产品推荐

