Установка драйверов и настройка SSL

Установка драйверов и настройка SSL в Fincomtech Analytics (Docker)

Для того чтобы Fincomtech Analytics мог взаимодействовать с внешними базами данных, необходимо наличие соответствующих Python-драйверов. В базовую сборку включены только основные коннекторы. Кроме того, при работе с управляемыми базами данных (Managed Databases) в российских облаках (Cloud.ru, Yandex Cloud) требуется настройка SSL-сертификатов.

1. Установка драйвера (Docker)

Установка пакета должна быть перманентной, чтобы он сохранялся при перезапуске контейнеров. Для этого в Fincomtech Analytics используется механизм локальных зависимостей.

Порядок действий:

  1. Определите необходимый PyPI-пакет (например, mysqlclient для MySQL, psycopg2 для PostgreSQL или clickhouse-connect для ClickHouse).
  2. Создайте файл requirements-local.txt в подкаталоге docker (рядом с docker-compose.yml).
  3. Добавьте название библиотеки в файл:
bashecho "mysqlclient" >> ./docker/requirements-local.txt
  1. Примените изменения.
    • Для стандартного образа: Перезапустите контейнеры.
      bashdocker compose -f docker-compose-non-dev.yml up -d
      
    • Для кастомного образа: Пересоберите с флагом обновления.
      bashdocker compose build --force-rm
      docker compose up -d
      

2. Специфика подключения к облакам РФ (Cloud.ru, Yandex Cloud)

Управляемые базы данных в Cloud.ru (Evolution) и Yandex Cloud по умолчанию требуют защищенного SSL-соединения с использованием их собственных корневых сертификатов (Root CA). Без этого подключение будет отклонено с ошибкой верификации.

Шаг 1: Получение сертификата

  • Yandex Cloud: Скачайте корневой сертификат root.crt (или CA.pem) по официальной ссылке из документации или через консоль.
  • Cloud.ru: В консоли управления выберите свой инстанс БД, перейдите в раздел информации о подключении и скачайте SSL-сертификат.

Шаг 2: Проброс сертификата в контейнер
Чтобы Fincomtech Analytics увидел файл сертификата, его нужно "пробросить" внутрь Docker-контейнера.

  1. Создайте папку certs в корне вашего проекта и положите туда скачанный файл (назовем его root.crt).
  2. Откройте файл docker-compose-non-dev.yml (или тот, который вы используете для запуска).
  3. Найдите сервис superset (или x-superset-image) и добавьте в раздел volumes новую строку:
textvolumes:
  - ./docker:/app/docker
  - ./certs:/app/certs:ro  # <-- Добавьте эту строку

Это смонтирует локальную папку сертификатов в путь /app/certs внутри контейнера.

Перезапустите контейнеры для применения настройки томов: docker compose -f ... up -d.

3. Настройка строки подключения (Connection String)

Теперь при создании подключения в интерфейсе Fincomtech Analytics нужно указать путь к сертификату.

Вариант А: PostgreSQL (Yandex Cloud / Cloud.ru)
В поле SQLALCHEMY URI добавьте параметры SSL в конец строки:

textpostgresql://user:password@c-c9q...rw.rw.yp-c.yandex.net:6432/db_name?sslmode=verify-full&sslrootcert=/app/certs/root.crt

Где /app/certs/root.crt — это путь внутри контейнера, который мы настроили на шаге 2.

Вариант Б: MySQL
Для MySQL параметры часто задаются через JSON-конфигурацию.

  1. Введите базовый URI: mysql://user:password@host:port/db_name
  2. Перейдите на вкладку Advanced -> Security.
  3. В поле Secure Extra (или Engine Parameters) вставьте JSON:
json{
    "ssl": {
        "ca": "/app/certs/root.crt",
        "check_hostname": false
    }
}

Вариант В: ClickHouse
Для clickhouse-connect:

textclickhouse+native://user:password@host:port/default?secure=true&ca_certs=/app/certs/root.crt

4. Диагностика

Если подключение не проходит:

  1. Проверьте файл: Зайдите в контейнер docker exec -it <id> bash и выполните ls -la /app/certs/, чтобы убедиться, что файл доступен.
  2. Тест через curl: Попробуйте внутри контейнера проверить доступность порта облачной БД: curl -v telnet://<host>:<port>. Если соединения нет — проверьте настройки Security Groups (Групп безопасности) в консоли облачного провайдера.