SlideShare a Scribd company logo
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

More Related Content

What's hot

Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
Andrey Markelov
 
Microservice architecture for Geo2Tag
Microservice architecture for Geo2TagMicroservice architecture for Geo2Tag
Microservice architecture for Geo2Tag
OSLL
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
Anton Ivanov
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
Andrey Markelov
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
CEE-SEC(R)
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkg
Andrey Fesenko
 
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Dmitry Savchenko
 
Docker 1.9
Docker 1.9Docker 1.9
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
DevGAMM Conference
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
IT-Доминанта
 
Netty jprof 2019_pdf
Netty jprof 2019_pdfNetty jprof 2019_pdf
Netty jprof 2019_pdf
Andrey Mizurov
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
OSLL
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
Nikolay Samokhvalov
 
Сергей Рыжиков, Александр Сербул (1С-Битрикс)
Сергей Рыжиков, Александр Сербул (1С-Битрикс)Сергей Рыжиков, Александр Сербул (1С-Битрикс)
Сергей Рыжиков, Александр Сербул (1С-Битрикс)Ontico
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
Andrey Markelov
 
Git для новичков
Git для новичковGit для новичков
Git для новичковSoftline
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5
OdessaFrontend
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
Сергей Ладыгин
 

What's hot (19)

Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
 
