You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全配置Heroku,通过环境变量读取令牌引入私有仓库至requirements.txt?

安全将私有GitHub仓库纳入Heroku应用requirements.txt的方案

方法一:预构建脚本替换环境变量

这是最通用的方案,适用于直接从GitHub仓库拉取私有包的场景:

  1. 创建requirements.template模板文件,用环境变量占位符替代硬编码的令牌:
    # 公共依赖
    django==4.2.5
    requests==2.31.0
    # 私有GitHub仓库(替换为你的仓库信息)
    git+https://${GITHUB_TOKEN}@github.com/your-username/private-repo.git@main#egg=private-package-name
    
  2. 在项目根目录创建bin/post_compile脚本(Heroku构建时会自动执行该脚本):
    #!/usr/bin/env bash
    # 用环境变量替换模板占位符,生成最终的requirements.txt
    envsubst < requirements.template > requirements.txt
    
  3. 给脚本添加执行权限:
    chmod +x bin/post_compile
    
  4. 将requirements.template和bin/post_compile提交到Git,推送到Heroku。
  5. 设置Heroku环境变量存储令牌:
    heroku config:set GITHUB_TOKEN=你的GitHub访问令牌
    
    注意:确保令牌拥有repo权限,遵循最小权限原则。

方法二:利用pip额外索引URL(适用于GitHub Packages或私有PyPI)

如果你的私有包发布在GitHub Packages或私有PyPI上,可采用此方法:

  1. 设置Heroku环境变量:
    heroku config:set GITHUB_TOKEN=你的GitHub访问令牌
    
  2. 在requirements.txt中添加带环境变量的额外索引URL:
    --extra-index-url https://${GITHUB_TOKEN}:x-oauth-basic@pip.pkg.github.com/your-username/simple/
    # 私有包依赖
    private-package-name==1.0.0
    
    这里x-oauth-basic是固定值,GitHub Packages接受令牌作为用户名,该字段作为密码占位符。

重要注意事项

  • 将自动生成的requirements.txt加入.gitignore,避免意外提交包含令牌的文件。
  • 不要给GitHub令牌赋予超出必要的权限,仅保留repo权限即可。
  • 永远不要将令牌硬编码到任何文件中,依赖Heroku环境变量管理敏感信息是更安全的实践。

内容的提问来源于stack exchange,提问作者ashraf khaled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:50:44