Войти

Как передавать файлы через СМЭВ4

Дата актуализации: 09.09.2025.
Причина актуализации: Объединение статей по настройке передачи файлов

Для организации передачи данных с помощью СМЭВ4 от Поставщика к Потребителю на каждой стороне должно быть установлено и настроено ПО «Агент СМЭВ4», а на стороне Поставщика – также ПО «Витрина данных» (ВД). О том, как развернуть ПО «Агент СМЭВ4» и ПО ВД, читайте в документации в разделе "ПО для Участников СМЭВ".

Для передачи текстовых и числовых данных используются регламентированные запросы (РЗ), с помощью которых происходит обращение за данными к витрине Поставщика. Но часто возникает потребность передавать BLOB-объекты, например изображения, копии документов, архивы. Как организовать передачу таких файлов? В этом поможет специальный инструмент – BLOB-адаптер. BLOB-адаптер – это программный модуль, предназначенный для получения доступа к BLOB-объектам ведомства из Витрины данных.

  Примечание

BLOB-адаптер не входит в комплект поставки этого ПО, его требуется установить и настроить отдельно

В данной статье рассмотрим передачу BLOB-объектов из ВД конфигурации «Лайт». 

В качестве примера возьмем витрину «Реестр страховых компаний», в которой хранятся логотипы страховых компаний (Рисунок 1):

Рисунок 1  ЕИП НСУД. Просмотр списка атрибутов таблицы ВД - Реестр страховых компаний.png

Рисунок 1 – ЕИП НСУД. Просмотр списка атрибутов таблицы ВД «Реестр страховых компаний»

Для хранения двоичных данных (последовательностей байтов) в таблице ВД в ЕИП НСУД используются атрибуты с типом данных bytea. Для взаимодействия с ВД при загрузке в нее BLOB-объектов используется специальное хранилище – особый сервис, совместимый с S3. В целях тестирования взаимодействия в качестве примера такого хранилища в данной статье приведено ПО MinIO.

Для организации передачи BLOB-объектов необходимо выполнить следующие шаги:
     1.  Установить и настроить хранилище BLOB-объектов MinIO:
          1)  Создать юнит-файл сервиса systemd для MinIO;
          2)  Загрузить данные в хранилище.
     2.  Наполнить витрину данными;
     3.  Установить и настроить экземпляр BLOB-адаптера:
          1)  Создать на сервере директорию для загрузки файлов модуля;
          2)  Загрузить файлы модуля в созданную директорию;
          3)  Настроить конфигурационный файл BLOB-адаптера для работы с каталогом;
          4)  Запустить jar-файл модуля;
          5)  Проверить установку модуля.
     4.  Реализовать передачу BLOB-объектов.

Установка и настройка хранилища BLOB-объектов MinIO

В нашем примере хранилище BLOB-объектов будет располагаться на сервере вместе с витриной данных. Рассмотрим один из вариантов установки сервера MinIO на ОС Linux Centos.

     1.  Отключите Firewall и уберите его из автозагрузки следующими командами:

sudo systemctl stop firewalld

sudo systemctl disable firewalld

     2.  Загрузите двоичный файл сервера MinIO из репозитория, размещенного на территории РФ.

  Примечание

 Загруженный дистрибутив должен отвечать требованиям информационной безопасности

Пример команды для загрузки дистрибутива:

wget https://.../minio

Результат выполнения команды (Рисунок 2):

Рисунок 2  Результат загрузки файла сервера MinIO.jpg

Рисунок 2 – Результат загрузки файла сервера MinIO

После завершения загрузки в вашем рабочем каталоге появится файл minio.

     3.  Используйте следующую команду, чтобы сделать файл исполняемым:

sudo chmod +x minio

     4.  Далее рекомендуется переместить загруженный файл minio в каталог /usr/local/bin для того, чтобы сценарий запуска systemd искал сервис minio в нужном месте после дальнейших настроек.

     5.  Создайте пользователя minio-user:

sudo useradd -r minio-user -s /sbin/nologin

Данная команда устанавливает /sbin/nologin в качестве оболочки для пользователя minio-user, что позволяет пользователю не вводить каждый раз логин и пароль для входа в систему.

     6.  Замените владельца двоичного файла minio, передав права на него пользователю minio-user:

sudo chown minio-user:minio-user /usr/local/bin/minio

  Примечание

 В целях безопасности не рекомендуется запускать сервер MinIO от имени суперпользователя root

     7.  Создайте каталог, в котором сервер MinIO будет хранить файлы:

sudo mkdir /usr/local/share/minio

     8.  Назначьте пользователя minio-user владельцем каталога следующей командой:

sudo chown minio-user:minio-user /usr/local/share/minio

     9.  Создайте конфигурационный каталог для сервера MinIO в каталоге /etc, где хранится большинство конфигурационных файлов, и выдайте права для пользователя minio-user командами ниже:

sudo mkdir /etc/minio
sudo chown minio-user:minio-user /etc/minio

     10.  Создайте конфигурационный файл сервиса minio, необходимый для изменения стандартной конфигурации сервера MinIO, с помощью текстового редактора. В примере используется редактор nano:

sudo nano /etc/default/minio

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

MINIO_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address your_server_ip:8000"
MINIO_SECRET_KEY="minio124"

где:

  • MINIO_ACCESS_KEY – логин пользователя minio для доступа к пользовательскому интерфейсу хранилища данных через браузер;
  • MINIO_VOLUMES – путь до рабочего каталога сервера для хранения данных, который был создан ранее;
  • MINIO_OPTS – параметры для обслуживания данных сервером MinIO:
                    1)     minio – каталог конфигурации, который был создан ранее (на него указывает флаг -‌C);
                    2)     IP-адрес (your_server_ip) и порт (8000), к которым сервер привязан сервер MinIO (на них указывает флаг -‌‍-‌‍address).
  • MINIO_SECRET_KEY – закрытый ключ для входа в хранилище данных MinIO. В примере приведено значение “minio124”, но в реальных условиях для защиты сервера рекомендуется задать более надёжный пароль.

   Важно!

 Для того чтобы не возникало конфликтов с витриной данных, рекомендуется IP-адрес для MinIO задавать явно, так как в противном случае MinIO может привязаться к IP-адресу, используемому каким-либо из компонентов витрины. Также рекомендуется указывать порт 8000, так как он не используется витриной

Содержимое конфигурационного файла для нашего примера представлено ниже (Рисунок 3):

Рисунок 3  Содержимое конфигурационного файла сервиса minio.jpg

Рисунок 3 – Содержимое конфигурационного файла сервиса minio

     12.  Сохраните и закройте конфигурационный файл.

После того как описаны и настроены переменные среды для работы сервера, необходимо создать юнит-файл для запуска сервера.

Создание юнит-файла сервиса systemd для MinIO

Сценарий systemd будет искать учетную запись пользователя и группу по имени пользователя minio-user, созданного ранее.

     1.  Сервис systemd требует, чтобы юнит-файлы хранились в каталоге конфигурации systemd, поэтому для начала необходимо перейти в каталог /etc/systemd/system:

sudo cd /etc/systemd/system

     2.  Создайте юнит-файл сервиса minio, открыв его в любом текстовом редакторе:

sudo nano minio.service

     3.  Заполните юнит-файл сервиса minio, скопировав в него содержимое, представленное ниже:

[Unit]

Description=MinIO

Documentation=https://docs.min.io

Wants=network-online.target

After=network-online.target

AssertFileIsExecutable=/usr/local/bin/minio

AssertFileNotEmpty=/etc/default/minio

 

[Service]

Type=notify

 

WorkingDirectory=/usr/local/

 

User=minio-user

Group=minio-user

ProtectProc=invisible

 

EnvironmentFile=/etc/default/minio

ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

 

# Let systemd restart this service always

Restart=always

 

# Specifies the maximum file descriptor number that can be opened by this process

LimitNOFILE=1048576

 

# Specifies the maximum number of threads this process can create

TasksMax=infinity

 

# Disable timeout logic and wait until process is stopped

TimeoutSec=infinity

 

SendSIGKILL=no

 

[Install]

WantedBy=multi-user.target

 

# Built for ${project.name}-${project.version} (${project.name})

Результат заполнения юнит-файла сервиса minio представлен на рисунке 4:

Рисунок 4  Окно редактирования юнит-файла сервиса minio.jpg

Рисунок 4 – Окно редактирования юнит-файла сервиса minio

Данный юнит-файл будет запускать сервер MinIO от имени пользователя minio-user. С помощью описанных ранее переменных среды этот процесс будет происходить автоматически при запуске системы.

     4.  После просмотра сценария сохраните содержимое и закройте текстовый редактор.

     5.  Выполните следующую команду, чтобы перезагрузить все юнит-файлы systemd:

sudo systemctl daemon-reload

     6.  Включите сервис MinIO в автозагрузку следующей командой:

sudo systemctl enable minio

После ее выполнения появится следующая фраза:

Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Таким образом, сервис systemd успешно настроен.

     7.  Запустите сервер MinIO следующей командой:

sudo systemctl start minio

     8.  Для того чтобы проверить работу сервера MinIO, выполните следующую команду:

sudo systemctl status minio

Результат проверки статуса работы сервера MinIO представлен ниже (Рисунок 5):

Рисунок 5  Результат проверки статуса работы сервера MinIO.png

Рисунок 5 – Результат проверки статуса работы сервера MinIO