Microservice architecture for Geo2Tag
Microservice architecture for Geo2TagMicroservice architecture for Geo2Tag
Microservice architecture for Geo2Tag
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkg
 
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
Code Sharing - Как мы пришли к Unity Package Manager / Станислав Коротаев (Ba...
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Netty jprof 2019_pdf
Netty jprof 2019_pdfNetty jprof 2019_pdf
Netty jprof 2019_pdf
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
Сергей Рыжиков, Александр Сербул (1С-Битрикс)
Сергей Рыжиков, Александр Сербул (1С-Битрикс)Сергей Рыжиков, Александр Сербул (1С-Битрикс)
Сергей Рыжиков, Александр Сербул (1С-Битрикс)
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
 

Viewers also liked

Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
Symfoniacs
 
The Keystone Experience
The Keystone ExperienceThe Keystone Experience
The Keystone Experience
Kevin Fu
 
CV
CVCV
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
Symfoniacs
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
srinagarindra the princess mother school kanchanaburi
 
Environment isolation with Docker (Alex Medvedev, Alpari)
Environment isolation with Docker (Alex Medvedev, Alpari)Environment isolation with Docker (Alex Medvedev, Alpari)
Environment isolation with Docker (Alex Medvedev, Alpari)
Symfoniacs
 
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอนโครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
srinagarindra the princess mother school kanchanaburi
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
srinagarindra the princess mother school kanchanaburi
 
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Symfoniacs
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Symfoniacs
 
การเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษาการเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษา
srinagarindra the princess mother school kanchanaburi
 
PMI Project Management Framework
PMI Project Management FrameworkPMI Project Management Framework
PMI Project Management Framework
Aarti Dahiya PMP
 
بناء وإدارة فرق العمل
 بناء وإدارة فرق العمل بناء وإدارة فرق العمل
بناء وإدارة فرق العمل
استشاري تدريب / محمود عوده
 
دورة بناء قدرات ومهارات العاملين على التواصل الفعال
دورة بناء قدرات ومهارات العاملين على التواصل الفعالدورة بناء قدرات ومهارات العاملين على التواصل الفعال
دورة بناء قدرات ومهارات العاملين على التواصل الفعال
استشاري تدريب / محمود عوده
 
دورة بناء وإدارة فرق العمل
دورة بناء وإدارة فرق العملدورة بناء وإدارة فرق العمل
دورة بناء وإدارة فرق العمل
استشاري تدريب / محمود عوده
 
Adw #15 : Les RP à l'heure du 2.0
Adw #15 : Les RP à l'heure du 2.0Adw #15 : Les RP à l'heure du 2.0
Adw #15 : Les RP à l'heure du 2.0
Atlantic 2.0
 
Loi de sécurisation de l'emploi
Loi de sécurisation de l'emploi Loi de sécurisation de l'emploi
Loi de sécurisation de l'emploi
Groupe Alpha
 

Viewers also liked (17)

Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
Решение вопросов сквозной функциональности в приложениях (Александр Лисаченко...
 
The Keystone Experience
The Keystone ExperienceThe Keystone Experience
The Keystone Experience
 
CV
CVCV
CV
 
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
Асинхронные запросы в MySQL или когда PDO становится мало (Максим Попов, Mail...
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
 
Environment isolation with Docker (Alex Medvedev, Alpari)
Environment isolation with Docker (Alex Medvedev, Alpari)Environment isolation with Docker (Alex Medvedev, Alpari)
Environment isolation with Docker (Alex Medvedev, Alpari)
 
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอนโครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)Enterprise symfony architecture (Alexander Lisachenko, Alpari)
Enterprise symfony architecture (Alexander Lisachenko, Alpari)
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
 
การเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษาการเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษา
 
PMI Project Management Framework
PMI Project Management FrameworkPMI Project Management Framework
PMI Project Management Framework
 
بناء وإدارة فرق العمل
 بناء وإدارة فرق العمل بناء وإدارة فرق العمل
بناء وإدارة فرق العمل
 
دورة بناء قدرات ومهارات العاملين على التواصل الفعال
دورة بناء قدرات ومهارات العاملين على التواصل الفعالدورة بناء قدرات ومهارات العاملين على التواصل الفعال
دورة بناء قدرات ومهارات العاملين على التواصل الفعال
 
دورة بناء وإدارة فرق العمل
دورة بناء وإدارة فرق العملدورة بناء وإدارة فرق العمل
دورة بناء وإدارة فرق العمل
 
Adw #15 : Les RP à l'heure du 2.0
Adw #15 : Les RP à l'heure du 2.0Adw #15 : Les RP à l'heure du 2.0
Adw #15 : Les RP à l'heure du 2.0
 
Loi de sécurisation de l'emploi
Loi de sécurisation de l'emploi Loi de sécurisation de l'emploi
Loi de sécurisation de l'emploi
 

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

Git for you
Git for youGit for you
Git for you
Pavel Alexeev
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
corehard_by
 
Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2
Elogic Magento Development
 
Git presentation
Git presentationGit presentation
Git presentation
Alexandr Babenko
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
DrupalSib
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Менеджер пакетов NuGet
Менеджер пакетов NuGetМенеджер пакетов NuGet
Менеджер пакетов NuGet
GetDev.NET
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
«Composer vs. копипаст модулей битрикса из проекта в проект»
«Composer vs. копипаст модулей битрикса из проекта в проект» «Composer vs. копипаст модулей битрикса из проекта в проект»
«Composer vs. копипаст модулей битрикса из проекта в проект»
Гузель Рахимова
 
Начало работы с Git (версия 2016)
Начало работы с Git (версия 2016)Начало работы с Git (версия 2016)
Начало работы с Git (версия 2016)
Андрей Кухаренко
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machine
Return on Intelligence
 
Git, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентомGit, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентом
Alex Musayev
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
Александр Сигачев
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
StackLight (aka LMA)
StackLight (aka LMA)StackLight (aka LMA)
StackLight (aka LMA)
OpenStackRussia
 

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

Git for you
Git for youGit for you
Git for you
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2
 
Git presentation
Git presentationGit presentation
Git presentation
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Менеджер пакетов NuGet
Менеджер пакетов NuGetМенеджер пакетов NuGet
Менеджер пакетов NuGet
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
«Composer vs. копипаст модулей битрикса из проекта в проект»
«Composer vs. копипаст модулей битрикса из проекта в проект» «Composer vs. копипаст модулей битрикса из проекта в проект»
«Composer vs. копипаст модулей битрикса из проекта в проект»
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Начало работы с Git (версия 2016)
Начало работы с Git (версия 2016)Начало работы с Git (версия 2016)
Начало работы с Git (версия 2016)
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machine
 
Git, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентомGit, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентом
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
StackLight (aka LMA)
StackLight (aka LMA)StackLight (aka LMA)
StackLight (aka LMA)
 

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
  • 4. Зеркалирование вендорского кода Недоступность github.com не должно останавливать сборку приложений 4
  • 6. Где регистрировать пакеты? ● https://packagist.org ● Satis ● Toran Proxy ● Local Packagist 6
  • 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
  • 13. 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
  • 14. Packagist: сбор метаданных пакетов ComposerRepositoryRepositoryInterface VcsRepository PearRepository ... ComposerRepositoryVcsVcsDriverInterface ...SvnDriverGitDriver GitHubDriver GitBitbucketDriver GitLabDriver 14
  • 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) Software Architect at Alpari alex.medwedew@gmail.com Twitter: @alex_medwedew https://github.com/fduch