composer & docker: Установка пакета из закрытого репозитория (private git repository)

Суть вопроса

Нужен способ сделать следующее:

  • Установить внутри контейнера (по сценарию в Dockerfile) пакет, который ходится в приватном репозитории (на гитхабе или битбакете)

Т.е. перед этим у вас уже должен быть:

  1. Приватный (закрытый) репозиторий с каким-то кодом (который вы хотите использовать с помощью композера)

    Этот репозиторий должен быть указан в списке пакетов вашего проекта (подобно тому как в SimpleMVC мы работаем с открытыми репозиториями - для этого используют VCS-репозитории явно указывая их http адреса)

  2. Проект в докере (см. пример Dockerfile)
  3. Возможно пригодится умение создавать ключ для деплоя (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, заполнить поля:

  1. Name - любое имя
  2. Callback URL - http://example.com
  3. This is a private consumer - отметить галочкой
  4. 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".

Источники

Key Words for FKN + antitotal forum (CS VSU):

Добавил примеры решения для GitHub и Bitbucket.