Руководство по установке Агредатор Лайт со СМЭВ3

Развертывание

Цели и функции системы

Программный продукт Агредатор Лайт предназначен для организации электронного документооборота с федеральной службой судебных приставов.

Требования к аппаратной части

Для развертывания Агредатор Лайт требуется инфраструктурные мощности:

  • СУБД PostgreSQL: 2 CPU 4 GB MEM 100 GB HDD
  • S3 (Minio): 2CPU 4 GB MEM 250 GB HDD

При этом можно запустить на одной ВМ с суммарной мощностью 4 CPU 4 GB MEM 300 GB HDD

Характеристика ВМ для Агредатор Лайт: 12 CPU 12 GB MEM 100 GB HDD

Требование к программной части

  • Docker - не ниже 20.10.16 (рекомендуемое 24.0.2+ (compose встроен))
  • docker-compose (отдельный) - не ниже 1.29.2 (рекомендуемое 2.19.0+)
  • ОС - Linux
  • Наличие лицензии КриптоПро CSP 5.0
  • Наличие сетевого доступа к каналу со СМЭВ3

Подготовительные работы

Все ВМ, на которых планируется запуск Агредатор Лайт должны иметь доступ до приватного Docker-реестра harbor.rnds.pro. В поставляемом архиве содержится вспомогательный скрипт для авторизации:

./docker-login.sh

Установка

Поставка платформы Агредатор Лайт состоит из набора сервисов, необходимых для его запуска:

  • agg_lite - является базовым сервисом выполняющим роль основного приложения Агредатор Лайт и включающий себя сервисы, необходимы для функционирования системы
  • agg_lite_signer - сервис, выполняющий роль подписания запросов КЭП для взаимодействия с ФССП
  • agg_lite_postgres - база данных PostgreSQL
  • agg_lite_redis - база данных Redis
  • agg_lite_s3 - s3 хранилище Minio

Внимание ! Сервисы agg_lite_postgres (PostgreSQL), agg_lite_redis (Redis) и agg_lite_minio (Minio s3 object storage) являются дополнением к поставке и не рекомендуется для постоянного использования! Весь риск и последствия использования тестовых баз данных PostgreSQL и Redis, а также s3 Minio лежат на заказчике.

Базовой директорией размещения конфигурационных файлов сервиса зафиксирована директория в файловой системе:

/storage/configs/agg_lite

У текущего пользователя системы должны быть права на использование этой директории.

Следующий скрипт копирует все конфигурационные файлы из текущей директории в базовую директорию конфигурационных файлов:

./install.sh

Соответственно, перед установкой Агредатор Лайт необходимо провести его настройку.

Настройка

Все поставляемые сервисы запускаются в разных проектах docker-compose и могут быть гибко настроены, исходя из желания заказчика

Настройка инфраструктуры

PostgreSQL

Директория agg_postgres содержит в себе конфигурационные файлы для запуска СУБД PostgreSQL в Docker через docker-compose:

  • .env.postgres - файл с переменными окружения для Docker-контейнера PostgreSQL.
  • docker-compose.yml - файл с настройками запускаемого контейнера

Используемые переменные окружения

Переменная Описание Пример значения
COMPOSE_PROJECT_NAME Название проекта docker-compose agg_postgres
PG_IMAGE Название Docker образа с PostgreSQL harbor.rnds.pro/dockerhub/library/postgres
PG_TAG Версия PostgreSQL 14
PG_DATA_PATH Путь к томам PostgreSQL /storage/infra/agg_postgres/data
DATABASE_USER Суперпользователь БД postgres
DATABASE_PASS Пароль суперпользователя БД Vj8bR4QQI7pQuhhQ
DATABASE_PORT Внешний порт контейнера с БД 5433
Redis

Директория agg_redis содержит в себе конфигурационные файлы для запуска БД Redis в Docker через docker-compose:

  • .env.redis - файл с переменными окружения для Docker-контейнера Redis
  • docker-compose.yml - файл с настройками запускаемого контейнера

Используемые пременные окружения

