Работа с внешней базой данных
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"}'
|
ВАЖНО
|
Используйте -v /opt/adcm:/adcm/data:Z для SELinux.
Миграция
|
ВАЖНО
|
ADCM предоставляет инструменты для миграции данных из SQLite в PostgreSQL. Эта функциональность поддерживается начиная с версии 2023.03.27.20. Функциональность полезна, когда вы обновляете ADCM до последней версии и хотите начать использовать PostgreSQL.
Чтобы осуществить миграцию из исходной базы данных SQLite в целевую базу данных PostgreSQL, сначала необходимо подготовить целевую базу данных PostgreSQL.
После обновления Docker-контейнера ADCM до последней версии вы можете осуществить миграцию с SQLite на PostgreSQL, используя следующие команды:
-
Сделайте дамп базы 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.
-
Остановите контейнер ADCM:
$ docker stop adcm $ docker rm adcm -
Запустите контейнер 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, еще не заполненный данными.
-
-
Загрузите данные из файла в базу данных PostgreSQL:
$ docker exec -it adcm /adcm/python/manage.py loaddata /adcm/data/var/data.json -
Остановите контейнер ADCM:
$ docker stop adcm $ docker rm adcm -
Запустите контейнер 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>