composer & docker: Установка пакета из закрытого репозитория (private git repository)
Primary tabs
Суть вопроса
Нужен способ сделать следующее:
- Установить внутри контейнера (по сценарию в Dockerfile) пакет, который ходится в приватном репозитории (на гитхабе или битбакете)
Т.е. перед этим у вас уже должен быть:
- Приватный (закрытый) репозиторий с каким-то кодом (который вы хотите использовать с помощью композера)
Этот репозиторий должен быть указан в списке пакетов вашего проекта (подобно тому как в SimpleMVC мы работаем с открытыми репозиториями - для этого используют VCS-репозитории явно указывая их http адреса)
- Проект в докере (см. пример Dockerfile)
- Возможно пригодится умение создавать ключ для деплоя (deployment key) - который дает права только на чтение репозитория
Возможное решение
Подсказка: скорее всего придется использовать какой-то ключ-токен (deployment key), который будет лежать в ~/.ssh контейнера, а браться из какого-нибудь .env файла в проекте (или как-то еще) - т.е. контейнер должен быть сконфигурирован подобно тому, как мы настраиваем доступ ssh в линуксе из обычной ОС, тут надо поискать в Сети
(нужно описать)
Пример решения для GitHub
Перейти по адресу https://github.com/settings/tokens/new, добавить описание в поле Note, отметить галочкой repo, далее "Generate token". Токен будет находиться в файле /home/пользователь/.config/composer/auth.json и представлять собой строку вида ghp_BsULl5l8PxYo5RGTPG2mTZVpbgs3AJ2s8jZR.
Добавить/дополнить в composer.json докер-проекта секции для подключения приватной библиотеки:
{ "require": { "my_repo/repo-test": "dev-main" }, "config": { "github-oauth": { "github.com": "шаблон" } }, "repositories": [ { "type": "vcs", "url": "git@ github.com:user450870ut/repo-test.git" } ] }
Перед выполнением команд composer install или composer update my_repo/repo-test необходимо в строке 7 заменить шаблон на токен, полученный от владельца приватной библиотеки.
Пример решения для Bitbucket
Перейти по адресу https://bitbucket.org/account/workspaces/, напротив рабочего пространства с нужным репозиторием выбрать Manage, слева прокрутить меню и выбрать OAuth consumers, Add consumer, заполнить поля:
- Name - любое имя
- Callback URL - http://example.com
- This is a private consumer - отметить галочкой
- Repositories - отметить галочкой Read, как минимум, для чтения библиотеки
далее Save. Выбрать созданного пользователя, понадобятся значения полей Key (например SRBGrDsNhdj3lUNGK6) и Secret (например UHwdPM3XRUPr6kDPPVtOEgeYZuBxyhnq).
Для подключения приватной библиотеки к своему проекту необходимо на одном уровне с composer.json создать файл auth.json с содержимым вида:
{ "bitbucket-oauth": { "bitbucket.org": { "consumer-key": "Key", "consumer-secret": "Secret" } } }
где значения полей "consumer-key" и "consumer-secret" - значения Key и Secret соответственно, в описании выше, от владельца приватного репозитория. Далее необходимо исключить этот файл из контроля версий, добавив его в .gitignore.
Добавить/дополнить в composer.json докер-проекта секции для подключения приватной библиотеки:
{ "require": { "my_repo/repo-test": "dev-master" }, "repositories": [ { "type": "vcs", "url": "https ://bitbucket.org/my-private-workspace/repo-test.git" } ] }
Правильный "url" (без пробела в примере) для файла-манифеста можно получить, перейдя на главную страницу приватного репозитория, выбрав Clone->HTTPS (изначально получим строку вида "git clone https://User555@bitbucket.org/my-private..."), удалив git clone и User555@. В поле "type" кроме значения "vcs" также подойдет "bitbucket" и "git".
Источники
- Best practice on running a package installer inside Docker with a private repository: https://stackoverflow.com/questions/6721...
- Composer hidden Token: https://stackoverflow.com/questions/3540...
- Composer docs: https://getcomposer.org/doc/articles/aut...
- Log in to post comments
- 517 reads
NewDeveloper
Wed, 02/28/2024 - 14:18
Permalink
Добавил примеры
Добавил примеры решения для GitHub и Bitbucket.