Ensi ELC workspace
Конфигурация воркспейса ELC для разработки сервисов Ensi.
Установка
Клонируем воркспейс в удобное для вас место, однако если вы работаете под Windows, то клонировать воркспейс необходимо внутрь WSL.
git clone git@github.com:ensi-platform/elc-workspace.git ~/work/ensi/workspace
Создаём сеть для проекта
docker network create ensi
Регистрируем воркспейс (важно указать полный путь, а не относительный)
elc workspace add ensi ~/work/ensi/workspace
Выполняем скрипт инициализации
cd ~/work/ensi/workspace
./scripts/init
./scripts/create-dbs
Копируем файл env.example.yaml, даём ему имя env.yaml, обязательно задаём переменные
APPS_ROOT: /home/<user>/work/ensi/apps
PACKAGES_PATH: /home/<user>/work/ensi/packages
Далее необходимо клонировать код сервисов и библиотек. Сделать это можно так же через elc.
Можно выборочно клонировать нужные вам сервисы по имени
elc clone catalog-pim orders-oms
либо клонировать сразу все репозитории по тэгу
elc clone --tag=app # клоинровать только сервисы
elc clone --tag=lib # клонировать только пакеты
elc clone --tag=code # клонировать все репозитории с кодом: и сервисы и пакеты
Клонировать пакеты необходимо только если вы собираетесь их редактировать. По умолчанию, пакеты устанавливаются вместе с остальными зависимостями сервиса через composer.
Подготовка сервисов к запуску
При клонировании сервиса командой elc clone
автоматически выполняется скрипт, который устанавливает зависимости сервиса,
поэтому дополнительно ничего делать не нужно.
Если же вы клонировали сервисы другим способом или с опцией --no-hook
, то перед запуском сервиса следует выполнить следующие команды:
elc set-hooks .git_hooks
elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app npm install
elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app composer install
cp .env.example .env
elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app php artisan key:generate
elc restart
Бэк-сервисы работают на laravel octane, и в режиме разработки запускаются через chokidar - программу, которая следит за изменением кода и перезапускает сервер. Пока не будут установлены зависимости, сервис не сможет отвечать на запросы и будет выдавать 502 ошибку.
Разработка composer пакетов
Для работы над пакетами используется плагин franzliedke/studio. Его нужно установить композером воркспейса, т.е. в любом сервисе выполняем
elc composer global require franzl/studio
Этот инструмент позволяет делать симлинки на пакеты, чтобы можно было одновременно править код и сервиса и пакета.
Разрабатываемые пакеты (например клиенты к другим сервисам) должны лежать в папке packages
- она монтируется во все бэк-севрисы ensi.
Регистрируем пакет
elc bash
studio load /home/<user>/work/ensi/packages/my-package
Обратите внимание на то что путь до пакета - это путь на хост машине. Папка с пакетами монтируется в контейнер по тому же пути по которому она лежит на хосте.
Если пакет не был ранее подключён в текущий сервис, то его надо прописать в composer.json руками, а не через composer require
{
"require": {
"project/my-package": "dev-master"
}
}
Далее, для того чтобы создался симлинк, нужно обновить пакет
elc composer update project/my-package
Чтобы убрать симлинк, вы можете либо убрать регистрацию пакета
elc bash
studio unload /home/<user>/work/ensi/packages/my-package
либо переименовать файл studio.json
в studio.json.txt
.
В обоих случаях нужно снова обновить пакет.
Вы можете поместить файл studio.json в папку packages, а в сервисы поместить симлинк на этот файл. Так все сервисы будут шарить между собой настройки симлинков пакетов.
Важно: когда вы делаете симлинк на пакет, в composer.lock записывается локальный путь до пакета на вашей машине. Нужно следить за тем чтобы эти изменения не попадали в коммиты.
При добавлении нового пакета в систему вам нужно зарегистрировать его в файле workspace.yaml в секции modules
modules:
template--sdk-php:
path: ${PACKAGES_PATH}/${TEMPLATE_SDK_PHP_PACKAGE_PATH:-template--sdk-php}
hosted_in: cms-cms
exec_path: ${PACKAGES_PATH}/${TEMPLATE_SDK_PHP_PACKAGE_PATH:-template--sdk-php}
Поля path
и exec_path
должны иметь одинаковое значение т.к. пакеты монтируются в контейнер по тому же пути что и на хосте.
Поле hosted_in
должно указывать на сервис в контейнере которого вы хотите выполнять команды для этого пакета.
admin-gui-frontend
Запуск сервисаДля того чтобы запустить Frontend админки, вам нужно перейти в папку сервиса и запустить команду
elc start
У вас произойдет сборка и запуск сервиса Frontend Админки.
По умолчанию адрес сервиса: http://admin-gui-frontend.ensi.127.0.0.1.nip.io
Скрипты
./scripts/save-schemas
Генерирует для каждого сервиса полную openapi схему в формате yaml и сохраняет в папку workspace/schemas
. Полезно для дальнейшего импорта в Postman.