ENTAXY-248 release 1.8.1

This commit is contained in:
2022-02-28 15:20:38 +03:00
parent 4d274c4fcc
commit c826adf1db
1958 changed files with 195926 additions and 10280 deletions

View File

@ -22,7 +22,7 @@ _src/main/resource/template/example-in-connector.ftl_
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.QueueInConnectorImpl">
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
@ -49,7 +49,7 @@ _src/main/resource/template/example-in-connector.ftl_
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
[source, xml]
----
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.QueueInConnectorImpl">
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
@ -113,7 +113,7 @@ _src/main/resource/template/example-out-connector.ftl_
<property name="connectionFactory" ref="pooledConnectionFactory"/>
</bean>
<bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
<bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
@ -144,7 +144,7 @@ _src/main/resource/template/example-out-connector.ftl_
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
[source, xml]
----
<bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
<bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>

View File

@ -1,4 +1,4 @@
= Shema
= Sсhema
Есть три типа ресурсов, которые можно загружать в шину и использовать в маршрутах:

View File

@ -344,6 +344,13 @@ sudo chown -R karaf:karaf /opt/karaf
sudo sed -i 's/# export JAVA_HOME/export JAVA_HOME=\/opt\/openjdk\/jdk-11.0.11/g' /opt/karaf/bin/setenv
----
+
. Отредактировать переменную окружения `EXTRA_JAVA_OPTS` для Karaf, чтобы устранить возможность эксплуатацию критической уязвимости Log4j CVE-2021-44228:
+
[source,bash]
----
sudo sed -i 's/# export EXTRA_JAVA_OPTS/export EXTRA_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true/g' /opt/karaf/bin/setenv
----
+
. Создать файл сервиса `/etc/systemd/system/karaf.service` со следующим содержимым:
+
.karaf.service
@ -495,7 +502,7 @@ karaf@root()>
[source,bash]
----
feature:repo-add mvn:ru.entaxy.esb/karaf-features/1.8.0/xml/features
feature:repo-add mvn:ru.entaxy.esb/karaf-features/1.8.1/xml/features
----
Затем запускается команда установки всех компонентов Entaxy

View File

@ -8,3 +8,4 @@ Entaxy have different installation ways OOTB:
* xref:../../distribution/entaxy-docker/ReadMe.md[Development docker installation]
* xref:../../features/README.md[Development standalone installation]
* xref:install.adoc[Enterprise environment installation]
* xref:local-installation/local-installation.adoc[Local installation]

View File

@ -5,6 +5,7 @@ __Alternative languages:__
= Установка
Entaxy из коробки имеет разные варианты установки:
* xref:local-installation/ReadMe.md[Установка для разработки в докер]
* xref:../../distribution/entaxy-docker/ReadMe.md[Установка для разработки в докер]
* xref:../../features/README.ru.md[Установка для разработки отдельных серверных приложений]
* xref:install.adoc[Установка на промышленное окружение]
* xref:local-installation/local-installation.ru.adoc[Локальная установка]

View File

