Работа с внешней базой данных

Содержание

ADCM поддерживает операции с внешними базами данных. В частности, поддерживаются базы данных PostgreSQL.

ВАЖНО
Для использования в продуктовой среде рекомендуется отдельно стоящая база данных PostgreSQL.

Настройка

Для использования целевой базы данных PostgreSQL должны быть выполнены следующие условия:

  • Пользователь, база данных и пароль пользователя должны быть созданы (DATABASE_USERNAME, DATABASE_NAME, DATABASE_USER_PASSWORD в примере ниже).

  • Пользователь должен обладать правами owner для целевой базы данных PostgreSQL.

CREATE USER <DATABASE_USERNAME> with encrypted password '<DATABASE_USER_PASSWORD>';
CREATE DATABASE <DATABASE_NAME> OWNER <DATABASE_USERNAME>;

Пример запуска ADCM с базой данных PostgreSQL:

$ sudo docker run -d --restart=always -p 8000:8000 -v /opt/adcm:/adcm/data -e DB_HOST="10.92.40.190" -e DB_PORT="5432" -e DB_USER="admin" -e DB_NAME="postgres" -e DB_PASS="admin" --name adcm hub.arenadata.io/adcm/adcm:<version> -e DB_OPTIONS="<DATABASE_OPTIONS>"

где <version> — это версия Docker-образа в одном из следующих форматов:

  • <major>.<minor>.<patch> — если необходим конкретный патч ADCM. Пример: 2.0.0.

  • <major>.<minor> — если необходим последний патч в рамках выбранной версии ADCM. Пример: 2.0.

Вы можете использовать DB_OPTIONS для установления SSL-подключения к базе. Подробная информация о параметрах, доступных для переменной DB_OPTIONS, приведена в статье Установка.

Подготовьте файлы SSL-сертификата и секретного ключа и поместите их в <data_volume>/conf/ssl/. Затем укажите параметры DB_OPTIONS в формате JSON:

DB_OPTIONS='{"sslmode": "verify-full", "sslcert": "/adcm/data/conf/ssl/client.crt", "sslkey": "/adcm/data/conf/ssl/client.key", "sslrootcert": "/adcm/data/conf/ssl/server.crt"}'
ВАЖНО
  • latest использовался для ранних версий ADCM и начиная с версии 2.0.0 больше не поддерживается.

  • До выпуска ADCM 2.0.0 для версионирования использовался следующий формат: YYYY.MM.DD.HH.

Используйте -v /opt/adcm:/adcm/data:Z для SELinux.

Миграция

ВАЖНО
  • Начиная с версии 2.7.0 ADCM больше не поддерживает SQLite.

  • Функциональность миграции ADCM доступна для версий до 2.6.0 включительно и не поддерживается начиная с версии 2.7.0.

  • Миграция данных должна выполняться в рамках одной версии ADCM.

ADCM предоставляет инструменты для миграции данных из SQLite в PostgreSQL. Эта функциональность поддерживается начиная с версии 2023.03.27.20. Функциональность полезна, когда вы обновляете ADCM до последней версии и хотите начать использовать PostgreSQL.

Чтобы осуществить миграцию из исходной базы данных SQLite в целевую базу данных PostgreSQL, сначала необходимо подготовить целевую базу данных PostgreSQL.

После обновления Docker-контейнера ADCM до последней версии вы можете осуществить миграцию с SQLite на PostgreSQL, используя следующие команды:

  1. Сделайте дамп базы SQLite в файл:

    $ docker exec -it adcm /adcm/python/manage.py dumpdata --natural-foreign --natural-primary -o /adcm/data/var/data.json

    где -o указывает путь к файлу.

    По существу, эта команда получает все данные из базы данных SQLite, затем создает JSON-представление этих данных и помещает их в указанное место файловой системы в виде файла data.json.

  2. Остановите контейнер ADCM:

    $ docker stop adcm
    $ docker rm adcm
  3. Запустите контейнер ADCM в режиме MIGRATION_MODE:

    $ docker run -d --restart=always -p 8000:8000 -v /opt/adcm:/adcm/data
    -e DB_HOST="<DATABASE_HOSTNAME_OR_IP_ADDRESS>" -e DB_PORT="<DATABASE_TCP_PORT>"
    -e DB_USER="<DATABASE_USERNAME>" -e DB_NAME="<DATABASE_NAME>"
    -e DB_PASS="<DATABASE_USER_PASSWORD>" -e MIGRATION_MODE=1
    --name adcm hub.arenadata.io/adcm/adcm:<version>

    где <version> — это версия Docker-образа в одном из следующих форматов:

    • <major>.<minor>.<patch> — если необходим конкретный патч ADCM. Пример: 2.0.0.

    • <major>.<minor> — если необходим последний патч в рамках выбранной версии ADCM. Пример: 2.0.

    ВАЖНО
    • latest использовался для ранних версий ADCM и начиная с версии 2.0.0 больше не поддерживается.

    • До выпуска ADCM 2.0.0 для версионирования использовался следующий формат: YYYY.MM.DD.HH.

    Используйте -v /opt/adcm:/adcm/data:Z для SELinux.

    Запуская контейнер ADCM таким образом, вы получаете пустой экземпляр (instance) ADCM, еще не заполненный данными.

  4. Загрузите данные из файла в базу данных PostgreSQL:

    $ docker exec -it adcm /adcm/python/manage.py loaddata /adcm/data/var/data.json
  5. Остановите контейнер ADCM:

    $ docker stop adcm
    $ docker rm adcm
  6. Запустите контейнер ADCM:

    $ docker run -d --restart=always -p 8000:8000 -v /opt/adcm:/adcm/data
    -e DB_HOST="<DATABASE_HOSTNAME_OR_IP_ADDRESS>" -e DB_PORT="<DATABASE_TCP_PORT>"
    -e DB_USER="<DATABASE_USERNAME>" -e DB_NAME="<DATABASE_NAME>"
    -e DB_PASS="<DATABASE_USER_PASSWORD>" -e MIGRATION_MODE=0
    --name adcm hub.arenadata.io/adcm/adcm:<version>
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней