Docker
Для оркестрации контейнеров используется docker-compose
Функциональность docker-compose разнесена на файлы:
- docker-compose.yml
- docker-compose.app.yml
- docker-compose.app.migrations.yml
- docker-compose.deps.yml
- docker-compose.additional.yml
Все файлы кроме docker-compose.additional.yml
перезаписываются при обновлении. В них нельзя вносить изменения.
docker-compose.additional.yml
можно использовать для развертывания дополнительных сервисов, например, сторонних
экспортеров.
Port mapping
По умолчанию опубликованы только HTTP (80) и HTTPS (443) порты приложения. Эти порты обслуживает сервис frontend.
Проброс портов отдельных сервисов можно выполнить, указав в docker-compose.additional.yml
необходимые сопоставления.
Пример публикации сервиса Prometheus:
services:
prometheus:
ports:
- "9090:9090"
После редактирования файла необходимо применить настройки, используя утилиту pamirctl
.
Пример:
pamirctl start prometheus
Env переменные
Глобальные настройки приложения могут храниться в следующих расположениях:
- в базе данных (в СУБД PostgreSQL);
- в переменных окружения (dotenv-файлах), расположенных в директории приложения (по-умолчанию:
$HOME/.pamir
).
При первом запуске приложения настройки применяются из dotenv-файлов, которые в дальнейшем могут быть изменены внутри приложения и записаны в базу данных, переопределяя таким образом настройки переменных окружения.
Иерархия dotenv-файлов сделана таким образом, чтобы обновляя приложение, получать актуальные параметры, появляющиеся в новых версиях Pamir, при этом не перезаписывая пользовательские переменные окружения. В общем случае переменные окружения подразделяются на:
- служебные для сервиса;
- верхнеуровневые общие;
- верхнеуровневые для сервиса;
- переопределяемые общие;
- переопределяемые для сервиса.
В контейнер сервиса переменные попадают именно в порядке, описанному выше, переопределяя параметры, записанные уровнем выше. Файловая структура dotenv-файлов следующая:
.$SERVICE.autogen
, где$SERVICE
- одиночный сервис или группа сервисов. Данный файл является служебным dotenv-файлом, в котором описываются маршруты работающего сервиса, а также информацию о версии приложения. Имеет расширение.autogen
, поскольку данный файл автоматически генерируется на этапе сборки приложения..env
Данный файл является общим верхнеуровневым dotenv-файлом, в нем определены общие для всех сервисов настройки приложения, такие как, подключение к базе данных, к менеджеру очередей, key-value хранилищу, а также некоторые инфраструктурные параметры - настройки внутренних служб удостоверяющего центра, каталогов пользователей и параметры инициализации службы менеджера очередей. Параметры для их переопределения имеет смысл брать из этого файла..$SERVICE.env
, где$SERVICE
- одиночный сервис или группа сервисов. Данный файл является верхнеуровневым dotenv-файлом, в котором определены настройки для отдельного сервиса или группы сервисов, например, настройки сервиса Monitoring или SRM. Данный файл может отсутствовать у некоторых сервисов, либо быть удаленным, в таком случае сервис будет иметь настройки по-умолчанию..override.env
Данный файл является общим переопределяемым dotenv-файлом, в котором могут быть перезаписаны параметры из общего верхнеуровневого dotenv-файла, т.е. переменные окружения, добавленные в этот файл будут доступны во всех сервисах приложения. Данный файл отсутствует при первичной установке приложения, по необходимости его можно создать, что позволяет сохранять настройки при обновлении приложения..$SERVICE.override.env
, где$SERVICE
- одиночный сервис или группа сервисов. Данный файл является переопреляемым dotenv-файлом, в котором могут быть перезаписаны параметры из верхнеуровневого dotenv-файла для отдельного сервиса или группы сервисов. Поведение аналогично общему переопределяемому dotenv-файлу, за тем исключением, что переменные окружения, записанные в этот файл, будут доступны определенному сервису или группе сервисов. Данный файл также отсутствует при первичной установке приложения, его можно создать, и он не перезаписывается при обновлении приложения, сохраняя пользовательские настройки.
После внесения изменений в dotenv-файлы, необходимо их применить, используя утилиту pamirctl
.
Для применения настроек для всех сервисов используется команда:
pamirctl start
Для применения настроек для отдельного сервиса:
pamirctl start $SERVICE
где, $SERVICE
- имя сервиса в docker-compose файле, либо множество сервисов, указанных через символ пробела.