如何提供对 Composer 使用的 git 存储库的访问

How to provide access to a git repository that is used by Composer

为了管理我的库,我使用 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 的情况下也可以工作,除了 "problem" 与 Heroku :) - 或我认为的其他云托管)。

那里,关于认证,有说明:

Note that if your private packages are hosted on GitHub, your server should have an ssh key that gives it access to those packages, and then you should add the --no-interaction (or -n) flag to the command to make sure it falls back to ssh key authentication instead of prompting for a password. This is also a good trick for continuous integration servers.

现在,问题是 2:

  1. BitBucket 有 deployment keys but I can also set a SSH key.
  2. 什么 关于 Heroku SSH keys?

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

使 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

希望对您有所帮助

Resolved/circumvented 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 时,可以检查应用程序的详细信息,其中包括一个 public 密钥。将它添加到 BitBucket 中,它就可以工作了。或者让 Composer 正确使用可以添加到 Heroku 的 public 键...

更新:直接在 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

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

变量的值应该是这样的:

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

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

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

参考文献:

COMPOSER_AUTH