Конфигурация воркспейса ELC для разработки сервисов Ensi.
Клонируем воркспейс в удобное для вас место, однако если вы работаете под Windows, то клонировать воркспейс необходимо внутрь WSL.
git clone [email protected]: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 ошибку.
Для работы над пакетами используется плагин 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.
elc start <name_service>
elc stop <name_service>
Имя сервиса | Адрес | Описание |
---|---|---|
database | database.ensi.127.0.0.1.nip.io:5432 | Postgres 13 |
elastic | http://elastic.ensi.127.0.0.1.nip.io:9200 | Elasticsearch 7.9.2 |
kibana | http://kibana.ensi.127.0.0.1.nip.io | Kibana 7.9.2 |
es | http://es.ensi.127.0.0.1.nip.io | Nginx 1.19 |
kafka | kafka.ensi.127.0.0.1.nip.io:9092 | Kafka |
kafka-ui | http://kafka-ui.ensi.127.0.0.1.nip.io | Kafka-UI |
maildev | http://maildev.ensi.127.0.0.1.nip.io | Maildev 2.0.5 |
redis | redis.ensi.127.0.0.1.nip.io:6379 | Redis 6 |
redis-ui | http://redis-ui.ensi.127.0.0.1.nip.io | Redis-UI |
Чтобы переключить сервис на другую версию php, вам нужно зайти в файл workspace.yaml в диррективе templates: вы можете посмотреть все версии php/node которые вы можете использовать.
templates:
nodejs:
path: ${WORKSPACE_PATH}/templates/nodejs
variables:
APP_IMAGE: nodejs:latest
NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine
fpm-8.1:
path: ${WORKSPACE_PATH}/templates/fpm-8.1
variables:
BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2022may13
APP_IMAGE: fpm-8.1:latest
NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine
swoole-8.1:
path: ${WORKSPACE_PATH}/templates/swoole-8.1
after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh
variables:
BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2023mar4-1-swoole
APP_IMAGE: swoole-8.1:latest
NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine
fpm-8.2:
path: ${WORKSPACE_PATH}/templates/fpm-8.2
variables:
BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-task-109866-2023july21-1
APP_IMAGE: fpm-8.2:latest
NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine
swoole-8.2:
path: ${WORKSPACE_PATH}/templates/swoole-8.2
after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh
variables:
BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-task-109866-2023july21-1-swoole
APP_IMAGE: swoole-8.2:latest
NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine
Изменив значение extends со swoole-8.1 на swoole-8.2 то данный сервис будет использовать php 8.2
cms-cms:
extends: swoole-8.2
path: ${APPS_ROOT}/${SVC_CMS_CMS_PATH:-cms/cms}
repository: [email protected]:greensight/ensi/cms/cms.git
tags:
- code
- app
- backend
dependencies:
database: [default, hook]
proxy: [default]
variables:
DB_NAME: cms_cms