Перейти к основному содержимому

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-файлов следующая:

  1. .$SERVICE.autogen, где $SERVICE - одиночный сервис или группа сервисов. Данный файл является служебным dotenv-файлом, в котором описываются маршруты работающего сервиса, а также информацию о версии приложения. Имеет расширение .autogen, поскольку данный файл автоматически генерируется на этапе сборки приложения.
  2. .env Данный файл является общим верхнеуровневым dotenv-файлом, в нем определены общие для всех сервисов настройки приложения, такие как, подключение к базе данных, к менеджеру очередей, key-value хранилищу, а также некоторые инфраструктурные параметры - настройки внутренних служб удостоверяющего центра, каталогов пользователей и параметры инициализации службы менеджера очередей. Параметры для их переопределения имеет смысл брать из этого файла.
  3. .$SERVICE.env, где $SERVICE - одиночный сервис или группа сервисов. Данный файл является верхнеуровневым dotenv-файлом, в котором определены настройки для отдельного сервиса или группы сервисов, например, настройки сервиса Monitoring или SRM. Данный файл может отсутствовать у некоторых сервисов, либо быть удаленным, в таком случае сервис будет иметь настройки по-умолчанию.
  4. .override.env Данный файл является общим переопределяемым dotenv-файлом, в котором могут быть перезаписаны параметры из общего верхнеуровневого dotenv-файла, т.е. переменные окружения, добавленные в этот файл будут доступны во всех сервисах приложения. Данный файл отсутствует при первичной установке приложения, по необходимости его можно создать, что позволяет сохранять настройки при обновлении приложения.
  5. .$SERVICE.override.env, где $SERVICE - одиночный сервис или группа сервисов. Данный файл является переопреляемым dotenv-файлом, в котором могут быть перезаписаны параметры из верхнеуровневого dotenv-файла для отдельного сервиса или группы сервисов. Поведение аналогично общему переопределяемому dotenv-файлу, за тем исключением, что переменные окружения, записанные в этот файл, будут доступны определенному сервису или группе сервисов. Данный файл также отсутствует при первичной установке приложения, его можно создать, и он не перезаписывается при обновлении приложения, сохраняя пользовательские настройки.

После внесения изменений в dotenv-файлы, необходимо их применить, используя утилиту pamirctl.

Для применения настроек для всех сервисов используется команда:

pamirctl start

Для применения настроек для отдельного сервиса:

pamirctl start $SERVICE

где, $SERVICE - имя сервиса в docker-compose файле, либо множество сервисов, указанных через символ пробела.