Переменная Описание Пример значения
COMPOSE_PROJECT_NAME Название проекта docker-compose agg_redis
REDIS_IMAGE Название Docker образ с Redis harbor.rnds.pro/dockerhub/library/redis
REDIS_TAG Версия Redis 6.0
REDIS_DATA_PATH Путь к томам Redis /storage/infra/agg_redis/data
REDIS_PORT Внешний порт контейнера Redis 6379
Minio

Директория agg_minio содержит в себе конфигурационные файлы для запуска Minio s3 в Docker через docker-compose:

  • .env.minio - файл с переменными окружения для Docker-контейнера Minio
  • docker-compose.yml - файл с настройками запускамых контейнеров Minio

Используемые переменные окружения

Переменная Описание Пример значения
COMPOSE_PROJECT_NAME Название проекта docker-compose agg_minio
MINIO_IMAGE Название Docker образ с Minio harbor.rnds.pro/dockerhub/minio/minio
MINIO_TAG Версия Minio latest
MINIO_DATA_PATH Путь к томам Redis /storage/infra/agg_minio/data
MINIO_ROOT_USER Главный пользователь miniadmin
MINIO_ROOT_PASSWORD Пароль главного пользователя password
MINIO_API_PORT Внешний порт для API Minio 9000
MINIO_CONSOLE_PORT Внешний порт для веб-панели админиистрирования Minio 9090

Настройка сервиса подписания запросов Сайнер

Информация о ПО Сайнер

Программный продукт Сайнер предназначен для обеспечения подписания сертифицированным СКЗИ HTTP и JSON данных, а также организации формирования подписис запроса в формате PKCS#7 detached structure

