Хранение конфигурации в базе данных
В Time реализована возможность хранения конфигурации в базе данных вместо config.json.
База данных для хранения конфигурации и база данных приложения - это две разные сущности. Вы можете хранить конфигурацию в отдельной базе данных.
Сформируйте строку для подключения к базе данных
Вы можете использовать уже существующею базу данных, которую использует сервер Time. Для этого создайте копию значения SqlSettings.DataSource из config.json, или из переменной среды TIME_SQLSETTINGS_DATASOURCE.
Если у вас используется кластер баз данных, то через строку подключения желательно передать все хосты базы данных и добавить параметр target_session_attrs=primary. При смене мастера, это даст возможность серверу Time быстро переключится на новый мастер.
Формат строки подключения к базе данных PostgreSQL с автоматическим выбором мастера будет следующий: postgres://user:password@db_host1:5432,db_host2:5432,db_host3:5432/database?sslmode=disable&connect_timeout=10&target_session_attrs=primary
Подробнее про формат значения параметра: Database Connection Control Functions.
Как перенести конфигурацию из config.json в базу данных
Выполните команду
./time config migrate --from "путь до файла config.json" --to "DSN базы данных PostgreSQL"
где DSN базы данных PostgreSQL - это строка для подключения к базе данных сформированая на прошлом шаге.
Пример запуска через джобу в kubernetes:
apiVersion: batch/v1
kind: Job
spec:
template:
spec:
containers:
- name: migrate-config
image: docker.registry.tinkoff.ru/time/time-server/time-server:6.201.17
args:
- config
- migrate
- --from
- "/time/config/config.json" # path to config.json file
- --to
- $(TIME_SQLSETTINGS_DATASOURCE)
- Файл
config.jsonдолжен соответствовать тому, что используется у вас производственной среде; - При переносе конфигурации Time не включает конфигурации из переменных среды
TIME_*, все переменные окружения, которые в дальнейшем не будут использоваться как переменные для работы time-server, следует перенести вconfig.json. - Все текущие сертификаты SAML будут перенесены в базу данных. Файлы конфигурации хранятся в таблице
configurationfilesв базе данных. Все файлы должны быть доступны из вызываемой оболочки shell;
Убедитесь, что конфигурация была перенесена корректно
Конфигурация хранится в таблице configuration. Выполните следующий запрос, чтобы убедиться, что конфигурация была перенесена корректно:
SELECT * FROM configurations WHERE active = true;
Должна быть возвращена одна строка и value поле должна соответствовать вашему config.json.
Если вы переносили файлы, то выполните следующий запрос:
SELECT * FROM configurationfiles;
Должны быть возвращены строки со всем перенесенными файлы, где в поле data должно быть содержимое файла.
Настроить сервер для использования базы данных
Для того чтобы сервер Time использовал базу данных для хранения конфигурации, необходимо установить переменную среды TIME_CONFIG c DSN базы данных, который указывался при переносе.
После применения переменной среду нужно перезапустить сервер Time.
Откат
Если у вас возникли проблемы с переносом конфигурации в базу данных, вы можете откатиться на использование файла конфигурации config.json, убрав переменную среды TIME_CONFIG.