Запуск агента СМЭВ4 (ПОДД) под docker

Запуск агента СМЭВ4 (ПОДД) под docker

Команда СМЭВ

Агент, упакованный в docker image, уже имеет предустановленными все необходимые компоненты (java, CryptoPro CSP, CryptoPro JCP). 

Входящие в поставку версии CryptoPro не имеют предустановленной лицензии, и могут работать как trial в течение трех месяцев с момента создания образа.

Предусмотрена возможность передачи номеров лицензий CSP и JCP при запуске контейнера, которая подробно описано в Руководстве Администратора агента ПОДД СМЭВ.

Шаги, необходимые для запуска агента для ОС centos 7 под docker:

 От имени администратора сервера (root):

1) установить docker

curl -fsSL https://get.docker.com/ | sh

2) создать пользователя и добавить его в группу docker:

adduser $USER
usermod -aG docker $USER

где $USER - имя пользователя

3) запустить docker

systemctl start docker

4) cкачать образ и дистрибутив агента с портала раздел "Для подключения к СМЭВ 4".

От имени пользователя:

5) загрузить docker образ агента в локально установленный docker, на машине, где будет работать агент.

docker load < agent_v.tgz

где agent_v.tgz – имя полученного архива с docker image агента

Загрузка должна завершиться без ошибок.

проверить загрузку можно командой

docker images

которая должна вернуть примерно следующую запись:

einfahrt                                                                latest         c7511824117e  5 days ago     1.2GB

6) cформировать конфиг агента application.yml

Как его формировать описано в README.txt в архиве "Дистрибутив агента версия v.zip", там же шаблоны конфигов для разных сред и ролей агентов.

7) скопировать/сформировать в одной директории сервера следующий комплект:

  • конфиг агента application.yml;
  • ключи контейнера закрытого ключа сертификата, привязанного к агенту в директорию keys;
  • файл cp_ca_store из архива "Дистрибутив агента версия v.zip" в директорию certs;
  • Скрипт запуска docker образа (einfahrt.sh).

Пример скрипта:

#!/bin/bash

IMG="einfahrt:latest"
NAME="einfahrt"

echo "Checking for already started container, stop it if running"
[ ! -z $(docker ps |awk '{print $NF}'|grep "^${NAME}$") ] && docker stop ${NAME}
[ ! -z $(docker ps -a |awk '{print $NF}'|grep "^${NAME}$") ] && docker rm ${NAME}

DIR=$(pwd)

# установка прав на объекты
for OBJECT in certs keys; do
  find ${OBJECT} \( -type f -exec chmod 0666 {} + \) -o \( -type d -exec chmod 0777 {} + \)
done

# Если есть лицензии КриптоПро, они должны находиться в текстовом виде в файлах licenses/csp.lic и licenses/jcp.lic
# for OBJECT in jcp csp; do
#  [ -f licenses/${OBJECT}.txt ] && LICENSE=" ${LICENSE} --mount type=bind,source=${DIR}/licenses/${OBJECT}.txt,target=/egov/${OBJECT}.lic,readonly"
# done

echo "Starting docker container"
docker run \
  -d \
  --user=1000 \
  --net=host \
  --name ${NAME} \
  --mount type=bind,source=${DIR}/certs,target=/egov/java/certs \
  --mount type=bind,source=${DIR}/keys,target=/var/opt/cprocsp/keys/app \
  --mount type=bind,source=${DIR}/application.yml,target=/egov/java/application.yml \
  --env JDK_JAVA_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:InitiatingHeapOccupancyPercent=16 -XX:+UseStringDeduplication -XX:+G1EagerReclaimHumongousObjects -XX:+G1EagerReclaimHumongousObjectsWithStaleRefs -XX:G1HeapWastePercent=2 -XX:G1MaxNewSizePercent=25 -XX:G1MixedGCLiveThresholdPercent=15 -XX:+UseG1GC" \
  ${IMG}

[ $? -eq 0 ] && echo "Application started. Container name: ${NAME}. Available ports: 8183 (jdbc), 8192 (REST + driver download), 8171 (API gateway), 8182 (OpenAPI specifications)" || echo "Error starting docker."


8) выдать права на выполнение скрипта:

chmod +x einfahrt.sh

9) выполнить скрипт запуска:

./einfahrt.sh

10) Проверить работу агента и его связь с ядром ПОДД:

curl -X POST -H "Accept-Version:1" -H "Content-Type: application/json" -d '{"sql": {"sql": "select 1"}}' http://localhost:8192/query --silent -m 30

Получить лог-файл агента, запущенного под docker данным скриптом, можно командой

docker logs einfahrt

В ряде случаев возможна остановка контейнера через несколько секунд после запуска, с сообщением в логе «java.lang.IllegalStateException: Ошибка вызова функции acquireContext: 0x8009001a».

В этом случае следует изменить владельца каталога keys и вложенных подкаталогов и файлов на пользователя с id=1000:

chown -R 1000 keys

после чего повторить выполнение скрипта запуска контейнера.


Report Page