如何将.env文件的环境变量传入Heroku.yml而无需硬编码
解决方案
Heroku本身不支持直接从.env文件读取变量自动填充heroku.yml,你可以通过以下三种方案避免硬编码敏感值:
优先使用Heroku应用级配置变量
这是官方最推荐的安全方案,你可以完全删掉heroku.yml中build.config和setup.config下的敏感配置项,直接通过Heroku CLI为应用设置全局环境变量,这些变量会自动在构建、部署和运行阶段生效,不需要写入heroku.yml文件。
操作命令示例:# 批量导入.env中所有变量到Heroku应用配置 heroku config:set $(cat .env | grep -v '^#' | xargs)配置完成后正常触发部署即可,所有变量会自动注入到应用环境,不存在代码仓库泄露风险。
本地动态生成heroku.yml部署
如果你的部署流程必须在heroku.yml中定义配置项,可以通过模板+本地脚本的方式实现:- 先创建heroku.yml模板文件
heroku.yml.template,将敏感值位置替换为占位符,比如SECRET_KEY: {{SECRET_KEY}} - 编写简单的shell脚本,读取.env文件的变量值替换模板中的占位符,生成临时的heroku.yml文件
- 将临时生成的heroku.yml加入.gitignore,部署完成后可直接删除,避免意外提交
示例替换命令(使用envsubst工具):
# 读取.env变量替换模板生成可用的heroku.yml export $(cat .env | grep -v '^#' | xargs) && envsubst < heroku.yml.template > heroku.yml- 先创建heroku.yml模板文件
Docker构建时直接传参
如果你采用Docker部署,构建阶段需要的变量可以直接通过命令行传递,不需要写入heroku.yml:# 从.env读取SECRET_KEY作为构建参数推送镜像 heroku container:push web --build-arg SECRET_KEY=$(grep SECRET_KEY .env | cut -d '=' -f2)
内容的提问来源于stack exchange,提问作者G A L A X Y
相关产品推荐
相关产品推荐