Загрузка данных в хранилище MinIO


     1.  Откройте интерфейс приложения в браузере, для этого введите в адресной строке IP-адрес сервера MinIO и укажите порт 8000.

     2.  Авторизуйтесь в MinIO под учётной записью, созданной ранее (логин задан в переменной MINIO_ACCESS_KEY, пароль – в переменной MINIO_SECRET_KEY в конфигурационном файле), см. Рисунок 6:

Рисунок 6  Авторизация в MinIO.png

Рисунок 6 – Авторизация в MinIO

     3.  После авторизации откроется вкладка Objects Browser. Создайте первый каталог, нажав ссылку Create a Bucket (Рисунок 7):

Рисунок 7  Интерфейс MinIO. Создание каталога.png

Рисунок 7 – Интерфейс MinIO. Создание каталога 

     4.  В поле Bucket Name введите название создаваемого каталога и нажмите кнопку Create Bucket (Рисунок 8):

Рисунок 8  Интерфейс MinIO. Создание каталога.png

Рисунок 8 – Интерфейс MinIO. Создание каталога

В результате откроется вкладка Buckets, на ней будет отображаться первый созданный каталог.

     5.  Щелкните по каталогу, чтобы перейти в его карточку (Рисунок 9):

Рисунок 9  Интерфейс MinIO. Вкладка Buckets.png

Рисунок 9 – Интерфейс MinIO. Вкладка Buckets

     6.  В карточке каталога измените настройку Access Policy с Private на Public, для этого щелкните по ссылке Private (Рисунок 10):

Рисунок 10  Интерфейс MinIO. Вкладка Buckets карточка каталога.png

Рисунок 10 – Интерфейс MinIO. Вкладка Buckets, карточка каталога

Отобразится окно Change Access Policy c выпадающим списком.

     7.  Выберите Public (Рисунок 11):

Рисунок 11  Интерфейс MinIO. Настройка Access Policy.png

Рисунок 11 – Интерфейс MinIO. Настройка Access Policy

     8.  Нажмите кнопку Set, чтобы сохранить выбранное значение (Рисунок 12):

Рисунок 12  Интерфейс MinIO. Access Policy.png

Рисунок 12 – Интерфейс MinIO. Access Policy

     9.  Вернитесь на вкладку Objects Browser и выберите созданный каталог (Рисунок 13):

Рисунок 13  Интерфейс MinIO. Вкладка Objects Browser.png

Рисунок 13 – Интерфейс MinIO. Вкладка Objects Browser

     10.  Загрузите в каталог объекты в виде файлов, для этого нажмите кнопку Upload. Вы можете загружать файлы поштучно или загрузить папку с файлами (Рисунок 14):

Рисунок 14  Интерфейс MinIO. Загрузка файлов в каталог.png

Рисунок 14 – Интерфейс MinIO. Загрузка файлов в каталог

     11.  Для настройки BLOB-адаптера вам понадобится прямая ссылка на объект . Ее можно получить при просмотре содержимого каталога: откройте нужный объект для просмотра и на панели справа нажмите Share (Рисунок 15):

Рисунок 15  Просмотр ссылки на объект в хранилище данных на сервере MinIO.png

Рисунок 15 – Просмотр ссылки на объект в хранилище данных на сервере MinIO

После загрузки объектов в хранилище необходимо наполнить данными витрину.

Наполнение витрины данными

Данные в витрину можно загрузить при помощи специальных приложений-загрузчиков:

Загрузите данные в витрину с помощью одного из них. Конкретный способ загрузки описан в соответствующей статье.

После загрузки данных в витрину можно просмотреть содержимое её таблиц с помощью приложения DBeaver. На рисунке 16 в качестве примера показана таблица витрины данных «Реестр страховых компаний». В столбец, соответствующий атрибуту logo, предназначенному для передачи бинарных объектов, записываются названия объектов из хранилища данных сервера MinIO. Здесь BLOB-объектами являются изображения (логотипы страховых компаний) – файлы с расширением .jpg.

Рисунок 16  Просмотр содержимого таблицы ВД - Реестр страховых компаний.png

Рисунок 16 – Просмотр содержимого таблицы ВД «Реестр страховых компаний»

Установка и настройка экземпляра BLOB-адаптера

Создание на сервере директории для загрузки файлов модуля

  Примечание

В случае, если ранее была установлена старая версия модуля BLOB-адаптер, сделайте его резервную копию

Создайте на сервере директорию, в которую будут загружены файлы модуля и выдайте права на неё пользователю, запускающему BLOB-адаптер. Например, /opt/blob-adapter.

Для этого выполните следующие команды:

sudo mkdir /opt/blob-adapter
sudo chown -R $USER:$USER /opt/blob-adapter 

Загрузка файлов модуля в созданную директорию

Модуль BLOB-адаптер поставляется в виде jar-файла. В поставку также входит файл настроек конфигурации модуля BLOB-адаптер (application.yml).

