Перейти к содержанию

Установка платформы TESSA в среде управления контейнерами Docker

Вы можете установить типовую версию платформы на локальном компьютере для использования в целях тестирования или для продуктовой эксплуатации без развёртывания системы в виртуальной машине. Для этого используется среда управления контейнерами Docker. В текущей инструкции рассматривается установка для ОС Windows, внутри которой будут запущены контейнеры Docker.

Note

Контейнеры Docker для приложения TESSA работают в заранее настроенной среде с использованием окружения ОС Alpine Linux. При этом система Docker может быть запущена не только на хост-машине ОС Windows, но и на macOS, и на любом дистрибутиве Linux, который поддерживается приложением Docker.

Note

Поскольку контейнер определяет только окружение ОС Linux, но не ядро операционной системы, и контейнер не является виртуальной машиной (а своего рода маппингом папок, областей памяти и системных вызовов), то при запуске Docker, например, на хост-машине под ОС Debian, контейнер также будет исполняться на ОС Debian, несмотря на то, что окружением, которое определено в контейнере, является ОС Alpine Linux. Данная инструкция не затрагивает установку Docker на хост-машинах macOS или Linux, и создание контейнеров приложения TESSA на ОС Linux, отличной от окружения Alpine Linux.

Warning

На текущий момент зафиксированы проблемы с использованием Docker Desktop на Windows 10 версии 20H1 (май 2020 г.), в которой в настройках Docker Desktop (Settings в контекстном меню на значке в системном трее) указан Use the WSL 2 based engine. Если вы также наблюдаете ошибку при установке на этапе Checking connection to web service при выполнении скрипта install.bat, то отключите этот флаг, Docker перезапустится, и запустите скрипт повторно.

Установка с использованием Docker Desktop на ОС Windows

Скачайте и установите Docker Desktop (на сайте потребуется зарегистрироваться, регистрация бесплатна): https://www.docker.com/products/docker-desktop

После установки потребуется перезагрузиться. Согласитесь при запросе на включение Hyper V при первом запуске.

Warning

После включения компонента Hyper V виртуальные машины VirtualBox и VMWare перестанут функционировать. Вы можете отключить Hyper V в настройках компонентов Windows (и перезагрузиться), чтобы виртуальные машины снова работали. Потом для работы Docker можно снова запустить Docker Desktop, который предложит включить Hyper V, чтобы работал он.

Установка с использованием сборки tessa

