enterprise-инфраструктура менеджмента php-пакетов в рамках...
TRANSCRIPT
Enterprise-инфраструктура менеджмента php-пакетов в
рамках компании
Alex Medvedev (fduch)
Software Architect at Alpari
1
Starter pack
● Приложения с зависимостями в виде git submodules
● Вендорские пакеты с github.com● Приватные пакеты на своем сервере Git c
Web-интерфейсом Gitweb и авторизацией на базе Gitolite.
2
Зеркалирование вендорского кода
Недоступность github.com не должно останавливать сборку приложений
4
Где регистрировать пакеты?
● https://packagist.org● Satis● Toran Proxy● Local Packagist
6
Composer-репозиторий пакетов
● Composer-репозиторий - хранилище метаданных пакетов● Метаданные пакета - служебная информация о пакете, используемая
Composer-ом для резолвинга и установки зависимостей● Любой Composer-репозиторий собирает метаданные пакетов в виде
статических файлов доступных извне(например, https://packagist.org/packages.json)
● Метаданные включают информацию о том, откуда клонировать пакет и откуда скачивать снепшоты тегов (source и dist секции)
● Для поддержки Gitweb нам нужен Composer-репозиторий пакетов, собирающий метаданные, в которых source и dist-секции указывают на
Gitweb
8
Satis
+ Open-source - приложение на Symfony2+ Позволяет сгенерировать метаданные на основе заданных в конфиге урлов
vcs-репозиториев, в которых лежит исходный код пакетов± Позволяет предварительно сдампить dist-ы для описанных пакетов (могут
занимать много места в случае большого количества пакетов)− Неудобен для большой компании− Нет возможности указать специальные паттерны урлов (в нашем случае
Gitweb) для заполнения dist-секций
9
Toran Proxy
+ Satis на стероидах+ Веб-интерфейс и API для управления списком vcs-репозиториев с
исходным кодом+ Менеджмент пакетов через веб-интерфейс+ Проксирование других Composer-репозиториев − Платное решение− Нет возможности указать специальные паттерны урлов (в нашем
случае Gitweb) для заполнения dist-секций
10
Локальный Packagist
+ Opensource - приложение на Symfony2+ Система управления мейнтейнерами пакетов+ Удобный интерфейс добавления/редактирования пакетов+ Статистика скачиваний− Минималистичная документация− Самое тяжеловесное решение− Нет возможности указать специальные паттерны урлов (в нашем
случае Gitweb) для заполнения dist-секций. Поддерживаются только Github, Bitbucket и Gitlab (c надавних пор)
11
Packagist в разрезе
Package management UI
Package indexing and search
User management
Package installation statistics
Composer repository implementation
Metadata dumping layer
Metadata persistence layerMetadata collector
13
Packagist: сбор метаданных пакетов
Composer\Repository\RepositoryInterface
VcsRepository PearRepository ...
Composer\Repository\Vcs\VcsDriverInterface
...SvnDriverGitDriver GitHubDriver GitBitbucketDriver GitLabDriver
14
Обновление метаданных приватных пакетов по push-у в репозиторий
● Пришлось допилить ApiController в Packagist для приема payload-а от хуков, отличных от GitHub и Bitbucket (сейчас поддерживаются любые хуки из коробки)
● Написали post-receive-хук для обновления в локальном Packagist метаданных в момент push-а изменений в
репозиторий
17
Локальный Packagist: Tips & Tricks
1. Статистика скачиваний (cron): app/console packagist:stats:compile --no-debug --env=prod
2. Подключение локального Packagist для всех проектов:composer config --global repositories.packagist_local https://packagist.local
3. Отключение центрального Packagist в проекте:{ "repositories": [ { "packagist": false } ]}
4. Packagist over SSL. Не забудьте выписать сертификат и положить СA-сертификаты на машинах, где работает composer
18
Basic-аутентификация в Composer-инфраструктуре. Зачем?
● Ограничение доступа к Composer-репозиторию
● Ограничение доступа к dist-ам пакетов
19
Basic-аутентификация по netrc
● auth.json - лишнее место, где вы храните пароль в открытом виде
● Альтернатива - плагин для composer для Basic-аутентификации: https://github.com/fduch/composer-netrc-auth-plugin
(на базе netrc-парсера https://github.com/fduch/netrc)
20
Спасибо!
21
Alex Medvedev (fduch)
Software Architect at Alpari
Twitter: @alex_medwedew
https://github.com/fduch