Как предоставить доступ к репозиторию git, который используется Composer

для управления моими библиотеками я использую 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"
    }
]

эта конфигурация объясняется в документации композитора (он работает также без Satis, за исключением "проблемы" с Heroku :) - или другим облачным хостингом, я думаю).

там, об афинянстве, объясняется:

обратите внимание, что если ваши личные пакеты размещены на GitHub, ваш сервер должен иметь ключ ssh, который дает ему доступ к этим пакетам, и затем вы должны добавить флаг --no-interaction (или-n) в команду чтобы убедиться, что он возвращается к аутентификации ключа ssh вместо запрос пароля. Это также хороший трюк для непрерывного сервер интеграции.

теперь, вопросы 2:

  1. BitBucket имеет ключи развертывания но я также могу установить SSH ключ.
  2. что о Heroku SSH ключи?

Итак, как я могу дать Heroku доступ к моим частным репозиториям на BitBucket? как я могу загрузить частные репозитории, размещенные на BitBucket из composer install команда, которую Heroku делает при развертывании?

3 ответов


правильный ответ, используя COMPOSER_AUTH в качестве переменной среды, установленной непосредственно в Heroku dashboard.

значение переменной должно быть примерно таким:

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

Если установлено, Composer прочитает его и использует его значение для подключения к BitBucket.

это правильный подход, поскольку он безопасен и не заставляет вас делать ваши пароли в интернете через различные службы, которые вы используете (или будете использовать) для создания и развертывания приложение.

ссылки:

COMPOSER_AUTH


разрешено / обошло это ограничение Heroku использования Composer для установки зависимостей в частных репозиториях BitBucket:

изменения:

git@bitbucket.org:username/repository.git

в мой композитор.json to:

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

при работе composer update --no-dev, 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, и это сработает. Либо это, либо композитор правильно использует открытые ключи, которые можно добавить в 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


чтобы сделать https работает с composer

  1. вы должны создать токен auth в bitbucket.
  2. выполнить composer config -g github-oauth.github.com token

или

добавить ключ ssh сервера в bitbucket

и изменить https://bitbucket.com/organisation/reponame.git

to

git@bitbucket.com:organisation/reponame.git

надеюсь, что это помогает