Руководство по установке Взыскатора
Развертывание
Цели и функции системы
Программный продукт Взыскатор предназначен для организации электронного документооборота с федеральной службой судебных приставов.
Требования к аппаратной части
Для развертывания Взыскатора требуется инфраструктурные мощности:
- СУБД 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
Подготовительные работы
Все ВМ, на которых планируется запуск Взыскатора должны иметь доступ до приватного 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-контейнера Redisdocker-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-контейнера Miniodocker-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-конетйнера с Signerconfig.yml
- файл с настройко API Signerdocker-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-vzyskator | | AGG_LITE_TAG | Запускаемая версия приложния | 1.0.31 |
Блок "Database"
Содержит в себе настройки подключения сервисов к базам данных в СУБД Postgres
Описание переменных окружения
Переменная | Описание | Пример значения |
---|---|---|
EPGU_API_DATABASE_URL | Строка подключения к бд для epgu-api | postgres://postgres:Vj8bR4QQI7pQuhhQ@db.local:5433/aggredator-service-epgu-api |
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-адрес/домен для БД:
EPGU_API_DATABASE_HOST="postgres://postgres:Vj8bR4QQI7pQuhhQ@172.22.1.11:5433/aggredator-service-epgu-api"
Блок "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"
}]'
Блок "Vzyskator"
Содержит в себе настройку взаимодействия epgu-api
с сервисом подписания запросов Signer
Используемая переменная окружения для настройки и пример ее значения:
EPGU_API_CLIENTS_SIGNERS_CONFIGURATION='[
{
"name": "test",
"type": "jigner",
"url": "http://signer:qwerty123123@signer.local:8505/?cert=test",
"timeout": "15"
}]'
Блок "ApiGW"
Настройи сервиса apigw
и его административной панели.
Описание переменных окружения
Переменная | Описание | Пример значения |
---|---|---|
APIGW_ADMIN_USER | Имя главного пользователя в административной авнели | admin |
APIGW_ADMIN_PASS | Пароль главного пользователя | FHOzE4MzB2pJ171t |
APIGW_WEB_PORT | Порт, по которму будет доступна административная панель | 8081 |
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
значения