Рисунок 17  Состав jar файла BLOB-адаптера.png

Рисунок 17 – Состав jar файла BLOB-адаптера

Загрузите в созданную на предыдущем шаге директорию (для удобства переноса файлов можно воспользоваться ПО WinSCP):

  • jar-файл модуля;
  • файл настроек конфигурации модуля BLOB-адаптера (application.yml).

Настройка конфигурационного файла BLOB-адаптера для работы с каталогом

BLOB-адаптер необходимо настроить на работу с конкретным хранилищем объектов. Для этого внесите изменения в конфигурационный файл BLOB-адаптера.

Если BLOB-адаптер был развёрнут в соответствии инструкцией по установке, приведенной выше, то каталог с файлами модуля адаптера должен располагаться по пути: /opt/blob-adapter.

Перейдите в этот каталог и откройте конфигурационный файл BLOB-адаптера в текстовом редакторе nano следующими командами:

cd /opt/blob-adapter

nano application.yml

Внесите следующие изменения (Рисунок 18):

  • впишите префикс витрины данных (с точкой в конце) в топики blob.rq, blob.rs и blob.err;
  • впишите IP-адрес сервера, на котором развернут BLOB-адаптер (your_server_ip);
  • в строке host укажите адрес хранилища сервера MinIO;
  • в строке port укажите порт хранилища, который задавали ранее (в нашем примере: 8000);
  • в строке path-prefix укажите название каталога объектов из хранилища MinIO.

Рисунок 18  Редактирование конфигурационного файла BLOB-адаптера.png

Рисунок 18 – Редактирование конфигурационного файла BLOB-адаптера

Cохраните изменения и закройте редактор.

Запуск jar-файла модуля

Перед запуском модуля необходимо убедиться, что на сервере с ОС Centos установлена Java. Если Java отсутствует на сервере, то запустить модуль BLOB-адаптера не получится. 

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

sudo yum install java-11-openjdk-devel

Для того, чтобы проверить наличие на сервере установленное ПО Java, а также узнать версию Java, необходимо воспользоваться командой:

java -version

Рисунок 19  Результат проверки версии установленного ПО Java..png

Рисунок 19 – Результат проверки версии установленного ПО Java.

Для ручного запуска модуля необходимо подключиться по ssh на сервер, перейти в директорию расположения jar-файла, например:

cd /opt/blob-adapter

И запустить модуль командой:

java -jar blob-adapter.jar -migrate application.yml

В результате выполнения указанных выше команд запустится загрузчик модулей:

Рисунок 20  Запуск загрузчика модулей.png

Рисунок 20 – Запуск загрузчика модулей.

Необходимо дождаться завершения установки.

  Примечание

 В Витрине данных конфигурации «Стандарт» BLOB-адаптер устанавливается вместе с компонентами витрины. Рекомендуем ознакомиться со статьей – Установка витрины в конфигурации стандарт. Дополнительные компоненты

Проверка установки модуля

Для проверки модуля BLOB-адаптер необходимо выполнить запрос к сервису:

curl -s IP:Port/metrics | grep '^liveness '

где:

  • IP - адрес сервера.
  • Port - адрес сервера.
  • liveness - параметр проверки работоспособности модуля.

Например:

curl -s http://172.16.10.67:9837/metrics | grep '^liveness '

Пример успешного ответа:

 liveness 1.0

Ответ "1" означает, что модуль работает.

Для ручной остановки необходимо подключиться по ssh на сервер, найти процесс, который содержит jar-файл и остановить его:

ps aux | grep   blob-adapter

"kill" «номер процесса»

Реализация передачи BLOB-объектов 

Для того чтобы инициировать передачу BLOB-объекта, Агент на стороне Потребителя должен направить регламентированный запрос (РЗ) в Витрину данных Поставщика.

Суть работы BLOB-адаптера заключается в том, что при получении РЗ от Агента Потребителя адаптер ищет в нём параметр с типом данных BYNARY (Рисунок 21). Если такой параметр в запросе есть, то BLOB-адаптер обращается в каталог хранилища данных, находит там нужный объект/объекты, в соответствии с логикой работы РЗ, переходит по ссылке и возвращает бинарный объект/объекты Агенту Потребителя в формате Base64.

Рисунок 21  Отправка РЗ в витрину с использованием сервиса Postman.jpg

Рисунок 21 – Отправка РЗ в витрину с использованием сервиса Postman

Для удобства работы с бинарными объектами воспользуйтесь ПО DBeaver. Оно позволяет просмотреть, какой объект передаётся в регламентированном запросе (Рисунок 22):

Рисунок 22  Отправка РЗ в витрину с использованием сервиса DBeaver.png

Рисунок 22 – Отправка РЗ в витрину с использованием сервиса DBeaver

Авторизуйтесь, чтобы оставить комментарий к статье