@ -1,141 +0,0 @@
## Docker compose для сборки и запуска Entaxy.
Запуск локального окружения с несколькими docker контейнерами:
* Караф
* Брокер
* СУБД
* Менеджер артефактов
Для начала клонируем репозиторий и переходим в корень проекта:
```bash
git clone <entaxy-framework-repository>
cd entaxy-framework
```
Далее у нас есть разные варианты хранения необходимых для установки Entaxy артефактов.
### 1. Самый простой способ: локальный репозиторий артефактов включаеться в образ карафа.
В корневом POM находится профиль для деплоя артефактов в образ карафа:
```xml
<profile>
<id>docker.file.repo</id>
<distributionManagement>
<snapshotRepository>
<id>entaxy-maven-repo-file</id>
<url>file:./distribution/entaxy-docker/karaf/repo</url>
</snapshotRepository>
</distributionManagement>
</profile>
```
Запускаем мевен деплой из корня проекта с этим профилем:
```bash
mvn deploy -P docker.file.repo
```
И после успешной сборки запускаем контейнеры из директории проекта, в которой находится docker-compose.yml:
```bash
cd ./distribution/entaxy-docker
docker-compose up
```
Или `docker compose up` для новых версий docker.
После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала.
```bash
docker-compose stop
docker-compose start
```
После запуска контейнеров открываем новый терминал и заходим в караф:
```bash
docker-compose exec karaf /opt/apache-karaf/bin/client
```
или ssh клиент с дальнейшим вводом пароля (karaf)
```bash
ssh -p 8101 karaf@localhost
```
И в консоли карафа запускаем скрипт с установкой необходимых фич:
```bash
shell:source ./install.karaf
```
Ждём окончания деплоя в караф.
(Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`)
### 2. Reposilite: легковесный http репозиторий артефактов запускается в отдельном контейнере.
Комментируем в файле install.karaf строку начинающуюся с:
```bash
config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories file:/opt/apache-karaf/repo
```
И убираем комментарий в строке начинающейся:
```bash
#config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories http://maven-repo/snapshots
```
Запускаем контейнеры из директории проекта, в которой находится docker-compose.yml:
```bash
cd ./distribution/entaxy-docker
docker-compose up
```
Или `docker compose up` для новых версий docker.
После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала.
```bash
docker-compose stop
docker-compose start
```
Для деплоя в reposilite добавляем учётные данные в конфигурацию мавена (`~/.m2/settings.xml`):
```xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>entaxy-maven-repo</id>
<username>admin</username>
<password>aW7frfS9NPGrOnuNBMf9gyO0eXNRaCoOGtXHTcLU5akDFJ9ACiUJhgmZxlOKnLC5</password>
</server>
</servers>
</settings>
```
В корневом POM находится профиль для деплоя артефактов на сервер reposilite:
```xml
<profile>
<id>docker.reposilite</id>
<distributionManagement>
<snapshotRepository>
<id>entaxy-maven-repo</id>
<url>http://127.0.0.1:8081/snapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
```
Запускаем мевен деплой из корня проекта с этим профилем:
```bash
mvn deploy -P docker.reposilite
```
После успешной сборки открываем новый терминал и заходим в караф:
```bash
docker-compose exec karaf /opt/apache-karaf/bin/client
```
или ssh клиент с дальнейшим вводом пароля (karaf)
```bash
ssh -p 8101 karaf@localhost
```
И в консоли карафа запускаем скрипт с установкой необходимых фич:
```bash
shell:source ./install.karaf
```
Ждём окончания деплоя в караф.
(Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`)
Также есть вариант с nexus
После старта получаем пароль для admin через команду:
`docker-compose exec nexus cat /nexus-data/admin.password`.
Через админку нужно разрешить анонимный деплой или настроить доступы.
Урл для install.karaf
`http://nexus:8081/repository/maven-snapshots/@id=local-nexus@snapshots@noreleases`
Остановить все контейнеры
`docker-compose down`
Остановить и удалить хранилища с БД и репой
`docker-compose down -v`

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -0,0 +1,246 @@
= Локальная установка Entaxy на рабочую станцию или сервер.
__Alternative languages:__
* xref:windows-local-installation.adoc[English]
== Введение.
В этой инструкции мы рассмотрим установку Entaxy. Установка на все ОС проходит аналогичным образом и отличается выбором соответствующих инсталляторов или использованием пакетных менеджеров.
== Установка Java.
. Скачиваем и устанавливаем JAVA. Для работы Entaxy рекомендуется Java 11. Работа платформы протестирована на OpenJDK и LibericaJDK от BellSoft (https://libericajdk.ru/pages/downloads/)
. Создаем переменную окружения JAVA_HOME.
. Добавляем абсолютный путь к директории bin в системную переменную окружения PATH.
== Дистрибутивы Entaxy
Сущетсвет несколько вариантов сборок Entaxy, которые доступны по адресу https://entaxy.ru/download
. `entaxy-assembly-compact*` - все-в-одном, брокер, бд и графический веб-интерфейс в одной сборке. См. xref:#_установка_all_in_one [Установка all-in-one]
. `entaxy-assembly*` - сборка без предустановленного графического веб-интерфейса. См. xref:#_установка_без_ui [Установка без UI]
. `entaxy-assembly-with-ui*` - сборка без предустановленного брокера сообщений. См. xref:#_установка_с_внешним_брокером [Установка с внешним брокером]
. Все компоненты устанавливаются отдельно. См. xref:#_покомпонентная_установка [Покомпонентная установка]
== Установка all-in-one
. Распаковываем архив `entaxy-assembly-compact*`
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
. Переходим в каталог `/bin` приложения и запускаем:
- entaxy - для Linux
- entaxy.bat - для Windows
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
== Установка без UI
. Распаковываем архив `entaxy-assembly*`
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
. Переходим в каталог `/bin` приложения и запускаем:
- entaxy - для Linux
- entaxy.bat - для Windows
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
. Веб-интерфейс можно установить, после запуска системы, командой (в консоли Карафа): `source scripts/entaxy-ui.install`
== Установка с внешним брокером
. Для установки брокера смотрите инструкцию: xref:#_установка_и_настройка_брокера[Установка и настройка брокера]
. Распаковываем архив `entaxy-assembly-with-ui*`
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
. Переходим в каталог `/bin` приложения и запускаем:
- entaxy - для Linux
- entaxy.bat - для Windows
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
== Покомпонентная установка
=== Установка и настройка БД.
Entaxy не привязана к какой-либо конкретной СУБД, но по умолчанию используется встроенная H2, в данной инструкции будет показано как установить и настроить систему на работу с БД Postgres.
. Скачиваем инсталятор с официального сайта (https://www.enterprisedb.com/downloads/postgres-postgresql-downloads).
. Запускаем установку. image:image/postgresql-installation-1.jpg[postgresql-installation]
. Оставляем все настройки по умолчанию и устанавливаем пароль `postgres`.
. Запускаем pgAdmin 4 и устанавливаем мастер пароль для приложения `postgres`. image:image/pgadmin-start.jpg[pgadmin-start]
. Добавляем подключение к локальному серверу БД.
. Выбираем доступную базу данных из списка и переходим в Query Tool, в котором выполняем sql запрос:
[source,sql]
----
CREATE USER "entaxy" WITH PASSWORD 'entaxy';
----
image:image/pgadmin-create-user.jpg[pgadmin-create-user]
[start=7]
. Теперь в том же окне по очереди (по одной строчке) выполняем запросы для создания необходимых для Entaxy баз данных.
[source,sql]
----
CREATE DATABASE esb_entaxy;
----
[source,sql]
----
GRANT ALL PRIVILEGES ON DATABASE esb_entaxy TO entaxy;
----
[source,sql]
----
CREATE DATABASE cache;
----
[source,sql]
----
GRANT ALL PRIVILEGES ON DATABASE cache TO entaxy;
----
На этом настройка СУБД завершена.
=== Установка и настройка брокера
В этой инструкции мы рассмотрим использование брокера сообщений Artemis.
. Скачиваем архив с официального сайта (https://activemq.apache.org/components/artemis/download/).
. Распаковываем архив и переходим в директорию bin.
. Запускаем в командной строке создание брокера `artemis create --user entaxy --password entaxy --allow-anonymous $ARTEMIS_HOME/brokers/entaxy-broker`.
. После создания брокера надо открыть файл `$ARTEMIS_HOME/brokers/entaxy-broker/etc/broker.xml` и проверить, что автоматическое удаление очередей и адресов отключено:
[source,xml]
----
<!--default for catch all-->
<address-setting match="#">
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-addresses>false</auto-delete-addresses>
</address-setting>
----
. Запускаем брокер сообщений `$ARTEMIS_HOME/brokers/entaxy-broker/bin/artemis run`
Установка брокера завершена.
=== Установка Entaxy
. xref:#_установка_с_внешним_брокером [Выполняем установку Entaxy без брокера]
. xref:#_настройка_entaxy_на_внешнюю_базы_данных [Перенастраиваем Entaxy на внешнюю БД], установленную на предыдущем шаге.
== Проверка готовности системы
Чтобы проверить, что все сервисы Entaxy готовы к работае, открываем следующий адрес в браузере http://localhost:8181/system/health
При полной готовности система выдаст следующую информацию:
image:image/health-check.png[]
Если при первом запуске Entaxy Connections находится в статусе TEMPORARILY_UNAVAILABLE, необходимо перезапустить Entaxy.
== Настройка Entaxy на внешнюю базу данных
По умолчанию все сборки Entaxy используют встроенную БД H2.
Для того чтобы перенестроить Entaxy на использование внешней БД, нужно выполнить следующие шаги:
В каталоге `/etc` приложения:
. Найти файлы `org.ops4j.datasource-entaxy.esb.cache.cfg` и `org.ops4j.datasource-entaxy.esb.storage.cfg`
. Удалить их или переименовать путем добавления постфикса, например, `*.defaultdb`.
. Найти файлы `org.ops4j.datasource-entaxy.esb.cache.cfg.pg` и `org.ops4j.datasource-entaxy.esb.storage.cfg.pg` и удалить постфикс `.pg` из имени.
. Если при выполнении установки БД были указаны другие данные или была выполненна установка на другом хосте, то вводим соответствующие значения в файлах.
== Тестирование.
Для проверки работоспособности платформы переходим к xref:../../connectors/uniform-exchange-service/tests/postman.adoc[инструкции по тестированию].
== Кластерный запуск Entaxy
По умолчанию Entaxy использует мультикаст для поиска компонентов кластера по сети, необходимо убедиться что настройки вашего оборудования и файервол настроены для широковещания.
Чтобы два и более экземпляра соединились в кластер достаточно их запустить на разных хостах из одной подсети.
=== Настройка статичных адресов узлов кластера
Если требуется указать статичные адреса узлов кластера поиска узлов, то это можно сделать в файле `/etc/hazelcast.xml`
- Выключаем мультикаст `<multicast enabled="false">`
- Включаем ip `<tcp-ip enabled="true">`
например:
[source,xml]
----
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="true">
<interface>127.0.0.1</interface>
</tcp-ip>
----
Также можно задавать маски адресов:
[source,xml]
----
<tcp-ip enabled="true">
<interface>192.168.1.*</interface>
</tcp-ip>
----
=== Проверка кластера
Чтобы понимать, что экземпляры соединились в кластер, выполняем следующую команду в одной из консолей карафа: `cluster:node-list`
image:image/cluster-note-list.png[]
=== Запуск нескольких экземпляров на одном хосте
Для того чтобы запустить несколько экземпляров системы на одном хосте, необходимо в файле `etc/entaxy.properties` изменить значения свойств:
- entaxy.rmiRegistryPort
- entaxy.rmiServerPort
- entaxy.jmxmpPort
- entaxy.sshPort
- entaxy.org.osgi.service.http.port
- entaxy.service.port.management
- entaxy.service.port.subscription

View File

@ -1,116 +0,0 @@
= Локальная установка Entaxy на рабочую станцию или сервер.
__Alternative languages:__
* xref:windows-local-installation.adoc[English]
== Введение.
В этой инструкции мы рассмотрим установку Entaxy, включая брокер и бд, на одной машине с операционной системой Windows. Установка на другие ОС проходит аналогичным образом и отличается выбором соответствующих инсталяторов или использованием пакетных менеджеров.
== Шаг 1: Установка Java.
Скачиваем и устанавливаем JAVA. Для работы Entaxy рекомендуется Java 11. Работа платформы протестирована на OpenJDK и LibericaJDK от BellSoft (https://libericajdk.ru/pages/downloads/).
== Шаг 2: Установка и настройка Maven.
1. Скачиваем архив с официального сайта (https://maven.apache.org/download.cgi).
2. Распаковываем архив и переходи в директорию bin.
3. Копируем абсолютный путь к директории bin и добавляем его в системную переменную окружения PATH.
== Шаг 3: Получение исходных кодов и сборка проекта.
1. Для получения исходных кодов платформы переходим по адресу https://git.emdev.ru/entaxy-public/entaxy-public и нажимаем иконку `скачать`. image:image/source-download.jpg[source-download]
2. Распаковываем архив и переходим в корневую директорию проекта `entaxy-public`.
3. Собираем проект командой `mvn install`.
== Шаг 4: Установка и настройка БД.
Entaxy не привязана к какой-либо конкретной СУБД, но в большинстве случаев используется PostgreSQL.
1. Скачиваем инсталятор с официального сайта (https://www.enterprisedb.com/downloads/postgres-postgresql-downloads).
2. Запускаем установку. image:image/postgresql-installation-1.jpg[postgresql-installation]
3. Оставляем все настройки по умолчанию и устанавливаем пароль `postgres`.
4. Запускаем pgAdmin 4 и устанавливаем мастер пароль для приложения `postgres`. image:image/pgadmin-start.jpg[pgadmin-start]
5. Добавляем подключение к локальному серверу БД.
6. Выбираем доступную базу данных из списка и переходим в Query Tool, в котором выполняем sql запрос:
[source,sql]
----
CREATE USER "entaxy" WITH PASSWORD 'entaxy';
----
image:image/pgadmin-create-user.jpg[pgadmin-create-user]
[start=7]
. Теперь в том же окне по очереди (по одной строчке) выполняем запросы для создания необходимых для Entaxy баз данных.
[source,sql]
----
CREATE DATABASE esb_entaxy;
----
[source,sql]
----
GRANT ALL PRIVILEGES ON DATABASE esb_entaxy TO entaxy;
----
[source,sql]
----
CREATE DATABASE cache;
----
[source,sql]
----
GRANT ALL PRIVILEGES ON DATABASE cache TO entaxy;
----
На этом настройка СУБД завершена.
== Шаг 5: Установка и настройка брокера.
В этой инструкции мы рассмотрим использование брокера сообщений Artemis.
1. Скачиваем архив с официального сайта (https://activemq.apache.org/components/artemis/download/).
2. Распаковываем архив и переходим в директорию bin.
3. Запускаем в командной строке создание брокера `artemis create --user entaxy --password entaxy --allow-anonymous $ARTEMIS_HOME/brokers/entaxy-broker`.
4. После создания брокера надо открыть файл `$ARTEMIS_HOME/brokers/entaxy-broker/etc/broker.xml` и проверить, что автоматическое удаление очередей и адресов отключено:
[source,xml]
----
<!--default for catch all-->
<address-setting match="#">
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-addresses>false</auto-delete-addresses>
</address-setting>
----
5. Запускаем брокер сообщений `$ARTEMIS_HOME/brokers/entaxy-broker/bin/artemis run`
Установка брокера завершена.
== Шаг 6: Установка и запуск карафа.
1. Скачать Karaf Runtime 4.2.9 (Binary Distribution : ZIP) с официального сайта (https://archive.apache.org/dist/karaf/4.2.9/apache-karaf-4.2.9.zip).
2. Распаковываем архив и переходим в директорию `etc`.
3. Копируем в директорию `etc` карафа все файлы исходных кодов из директории `entaxy-public\features\target\cfg` и ещё один файл `entaxy-public\features\target\script\install.karaf`.
4. Переходим в директорию `bin` карафа и запускаем командой `karaf`
После запуска откроется консоль карафа.
== Шаг 7: Установка Entaxy в караф.
В командной строке карафа выполнить команду
[source,bash]
----
shell:source etc/install.karaf
----
Если времени на установку не хватило, то нужно повторить последнюю команду или выполнить команды установки построчно. Для отображения списка команд достаточно в консоли карафа выполнить команду
[source,bash]
----
cat etc/install.karaf
----
После успешной установки, выполняем команду `list`, чтобы убедиться, что все модули находятся в состоянии `Active`.
== Шаг 8: Тестирование.
Для проверки работоспособности платформы переходим к xref:../../connectors/uniform-exchange-service/tests/postman.adoc[инструкции по тестированию].

View File

@ -0,0 +1,29 @@
= Использование hawtio для мониторинга entaxy
hawtio доступно по адресу http://{nginx_address}/hawtio/
* Открываем в браузере hawtio и аутентифицируемся как karaf / karaf
http://10.24.2.33:8181/hawtio/
image::screenshots/image_2021-09-30_12-43-58.png[]
* При успешной аутентификации видим вкладку camel со всеми маршрутами и возможностью посмотреть статистику по маршрутам
image::screenshots/image_2021-09-30_12-45-07.png[]
* Возможность просмотреть логи
image::screenshots/image_2021-09-30_12-45-35.png[]
* Возможность просмотреть метрику
image::screenshots/image_2021-09-30_12-45-55.png[]
* Общую статистику можно увидеть на вкладке JMX, выбрав Camel Contexts (отображение данных бывает с небольшой паузой)
image::screenshots/image_2021-09-30_12-46-36.png[]
* Также можно увидеть визуальное отображение маршрута
image::screenshots/image_2021-09-30_12-47-18.png[]

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB