Enterprise-инфраструктура
менеджмента php-пакетов в
рамках компании
Alex Medvedev (fduch)
Software Architect at Alpari
1
Starter pack
● Приложения с зависимостями в виде git
submodules
● Вендорские пакеты с github.com
● Приватные пакеты на своем сервере Git c
Web-интерфейсом Gitweb и авторизацией на
базе Gitolite.
2
GitWeb
3
Зеркалирование вендорского кода
Недоступность github.com не
должно останавливать сборку
приложений
4
Переезд на Composer
5
Где регистрировать пакеты?
● https://packagist.org
● Satis
● Toran Proxy
● Local Packagist
6
Packagist.org
Невозможно зарегистрировать приватный пакет
7
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
12
Packagist в разрезе
Package management UI
Package indexing and search
User management
Package installation statistics
Composer repository implementation
Metadata dumping layer
Metadata persistence layer
Metadata collector
13
Packagist: сбор метаданных пакетов
ComposerRepositoryRepositoryInterface
VcsRepository PearRepository ...
ComposerRepositoryVcsVcsDriverInterface
...SvnDriverGitDriver GitHubDriver GitBitbucketDriver GitLabDriver
14
Форк Packagist: создание GitWebDriver
15
GitWebDriver
16
Обновление метаданных приватных пакетов по
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
alex.medwedew@gmail.com
Twitter: @alex_medwedew
https://github.com/fduch

Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей Медведев, Alpari )

  • 1.
    Enterprise-инфраструктура менеджмента php-пакетов в рамкахкомпании Alex Medvedev (fduch) Software Architect at Alpari 1
  • 2.
    Starter pack ● Приложенияс зависимостями в виде git submodules ● Вендорские пакеты с github.com ● Приватные пакеты на своем сервере Git c Web-интерфейсом Gitweb и авторизацией на базе Gitolite. 2
  • 3.
  • 4.
    Зеркалирование вендорского кода Недоступностьgithub.com не должно останавливать сборку приложений 4
  • 5.
  • 6.
    Где регистрировать пакеты? ●https://packagist.org ● Satis ● Toran Proxy ● Local Packagist 6
  • 7.
  • 8.
    Composer-репозиторий пакетов ● Composer-репозиторий- хранилище метаданных пакетов ● Метаданные пакета - служебная информация о пакете, используемая Composer-ом для резолвинга и установки зависимостей ● Любой Composer-репозиторий собирает метаданные пакетов в виде статических файлов доступных извне (например, https://packagist.org/packages.json) ● Метаданные включают информацию о том, откуда клонировать пакет и откуда скачивать снепшоты тегов (source и dist секции) ● Для поддержки Gitweb нам нужен Composer-репозиторий пакетов, собирающий метаданные, в которых source и dist-секции указывают на Gitweb 8
  • 9.
    Satis + Open-source -приложение на Symfony2 + Позволяет сгенерировать метаданные на основе заданных в конфиге урлов vcs-репозиториев, в которых лежит исходный код пакетов ± Позволяет предварительно сдампить dist-ы для описанных пакетов (могут занимать много места в случае большого количества пакетов) − Неудобен для большой компании − Нет возможности указать специальные паттерны урлов (в нашем случае Gitweb) для заполнения dist-секций 9
  • 10.
    Toran Proxy + Satisна стероидах + Веб-интерфейс и API для управления списком vcs-репозиториев с исходным кодом + Менеджмент пакетов через веб-интерфейс + Проксирование других Composer-репозиториев − Платное решение − Нет возможности указать специальные паттерны урлов (в нашем случае Gitweb) для заполнения dist-секций 10
  • 11.
    Локальный Packagist + Opensource- приложение на Symfony2 + Система управления мейнтейнерами пакетов + Удобный интерфейс добавления/редактирования пакетов + Статистика скачиваний − Минималистичная документация − Самое тяжеловесное решение − Нет возможности указать специальные паттерны урлов (в нашем случае Gitweb) для заполнения dist-секций. Поддерживаются только Github, Bitbucket и Gitlab (c надавних пор) 11
  • 12.
  • 13.
    Packagist в разрезе Packagemanagement UI Package indexing and search User management Package installation statistics Composer repository implementation Metadata dumping layer Metadata persistence layer Metadata collector 13
  • 14.
    Packagist: сбор метаданныхпакетов ComposerRepositoryRepositoryInterface VcsRepository PearRepository ... ComposerRepositoryVcsVcsDriverInterface ...SvnDriverGitDriver GitHubDriver GitBitbucketDriver GitLabDriver 14
  • 15.
  • 16.
  • 17.
    Обновление метаданных приватныхпакетов по push-у в репозиторий ● Пришлось допилить ApiController в Packagist для приема payload-а от хуков, отличных от GitHub и Bitbucket (сейчас поддерживаются любые хуки из коробки) ● Написали post-receive-хук для обновления в локальном Packagist метаданных в момент push-а изменений в репозиторий 17
  • 18.
    Локальный 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
  • 19.
    Basic-аутентификация в Composer-инфраструктуре.Зачем? ● Ограничение доступа к Composer- репозиторию ● Ограничение доступа к dist-ам пакетов 19
  • 20.
    Basic-аутентификация по netrc ●auth.json - лишнее место, где вы храните пароль в открытом виде ● Альтернатива - плагин для composer для Basic- аутентификации: https://github.com/fduch/composer- netrc-auth-plugin (на базе netrc-парсера https://github.com/fduch/netrc) 20
  • 21.
    Спасибо! 21 Alex Medvedev (fduch) SoftwareArchitect at Alpari alex.medwedew@gmail.com Twitter: @alex_medwedew https://github.com/fduch