【问题标题】:How to provide access to a git repository that is used by Composer如何提供对 Composer 使用的 git 存储库的访问权限
【发布时间】:2018-09-05 17:24:53
【问题描述】:

为了管理我的库,我使用 Composer,因此我在 composer.json 中设置了依赖关系,然后添加(一直在 composer.json 中)代码所在的私有存储库的远程地址。

在运行 composer update/install 时,系统会提示我请求这些私有存储库的访问密钥。

现在,我正在尝试将 Symfony 2 应用程序部署到 Heroku。

当 Heroku 尝试从我的私有存储库下载软件包时出现问题:如何向 Heroku 提供对这些存储库的访问权限?

这是一个示例 composer.json 配置:

"require": {
    "my/private-package": "~1.0",
},
"repositories": [
    {
        "type": "git",
        "url": "https://Aerendir@bitbucket.org/Aerendir/private-package"
    }
]

此配置is explained in the Composer Documentation(它也可以在没有 Satis 的情况下使用,除了 Heroku 的“问题”:) - 或我认为的其他云托管)。

关于身份验证,解释如下:

请注意,如果您的私有包托管在 GitHub 上,则您的服务器 应该有一个 ssh 密钥,可以访问这些包,并且 那么你应该在命令中添加--no-interaction(或-n)标志 以确保它回退到 ssh 密钥身份验证而不是 提示输入密码。这也是连续的好技巧 集成服务器。

现在,问题是 2:

  1. BitBucket 有deployment keys,但我也可以set a SSH key
  2. 什么 关于Heroku SSH keys

那么,我怎样才能让 Heroku 访问我在 BitBucket 上的私人存储库? 如何通过 Heroku 在部署时执行的 composer install 命令下载托管在 BitBucket 上的私有存储库?

【问题讨论】:

  • 您可能希望将部署密钥添加到 Bitbucket(公共部分)并在 Heroku(私有部分)中使用。
  • 你能告诉我更多吗?
  • @Aerendir 你解决过这个问题吗???还是您放弃了使用heroku?大声笑...谢谢
  • 我使用名为 GemFury 的第三方服务解决了...
  • 谢谢...我希望使用密钥对来完成它...

标签: git heroku deployment ssh composer-php


【解决方案1】:

正确答案是使用COMPOSER_AUTH 作为直接在 Heroku 仪表板中设置的环境变量。

变量的值应该是这样的:

{
   "http-basic":{
      "bitbucket.org":{
         "username":"hello@aerendir.me",
         "password":"y0UrH4rdT0Gu3sSp4SsW0rd"
      }
   }
}

如果设置,Composer 将读取它并使用它的值连接到 BitBucket。

这是正确的方法,因为它是安全的,不会强迫您通过您使用(或将使用)构建和部署应用程序的各种服务在网络上传播密码。

参考资料:

COMPOSER_AUTH

【讨论】:

  • 缺点是明文密码。
  • 您必须在某处以明文形式设置它...直到您使用 API 密钥,但在这种情况下,您的 API 密钥无论如何都是明文形式并且可能被盗...这是您的责任确保环境变量的安全...
【解决方案2】:

让 https 与 composer 一起工作

  1. 您应该在 bitbucket 中创建身份验证令牌。
  2. 运行composer config -g github-oauth.github.com token

将服务器 ssh 密钥添加到 bitbucket

并改变 https://bitbucket.com/organisation/reponame.git

git@bitbucket.com:organisation/reponame.git

希望对你有帮助

【讨论】:

  • heroku 中的服务器 ssh 密钥是什么?
  • 请通过编辑为您的答案添加一些进一步的解释。如果配置在云服务器上运行,这一切如何运作?
【解决方案3】:

通过以下方式解决/规避了 Heroku 使用 Composer 在私有 BitBucket 存储库中安装依赖项的限制:

改变:

git@bitbucket.org:username/repository.git

在我的 composer.json 中:

https://bitbucket.org/username/repository.git

运行composer update --no-dev 时,Composer 会要求您提供用户名/密码组合以进行身份​​验证。 Next Composer 将让您将这些凭据保存在 /Users/username/.composer/auth.json 中,另请参阅:https://getcomposer.org/doc/articles/http-basic-authentication.md

选择“Y”以创建该文件。

现在将创建的auth.json 复制到您的项目文件夹中。使用 git 添加、提交并推送到 Heroku。

这对我有用,不幸的是auth.json 以纯文本形式存储您的密码,所以对我来说这不是一个理想的解决方案...

Heroku 有人监控这个问题吗?使用http://www.CloudControl.com 时,可以检查应用程序的详细信息,其中包括公钥。将其添加到 BitBucket 即可。要么让 Composer 正确使用可以添加到 Heroku 的公钥......

更新:直接在 composer.json 中

另一种选择是(简单地)在 composer.json 文件中包含一个部分,Heroku 使用该部分来安装依赖项。

"bitbucket-oauth": {
  "bitbucket.org": {
    "consumer-key": "key-goes-here",
    "consumer-secret": "secret-goes-here"
  }
}

另见

https://getcomposer.org/doc/06-config.md#bitbucket-oauth

【讨论】:

  • 看我的回答stackoverflow.com/a/52181522/1399706你的做法真的是错误和危险的!你需要使用环境变量!
  • 你是对的,我提到这个解决方案并不理想。在 2016 年,使用环境变量的方法还不存在。所以请大家不要使用我建议的方法!
猜你喜欢
  • 2011-04-23
  • 2022-06-30
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多