Хранение конфигурации в базе данных
В 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.