如何为Composer使用的git仓库提供访问权限?

7
为了管理我的库,我使用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"
    }
]

这个配置在Composer文档中有解释(即使没有Satis,也可以工作,除了在Heroku上的“问题”:)- 或其他云托管服务我想)。

有关身份验证的部分如下所述:

请注意,如果您的私有软件包托管在GitHub上,则您的服务器应该具有允许其访问这些软件包的ssh密钥,然后您应该将--no-interaction(或-n)标志添加到命令中,以确保它回退到ssh密钥身份验证而不是提示输入密码。这也是持续集成服务器的好技巧。

现在,问题有两个:

  1. BitBucket有部署密钥,但我也可以设置SSH密钥
  2. Heroku SSH密钥怎么样?

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


请问您能否告诉我更多信息? - Aerendir
@Aerendir,你解决了这个问题吗?还是放弃使用Heroku了?哈哈...谢谢 - Drmjo
我使用了一个叫做GemFury的第三方服务来解决这个问题... - Aerendir
将其移到了一个EC2实例上... 我已经学会了不要将某物用于其意图之外的地方(PHP)... - Drmjo
但这需要您生成或至少能够将当前密钥对移动到发出请求的服务器...我认为最好的解决方案是在开发或分阶段中解决并下载您的依赖项...然后创建/vendor目录的.zip或.tar文件,然后只需将其包含在服务器映像中...因为我不认为Heroku允许您将密钥上传到任何特定容器... - Drmjo
显示剩余5条评论
3个回答

4
正确答案是在Heroku仪表板中直接设置COMPOSER_AUTH作为环境变量。
变量的值应该类似于这样:
{
   "http-basic":{
      "bitbucket.org":{
         "username":"hello@aerendir.me",
         "password":"y0UrH4rdT0Gu3sSp4SsW0rd"
      }
   }
}

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

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

参考资料:

COMPOSER_AUTH


1
缺点是明文密码。 - robsch
1
你必须在某个地方以明文形式设置它... 直到你使用 API 密钥,但在这种情况下,你的 API 密钥无论如何都是以明文形式存在且可能会被盗...确保环境变量的安全责任在你身上... - Aerendir

-1
通过以下方法解决/规避了Heroku使用Composer在私有BitBucket存储库中安装依赖项的限制:
更改:
git@bitbucket.org:username/repository.git

在我的composer.json文件中:

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

运行composer update --no-dev时,Composer会要求您输入用户名/密码组合进行身份验证。接下来,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


2
请查看我的答案 https://dev59.com/so3da4cB1Zd3GeqP04Gj#52181522。你的方法真的是错误和危险的!你需要使用环境变量! - Aerendir
你是正确的,我也提到这个解决方案并不理想。在2016年,环境变量的方法还不存在。所以请大家不要使用我建议的方法! - Holtkamp

-1

使composer支持https

  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

希望能有所帮助

5
在Heroku中,服务器SSH密钥是什么? - Drmjo
请通过编辑您的答案添加一些进一步的解释。如果配置在云服务器上运行,所有这些是如何工作的? - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接