.. _blob_adapter_config: Конфигурация BLOB-адаптера (application.yml) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл ``application.yml`` – основной конфигурационный файл **BLOB-адаптер**, в котором задана логика и порядок работы модуля: - получение и обработка входящих запросов; - настройка подключения к СМЭВ3-адаптеру, СМЭВ4-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля. .. _blob-application.yml: Пример файла application.yml ################################### В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач. .. code-block:: yaml http-server: enabled: ${SERVER_ENABLED:true} port: ${SERVER_PORT:8081} executor: reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20} vertx: web-client: max-pool-size: 100 blob: default-request-timeout: 60s storage: client: awssdk # vertx/awssdk protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx host: ${BLOB_STORAGE_HOST:localhost} port: ${BLOB_STORAGE_PORT:8888} path-prefix: ${BLOB_STORAGE_PATH_PREFIX:} path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:} bucket: ${BUCKET:} # use only for client awssdk auth: type: ${BLOB_STORAGE_AUTH_TYPE:NONE} # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS user: ${BLOB_STORAGE_AUTH_USER:user} # use only for auth.type BASIC password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC access-token: ${ACCESS_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS secret-token: ${SECRET_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS token: ${BLOB_STORAGE_AUTH_TOKEN:token} # use only for auth.type TOKEN authorization-server: # use only for auth.type AUTH protocol: ${AUTH_SERVER_PROTOCOL:http} host: ${AUTH_SERVER_HOST:localhost} port: ${AUTH_SERVER_PORT:80} path: ${AUTH_SERVER_PATH:oauth2/token} client-id: ${AUTH_SERVER_CLIENT_ID:} client-secret: ${AUTH_SERVER_CLIENT_SECRET:} logging: request-response: blob-request: ${BLOB_REQUEST_LOG_ENABLED:false} blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false} prostore-rest-client: host: ${PS_HOST:localhost} port: ${PS_PORT:9095} http: max-pool-size: ${PS_MAX_POOL_SIZE:8} # Настройки модуля сбора информации о компонентах витрины component-info: enabled: true # DataSource Prostore datasource: '' # Схема Prostore datamart: component_info # Имя таблицы для записи информации о компоненте table-name: component_info # Период попыток создания схемы, при неуспехе create-table-period: 60s # Период публикации health-check publish-period: 60s # Период после которого компонент считается не активным при отсутствии health-check timeout-active: 300s # Список элементов конфига маскируемых при отправке, # если указан узловой элемент, то маскируются все вложенные в него элементы secrets: - blob.storage.auth.user - blob.storage.auth.password - blob.storage.auth.token - blob.storage.auth.authorization-server.client-secret - blob.storage.auth.access-token - blob.storage.auth.secret-token metrics: port: ${METRICS_PORT:9837} Параметры конфигурации ^^^^^^^^^^^^^^^^^^^^^^ Настройка конфигурации **BLOB-адаптера** осуществляется путем редактирования параметров настроек в файле ``application.yml``, где настраиваются секции: - ``http-server`` - указывается порт сервера; - ``executor`` - настраивается размер пула для запросов; - ``vertx`` - настраиваются значения вертиклов; - ``blob`` - настраивается подключение к Хранилищу BLOB-объектов; - ``logging`` - настраивается логирование работы модуля; - ``prostore-rest-client`` - блок параметров конфигурирования взаимодействия с **ProStore**; - ``component-info``- настройки модуля сбора информации о компонентах витрины; - ``metrics`` - настраивается получение метрик. Секция http-server ################### Секция ``http-server`` позволяет настраивать взаимодействие с BLOB-объектами через модуль **СМЭВ3-адаптер** по протоколу ``http/https`` и задавать порт, на котором будет открыт доступ к серверу. Например: .. code-block:: yaml http-server: enabled: ${SERVER_ENABLED:true} port: ${SERVER_PORT:8081} - ``enabled`` - флаг активации работы с сервером; - ``port`` - порт, на котором будет открыт доступ к серверу. Секция executor ############### Секция ``executor`` предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль. Например: .. code-block:: yaml executor: reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20} **Параметры настроек** - ``reader-pool-size`` - размер пула для чтения **Kafka**, например ``EXECUTOR_READER_POOL_SIZE:20``. Секция vertx ############ Секция ``vertx`` определяет настройки количества вертиклов. Например: .. code-block:: yaml vertx: web-client: max-pool-size: 20 **Параметры настроек** - ``max-pool-size`` - максимальное значение для веб-клиента. Секция blob ################### Секция ``blob`` предназначена для настройки: - размера выгружаемого чанка BLOB; - пути к Хранилищу BLOB-объектов (GET-запрос); - метода аутентификации для модуля BLOB-адаптера; - получения токена; - повторной аутентификаций при истечении времени жизни токена. Например: .. code-block:: yaml blob: default-request-timeout: 60s storage: client: awssdk # vertx/awssdk protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx host: ${BLOB_STORAGE_HOST:localhost} port: ${BLOB_STORAGE_PORT:8888} path-prefix: ${BLOB_STORAGE_PATH_PREFIX:} path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:} bucket: ${BUCKET:} # use only for client awssdk auth: type: ${BLOB_STORAGE_AUTH_TYPE:NONE} # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS user: ${BLOB_STORAGE_AUTH_USER:user} # use only for auth.type BASIC password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC access-token: ${ACCESS_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS secret-token: ${SECRET_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS token: ${BLOB_STORAGE_AUTH_TOKEN:token} # use only for auth.type TOKEN authorization-server: # use only for auth.type AUTH protocol: ${AUTH_SERVER_PROTOCOL:http} host: ${AUTH_SERVER_HOST:localhost} port: ${AUTH_SERVER_PORT:80} path: ${AUTH_SERVER_PATH:oauth2/token} client-id: ${AUTH_SERVER_CLIENT_ID:} client-secret: ${AUTH_SERVER_CLIENT_SECRET:} **Параметры конфигурации** - ``default-request-timeout`` - значение в секундах таймаута запроса; - ``client`` - клиент сервера хранилища **BLOB-объектов**, например ``BLOB_STORAGE_CLIENT:awssdk``; - ``protocol`` - протокол обмена с сервером хранилища **BLOB-объектов** (одно из значений ``http`` или ``https``), например ``BLOB_STORAGE_PROTOCOL:http``; - ``host`` - имя сервера хранилища **BLOB-объектов**, например ``BLOB_STORAGE_HOST:localhost``; - ``port`` - порт сервера хранилища **BLOB-объектов**, если отсутствует, то следует использовать следующие порты ``80`` для **HTTP**, ``443`` для **HTTPS**, например ``BLOB_STORAGE_PORT:8888``; - ``path-prefix`` - путь до места хранилища **BLOB-объектов**, путь до места хранения BLOB-объекта на сервере хранилища BLOB-объектов, например ``BLOB_STORAGE_PATH_POSTFIX:``; - ``path-postfix`` - окончание пути, начало списка параметров, например ``BLOB_STORAGE_PATH_PREFIX:``; - ``bucket`` - наименование хранилища, только для клиентов AWSSDK; - ``auth`` - параметры аутентификации **BLOB-адаптера**; - ``type`` -тип аутентификации (``NONE`` - нет, ``BASIC`` - по имени/паролю, ``TOKEN`` - по токену, ``AUTH`` - через сервер аутентификации), например ``BLOB_STORAGE_AUTH_TYPE:NONE``; - ``user`` - имя пользователя (для аутентификации ``BASIC``), например ``BLOB_STORAGE_AUTH_USER:user``; - ``password`` - пароль (для аутентификации ``BASIC``), например ``BLOB_STORAGE_AUTH_PASSWORD:pass``; - ``token`` - токен (для аутентификации ``TOKEN``), например ``BLOB_STORAGE_AUTH_TOKEN:token``; - ``protocol`` - имя протокола **HTTP** или **HTTPS** (для аутентификации ``AUTH``), например ``AUTH_SERVER_PROTOCOL:http``; - ``host`` - строка с IP или FQDN сервера авторизации (для аутентификации ``AUTH``), например ``AUTH_SERVER_HOST:localhost``; - ``port`` - TCP-порт (для аутентификации ``AUTH``), например ``AUTH_SERVER_PORT:80``; - ``path`` - путь на сервере (для аутентификации ``AUTH``), например ``AUTH_SERVER_PATH:oauth2/token``; - ``client-id`` - идентификатор клиента, присвоенный **BLOB-адаптеру** в сервере авторизации (для аутентификации ``AUTH``), например ``AUTH_SERVER_CLIENT_ID:``; - ``client-secret`` - секретный код клиента, присвоенный **BLOB-адаптеру** в сервере авторизации (для аутентификации ``AUTH``), например ``AUTH_SERVER_CLIENT_SECRET:``. **Пример cURL-запроса к серверу аутентификации** cURL (windows) .. code-block:: bash curl -X POST http://t5-avanpost-01.ru-central1.internal/oauth2/token ^ -H "Accept: application/json"^ -H "Content-type: application/x-www-form-urlencoded"^ --data "grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2" ^ -o result.txt ^ --trace-ascii result.log cURL (linux) .. code-block:: bash curl --request POST \ --url http://t5-avanpost-01.ru-central1.internal/oauth2/token \ --header 'Accept: application/json' \ --header 'Content-type: application/x-www-form-urlencoded' \ --data 'grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2' \ -o result.txt **Пример cURL-запроса к Хранилищу BLOB-объектов** cURL (windows) .. code-block:: bash curl -X GET http://vmserv1.internal.example.com:8080/datamart/data/v1/blobs/1234567 ^ -H "Authorization: bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJqdGkiOiI5YmQ3MzdjZi05MDNmLTQxZTktYjI5Mi1mZmUwM2QzNDhkNWIiLCJleHAiOjE2NTQxMDI5NDgsImlhdCI6MTY1NDEwMTE0OCwiaXNzIjoiY2VydC5pc3N1ZXIuaG9zdCIsImF1ZCI6IiIsImV4cGlyZXNfaW4iOjE4MDAsImNsaWVudF9pZCI6ImIwZmQwZjI4LTRiOTktNDBkNy04ZGQzLWU2NjNhNmNjNzdkMSJ9.qi8JKlQAdMsK3fTq4H88Z5-FppaUP95OH-rmPtCxEMmlPnyhNCRJe34aKMR5mXVldEzY1clV87-qjWCyPLH_Zkqji1C7aQz7fMbgZixhY2wrQnXAXRfslkRe5Ph3GYYd26GvWOG1xl99AHvfDWIfI1SGcJyd0z_iOl1GbghLvSV38MquZ8ugBdKaDjV-Ww3U_sWlJVO-oF8xjUMYuhOSsCNxhxMng1oVwUdAUbbgoB5ldyoGTbqmbQMYvBmKBT0eZqOR6RnJEAjmfOC9YeWwADKwovFybvGOaQZsjlaoJ2XxpmS79U7UO_6KXK1cnHfshVuB5_yUwubrRh6tRxt0CA"^ -o result.bin ^ --trace-ascii result.log **Пример настройки динамической ссылки на файлы с содержимым BLOB-полей** **Пример 1** Если в Витрине поле с типом ``LINK`` содержит текст ``12345678`` и для получения содержимого BLOB надо использовать строку вызова: .. code-block:: bash http://aa.bb.cc:8080/api/v1/blobs/12345678 Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml blob-storage: protocol: http host: aa.bb.cc port: 8080 path-prefix: api/v1/blobs/ **Пример 2** Если в Витрине поле с типом ``LINK`` содержит текст ``12345678`` и для получения содержимого BLOB надо использовать строку вызова: .. code-block:: bash https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000, Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml blob-storage: protocol: https host: aa.bb.cc path-prefix: api/v1/blobs/ path-postfix: /data params: format: jpg size: low backgraund: "#000000" **Пример 3** Если в Витрине поле с типом ``LINK`` содержит текст ``12345678`` и для получения содержимого BLOB надо использовать строку вызова: .. code-block:: bash http://aa.bb.cc:8080/api/v1/blobs/12345678 Настройки файла ``application.yml`` должны иметь следующий вид: .. code-block:: yaml blob-storage: protocol: ${PROT:http} host: ${HOST:aa.bb.cc} port: ${PORT:80} path-prefix: ${PREFIX:api/v1/blobs/} **Пример 4** Если требуется получить строку вида: .. code-block:: bash https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true Необходимо настроить: 1. В Витрине данных поле с типом ``LINK`` должно содержать текст: .. code-block:: bash 12345678/download?requester_id=ABCDEFGH 2. В файл ``application.yml`` добавить следующие настройки: .. code-block:: yaml blob-storage: protocol: https host: aa.bb.cc port: 8080 path-prefix: api/ params: user: fdsfs zip: true **Указание дополнительных параметров к Хранилищу BLOB-объектов** Например .. code-block:: yaml blob-storage: params: name1: value1 name2: value2 Пример запроса .. code-block:: bash /files/test?name1=value1&name2=value2 Секция logging ############## В секции ``logging`` настраивается логирование работы модуля. Например: .. code-block:: yaml logging: request-response: blob-request: ${BLOB_REQUEST_LOG_ENABLED:false} blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false} **Параметры настроек** - ``blob-request`` - журналировать запросы, например ``BLOB_REQUEST_LOG_ENABLED:false``; - ``blob-request`` - журналировать ответы, например ``BLOB_RESPONSE_LOG_ENABLED:false``. Секция prostore-rest-client ############################ В секции ``prostore-rest-client`` реализован блок параметров конфигурирования взаимодействия с **ProStore**. Например: .. code-block:: yaml prostore-rest-client: host: ${PS_HOST:localhost} port: ${PS_PORT:9095} http: max-pool-size: ${PS_MAX_POOL_SIZE:8} **Параметры настроек** - ``host`` - адрес **ProStore**, например ``PS_HOST:localhost``; - ``port`` - порт **ProStore**, например ``PS_PORT:9195``; - ``max-pool-size`` - максимальное число подключений к **ProStore**, например ``PS_MAX_POOL_SIZE:8``; Секция component-info ######################### В секции ``component-info`` хранятся настройки компонента сбора информации о компонентах витрины. Например: .. code-block:: yaml # Настройки модуля сбора информации о компонентах витрины component-info: enabled: true # DataSource Prostore datasource: '' # Схема Prostore datamart: component_info # Имя таблицы для записи информации о компоненте table-name: component_info # Период попыток создания схемы, при неуспехе create-table-period: 60s # Период публикации health-check publish-period: 60s # Период после которого компонент считается неактивным при отсутствии health-check timeout-active: 300s # Список элементов конфига маскируемых при отправке, # если указан узловой элемент, то маскируются все вложенные в него элементы secrets: - blob.storage.auth.user - blob.storage.auth.password - blob.storage.auth.token - blob.storage.auth.authorization-server.client-secret - blob.storage.auth.access-token - blob.storage.auth.secret-token **Параметры настроек** - ``enabled`` - статус подключения компонента, указывается булево значение; - ``datasource`` - датасорс Prostore; - ``datamart`` - схема Prostore; - ``table-name`` - имя таблицы для записи информации о компоненте; - ``create-table-period`` - период попыток создания схемы, при неуспехе, указывается в секундах; - ``publish-period`` - период публикации health-check, указывается в секундах; - ``timeout-active`` - период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах; - ``secrets`` - список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы. Секция metrics ############## Секция ``metrics`` предназначена для настройки параметров метрик. Например: .. code-block:: yaml metrics: port: ${METRICS_PORT:9837} **Параметры конфигурации** - ``port`` - Порт для метрик, например ``METRICS_PORT:9837``.