Сайнер представляет собой бинарное приложение, реализующее web-сервис в контейнере Docker на основе Astra Linux Special Edition и предоставляющий следующий функционал:

  • RAW и CMS (оно же PKC#7 detached signature или SMIME) подпись данных с поддержкой алгоритмов ГОСТ
  • проверку RAW и CMS подписи данных
  • вычисление хеш от переданных данных с поддержкой ГОСТ алгоритмов
  • подписание XML документов с учетом специфики СМЭВ и поддержкой ГОСТ алгоритмов
  • проверка подписанных XML документов
  • получение информации о загруженных сертификатах.

Внимание! По-умолчанию Docker-контейнер с Сайнером запускается с демонстрационной лицензией. Для работы с провайдером csp понадобится бессрочная лицензия для КриптоПРО CSP 5.0

Настройка ПО Сайнер

Директория agg_signer содержит в себе конфигурационные файлы для запуска Signer в Docker через docker-compose:

  • .env.signer - файл с переменными окружения для Docker-конетйнера с Signer
  • config.yml - файл с настройко API Signer
  • docker-compose.yml - файл с настройками запускаемого контейнера

Используемые переменные окружения

Переменная Описание Пример значения
COMPOSE_PROJECT_NAME Название проекта docker-compose agg_signer
SIGNER_IMAGE Название Docker образа с Signer harbor.rnds.pro/rnds/signer-cpp
SIGNER_IMAGE_TAG Версия Signer smolensk-csp
SIGNER_CSP_LICENSE Лицензия КриптоПро CSP 5.0 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
SERVICE_CONFIG_PATH Директория с конфигурацией API Signer /storage/configs/agg_lite/signer
LOG_PATH Директория с логами Signer /storage/logs/signer
CSP_KEYS_PATH Директория с контейнерами КЭП /storage/configs/agg_lite/agg_signer/csp_keys
OPENSSL_KEYS_PATH Директория с сертификатами Openssl /storage/configs/agg_lite/agg_signer/openssl_keys
SIGNER_WEB_PORT Внешний порт контейнера с Signer 8505
Настройка API
username: "admin" # Имя пользователя для HTTP Basic Authentication.
password: "123456" # Пароль пользователя для HTTP Basic Authentication.
port: 8505
provider: csp # Используемый криптопровайдер для обращения к сертификату (может принимать значения: csp, openssl )
csp:
 keystore: HDImage # Базовое хранилище сертификатов.
 keys: # Список контейнеров в КЭП
   - alias: "test" # Алиас сертификата (необходим для выполнения запросов к конкретному сертификату).
     name: "xxxxx" # Имя криптоконтейнера !как в криптопровайдере (КриптоПро CSP).
     pin: "" # Pin код для криптоконтейнера (если он есть, иначе оставить пустым).
#openssl:
 #keysDir: /home/app/openssl_keys # Директория внутри контейнера, в который должны лежать сертификат (cert.pem) и ключ (key.pem).
log:
 level: debug # Поддерживаемые уровни логирования: debug, info, warn, error. По-умолчанию: debug.
 dir: ./logs # Папка в которую будут складываться файлы логов. Если не указано, то логгирование в файлы не производится.
 #maxSize: 1048576 # Максимальный размер файла лога. По умолчанию: 1048576
 #colors: auto # Управление цветным выводом в консоль. Поддерживаемые значения: on, off, auto. По умолчанию: auto
 # maxCount # Максимальное количество файлов логов. По умолчанию: 10
 # baseName: signer # Базовое имя файла лога. По умолчанию: sign
Копирование КЭП в сервис

КЭП - (Квалифицированная электронная подпись) Состоит из 6-ти *.key файлов, находящихся в директории вида test.000:

  • header.key
  • name.key
  • primary.key
  • masks.key
  • primary2.key
  • masks2.key

Если вы собираетесь использовать провайдер csp, то данную директорию (test.000) с файлами необходимо скопировать в директорию csp_keys.

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

csp_keys/test.000
Копирование сертификата Openssl в сервис

Если вы собираетесь использовать провайдер openssl для подписис запросов, то в директорию openssl_keys/epgu необходимо положить следующие файлы:

  • cert.pem - сертификат openssl
  • key.pem - закрытй ключ к сертификату openssl
Проверка работы API

С помощью командных утилит КриптоПро CSP можно просмотреть всю необходимую информацию о КЭП внутри docker-контейнера:

docker exec -it agg_signer bash

cpconfig -license -view # Проверка активации лицензии КриптоПро CSP
csptest -keyset -verifycontext -enum -unique # Вывод всех загруженных в Сайнер КЭП
csptest -keyset -container 'имя_контейнера_с_кэп' -info # Просмотр информации о загруженной КЭП
csptest -keyset -container 'имя_контейнера_с_кэп' -check # Проверка работы контейнера с КЭП
certmgr -list -cont 'имя_контейнера_с_кэп' # Просмотр информации о сертификате в контейнере с КЭП

Тестовый POST-запрос на проверку работы подписи:

curl -X POST -d content=test -d cert=epgu -u admin:123456 http://IP_хоста:8505/raw

Корректным результатом выполнения команды будет следующий JSON:

{"signature":"FuJIp...jaQCFKjR0J+e+/TzpS8Hsg==","certificate":"MIIKyDC
.......
WddM7aQ89R9akeQ38uYd7usbbw==","certificate_algorithm":"1.2.643.7.1.1.3.2"}

Настройка ПО

Настройка приложения происходит в файле .env.lite, в котором расписаны используемые переменные окружения. Переменные разделены на несколько блоков, для удобства дальнейшей настройки, а также прокомментированны.

Блок "Docker Compose"

Содержит в себе информацию о запускаемом образе и версии приложения.

Описание переменных окружения

Переменная Описание Пример значения
COMPOSE_PROJECT_NAME Название проекта docker-compose agg_lite
AGG_LITE_IMAGE Используемый Docker-образ сервиса harbor.rnds.pro/aggredator/lite-smev3
AGG_LITE_TAG Запускаемая версия приложния 1.0.31
Блок "Database"

Содержит в себе настройки подключения сервисов к базам данных в СУБД Postgres

Описание переменных окружения

Переменная Описание Пример значения
SMEV_DATABASE_URL Строка подключения к бд для smev3-golang postgres://postgres:Vj8bR4QQI7pQuhhQ@db.local:5433/aggredator-service-smev3-golang
FILATOR_DATABASE_URL Строка подключения к бд для filator postgres://postgres:Vj8bR4QQI7pQuhhQ@db.local:5433/aggredator-service-filator
APIGW_DATABASE_URL Строка для подключения к бд для apigw postgres://postgres:Vj8bR4QQI7pQuhhQ@db.local:5433/aggredator-service-apigw

Для коннекта к бд используется db.local, который прописан в /etc/hosts контейнера. IP можно изменить, отредактирововав файл .env в корневой директории с конфигурационными файлами, либо добавив переменную окружения DATABASE_IP в .env.lite вручную:

DATABASE_IP="172.22.1.11" # IP адрес БД

Также в строке подключения можно явно указать IP-адрес/домен для БД:

SMEV_DATABASE_URL="postgres://postgres:Vj8bR4QQI7pQuhhQ@172.22.1.11:5433/aggredator-service-smev3-golang"
Блок "Smev3"

Содержит в себе настройки работы Агредатор-а со СМЭВ3

Описание пременных окружения

Переменная Описание Пример значения
SMEV_DEFAULT_SERVICE Используемая схема СМЭВ3 по-умолчанию smev12
SMEV_SERVICES_CONFIG Конфигурация СМЭВ адаптеров в формате JSON  
SMEV_CRYPTO_PROVIDER Тип используемого криптопровайдера для подписания запросов в СМЭВ jigner
SMEV_JIGNER_ENDPOINT Настройка адреса обращения к подписыванию signer [http://signer:qwerty123123@signer.local:8505?cert=smev3&envelope=true]
Блок "Filator"

Filator - это временное файловое хранилище с HTTP-интерфейсом. Предназначено для передачи файлов между сервисами в процессе работы. Устаревшие файлы удаляются через некоторое время. Подробное описание сервиса на вики

Используемая переменная окружения для настройки и пример ее значения:

FILATOR_STORAGE_CONFIGURATIONS='[
{
    "name": "db",
    "type": "db",
    "readonly": true
},
{
    "name": "s3",
    "type": "s3",
    "readonly": false,
    "use_dynamic_buckets": false,
    "endpoint": "http://172.22.1.11:9000",
    "access_key": "access_key",
    "secret_key": "secret_key",
    "bucket": "filator",
    "prefix": "filator",
    "open_timeout": 15,
    "read_timeout": 15,
    "ssl_verify_peer": false,
    "retry_limit": 0,
    "region": "region"
}]'
Блок "ApiGW"

Настройи сервиса apigw и его административной панели.

Описание переменных окружения

Переменная Описание Пример значения
APIGW_ADMIN_USER Имя главного пользователя в административной авнели admin
APIGW_ADMIN_PASS Пароль главного пользователя FHOzE4MzB2pJ171t
APIGW_WEB_PORT Порт, по которму будет доступна административная панель 8080
APIGW_REDIS_URL Строка подключения к БД Redis redis://redis.local:6379/0
Блок "Logging"

Настройка уровня логирования и места хранения логов приложения

Описание переменных окружения

Переменная Описание Пример значения
AGG_LOG_PATH Директория расположения файлов логов приложения на хостовой машине /storage/logs/agg_lite
EPGU_API_LOG_LEVEL Уровень логирования epgu-api info или debug
APIGW_LOG_LEVEL Уровинь логировнаия apigw info или debug
FILATOR_LOG_LEVEL Уровень логирования filator info или debug

Запуск ПО

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

cd /storage/configs/agg_lite
./run.sh

Для запуска с использованием тестовых БД и S3 Minio необходимо передать параметр test:

cd /storage/configs/agg_lite
./run.sh test

Запуск вручную какого-либо сервиса:

cd /storage/configs/agg_lite/agg_service_name
./prepare docker compose up -d

После запуска платформы Агредатор, его работу можно проверить открыв административную панель управления по пути:

http://instance_ip:8081

и пройти авторизацию, используя заданные в .env.lite значения