# Комплект приложения. Комплект группы ## Комплект приложений (Appkit) **Комплект приложений** указывается для группы ресурсов и определяет перечень артефактов, необходимых для разворачивания системы Global ERP: - Дистрибутив сервера приложений Global ERP (globalserver) - Образ прикладного решения (applib) - Набор конфигураций для сервисов кластера (profile) Опционально в комплект приложений также входит: - Исходный код для отладки прикладного решения (appsrc) Комплект приложений хранится [на системном хранилище](./030_achitecture.md#хранение-файлов) в виде zip-архивов (globalserver.zip, applib.zip, profile.zip и, опционально, appsrc.zip) вместе с хэш-суммами, которые могут подготавливаться утилитой nscli. Путь к комплекту приложений на системном хранилище и хэш-суммы также хранятся в ConfigMap группы ресурсов, что используется подами серверов приложения для определения текущей версии комплекта приложений. Изменить комплект приложений можно при помощи команд: **nsctl:** [`./resgroup.sh switch_appkit`](appendix/nsctl/resgroup.md#switch_appkit) **nscli:** [`./appkit.sh switch`](appendix/nscli/appkit.md#switch) ### Дистрибутив сервера приложений (globalserver) Предоставляется вендором. ### Образ прикладного решения (applib) Формируется во время сборки прикладного проекта. ### Набор конфигураций для сервисов кластера (profile) Профиль (profile) используется контейнерами для конфигурации служб. Внутри архива лежат директории, названия которых соответствуют конфигурируемой службе. Внутри каждой такой директории в свою очередь лежат каталоги статических файлов (`static`) и шаблонов (`template`). Некоторые конфигурационные файлы можно свободно редактировать, такие обычно поставляются в nscli в папке `default/profile`, которая используется утилитой для создания профиля по умолчанию. В профиле с шаблонами конфигурационных файлов находятся: - Конфигурация сервера приложений `globalserver/template/config/global3.config.xml` - Конфигурация сборщика телеметрии `globalserver/template/config/otel-sdk.config.yaml` и `globalserver/template/config/otel-globalserver.config.yaml` - Конфигурация менеджера заданий `globalscheduler/template/config/quartz.properties` - Конфигурация проектных настроек системных логов `globalscheduler/template/config/logback-LoggerContext-ext.xml` - Конфигурация проектных настроек логов сессии `globalscheduler/template/config/logback-LoggerContext-session-ext.xml` ### Исходный код для отладки прикладного решения (appsrc) ```{attention} Касается предстоящей версии 5.0 ``` Вместе с образом прикладного решения (applib) могут формироваться и исходные коды проекта (appsrc), необходимые для облачной отладки прикладного решения. ### Состояния комплекта приложений Комплект приложений бывает в трех состояних: - `stopped` - остановлен, сервера приложений и балансировщик не работают - `started` - запущен, сервера приложений и балансировщик работают [в нормальном режиме](https://docs.global-system.ru/as/dev/spec/server/server_modes.html#id3) - `drained` - осушен, сервера приложений работают [в служебном режиме](https://docs.global-system.ru/as/dev/spec/server/server_modes.html#id4) (то есть пользователи не могут подключиться к серверу), балансировщик работает, как обычно Переключение состояний возможно при помощи команд: **nsctl:** - [`./resgroup.sh stop_appkit`](appendix/nsctl/resgroup.md#stop_appkit) - [`./resgroup.sh start_appkit`](appendix/nsctl/resgroup.md#start_appkit) - [`./resgroup.sh drain_appkit`](appendix/nsctl/resgroup.md#drain_appkit) **nscli:** - [`./appkit.sh start`](appendix/nscli/appkit.md#start) - [`./appkit.sh stop`](appendix/nscli/appkit.md#stop) ## Комплект группы (Groupkit) **Комплект группы** указывается для группы ресурсов и определяет перечень вспомогательных артефактов: - Архив с дополнительными библиотеками (libs) - Файлы JDK для переопределения (java) Вы можете использовать java для добавления хранилища собственных сертификатов cacerts: добавьте их в комплект группы по пути `java/jre/lib/security/cacerts`. Комплекту группы также хранится на [системном хранилище](./030_achitecture.md#хранение-файлов), а путь к ним - в ConfigMap группы ресурсов, однако хэши не учитываются. Изменения в комплекте группы требуют перезапуска всех подов. Обычно комплект группы не требуется. Переключить комплект группы можно командой nsctl [`./resgroup.sh switch_groupkit`](appendix/nsctl/resgroup.md#switch_groupkit). ## Управление комплектами Управление комплектами выполняется при помощи команды nscli [`./appkit.sh`](appendix/nscli/appkit.md) ### Создать комплект с минимальным профилем Создадим комплект с пользовательским профилем по умолчанию в директории `workspace/kit`. ```bash ./appkit.py prepare_profile --appkit-dir workspace/kit ``` Получаем следующую структуру: ```text workspace/kit └── profile ├── globalscheduler │ └── template │ └── config │ └── quartz.properties └── globalserver └── template └── config ├── global3.config.xml ├── logback-LoggerContext-ext.xml └── logback-LoggerContext-session-ext.xml ``` ### Упаковать комплект и пересчитать хэши Давайте добавим компонентов комплекта и упакуем комплект в директории `workspace/kit`. Новая структура комплекта: ```text workspace/kit ├── applib.zip ├── globalserver.zip ├── java │ └── jre │ └── lib │ └── security │ └── cacerts └── profile ├── globalscheduler/... └── globalserver/... ``` ```{note} Как можно заметить, в комплекте лежат дистрибутивы globalserver.zip и applib.zip, а также профиль и файлы Java в отдельных папках. Итоговый комплект можно использовать и как комплект приложения, и как комплект группы. ``` Выполним: ```bash ./appkit.py refresh_hash --source workspace/kit ``` Все компоненты комплекта, хранящиеся в отдельной папке, теперь упакованы в zip-архивы. Рядом с zip-архивами лежат файлы со значениями хэш-сумм. ### Отправить комплект на системное хранилище Давайте отправим этот комплект на системное хранилище по пути `mykit/v1`. ```bash ./appkit.py push --namespace my-namespace --source workspace/kit --destination mykit/v1 ``` ```{tip} Предварительно запускать `./appkit.py refresh_hash` необязательно, упаковка и расчет контрольных сумм произойдет и при запуске `./appkit.py push`. ``` Теперь вы должны увидеть этот комплект в контейнере nsctl в папке `~/nsctl/workspace/mnt/sys/mykit/v1`. ### Обновить GlobalERP Сменим комплект приложения и обновим базу данных. ```bash ./appkit.py switch_and_upgrade --namespace my-namespace --resgroup my-resgroup --remote_appkit mykit/v1 ``` ```{attention} После выполнения команды, комплект приложений [остается в осушенном состоянии](#состояния-комплекта-приложений). ``` ### Включить GlobalERP Сделаем GlobalERP снова доступной для пользователей через вывод комплекта приложений из осушенного состояния. ```bash ./appkit.py start --namespace my-namespace --resgroup my-resgroup ```