enterprise-инфраструктура менеджмента php-пакетов в рамках...

21
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании Alex Medvedev (fduch) Software Architect at Alpari 1

Upload: eugeny-fomin

Post on 20-Jan-2017

198 views

Category:

Software


1 download

TRANSCRIPT

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 layerMetadata collector

13

Packagist: сбор метаданных пакетов

Composer\Repository\RepositoryInterface

VcsRepository PearRepository ...

Composer\Repository\Vcs\VcsDriverInterface

...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

[email protected]

Twitter: @alex_medwedew

https://github.com/fduch