为了管理我的库,我使用Composer,所以我在composer.json
中设置依赖关系,然后添加(在composer.json
中)代码所在的私有存储库的远程地址。
当运行composer update/install
时,我被提示请求访问那些私有存储库的密钥。
现在,我正在尝试将Symfony 2应用程序部署到Heroku。
当Heroku试图从我的私有存储库下载包时,问题出现了:我如何向Heroku提供访问这些存储库的权限?
这是一个示例编写器。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密钥身份验证,而不是提示输入密码。这也是连续的一个好技巧集成服务器。
现在,问题是2:
- BitBucket有部署密钥,但我也可以设置SSH密钥。
- 什么关于Heroku的SSH密钥?
那么,我怎么能给Heroku访问我在BitBucket上的私有存储库?我如何从Heroku部署的composer install
命令下载托管在BitBucket上的私有存储库?
正确的答案是使用COMPOSER_AUTH
作为直接在Heroku仪表板中设置的环境变量。
变量的值应该是这样的:
{
"http-basic":{
"bitbucket.org":{
"username":"hello@aerendir.me",
"password":"y0UrH4rdT0Gu3sSp4SsW0rd"
}
}
}
如果设置了,Composer将读取它并使用它的值来连接BitBucket。
这是正确的方法,因为它是安全的,并且不会强迫你通过你使用(或将使用)的各种服务来构建和部署你的应用程序,使你的密码在网络上传播。
引用:
COMPOSER_AUTH
使用composer制作HTTPS作品
- 你应该在bitbucket中创建认证令牌。
- 运行
composer config -g github-oauth.github.com token
或
add server SSH key to bitbucket
和改变https://bitbucket.com/organisation/reponame.git
git@bitbucket.com:organisation/reponame.git
希望有所帮助
解决/绕过Heroku使用Composer在私有BitBucket存储库中安装依赖项的限制:
改变:
git@bitbucket.org:username/repository.git
在我的作曲家。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
以明文形式存储您的密码,所以对我来说这不是一个理想的解决方案…
UPDATE:直接在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