Как предоставить доступ к репозиторию git, используемому 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://[email protected]/Aerendir/private-package"
}
]
Эта конфигурация описана в документации композитора (она также работает без Satis, за исключением "проблемы" с Heroku:) - или другого облачного хостинга, я думаю).
Там, об афинизации, объясняется:
Обратите внимание, что если ваши личные пакеты размещены на GitHub, ваш сервер должен иметь ssh-ключ, который дает ему доступ к этим пакетам, и затем вы должны добавить флаг --no-interaction (или -n) в команду , чтобы убедиться, что она возвращается к аутентификации по ключу ssh вместо запроса пароля. Это также хороший трюк для серверов непрерывной интеграции.
Теперь вопросы 2:
- В bitbucket есть ключи развертывания , но я также могу установить ключ SSH.
- Как насчет SSH-ключей Heroku?
Итак, как я могу предоставить Героку доступ к моему частные репозитории на BitBucket?
Как я могу загрузить частные репозитории, размещенные на BitBucket, с помощью команды composer install
, которую Heroku выполняет при развертывании?
3 answers
Правильный ответ - использовать COMPOSER_AUTH
в качестве переменной среды, установленной непосредственно на панели управления Heroku.
Значение переменной должно быть примерно таким:
{
"http-basic":{
"bitbucket.org":{
"username":"[email protected]",
"password":"y0UrH4rdT0Gu3sSp4SsW0rd"
}
}
}
Если задано, Composer прочитает его и использует его значение для подключения к BitBucket.
Это правильный подход, поскольку он безопасен и не заставляет вас распространять свои пароли в Интернете с помощью различных сервисов, которые вы используете (или будете использовать) для создания и развертывания вашего приложение.
Ссылки:
Устранено/обойдено это ограничение Heroku использования Composer для установки зависимостей в частных репозиториях BitBucket с помощью:
Изменение:
[email protected]:username/repository.git
В моем файле composer.json для:
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 работал с композитором
- вы должны создать токен аутентификации в bitbucket.
- выполнить
composer config -g github-oauth.github.com token
Или
Добавить ssh-ключ сервера в bitbucket
И изменить
https://bitbucket.com/organisation/reponame.git
До
[email protected]:organisation/reponame.git
Надеюсь, это поможет