Автоматическая или ручная установка 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>`.