Avanpost DAG : 2.4. Установка и запуск в Docker

2.4. Установка и запуск в Docker

Автоматическая или ручная установка DAG

Установка выполняется из архива `dag-install-manual-<VERSION>.tar.gz`, который собирает Jenkins.

Внутри архива:
`docker-compose.yml`, `docker-compose.opensearch.yml`, `Dockerfile.dag-runtime`,
`.env.example`, `templates/` и `Avanpost.DAG.v*.zip`.

При желании можно воспользоваться скриптом автоматической подготовки контейнеров, который выполняет все описанные далее инструкции.

Для удобства воспользуйтесь пакетом поставки dag-installer

1. Требования

  • Linux-хост с Docker Engine и плагином `docker compose` v2.
  • Права `root` или доступ к `docker`.
  • Архив `dag-install-manual-<VERSION>.tar.gz` (либо те же файлы из репозитория).
  • Доступ в интернет для скачивания образов `nginx`, `postgres`, `balabit/syslog-ng` и базового `mcr.microsoft.com/dotnet/aspnet:10.0` (а также `opensearchproject/*`,
      если включён OpenSearch).

2. Распаковка архива

mkdir -p /tmp/dag-manual
tar -xzf dag-install-manual-*.tar.gz -C /tmp/dag-manual
cd /tmp/dag-manual

3. Подготовка директорий

sudo mkdir -p /opt/avanpost/dag/{web,collector,config,logs/web,logs/collector,logs/syslog,postgresqldata,opensearchdata,opensearchmldata,models}

4. Распаковка бинарных файлов

sudo unzip Avanpost.DAG.v*.zip -d /tmp/dag-extract
# если в архиве вместо web/ лежит back/ — переименуйте
[ -d /tmp/dag-extract/web ] || sudo mv /tmp/dag-extract/back /tmp/dag-extract/web

sudo cp -r /tmp/dag-extract/web/* /opt/avanpost/dag/web/
sudo cp -r /tmp/dag-extract/collector/* /opt/avanpost/dag/collector/

5. Секреты

sudo cp /path/to/key /opt/avanpost/dag/config/key
sudo cp /path/to/license.jwt.alc /opt/avanpost/dag/config/license.jwt.alc

Если нет TLS-сертификата, сгенерируйте самоподписанный:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /opt/avanpost/dag/config/dag.key \
  -out /opt/avanpost/dag/config/dag.crt \
  -subj "/CN=dag.example.com"

6. Конфигурация

Скопируйте файлы деплоя в `/opt/avanpost/dag/`:

sudo cp docker-compose.yml docker-compose.opensearch.yml Dockerfile.dag-runtime /opt/avanpost/dag/
sudo cp templates/dag-cluster.json templates/dagcollector-cluster.json templates/syslog-ng.conf /opt/avanpost/dag/config/
# только если нужен OpenSearch:
sudo cp templates/synonyms.txt /opt/avanpost/dag/config/

Создайте `/opt/avanpost/dag/.env` из `.env.example` и отредактируйте значения:

sudo cp .env.example /opt/avanpost/dag/.env
sudo nano /opt/avanpost/dag/.env

Основное:

INSTALL_DIR=/opt/avanpost/dag
DAG_WEB_IMAGE=dag/dag-runtime:latest
DAG_COLLECTOR_IMAGE=dag/dag-runtime:latest
DAG_FRONT_IMAGE=nginx
DAG_DB_IMAGE=postgres

DAG_FRONT_URL=dag.example.com
DAG_DB_HOST=postgres
DAG_DB_NAME=dag
DAG_DB_USERNAME=dag
DAG_DB_PASSWORD=change_me

LDAP_HOST=ldap.example.com
LDAP_BIND_DN=CN=binduser,OU=Users,DC=example,DC=com
LDAP_BIND_USERNAME=binduser
LDAP_BIND_PASSWORD=change_me
LDAP_USER_SEARCH_BASE=OU=Users,DC=example,DC=com
LDAP_DOMAIN_NAME=example
USE_LDAPS=N

OPENSEARCH_ENABLE=false
COMPOSE_PROFILES=

Если `OPENSEARCH_ENABLE=true`, также установите `COMPOSE_PROFILES=opensearch`.

Создайте `/opt/avanpost/dag/config/config.json`:

{
  "serverKey": "/key",
  "licensePath": "/config/license.jwt.alc",
  "enableRequestLog": "true",
  "ipHeaderName": "X-Real-IP",
  "database": {
    "connectionString": "host=${DAG_DB_HOST};database=${DAG_DB_NAME};username=${DAG_DB_USERNAME};password=${DAG_DB_PASSWORD}",
    "providerName": "Postgres",
    "schemaName": "DAG_SCHEMA"
  },
  "auth": {
    "rootUser": "${LDAP_DOMAIN_NAME}\\${LDAP_BIND_USERNAME}",
    "defaultRealm": "${LDAP_DOMAIN_NAME}",
    "realms": {
      "${LDAP_DOMAIN_NAME}": {
        "type": "LDAP",
        "host": "${LDAP_HOST}",
        "bindDN": "${LDAP_BIND_DN}",
        "password": "${LDAP_BIND_PASSWORD}",
        "usersBase": "${LDAP_USER_SEARCH_BASE}",
        "userNameAttribute": "sAMAccountName"
      }
    }
  },
  "TargetUrls": {
    "Admin": "http://${DAG_FRONT_URL}"
  }
}

Подставьте реальные значения. В результирующем JSON `rootUser` должен
содержать два бэкслэша (`DOMAIN\\user`). Если `USE_LDAPS=Y`, добавьте в блок
LDAP:

		"IgnoreCrtValidation": "true",
        "UseSsl": "true"

Создайте `/opt/avanpost/dag/config/default.conf`:

server {
    listen        ${DAG_FRONT_PORT};
    listen        ${DAG_FRONT_SSL_PORT} ssl;
    server_name   ${DAG_FRONT_URL} ${DAG_FRONT_URL_ALT};

    ssl_certificate     /etc/nginx/ssl/dag.crt;
    ssl_certificate_key /etc/nginx/ssl/dag.key;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols       TLSv1.2 TLSv1.3;
    location / {
        proxy_pass       http://web:${DAG_API_PORT};
        proxy_http_version 1.1;
        proxy_redirect     off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Сгенерируйте `nlog.config` для `web` и `collector` из шаблона
(`NLOG_LEVEL` / `NLOG_FILE_LEVEL` из `.env`, по умолчанию `Warning` / `Info`):

sudo sed -e "s|@NLOG_LEVEL@|Warning|g" -e "s|@NLOG_FILE_LEVEL@|Info|g" \
  templates/nlog.config.template > /opt/avanpost/dag/web/nlog.config
sudo cp /opt/avanpost/dag/web/nlog.config /opt/avanpost/dag/collector/nlog.config

7. Сборка runtime-образа

cd /opt/avanpost/dag
sudo docker build -t dag/dag-runtime:latest -f Dockerfile.dag-runtime .

8. Запуск

cd /opt/avanpost/dag
sudo docker compose up -d

Если включён OpenSearch, предварительно установите `vm.max_map_count`:

sudo sysctl -w vm.max_map_count=262144
sudo docker compose -f docker-compose.yml -f docker-compose.opensearch.yml up -d

Прококнтролировать работу после запуска:

sudo docker compose ps
sudo docker logs -f web


Приложение будет доступно по `http://<DAG_FRONT_URL>:<DAG_FRONT_PORT>` и
`https://<DAG_FRONT_URL>:<DAG_FRONT_SSL_PORT>`.

Обсуждение