Откройте папку со сборкой TESSA, в ней в папке Docker скопируйте подпапку tessa на ваш локальный диск, из которого будет запускаться и настраиваться установленная версия системы. При этом дополнительных файлов в этой папке создано не будет, поскольку контейнеры создаются и хранятся в локальном реестре Docker, который располагается в папках пользователя (обратитесь к инструкции Docker на сайте https://docs.docker.com/).

Tip

Имя установленной системы зависит от имени папки, в которую распаковано содержимое. Например, папка tessa создаёт и управляет системой с именем tessa. Скопируйте содержимое этой папки в папку с другим именем, расположенную рядом, и запускайте скрипты из папок с разными именами, чтобы одновременно иметь несколько независимых установленных систем на компьютере.

Скопируйте ваш файл лицензии *.tlic в текущую папку с системой (папка tessa).

Запустите скрипт install.bat, нажмите любую клавишу для начала установки и дождитесь её завершения.

Tip

По умолчанию система скачивает и устанавливает последнюю сборку платформы TESSA, опубликованную в репозитории Docker Hub. Вы можете перед установкой отредактировать файл docker-compose.yml, указав конкретные версии образов syntellect/tessa:*** (свойство image), добавив номер сборки и знак дефиса, например: syntellect/tessa:4.0.0-web. Версии для образов web, chronos, jinni, nginx и tadmin должны совпадать. По аналогии можно использовать теги syntellect/tessa:4.0-web для последней опубликованной сборки 4.0.x, syntellect/tessa:4-web для последней опубликованной сборки 4.x.x, и по аналогии для других версий системы и других образов.

Перед завершением скрипт выведет на экран порт такого вида:

0.0.0.0:32768

Адрес веб-сервиса на вашем компьютере будет следующим (укажите порт, который вывел скрипт): https://localhost:32768

Повторно вывести порт можно, запустив скрипт start.bat.

Для использования web-клиента откройте эту ссылку в адресе веб-браузера. Введите логин admin и пароль admin для пользователя, созданного по умолчанию.

Для использования desktop-клиента установите Tessa Applications через msi-инсталлятор из сборки платформы в папке Setup (подпапка ru-RU для русскоязычной версии, в ней подпапка x64 для 64-битных ОС). В качестве адреса сервера укажите ссылку выше, в качестве кода сервера задайте docker. Логин admin, пароль admin (их можно указать на вкладке Серверы, чтобы не вводить каждый раз).

На этом установка системы завершена. Ниже приведена информация по управлению запущенными контейнерами и по дополнительным настройкам системы в контейнерах.

Управление запущенными контейнерами

Здесь приводится справочная информация по использованию скриптов в папке с приложением tessa, в т.ч. по запуску, остановке, удалению контейнеров и других.

  1. Для остановки без удаления данных (из базы данных и файловых хранилищ) вызовите скрипт stop.bat.

  2. Для повторного запуска вызовите start.bat, новый адрес порта будет отображён в консоли (или предыдущий адрес, если сервисы не останавливались).

  3. После перезагрузки контейнеры будут остановлены, для их запуска вызовите start.bat после того, как на значке Docker в трее будет всплывающая подсказка Docker Desktop is running.

  4. Для остановки и удаления данных из контейнеров вызовите uninstall.bat.

  5. Для повторной установки “чистой” системы вызовите install.bat. Предварительно вызывать uninstall.bat не нужно, данные предыдущей установки будут удалены, если присутствовали.

  6. Для полной очистки Docker и всех его кэшей: в меню на значке Docker в трее выберите Settings, перейдите на вкладку Reset и выберите Reset to factory defaults. Дождитесь завершения очистки и заново вызовите install.bat.

  7. Посредством скрипта tadmin.bat можно из командной строки выполнять действия с утилитой tadmin, для которой укажите адрес подключения к сервисам https://nginx. Выполнение производится в контейнере утилиты, где доступны папки Configuration и Fixes из той версии сборки, которая была установлена. Пример:

    tadmin ImportCards "Configuration/Cards/Settings/License (settings).jcard" -c -a:https://nginx -u:admin -p:admin

Создание образов Docker с использованием дистрибутива TESSA alpine-redist

Вы можете создать собственные образы Docker, содержащие сборку TESSA требуемой версии без использования образов, опубликованных в Docker Hub.

Note

При работе с командами Docker рекомендуется использовать в качестве терминала cmd или PowerShell. Далее при описании используется PowerShell.

Создайте папку на локальном диске (например, С:\tessa) и распакуйте в неё архив с дистрибутивом TESSA для Alpine Linux. Он называется tessa-alpine-4.0-0.7z, где 4.0 - версия релиза платформы, и 0 на конце - номер патча.

Note

Для вашего релиза и патча архив будет называться соответствующим образом. Если у вас его нет, то запросите его получение у вендора.

Откройте папку с основной сборкой TESSA и перейдите в подпапку linux. Из неё скопируйте подпапку jinni в папку на локальном диске, которую создали ранее при распаковке архива, в подпапку platform. Например, если архив был распакован в папку С:\tessa, то итоговый путь будет следующим: C:\tessa\platform\jinni.

Скопируйте с заменой файлов содержимое папки [путь до созданной папки]\docker\tessa-alpine в корень папки, созданной ранее. Скопируйте в основную папку файлы docker-compose.yml, Dockerfile и папку authorized_keys из папки [путь до основной сборки]\Docker\tessa, а также лицензию формата .tlic. Итоговый дистрибутив должен выглядеть так:

Сборка Chronos

Перейдите в папку platform и скопируйте туда файл C:\tessa\docker\chronos\Dockerfile.

Откройте конфигурационный файл app-db.json, расположенный в папке chronos. Обратите особое внимание на имя базы данных в параметре Host. Значение должно совпадать со значением в docker-compose.yml.

Также откройте конфигурационный файл app.json, расположенный в папке chronos. Обратите особое внимание на строку подключения к Redis. Значение должно совпадать со значением в docker-compose.yml.

Отредактируйте строку LicenseFile, заменив путь на /var/lic/*.tlic

Чтобы запустить сборку образа, в терминале перейдите в папку platform и выполните следующую команду:

docker build -t syntellect/tessa:chronos .

Сборка nginx

Перейдите в папку nginx и скопируйте туда файл C:\tessa\docker\nginx\Dockerfile.

Откройте файл default.conf, расположенный там же. Убедитесь, что в начале этого файла указана строка:

server web:5000;

Если вместо web указан localhost, то необходимо заменить его на web.

Также убедитесь, что под этой строкой есть строка:

server webbi:19857;

Если вместо webbi указан localhost, то необходимо заменить его на webbi.

Чтобы запустить сборку образа, выполните следующую команду:

docker build -t syntellect/tessa:nginx .

Сборка tadmin

Перейдите в папку build и скопируйте туда файл C:\tessa\docker\tadmin\Dockerfile.

Настройте tadmin, отредактировав конфигурационный файл linux/tools/app-db.json. Убедитесь, что значение для подключения к базе данных соответствует указанному в файле docker-compose.yml:

Также необходимо настроить tadmin, отредактировав конфигурационный файл linux/tools/app.json. Убедитесь, что значение для подключения к Redis соответствует указанному в файле docker-compose.yml:

Вернитесь в папку build и в терминале выполните команду для сборки образа:

docker build -t syntellect/tessa:tadmin .

Сборка веб-сервера

Перейдите в папку platform и скопируйте с заменой туда файл C:\tessa\docker\web\Dockerfile.

В папке web находится конфигурация app-db.json, которую нужно отредактировать. Убедитесь, что значение для подключения к базе данных соответствует указанному в файле docker-compose.yml:

Также в папке web находится конфигурация app.json, которую нужно отредактировать. Убедитесь, что значение для подключения к Redis соответствует указанному в файле docker-compose.yml, измените путь к файлу лицензии:

Используя терминал, из папки platform запустите сборку:

docker build -t syntellect/tessa:web .

Сборка веб-сервера webbi для поддержки режима технического обслуживания системы

Перейдите в папку platform и скопируйте с заменой туда файл C:\tessa\docker\webbi\Dockerfile.

Скопируйте в папку webbi отредактированный ранее файл конфигурации app.json из папки web. Убедитесь, что значения для подключения к базе данных и Redis соответствуют указанным в файле docker-compose.yml, ServerCode соответствует настройке для web, и измените команду перезапуска nginx:

Используя терминал, из папки platform запустите сборку:

docker build -t syntellect/tessa:webbi .

Сборка веб-сервиса jinni для работы с документами

Откройте папку с основной сборкой TESSA (не архив tessa-alpine, а именно основной архив) и перейдите в подпапку Docker\jinni.

Выполните настройку конфигурации веб-сервиса и сгенерируйте Dockerfile. Скопируйте с заменой сгенерированный файл в папку platform.

Выполните настройку конфигурационных параметров веб-сервиса в файле platform\jinni\app.json. Убедитесь, что значения для подключения к Redis соответствуют действительным.

Используя терминал, из папки platform запустите сборку образа:

docker build -t syntellect/tessa:jinni .

Если требуется выполнить масштабирование веб-сервиса jinni, то этого можно достичь путём создания нескольких контейнеров на базе одного образа. Для этого необходимо модифицировать файл docker-compose.yml, задав уникальное имя каждому контейнеру веб-сервиса и указав уникальные публичные конечные точки для доступа к веб-сервисам:

jinni1: image: syntellect/tessa:jinni depends_on: redis: condition: service_healthy volumes: - jinni1:/root/platform/jinni - lic:/var/lic environment: - JINNI_ENDPOINT=http://jinni1:5000 jinni2: image: syntellect/tessa:jinni depends_on: redis: condition: service_healthy volumes: - jinni2:/root/platform/jinni - lic:/var/lic environment: - JINNI_ENDPOINT=http://jinni2:5000

Сборка веб-сервиса monitor для трассировки и мониторинга системы

Перейдите в папку platform и скопируйте с заменой туда файл C:\tessa\docker\monitor\Dockerfile.

Используя терминал, из папки platform запустите сборку:

docker build -t syntellect/tessa:monitor .

Сборка веб-сервиса prometheus для хранения данных мониторинга системы

Перейдите в папку prometheus и скопируйте туда файл C:\tessa\docker\prometheus\Dockerfile.

Чтобы запустить сборку образа, выполните следующую команду:

docker build -t syntellect/tessa:prometheus .

Сборка веб-сервиса grafana для отображения графиков по данным мониторинга системы

Перейдите в папку grafana и скопируйте туда файл C:\tessa\docker\grafana\Dockerfile.

Чтобы запустить сборку образа, выполните следующую команду:

docker build -t syntellect/tessa:grafana .

Сборка веб-сервиса jaeger для отображения данных трассировки системы

Чтобы запустить сборку образа, перейдите в папку C:\tessa\docker\jaeger и выполните следующую команду:

docker build -t syntellect/tessa:jaeger .

Установка и запуск контейнеров

Вернитесь в основную папку.

При помощи терминала соберите образ с лицензией:

docker-compose -f docker-compose.yml build --no-cache

Создайте контейнеры при помощи команды:

docker-compose -f docker-compose.yml up --no-start

Docker самостоятельно соберёт недостающие образы с Redis и Postgres и на их основе создаст необходимые контейнеры.

Запустим их командой терминала:

docker-compose -f docker-compose.yml start db web nginx tadmin redis webbi

Warning

lic не запускаем, chronos, jinni, monitor, prometheus, grafana и jaeger запустим после установки.

Если установка прошла успешно, контейнеры в Docker Desktop должны выглядеть так:

Tip

Имя установленной системы зависит от имени папки, в которую распаковано содержимое. Например, папка tessa создаёт и управляет системой с именем tessa. Скопируйте файл лицензии, Dockerfile, docker-compose.yml в папку с другим именем, расположенную рядом, и запускайте скрипты из папок с разными именами, чтобы одновременно иметь несколько независимых установленных систем на компьютере.

Проверка работы контейнеров и завершение установки tessa

Проверим подключение утилиты tadmin к базе данных:

docker-compose -f docker-compose.yml exec tadmin linux/tools/tadmin CheckDatabase

Если связь с базой данных прошла без ошибок, в терминале увидим такой результат:

Остаётся установить tessa-alpine при помощи сценария установки:

docker-compose -f docker-compose.yml exec tadmin linux/setup.sh

Адрес веб сервера: https://nginx.
Имя базы данных можете указать произвольное, например, tessa.
Остальные строки оставьте по умолчанию для данной установки системы.

При успешной установке в терминале будет выведена строка:

Перезапустите веб-сервер:

docker-compose -f docker-compose.yml restart web

Запустите Сhronos, веб-сервис jinni, а также сервисы monitor, prometheus, grafana и jaeger:

docker-compose -f docker-compose.yml start chronos jinni monitor prometheus grafana jaeger

Установка завершена. Экземпляр tessa-alpine будет доступен по адресу https://localhost:номер_порта. Чтобы узнать номер порта, выполните следующую команду в терминале:

docker-compose -f docker-compose.yml port nginx 443

Результат выполнения этой команды:

Экземпляр prometheus будет доступен по адресу http://localhost:номер_порта. Чтобы узнать номер порта, выполните следующую команду в терминале:

docker-compose -f docker-compose.yml port prometheus 9090

Экземпляр grafana будет доступен по адресу http://localhost:номер_порта. Чтобы узнать номер порта, выполните следующую команду в терминале:

docker-compose -f docker-compose.yml port grafana 3000

Экземпляр jaeger будет доступен по адресу http://localhost:номер_порта. Чтобы узнать номер порта, выполните следующую команду в терминале:

docker-compose -f docker-compose.yml port jaeger 16686

Настройка логирования и обновление расширений

Для удобства просмотра логов log.txt и обновления библиотек серверных расширений extensions можно создать связи для папок в контейнерах и папок в Windows, вложенных в локальную папку с файлом docker-compose.yml, из которой вы выполняли установку системы в Docker.

Сначала требуется определить имена контейнеров и убедиться, что они функционируют. Откройте командную строку Windows в папке с файлом docker-compose.yml. Здесь подразумевается, что установка системы в Docker уже была выполнена. Определите имена запущенных контейнеров:

docker ps -a

Tip

Ключ -a выводит помимо запущенных контейнеров также созданные контейнеры, которые не запущены в настоящий момент. Можно опустить этот ключ, если надо отобразить только запущенные контейнеры.

По умолчанию имя контейнера для веб-сервиса называется tessa_web_1, где tessa - имя папки с файлом docker-compose.yml (обычно её имя изменяют для второй установки системы в Docker на том же сервере), web - имя контейнера с веб-сервисом, указанное внутри файла docker-compose.yml, 1 - номер экземпляра контейнера, по умолчанию все контейнеры запускаются в единственном экземпляре.

Аналогично имя контейнера для сервиса Chronos называется tessa_chronos_1 и для веб-сервиса jinni называется tessa_jinni_1. Если у вас используются другие названия, то указывайте их в скриптах ниже.

Теперь запустите контейнеры, если они не запущены (скрипт start.bat) и проверьте, что корректно выполняется открытие консольной оболочки ash (аналог bash для дистрибутива Alpine Linux). В следующем примере открывается консоль для контейнера tessa_web_1, далее в нём выводится список файлов в папке веб-сервиса ls, и консоль закрывается exit:

docker exec -it tessa_web_1 ash

ls

exit

Аналогичную проверку выполните для сервиса Chronos в контейнере tessa_chronos_1 и веб-сервиса jinni в контейнере tessa_jinni_1.

Откройте командную строку Windows в папке с файлом docker-compose.yml.

Скопируйте папку с серверными расширениями из контейнера с веб-сервисом следующей командой. При этом в текущей папке будет создана подпапка extensions с библиотеками расширений и файлом extensions.xml. В контейнере Chronos эта папка полностью идентична, поэтому достаточно скопировать из веб-сервиса.

docker cp tessa_web_1:/root/platform/web/extensions .

Note

При обратном копировании командой docker cp, когда файлы были скопированы из папки Windows в контейнер, такие файлы будут сохранены только до следующего запуска контейнера (скрипт start.bat или команда docker-compose up). Если вы хотите копировать некоторые файлы настроек при каждом запуске контейнера, то доработайте скрипт start.bat по своему усмотрению и запускайте его каждый раз после запуска сервера.

Скопируйте файлы NLog.config из контейнеров веб-сервиса, сервиса Chronos и веб-сервиса Jinni в подпапки logs_chronos, logs_web и logs_jinni, предварительно их необходимо создать командой mkdir:

mkdir logs_chronos logs_web logs_jinni

docker cp tessa_chronos_1:/root/platform/chronos/logs/NLog.config ./logs_chronos

docker cp tessa_web_1:/root/platform/web/logs/NLog.config ./logs_web

docker cp tessa_jinni_1:/root/platform/jinni/logs/NLog.config ./logs_jinni

В файлах NLog.config, который появится в подпапках logs_chronos, logs_web и logs_jinni, вы можете настроить логирование по своим правилам. Например, чтобы логируемые сообщения записывались в отдельные файлы каждый день с созданием подпапок с номером месяца и года. Подробная информация по настройкам NLog.config доступна в документации по библиотеке NLog: https://github.com/NLog/NLog/wiki/Configuration-file

Для создания связи между локальной папкой в Windows и папками в контейнере потребуется отредактировать файл docker-compose.yml, в который добавить в разделы volumes соответствующих контейнеров строку следующего вида (не добавляйте её, это пример):

volumes: - ./ПАПКА_В_Windows:/root/platform/ПАПКА_В_КОНТЕЙНЕРЕ

Где /root/platform - путь к домашней папке в контейнерах приложения TESSA.

Warning

После настройки связи каждый раз, когда контейнер будет запущен (скрипт start.bat или команда docker-compose up), содержимое соответствующей папки в контейнере будет очищено. После этого выполняется копирование всех файлов и подпапок из папки в Windows в папку в контейнере. Далее при изменении этой папки в контейнере она изменяется в Windows и в любых других контейнерах, связанных с той же папкой в Windows. Также, если вы изменяете папку в Windows, то она автоматически изменяется во всех связанных контейнерах, т.е. связь двусторонняя.

Теперь отредактируйте docker-compose.yml, добавив связи для папок с логами в текущей папке с файлом docker-compose.yml.

  1. Папка extensions содержит расширения, одинаковые для веб-сервиса и Chronos.

  2. Папка logs_web будет содержать логи веб-сервиса, по умолчанию это файл log.txt.

  3. Папка logs_chronos будет содержать логи Chronos, по умолчанию это файл log.txt.

  4. Папка logs_jinni будет содержать логи веб-сервиса Jinni, по умолчанию это файл log.txt.

Троеточием обозначены пропущенные строки, которые будут перед строками связей, которые требуется добавить (строка связи начинается со знака дефиса):

web: ... volumes: ... - ./extensions:/root/platform/web/extensions - ./logs_web:/root/platform/web/logs

...

chronos: ... volumes: ... - ./extensions:/root/platform/chronos/extensions - ./logs_chronos:/root/platform/chronos/logs

...

jinni: ... volumes: ... - ./logs_jinni:/root/platform/jinni/logs

Для применения изменений остановите контейнеры скриптом stop.bat и снова запустите их скриптом start.bat.

Note

Первый раз при запуске контейнера с привязанными папками может отобразиться предупреждение вида Share disk C:\ with container?, подтвердите его, при этом потребуется ввести пароль администратора Windows. Если после этого вы получите ошибку в окне консоли вида Drive sharing seems blocked by a firewall, то настройте правила вашего firewall в соответствии с инструкцией: https://docs.docker.com/docker-for-windows/#firewall-rules-for-shared-drives (обычно требуется отключить блокировку входящих соединений TCP по порту 445). После настройки повторите команду запуска контейнеров.

Tip

Также можно разрешить общий доступ из контейнера к дискам Windows, открыв окно Settings в контекстном меню Docker Desktop в трее, и на вкладке Shared Drives выбрав нужную букву диска и нажав Apply. Если вы не настроили firewall, и он блокирует порты, то вы также получите предупреждение. Docker гарантирует, что контейнер получает доступ к указанным подпапкам Windows, в соответствии с настроенной связью в docker-compose.yml, но разрешить доступ требуется для всего диска C:\ (или другого диска, где расположен docker-compose.yml).

Когда необходимо изменить файлы конфигурации или обновить расширения, и приложение TESSA уже работает в контейнерах Docker, то для применения изменений потребуется остановить stop.bat и снова запустить приложение start.bat. Вы можете дорабатывать эти скрипты по своим требованиям.

Back to top