.env
Настройки приложения Памир могут храниться в двух источниках:
- в базе данных PostgreSQL;
- в dotenv-файлах, расположенных в директории приложения
(по умолчанию:$HOME/.pamir).
При первом запуске приложения значения конфигурации считываются из dotenv-файлов. В дальнейшем часть параметров может быть изменена через интерфейс приложения и сохранена в базе данных. В этом случае значения, сохранённые в базе данных, имеют приоритет над значениями из dotenv-файлов.
Общий принцип
Иерархия dotenv-файлов организована таким образом, чтобы:
- при обновлении приложения автоматически получать новые параметры, появившиеся в новых версиях Памир;
- не перезаписывать пользовательские настройки.
Переменные окружения делятся на следующие уровни:
- служебные для сервиса;
- верхнеуровневые общие;
- верхнеуровневые для сервиса;
- переопределяемые общие;
- переопределяемые для сервиса.
При запуске контейнера переменные применяются последовательно: каждый следующий уровень может переопределять значения, заданные на предыдущем.
Приоритет источников конфигурации
Итоговое значение параметра определяется по следующему приоритету:
- значение, сохранённое в базе данных;
- значение из
.$SERVICE.override.env; - значение из
.override.env; - значение из
.$SERVICE.env; - значение из
.env; - значение из
.$SERVICE.autogen.
Структура dotenv-файлов
| Приоритет | Файл | Область действия | Назначение |
|---|---|---|---|
| 1 | .$SERVICE.autogen | сервис или группа сервисов | Служебный файл, автоматически генерируемый на этапе сборки. Содержит маршруты работающего сервиса и информацию о версии приложения. |
| 2 | .env | все сервисы | Общий верхнеуровневый файл. Содержит общие параметры приложения: подключения к базе данных, менеджеру очередей, key-value хранилищу, инфраструктурные и системные настройки. |
| 3 | .$SERVICE.env | сервис или группа сервисов | Верхнеуровневый файл для конкретного сервиса или группы сервисов. Используется для задания параметров отдельных компонентов, например Monitoring или SRM. |
| 4 | .override.env | все сервисы | Общий переопределяемый файл. Используется для пользовательского переопределения параметров из .env без изменения базовой конфигурации поставки. |
| 5 | .$SERVICE.override.env | сервис или группа сервисов | Переопределяемый файл для конкретного сервиса или группы сервисов. Используется для пользовательского переопределения параметров из .$SERVICE.env. |
В таблице перечислены типы dotenv-файлов в логическом порядке структуры конфигурации.
При вычислении итогового значения параметра более высокий приоритет имеют файлы переопределения:
сначала .$SERVICE.override.env, затем .override.env, далее .$SERVICE.env, .env и .$SERVICE.autogen.
Описание файлов
.$SERVICE.autogen
Где $SERVICE — имя отдельного сервиса или группы сервисов.
Служебный dotenv-файл, автоматически формируемый на этапе сборки приложения. Содержит:
- маршруты работающего сервиса;
- сведения о версии приложения.
Файл имеет расширение .autogen и не предназначен для ручного редактирования.
.env
Общий верхнеуровневый dotenv-файл.
Содержит базовые параметры, общие для всех сервисов приложения, в том числе:
- параметры подключения к базе данных;
- параметры подключения к менеджеру очередей;
- параметры подключения к key-value хранилищу;
- инфраструктурные настройки;
- параметры внутренних служб удостоверяющего центра;
- параметры каталогов пользователей;
- параметры инициализации службы менеджера очередей.
При необходимости переопределения общих параметров исходные значения обычно берутся из этого файла.
.$SERVICE.env
Где $SERVICE — имя отдельного сервиса или группы сервисов.
Верхнеуровневый dotenv-файл для конкретного сервиса или группы сервисов. Используется для задания параметров отдельных компонентов, например:
- Monitoring;
- SRM;
- других сервисов платформы.
Для некоторых сервисов такой файл может отсутствовать. В этом случае сервис использует значения по умолчанию либо параметры, полученные из других уровней конфигурации.
.override.env
Общий переопределяемый dotenv-файл.
Используется для переопределения параметров из общего файла .env.
Все переменные, заданные в этом файле, становятся доступны всем сервисам приложения.
Файл отсутствует при первичной установке, но может быть создан пользователем. Его использование позволяет сохранять пользовательские настройки при обновлении приложения.
.$SERVICE.override.env
Где $SERVICE — имя отдельного сервиса или группы сервисов.
Переопределяемый dotenv-файл для конкретного сервиса или группы сервисов.
Используется для переопределения параметров из .$SERVICE.env.
Поведение аналогично .override.env, но область действия ограничена конкретным сервисом или группой сервисов.
Файл также отсутствует при первичной установке и может быть создан вручную. При обновлении приложения он не перезаписывается, что позволяет сохранять пользовательские настройки.
Рекомендации по использованию
- Не редактируйте файлы
*.autogenвручную. - Для изменения общих параметров используйте
.override.env. - Для изменения параметров отдельного сервиса используйте
.$SERVICE.override.env. - Не вносите пользовательские изменения напрямую в
.envи.$SERVICE.env, если требуется сохранить их при обновлении приложения. - Если параметр также поддерживает хранение в базе данных, значение из базы данных будет иметь приоритет над dotenv-файлами.
Применение изменений
После внесения изменений в dotenv-файлы необходимо применить их с помощью утилиты pamirctl.
Применить настройки для всех сервисов
pamirctl start
Применить настройки для отдельного сервиса
pamirctl start $SERVICE
где $SERVICE — имя сервиса в docker-compose-файле или несколько сервисов, перечисленных через пробел.