gpt4 book ai didi

python - Heroku:私有(private)存储库中的 Python 依赖项而不存储我的密码

转载 作者:太空狗 更新时间:2023-10-29 17:50:18 25 4
gpt4 key购买 nike

问题

我的问题和How do I install in-house requirements for Python Heroku projects?一模一样和 How to customize pip's requirements.txt in Heroku on deployment? .也就是说,我有一个私有(private)存储库,我需要从中将 Python 依赖项安装到我的 Heroku 应用程序中canonical answer , 由 Heroku 自己给出 Kenneth Reitz , 就是放一些类似的东西

-e git+https://username:password@github.com/kennethreitz/requests.git@v0.10.0#egg=requests

在您的 requirements.txt 文件中。

我的安全需求阻止我将密码存储在存储库中。(我也不想将依赖项放入我的应用程序的存储库中;它们是独立的软件,需要单独存放 repo 。)我可以将我的密码(或者,最好是 GitHub OAuth token 或部署 key )提供给 Heroku 的唯一地方是在环境变量中,例如

heroku config:add GITHUB_OAUTH_TOKEN=12312312312313

尝试的解决方案

我可以在我的应用程序的存储库中使用自定义的 .profile,但随后我将每次下载并安装我的依赖项一个进程(web、worker 等) ) 重新启动。

这样就可以使用自定义构建包和 Heroku Labs addon在 buildpack 编译之前公开我的 heroku config 环境。我试过 building oneBuildpack Multi 之上.这个想法是 Buildpack Multi 是主要的构建包,并使用我应用程序存储库中的 .buildpacks 文件,它首先下载普通的 Heroku Python 构建包,然后是我的自定义构建包。

即使在 Buildpack Multi 成功运行 Python buildpack 之后,问题仍然存在,Python binary and Pip package are not visible一旦 Buildpack Multi 运行,到我的 buildpack。所以自定义 buildpack 完全失败了。 (在我的测试中,GITHUB_OAUTH_TOKEN 环境变量已正确暴露给构建包。)

我唯一想尝试的另一件事是制作我自己的 Python buildpack 分支,当它从 requirements.txt 安装所有内容时安装我的依赖项,甚至重写 requirements。 txt 直接。对于我认为非常普遍的问题,这两个看起来都是非常繁重的解决方案。

更新:当前解决方法

我的自定义 buildpack(上面链接)现在下载我的闭源依赖项(“foo”)并将其保存到 geos buildpack 使用的供应商目录中。我将 foo 本身对我的应用程序的 requirements.txt 的依赖项提交到我的应用程序中。因此,Pip 通过我的应用程序的 requirements.txt 安装 foo 的依赖项,buildpack 将 foo 的销售副本添加到我的应用程序环境的 PYTHONPATH(因此 foo 的 setup.py install 从不运行)。

这种方法的最大问题是将我的(诚然写得不好的)buildpack 与我的应用程序耦合在一起。第二个问题是我的应用程序的 requirements.txt 应该只将 foo 列为依赖项并将 foo 的依赖项留给 foo 来确定。最后,如果我忘记设置我的 GITHUB_OAUTH_TOKEN 环境变量(或者,如果 token 过期,环境变量仍然存在但不再有效。

呼救

我错过了什么(很明显)的东西?你是如何在你的应用程序中解决这个问题的?关于让我的构建包正常工作有什么建议,或者希望有更简单的解决方案?

最佳答案

我创建了一个构建包来使用存储为环境变量的自定义 ssh key 来解决这个问题。由于 buildpack 与技术无关,因此它可用于使用任何工具下载依赖项,例如用于 php 的 composer、用于 ruby​​ 的 bundler、用于 javascript 的 npm 等:https://github.com/simon0191/custom-ssh-key-buildpack

  1. 将构建包添加到您的应用:

    $ heroku buildpacks:add --index 1 https://github.com/simon0191/custom-ssh-key-buildpack
  2. 生成一个新的 SSH key (假设您将其命名为 deploy_key)

  3. 将公钥添加到您的私有(private)存储库帐户。例如:

  4. 将私钥编码为 base64 字符串并将其添加为 heroku 应用的 CUSTOM_SSH_KEY 环境变量。

  5. 为应该使用 ssh key 的主机制作一个逗号分隔列表,并将其添加为 heroku 应用程序的 CUSTOM_SSH_KEY_HOSTS 环境变量。

    # MacOS
    $ heroku config:set CUSTOM_SSH_KEY=$(base64 --input ~/.ssh/deploy_key) CUSTOM_SSH_KEY_HOSTS=bitbucket.org,github.com
    # Ubuntu
    $ heroku config:set CUSTOM_SSH_KEY=$(base64 ~/.ssh/deploy_key) CUSTOM_SSH_KEY_HOSTS=bitbucket.org,github.com
  6. 部署您的应用并享受 :)

关于python - Heroku:私有(private)存储库中的 Python 依赖项而不存储我的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com