3. Настройка и запуск Агента СМЭВ4
3.1. Порядок загрузки данных и программ
Администратор УВ осуществляет развёртывание, запуск и настройку Агента СМЭВ4 с помощью данного руководства.
3.2. Подготовка и настройка системы для запуска Агента СМЭВ4 без использования Docker
3.2.1. Состав и содержание дистрибутивного пакета
В состав дистрибутива Агента СМЭВ4 входит исполняемый файл /distr/einfahrt/app/app.jar, расположенный в архиве с бинарными файлами (/distr/einfahrt).
Путь /distr/einfahrt указан в качестве примера. Допустимо использовать любой другой путь,
скорректировав соответствующим образом упоминаемые ниже команды.
Перечень коммерческого ПО третьих лиц, необходимого для работы Агент СМЭВ4 приведен в Раздел 2.2.2.
3.2.2. Предварительные операции (установка «пре-реквизитов»)
Перед запуском Агента СМЭВ4 выполните от имени пользователя root, либо используя команду sudo, следующие действия:
Создайте пользователя {{user}} и группу {{user_group}}, под которым будет работать Агент СМЭВ4. Создайте каталог
/distr/einfahrt, владельцем каталога назначьте пользователя {{user}}. Создайте каталог/distr/einfahrt/app, скопируйте в него исполняемый файл Агентаapp.jarиз дистрибутивного пакета.
Примечание
Для того, чтобы пользователь мог перезапускать Агента и смотреть системный лог укажите: {{ user }} ALL=NOPASSWD:/bin/journalctl,/bin/systemctl. Если убрать «NOPASSWD:», то пароль будет запрашиваться каждый раз.
Установите JDK (версия в примере ниже может отличаться для загруженного пакета).
Для ALT 8 SP Server 10
apt install axiomjdk-jdk-certified17.0.6+11-linux-amd64.alt8.rpm
Для RedOS 7.3
yum install axiomjdk-jdk-certified17.0.6+11-linux-amd64.rpm
Для Astra Linux 1.7 SE
apt-get install axiomjdk-jdk-certified17.0.6+11-linux-amd64.deb
Установите системные переменные:
export JAVA_HOME=/usr/lib/jdk/axiomjdk-java17.x86_64
export PATH=$PATH:$JAVA_HOME/bin
Переменные должны устанавливаться автоматически также после перезагрузки сервера.
Для этого рекомендуется внести данную настройку в profile ОС (/etc/profile.d).
Установите CryptoPro CSP, используя загруженный с сайта производителя пакет.
Внимание
Не требуется устанавливать отдельный экземпляр CryptoPro CSP для Агента или опционального компонента Prohibitor, если используется сервис подписания и верификации сообщений, установленный на отдельном сервере (Раздел 4.3.12 и Раздел 7.2.5.4). В этом случае CryptoPro CSP требуется установить на сервер, на котором разворачивается сервис подписания и верификации сообщений (Раздел 10).
При установке на RedOS 7.3:
tar -xzvf linux-amd64.tgz
cd linux-amd64
yum -y install lsb-cprocsp-base*.rpm lsb-cprocsp-rdr-64*.rpm lsb-cprocsp-kc1-64*.rpm lsb-cprocsp-capilite-64*.rpm lsb-cprocsp-devel*.rpm lsb-cprocsp-kc2-64*.rpm cprocsp-curl-64*.rpm
./install.sh
cd ..
При установке на Astra Linux 1.7 SE:
cd /distr/einfahrt
tar -xzvf linux-amd64_deb.tgz
cd linux-amd64_deb
apt -y install lsb-cprocsp-base*.deb lsb-cprocsp-rdr-64*.deb lsb-cprocsp-kc1-64*.deb lsb-cprocsp-capilite-64*.deb lsb-cprocsp-devel*.deb lsb-cprocsp-kc2-64*.deb cprocsp-curl-64*.deb
./install.sh
cd ..
При установке на ALT 8 SP Server 10:
tar -xzvf linux-amd64.tgz
cd linux-amd64
apt-get -y install lsb-cprocsp-base*.rpm lsb-cprocsp-rdr-64*.rpm lsb-cprocsp-kc1-64*.rpm lsb-cprocsp-capilite-64*.rpm lsb-cprocsp-devel*.rpm lsb-cprocsp-kc2-64*.rpm cprocsp-curl-64*.rpm
./install.sh
cd ..
При наличии лицензионного кода CryptoPro CSP выполните команду:
sudo /opt/cprocsp/sbin/amd64/cpconfig -license -set {{cprocsp_license_code}}
В случае отсутствия лицензионного кода, CryptoPro CSP будет работать в режиме trial лицензии.
Внимание
Срок действия trial лицензии – 90 дней с момента установки CryptoPro CSP. Для сохранения работоспособности Агента СМЭВ4 по окончании данного периода, необходимо приобрести лицензию на CryptoPro CSP и внести её в систему как указано выше.
Установите контейнер ключа CryptoPro в директорию
/var/opt/cprocsp/keys/{{user}}/. Пользователь {{user}} должен быть владельцем данной директории и файлов в ней.
Примечание
Установка ключа CryptoPro требуется только на серверы, на которых устанавливается CryptoPro. Т.е. в случае использования сервиса подписания и верификации сообщений, (Раздел 4.3.12 и Раздел 7.2.5.4), установка ключей производится только на сервере сервиса подписания и верификации сообщений (notarius)
В файл
/etc/hostsвнесите записи, соответствующие адресам серверов аутентификации:
172.20.59.5 podd.gosuslugi.ru
172.20.59.5 podd-cross.gosuslugi.ru
109.207.15.26 podd1.gosuslugi.ru
109.207.15.58 podd2.gosuslugi.ru
109.207.15.154 podd3.gosuslugi.ru
109.207.15.186 podd4.gosuslugi.ru
109.207.15.26 podd1-cross.gosuslugi.ru
109.207.15.58 podd2-cross.gosuslugi.ru
109.207.15.154 podd3-cross.gosuslugi.ru
109.207.15.186 podd4-cross.gosuslugi.ru
Или выполните команды:
echo -e “\n\n# Адреса сервиса аутентификации Агента СМЭВ4”
echo -e “\n\n172.20.59.5 podd.gosuslugi.ru” >> /etc/hosts
echo -e “172.20.59.5 podd-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.26 podd1.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.58 podd2.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.154 podd3.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.186 podd4.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.26 podd1-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.58 podd2-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.154 podd3-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.186 podd4-cross.gosuslugi.ru” >> /etc/hosts
Добавьте в каталог
/distr/enfahrtконфигурационный файлapplication.yml, подготовленный согласно описанию в Раздел 4. Установите пользователя {{user}} владельцем данного файла.Создайте каталог
/distr/enfahrt/tmp, установите пользователя {{user}} владельцем данного каталога. Необходимость его создания связана с ограничениями, накладываемыми рядом ОС на использование/tmpдля java приложений.
3.2.3. Запуск Агента СМЭВ4
Убедитесь, что пользователь {{user}} имеет доступ к директории, в которой установлен Агент СМЭВ4 (/distr/einfahrt).
При использовании сервиса systemd для запуска Агента СМЭВ4 создайте файл конфигурации с именем einfahrt.service и сохраните его в каталог /etc/systemd/system/,
скорректировав, при необходимости, пути к файлам.
Пример файла конфигурации einfahrt.service:
[Unit]
Description="Service for einfahrt"
After=syslog.target
[Service]
Type=simple
Restart=on-success
WorkingDirectory=/distr/einfahrt
LimitNOFILE=1048576:1048576
# Важно! Запуск должен производиться от имени того пользователя, для которого ранее были выложены ключи CryptoPro!
User={{user}} # указать пользователя
Group={{user_group}} # указать группу
Environment="JAVA_HOME=/usr/lib/jdk/axiomjdk-java17.x86_64"
Environment="JDK_JAVA_OPTIONS=--add-exports=java.base/sun.security.util=ALL-UNNAMED \
--add-exports=java.base/sun.security.x509=ALL-UNNAMED \
--add-exports=java.base/sun.security.pkcs=ALL-UNNAMED \
--add-exports=java.base/sun.security.provider=ALL-UNNAMED \
--add-exports=java.base/sun.security.tools.keytool=ALL-UNNAMED \
--add-exports=java.base/sun.net=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.xml/org.w3c.dom=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
-Dio.netty.tryReflectionSetAccessible=true \
-Dsaffron.default.charset=UTF-16LE \
-Dsaffron.default.collation.name='UTF-16LE$en_US' \
-Dsaffron.default.nationalcharset=UTF-16LE \
-Djava.io.tmpdir=/distr/einfahrt/tmp \
-XX:MaxRAMPercentage=80.0"
ExecStart=/usr/lib/jdk/axiomjdk-java17.x86_64/bin/java -jar app/app.jar
[Install]
WantedBy=multi-user.target
Далее от имени пользователя root или используя sudo выполните команды включения, запуска сервиса и проверке его статуса:
sudo systemctl daemon-reload
sudo systemctl enable einfahrt
sudo systemctl start einfahrt
sudo systemctl -l status einfahrt
3.2.4. Проверка работоспособности Агента СМЭВ4 после включения и запуска сервиса
Для проверки соединения Агента с Ядром СМЭВ4 необходимо выполнить команду с использованием утилиты Curl.
Если утилита Curl не установлена, установите ее из базового репозитория.
Установка curl на Astra Linux 1.7 SE выполняется командой:
sudo apt-get install curl
Установка curl на RedOS 7.3 выполняется командой:
sudo dnf install curl
Проверка корректной установки Агента СМЭВ4 осуществляется командой:
curl -X POST 'http://agent-ip-address:8192/query?async=false' -H "Accept-Version: 1" -H "Content-Type: application/json" -d '{"sql": {"sql": "select 1"}}'
Вывод должен быть следующим:
{
"created_at": "YYYY-MM-DD HH-MM-SS",
"query_id": "<identifier>",
"meta": [
{
"name": "EXPR$0",
"type": "INTEGER"
}
],
"rows": [
[
"1"
]
]
}
3.2.5. Настройка ротации логов (опционально)
Во избежание переполнения диска лог-файлами, рекомендуется настроить ротацию лог-файлов systemd.
Настройка логирования осуществляется с помощью файлов конфигурации logrotate и systemd. Если этих файлов не существует, их необходимо создать.
Установите пакет logrotate, для rpm-base дистрибутивов выполнив команду:
sudo yum install logrotate
Добавьте в файл systemd (/etc/systemd/system/einfahrt.service) следующие настройки логирования:
...
[Service]
Type=simple
StandardOutput=append:/var/log/{{ file_name }}
StandardError=append:/var/log/{{ file_name }}
...
Создайте файл конфигурации logrorate (поместить файл в /etc/logrotate.cron/einfahrt.conf) и поместите в него
следующие строки:
/var/log/{{ file_name }} {
rotate {{ rotate }}
size {{ file_size }}
create
nocompress
copytruncate
}
где:
rotate– какое количество лог файлов оставлять;file_size– размер лог-файла при котором будет происходить ротация.
Создайте файл со скриптом запуска утилиты logrotate, поместите скрипт по пути /etc/logrotate.cron/einfahrt.sh:
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.cron/einfahrt.conf
Добавьте права на запуск командой:
chmod +x /etc/logrotate.cron/einfahrt.sh
Создайте файл /etc/cron.d/einfahrt и создайте правила cron, поместите в него приведенную ниже строку:
*/1 * * * * root /etc/logrotate.cron/einfahrt_logrotate.sh
Перезагрузите systemd сервис:
sudo systemctl daemon-reload
sudo systemctl restart einfahrt
3.3. Альтернативный вариант вывода логов в файл и настройка их ротации, без использования механизмов systemd
Агент СМЭВ4 поддерживает запись логов в файл вместо стандартного вывода (stdout).
Для включения данного варианта логирования, добавьте значение параметра FILE_LOG_ENABLED=true в параметры запуска.
Данный параметр передается через указание дополнительного ключа «-D» в переменной JDK_JAVA_OPTIONS (пример в Раздел 3.4).
Внимание
При использовании FILE_LOG_ENABLED=true, вывод логов в stdout отключается
Дополнительно могут быть заданы следующие опциональные параметры (в примере указаны значения по умолчанию):
имя лог-файла:
LOG_FILE_NAME=log;имя каталога с лог-файлами:
LOG_FILE_DIR=/logs;максимальный размер текущего файла с логами (при его достижении происходит ротация лога):
MAX_FILE_SIZE=100MB;сколько дней хранить логи:
MAX_DAY_HISTORY=30;максимальный объем всех логов:
TOTAL_CAP_SIZE=2GB;удалять старые архивы при старте:
CLEAN_HISTORY_ON_START=false.
Примечание
Каталог, указанный в параметре LOG_FILE_DIR, должен существовать, и быть доступным на запись для пользователя под которым запущен Агент СМЭВ4
3.4. Настройка логирования в формате «Гостех» (опционально)
Агент СМЭВ4 поддерживает запись логов в формате «Гостех».
Для включения данного варианта логирования, добавьте значение параметра GOSTECH_LOG_ENABLED=true в параметры запуска.
Данный параметр передается через указание дополнительного ключа «-D» в переменной JDK_JAVA_OPTIONS.
Дополнительно могут быть заданы следующие опциональные параметры (в примере указаны значения по умолчанию):
имя лог-файла:
GOSTECH_LOG_FILE_NAME=log;имя каталога с лог-файлами:
GOSTECH_LOG_DIR=/fluent-bit/logs;максимальный размер текущего файла с логами:
GOSTECH_MAX_FILE_SIZE=100MB;сколько дней хранить логи:
GOSTECH_MAX_DAY_HISTORY=7;максимальный объем всех логов:
GOSTECH_TOTAL_CAP_SIZE=2GB;удалять старые архивы при старте:
GOSTECH_CLEAN_HISTORY_ON_START=false.
Примечание
Каталог, указанный в параметре GOSTECH_LOG_DIR, должен существовать, и быть доступным на запись для пользователя под которым запущен Агент СМЭВ4
Пример определения переменной JDK_JAVA_OPTIONS в файле einfahrt.service с включенным логированием в формате «Гостех»:
Environment="JDK_JAVA_OPTIONS=--add-exports=java.base/sun.security.util=ALL-UNNAMED \
--add-exports=java.base/sun.security.x509=ALL-UNNAMED \
--add-exports=java.base/sun.security.pkcs=ALL-UNNAMED \
--add-exports=java.base/sun.security.provider=ALL-UNNAMED \
--add-exports=java.base/sun.security.tools.keytool=ALL-UNNAMED \
--add-exports=java.base/sun.net=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.xml/org.w3c.dom=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
-Dio.netty.tryReflectionSetAccessible=true \
-Dsaffron.default.charset=UTF-16LE \
-Dsaffron.default.collation.name='UTF-16LE$en_US' \
-Dsaffron.default.nationalcharset=UTF-16LE \
-Djava.io.tmpdir=/distr/einfahrt/tmp \
-XX:MaxRAMPercentage=80.0 \
-DGOSTECH_LOG_ENABLED=true \
-DGOSTECH_LOG_DIR=/fluent-bit/logs/ \
-DGOSTECH_LOG_FILE_NAME=log"
Внимание
Настройка GOSTECH_LOG_ENABLED=true имеет преимущество, при ее использовании значение настроек LOG_FILE_* игнорируется,
3.5. Включение протоколирования тел запросов/ответов с сохранением в БД Clickhouse или лог-файл (опционально)
Внимание
Данное протоколирование [3] работает только в случае использования функционала «поставщик ответов на SQL запросы» и/или «поставщик ответов по REST РЗ»,
т.е. в конфигурационном файле должен быть включен соответствующий данному функционалу профайл, либо отсутствовать настройка spring.profiles, см.
описание параметров конфигурационного файла Агента СМЭВ4
Для протоколирования тел запросов/ответов с сохранением в БД Clickhouse добавьте:
в конфигурационный файл
# Настройки модуля "Протоколирование запросов/ответов"
audit-req-resp:
enabled: true
Подробнее в Раздел 4.3.20.
в параметрах запуска:
-DAUDIT_REQ_RESP_ENABLED=true
Для указания настроек подключения к БД:
-DAUDIT_REQ_RESP_JDBC_URL="jdbc:clickhouse://*clickhouse_host*:8123/database_name?user=database_login&password=database_password"
Для подробного логирования парсера конфигурации logback:
-Dlogback.debug=true
Для проверки загрузки классов (только при необходимости отладки):
-verbose:class
Для включения протоколирования тел запросов/ответов с сохранением в файл:
-DAUDIT_REQ_RESP_FILE_ENABLED=true
Дополнительно можно указать параметры (приведены значения по умолчанию):
имя лог-файла:
-DAUDIT_REQ_RESP_FILE_NAME=gostechимя папки с лог-файлами:
-DAUDIT_REQ_RESP_FILE_LOG_DIR=/fluent-bit/logs/
Примечание
Каталог, указанный в параметре AUDIT_REQ_RESP_FILE_LOG_DIR, должен существовать и быть доступным на запись для пользователя, под которым запущен Агент СМЭВ4
Внимание
Значение параметра AUDIT_REQ_RESP_FILE_LOG_DIR должно заканчиваться символом «/»
3.5.1. Рекомендации по объемам ресурсов, необходимых для протоколирования тел запросов/ответов с сохранением в БД Clickhouse
Системные требования для установки ClickHouse, приведенные в Таблица 3.1, являются минимальными. Целевой сайзинг необходимо рассчитывать исходя из требований организации.
CPU, Ядра |
RAM, Gb |
HDD, Gb |
SSD, Gb |
Количество ВМ |
|---|---|---|---|---|
8 |
64 |
120 |
X |
1 |
Примечание
Данные приведены без учета ресурсов, потребляемых самой ОС. Рекомендации по сайзингу и аппаратному обеспечению в документации ClickHouse: https://clickhouse.com/docs/.
Для установки ClickHouse возможно использование системного HDD-диска, для хранения логических данных (Datastorage) обязательно использование SSD-накопителей.
Предварительный расчет объема хранилища, требуемого для хранения логических данных (Data storage) может быть выполнен по формуле:
где:
V – средний суточный прирост объема сохраняемых данных, рассчитанный по формуле:
d – срок хранения данных в днях;
k – коэффициент запаса (1,2 -1,5 (20-50%));
r – количество реплик (опционально).
Пример расчета со следующими исходными данными:
средний размер одного запроса / ответа – 1 KB;
средняя суточная интенсивность обменов – 100 RPS;
срок хранения данных – 30 дней.
Примечание
Приведенная формула выполняет верхнеуровневый расчет объема Data storage (например, не учитывается сжатие данных при записи в колонки БД), для уточнения расчета следует провести тестирование на профиле нагрузки, близком к продуктивному.
Для регулирования срока хранения данных в ClickHouse есть внутренний механизм управления устаревшими записями. За это отвечает параметр TTL. TTL всегда привязан к столбцу с типом Date или DateTime, задается в формате:
TTL <наименование столбца> + INTERVAL <интервал>
Существуют следующие виды интервалов TTL:
SECOND – секунды;
MINUTE – минуты;
HOUR – часы;
DAY – дни;
WEEK – недели;
MONTH – месяцы;
QUARTER – кварталы (3 месяца);
YEAR – годы.
TTL может указываться при определении схемы таблицы, например:
CREATE TABLE LOGS (…)
ENGINE = MergeTree()
ORDER BY TIMESTAMP
TTL TIMESTAMP + INTERVAL 30 DAY; -- Все записи старше 30 дней будут удаляться
TTL может быть переопределён для уже существующей таблицы, например:
ALTER TABLE LOGS MODIFY TTL TIMESTAMP + INTERVAL 2 MONTH; -- Все записи старше двух месяцев будут удаляться
Для удаления текущего значения TTL возможно использование команды:
ALTER TABLE LOGS REMOVE TTL;
Примечание
В ClickHouse помимо удаления (Deletion TTL) существуют и другие типы правил, определяющих действия с устаревшими данными, например, правило перемещения. Подробнее о механизме TTL в документации ClickHouse – https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree#ttl.
3.6. Настройка и запуск Агента СМЭВ4 с использованием Docker
3.6.1. Предварительные условия
На сервере должен быть установлен Docker версии не ниже 20.10.12.
Создан пользователь, который будет запускать Агент СМЭВ4.
Этот пользователь должен иметь права на загрузку докер-образов и запуск/остановку контейнеров (т.е. добавлен в группу Docker).
3.6.2. Настройка ротации лог-файлов в Docker (опционально)
Во избежание переполнения диска лог-файлами, рекомендуется настроить ротацию лог-файлов контейнеров в Docker.
Настройка логирования в Docker осуществляется с помощью файла конфигурации /etc/docker/daemon.json.
Если этого файла не существует, его необходимо создать. Добавьте в файл следующие настройки логирования:
для Astra Linux 1.7 SE:
{
"log-opts": {
"max-file": "3",
"max-size": "100m"
}
}
для RedOS 7.3:
{
"log-driver": "json-file",
"live-restore": true,
"icc": false,
"disable-validation": true,
"log-opts": {
"max-file": "3",
"max-size": "100m"
}
}
где:
max-file– ограничение по количеству файлов (настройки ротации). Максимальное количество файлов журнала, которые могут быть созданы. При превышении количества самый старый файл удаляется. Действует только при установленном параметреmax-size. Положительное целое число. По умолчанию 1.max-size– устанавливает ограничение по размеру лог-файла (k, m или g). По умолчанию -1 (не ограничено).
3.6.3. Состав и содержание дистрибутивного пакета
Для запуска Агента под Docker необходимо самостоятельно собрать Docker-образы, согласно описания в Раздел 10.
3.6.4. Подготовка к запуску
Для запуска Агента СМЭВ4 после распаковки пакета сформируйте конфигурационный файл application.yml,
как указано в Раздел 4.3 , и сохраните его в каталог /distr/einfahrt.
В каталоге /distr/einfahrt:
создайте подкаталог
keys, сохраните в него полученный ключ CryptoPro в распакованном виде ;
Примечание
создание подкаталога keys и сохранение в него ключа не требуется в случае использования сервиса подписания и верификации сообщений, (Раздел 4.3.12 и Раздел 7.2.5.4), в таком случае установка ключей производится только на сервере сервиса подписания и верификации сообщений (notarius)
создайте подкаталог
certs, подготовьте файл cacerts согласно Раздел 4.3.10, сформированный файл сохраните в каталог/distr/einfahrt/certs(только при использовании HTTPS API gateway).
При наличии файла расширенных настроек логирования customLogLevels.xml сохраните его в каталог /distr/einfahrt.
Для запуска Агента СМЭВ4 под Docker, полученный Docker образ загрузите в локально установленный Docker на машине, где будет работать Агент СМЭВ4.
Для этого сохраните архив с образом на локальный диск этой машины и выполните команду:
docker load < einfahrt.tgz
где einfahrt.tgz – имя полученного архива с Docker образом Агента СМЭВ4.
Загрузка должна завершиться без ошибок.
Убедитесь в успешности загрузки командой:
docker images | grep einfahrt
Вывод будет содержать информацию следующего вида:
einfahrt latest c7511824117e 5 days ago 1.2G
3.6.5. Запуск Агента СМЭВ4
Для запуска Агента СМЭВ4 используется скрипт run_agent.sh:
#!/bin/bash
# Название docker image указать здесь
IMAGE=einfahrt:latest
# Список используемых портов приложения, указывается в круглых скобках
PORT_LIST=(8183 8192 8172)
###### DO NOT EDIT BELOW THIS LINE ###### НЕ РЕДАКТИРОВАТЬ НИЖЕ ######
stop()
{
echo $1
exit 1
}
#
IMG=$(echo ${IMAGE} |cut -d: -f1)
TAG=$(echo ${IMAGE} |cut -d: -f2)
[ ! -f application.yml ] && stop "File application.yml not found; exiting" || chmod 0666 application.yml
DIR=$(pwd)
[ ! -d keys ] && stop "\"keys\" directory not found; exiting"
MOUNTS=" --mount type=bind,source=${DIR}/application.yml,target=/egov/java/application.yml,readonly"
[ -d keys ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/keys,target=/var/opt/cprocsp/keys/app"
[ -d certs ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/certs,target=/egov/java/certs,readonly"
# check exisence of mandatory objects; set permissions
for OBJECT in certs keys; do
[ -d ${OBJECT} ] && find ${OBJECT} \( -type f -exec chmod 0666 {} + \) -o \( -type d -exec chmod 0777 {} + \)
done
# Если есть лицензия КриптоПро CSP, она должна находиться в текстовом виде в файле licenses/csp.lic
# При отсутствии внешнего файла с лицензией, будет использовано trial лицензирование CryptoPro
[ -f licenses/csp.txt ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/licenses/csp.txt,target=/egov/csp.lic,readonly"
# custom logger configuration, if exists
if [ -f customLogLevels.xml ]; then
chmod 0666 customLogLevels.xml
MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/customLogLevels.xml,target=/chgCfgTmp/customLogLevels.xml"
fi
# expose ports
unset PORTS
for OBJECT in ${PORT_LIST[@]}; do
PORTS="${PORTS} -p ${OBJECT}:${OBJECT}"
done
echo "Checking for already started container, stop it if running"
[ ! -z $(docker ps |awk '{print $NF}'|grep "^${IMG}$") ] && docker stop ${IMG} >/dev/null
[ ! -z $(docker ps -a |awk '{print $NF}'|grep "^${IMG}$") ] && docker rm ${IMG} >/dev/null
echo "Starting docker container"
# Важно! Для корректного использования ключей CryptoPro,
# процесс в контейнере docker должен выполняться пользователем app (id=1000)
# использование ключа «--user=1000» обязательно!
docker run \
-d \
--user=1000 \
--name ${IMG} \
--add-host podd.gosuslugi.ru:172.20.59.5 \
--add-host podd1.gosuslugi.ru:109.207.15.26 \
--add-host podd2.gosuslugi.ru:109.207.15.58 \
--add-host podd3.gosuslugi.ru:109.207.15.154 \
--add-host podd4.gosuslugi.ru:109.207.15.186 \
--add-host podd-cross.gosuslugi.ru:172.20.59.5 \
--add-host podd1-cross.gosuslugi.ru:109.207.15.26 \
--add-host podd2-cross.gosuslugi.ru:109.207.15.58 \
--add-host podd3-cross.gosuslugi.ru:109.207.15.154 \
--add-host podd4-cross.gosuslugi.ru:109.207.15.186 \
${PORTS} \
--env LANG=en_US.UTF-8 \
--env LC_ALL=en_US.UTF-8 \
--env JDK_JAVA_OPTIONS="" \
${MOUNTS} \
${IMG}:${TAG}
[ $? -eq 0 ] && echo "Application started. Container name: ${IMG}. " || echo "Error starting docker."
Скрипт не требует указания параметров. При выполнении всех шагов, перечисленных в Раздел 3.6.4, Агент СМЭВ4 будет успешно запущен. При повторном выполнении скрипта контейнер будет остановлен и запущен заново.
Для сохранения лога Агента СМЭВ4 в файл, запустите скрипт log-save.sh, приведенный ниже. Лог будет сохранен в файле log-дата-время.txt.
#!/bin/bash
NAME="einfahrt"
LOGFILE="log-$(date +%Y%m%d-%H%M%S).txt"
echo "Check for container presence, gathering log"
if [ ! -z $(docker ps -a |awk '{print $NF}'|grep "^${NAME}$") ]; then
docker logs ${NAME} >${LOGFILE} 2>&1
echo "Log file gathered; See ${LOGFILE} for details"
else
echo "ERROR: No container process found"
exit 1
fi
Остановка контейнера осуществляется командой docker stop einfahrt.
Примечание
В ряде случаев может наблюдаться остановка контейнера через несколько секунд после запуска, с сообщением в логе
java.lang.IllegalStateException: Ошибка вызова функции acquireContext: 0x8009001a. В этом случае следует изменить
владельца каталога keys и вложенных подкаталогов и файлов на пользователя с id=1000 (потребуются root права): chown -R 1000 keys после
чего повторить выполнение скрипта запуска контейнера.
3.7. Обновление Агента СМЭВ4
Для обновления версии Агента СМЭВ4 выполните следующие шаги:
Скачайте с портала ЕСКС образцы файлов конфигурирования нужной версии.
Заполните файл конфигурации
application.yamlактуальными данными в соответствии с описанием в Раздел 4.3.Из пакета с дистрибутивом скопируйте новую версию исполняемого файла Агента
app.jarв каталог/distr/einfahrt/app, как указано в Раздел 3.2.2.Проверьте файл
einfahrt.serviceна соответствие с описанием в Раздел 3.2.3.Запустите Агент СМЭВ4.
Для обновления версии Агента СМЭВ4 с использованием Docker выполните шаги описанные в Раздел 3.6.4 и Раздел 3.6.5.
3.8. Информация по лицензированию CryptoPro в случае запуска Агента СМЭВ4 под Docker
Устанавливаемая в докер-контейнер (Раздел 10) версия CryptoPro не имеет предустановленной лицензии, и может работать в «пробном режиме» в течение трех месяцев с момента создания образа (не с момента первого запуска!).
Для использования пробной версии CryptoPro не требуется каких-либо дополнительных действий, касающихся лицензирования.
В случае, если имеется в наличии полная серверная лицензия на CryptoPro CSP, предусмотрена возможность передачи номера лицензий CSP при запуске контейнера. При передаче валидной лицензии, CryptoPro будет лицензирована на этапе запуска контейнера.
Для этого необходимо, чтобы текстовый файл, содержащий строку с лицензией на CryptoPro CSP, был при запуске контейнера
доступен внутри контейнера по пути /egov/csp.lic.
При запуске под Docker можно для этого монтировать внешние файлы, содержащие номера лицензии, по указанным выше путям.
Для того, чтобы прилагаемый скрипт запуска применил имеющуюся лицензию CryptoPro, её необходимо поместить в
текстовый файл licenses/csp.txt. При отсутствии лицензии и использовании пробной версии CryptoPro не создавайте
указанный файл.
Внимание
Срок действия пробной лицензии – 90 дней с момента создания Docker image используемого Агента. Для сохранения работоспособности Агента СМЭВ4 по окончании данного периода необходимо приобрести лицензию на CryptoPro CSP и внести ее в систему, как указано выше.