04 Апр 2015
Недавно мы корректно подружили composer и битрикс. Сегодня мы поделимся с вами этой методикой и интересным рассказом как можно заработать денег.
Все что будет сказано ниже - это слова о способе установки модулей Битрикса.
Вообще говоря существует четыре хороших варианта как модули могут попадать к клиентам. Композер - это такой же способ, как и установка через маркетплейс битрикс.
Каждый из способов имеет свои достоинства и недостатки
маркетплейс битрикс | композер | ручная установка | гипотетический свой маркетплейс | |
распространение решений | готовая платформа распространения (хотя есть нарекания) | packagist.org github VCS | нет | нужно создавать и развивать |
коммерческие решения | возможность продажи | считается, что здесь невозможно (хотя это не так) | - | да |
opensource | нет возможностей совместной работы | да | нет | нет или да |
автоматизация | нет | есть зависимости, автоматизация, совместная работа | нет | зависит от вас |
нужна квалификация для использования | нет | да | да | нет |
Не так давно добрая душа написала расширение под композер чтобы тот понимал Битрикс. Установка пакетов теперь совсем проста.
Логично предположим, что у вас есть проект. Вам надо сделать три вещи:
- установить композер
- сочинить специальный файл composer.json
- добавить папки которые сгенерирует композер в игнор в контроле версий все, вы великолепны! Скажите композеру обновиться и он стянет все нужные пакеты.
Рассмотрим подробнее и на примерах как это происходит.
Слово "установка" означает, что его надо скачать и запустить из консоли. Так:
php composer.phar
Покажет вам что композер готов к работе и даст хелп по использованию оного:
Выполнение всех команд аналогично.
Композер нужно положить в проекте, или с помощью .bashrc сделать его запуск удобным.
В интернете можно найти море подробной информации об использовании composer. Можете научиться его запускать на любом примере и потом уже переходить к битриксу.
Если Вы положите composer.phar в корень сайта, не забудьте закрыть к нему доступ в .htaccess
Этот файл должен лежать в корне проекта по соседству с composer.phar. В файлике мы описываем: что у нас за проект (описание нужно людям, а не машинам), и какие пакеты (модули) нам нужны. Для того чтобы вы могли провести тесты, мы подготовили репозиторий на гитхабе который вы можете подключить:
https://github.com/bitrix-expert/bex.d7dull
И готовый composer.json
https://gist.github.com/may-cat/75cd2b461584b50f1635
- к слову вы можете подключать и корпоративные, скрытые от всего мира репозитории, по ссылке приведён пример подобного подключения.
Обратите внимание что при подключении приватного репозитория нужно будет корректно настроить доступ по ssh для git.
Это обязательное условие, чтобы не превращать корневой репозиторий в кашу. В том и смысл композера - подтягивать свежие версии софта а в корневом репозитории хранить только список нужных пакетов.
Так делает например yii, игнорируя папку vendor:
https://github.com/yiisoft/yii2-app-basic/blob/master/.gitignore
И так
https://gist.github.com/may-cat/e667d81b16c9656435db
Должны сделать и мы. Убедитесь что создаваемые папки не попадут в ваш репозиторий.
Набираем php composer.phar update и наслаждаемся тем как композер подтянул модули из публичных и приватных репозиториев.
Для того, чтобы Ваш модуль мог быть устанавливаем через композер, у него в корне должен лежать файл composer.json со специальной разметкой, которая расскажет о модуле и его зависимостях.
Пример подобного описания можно посмотреть в нашем модуле
https://github.com/bitrix-expert/bex.d7dull/blob/master/composer.json
или в любом другом решении, коеих в интернете море.
Как Вы можете заметить, основная идея в том, чтобы каждый модуль выполнял свою задачу, но делал её хорошо. И чтобы эти модули можно было связывать друг с другом благодаря зависимостям.
"Но как же апдейты?! Как же изменения в базе данных?!" - воскликнет внимательный читатель.
Апдейты вообще, и изменения в базе данных в частности при использовании данной схемы не сложнее, чем сравнение двух чисел. Одно число - это номер ожидаемой версии базы данных. Это число находится в файлах, которые подтягиваются через git.
Второе число - это номер актуальной версии базы данных, которое хранится в самой базе данных.
Сравнив два числа во время подключения модуля (то есть в файле include.php этого модуля) мы можем делать вывод о том, запускать ли модуль или пора выкидывать исключение и звать админа, неправильно настроившего сайт.
Соответственно, сам модуль, в административном разделе должен предоставлять интерфейс для собственного обновления. Где будут лежать обновления, как он будет их применять - остаётся на совести разработчика модуля.
Но всё это - несовершенные технологии.
Представьте себе, ведь Вы можете озвучить свои требования по поводу того, как должны размещаться обновления базы данных (в каких файлах, папочках и с какими пометками), и сделать какие-то общие скрипты, которые будут заниматься выкачиванием обновлений (т.е. сделают git pull) и запуском скриптов обновлений.
По сути мы приходим к идее своего маркетплейса.
На существующий маркетплейс есть нарекания, которые сама Компания игнорирует - у неё своя политика.
Ничего (включая юридическую сторону вопроса) не мешает сделать модуль, который будет ходить куда-то за списком доступных решений, и заниматься магией обновлений.
К слову, маркетплейс Битрикса работает примерно так же.
Сложность тут, конечно, не в технической стороне вопроса: можно сделать и покупку доступа к исходникам, и автоматизированный контроль качества, и много чего ещё.
Авторам нового маркетплейса предстоит провести титаническую работу по отбору качественных решений и по популяризации оной площадки среди конечных потребителей.
Однако, тут как никогда к месту две поговорки, авторство которых приписывается евреям:
"Если для решения проблемы нужно потратить деньги - то это не проблема, а расходы", и "если потратив какую-то сумму денег, ты заработаешь больше денег, то это не траты - это инвестиции".
Мы выступаем за популяризацию платформы, за повышение уровня квалификации разработчиков и за их совместную работу над этим самым качеством.
Без вложений в opensource это невозможно. И пусть Битрикс - это прежде всего корпоративное решение, но пусть NDA и зашоренность коммерсантов не становятся препятствием для развития технологий.
Больше решений - хороших и лучших!