Дата актуализации: 09.09.2025.
Причина актуализации: Объединение статей по настройке передачи файлов
Для организации передачи данных с помощью СМЭВ4 от Поставщика к Потребителю на каждой стороне должно быть установлено и настроено ПО «Агент СМЭВ4», а на стороне Поставщика – также ПО «Витрина данных» (ВД). О том, как развернуть ПО «Агент СМЭВ4» и ПО ВД, читайте в документации в разделе "ПО для Участников СМЭВ".
Для передачи текстовых и числовых данных используются регламентированные запросы (РЗ), с помощью которых происходит обращение за данными к витрине Поставщика. Но часто возникает потребность передавать BLOB-объекты, например изображения, копии документов, архивы. Как организовать передачу таких файлов? В этом поможет специальный инструмент – BLOB-адаптер. BLOB-адаптер – это программный модуль, предназначенный для получения доступа к BLOB-объектам ведомства из Витрины данных.Примечание
BLOB-адаптер не входит в комплект поставки этого ПО, его требуется установить и настроить отдельно
В данной статье рассмотрим передачу BLOB-объектов из ВД конфигурации «Лайт».
В качестве примера возьмем витрину «Реестр страховых компаний», в которой хранятся логотипы страховых компаний (Рисунок 1):

Рисунок 1 – ЕИП НСУД. Просмотр списка атрибутов таблицы ВД «Реестр страховых компаний»
Для хранения двоичных данных (последовательностей байтов) в таблице ВД в ЕИП НСУД используются атрибуты с типом данных bytea. Для взаимодействия с ВД при загрузке в нее BLOB-объектов используется специальное хранилище – особый сервис, совместимый с S3. В целях тестирования взаимодействия в качестве примера такого хранилища в данной статье приведено ПО MinIO.
1. Установить и настроить хранилище BLOB-объектов MinIO:
1) Создать юнит-файл сервиса systemd для MinIO;
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
После завершения загрузки в вашем рабочем каталоге появится файл 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 |
10. Создайте конфигурационный файл сервиса minio, необходимый для изменения стандартной конфигурации сервера MinIO, с помощью текстового редактора. В примере используется редактор nano:
|
sudo nano /etc/default/minio |
11. Скопируйте в созданный конфигурационный файл следующие переменные среды и задайте их значения:
|
MINIO_ACCESS_KEY="minio" |
где:
- 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
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
Данный юнит-файл будет запускать сервер 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
Загрузка данных в хранилище MinIO
1. Откройте интерфейс приложения в браузере, для этого введите в адресной строке IP-адрес сервера MinIO и укажите порт 8000.
2. Авторизуйтесь в MinIO под учётной записью, созданной ранее (логин задан в переменной MINIO_ACCESS_KEY, пароль – в переменной MINIO_SECRET_KEY в конфигурационном файле), см. Рисунок 6:

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

Рисунок 7 – Интерфейс MinIO. Создание каталога
4. В поле Bucket Name введите название создаваемого каталога и нажмите кнопку Create Bucket (Рисунок 8):

Рисунок 8 – Интерфейс MinIO. Создание каталога
В результате откроется вкладка Buckets, на ней будет отображаться первый созданный каталог.
5. Щелкните по каталогу, чтобы перейти в его карточку (Рисунок 9):

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

Рисунок 10 – Интерфейс MinIO. Вкладка Buckets, карточка каталога
Отобразится окно Change Access Policy c выпадающим списком.
7. Выберите Public (Рисунок 11):

Рисунок 11 – Интерфейс MinIO. Настройка Access Policy
8. Нажмите кнопку Set, чтобы сохранить выбранное значение (Рисунок 12):

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

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

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

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

Рисунок 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-адаптера
Загрузите в созданную на предыдущем шаге директорию (для удобства переноса файлов можно воспользоваться ПО 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-адаптера
Cохраните изменения и закройте редактор.
Перед запуском модуля необходимо убедиться, что на сервере с ОС Centos установлена Java. Если Java отсутствует на сервере, то запустить модуль BLOB-адаптера не получится.
Чтобы установить Java на сервер необходимо воспользоваться командой:
|
sudo yum install java-11-openjdk-devel |
Для того, чтобы проверить наличие на сервере установленное ПО Java, а также узнать версию Java, необходимо воспользоваться командой:
|
java -version |

Рисунок 19 – Результат проверки версии установленного ПО Java.
Для ручного запуска модуля необходимо подключиться по ssh на сервер, перейти в директорию расположения jar-файла, например:
|
cd /opt/blob-adapter |
И запустить модуль командой:
|
java -jar blob-adapter.jar -migrate application.yml |
В результате выполнения указанных выше команд запустится загрузчик модулей:

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

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