Установка DVT с помощью единого командного скрипта

В данной статье описан удобный способ установки DVT на рабочую станцию с помощью единого командного скрипта. Он автоматически подготовит окружение, проверит все необходимые зависимости и запустит сервисы системы.

Обратите внимание, переменная окружения DVT_FERNET_KEY обязательна: без неё контейнеры не запустятся. Проверьте, что она задана в вашем окружении перед обновлением.

DVT разворачивается в среде Docker под управлением ОС Linux.

Важно!

Для доступа к дистрибутивам и серверу лицензирования должен быть обеспечен доступ с сервера (виртуальной машины), где будет разворачиваться DVT по следующим адресам «Денвик»:

lic.denvic.ru:443
lic2.denvic.ru:443
distribution.denvic.tech:443

А также публичные ресурсы:

get.docker.com
download.docker.com

В видео продемонстрирован пример развертывания DVT в Yandex Cloud:

Установка Docker Engine на Linux

Актуально для Debian/Ubuntu-серверов. Для других дистрибутивов лучше использовать отдельную официальную инструкцию Docker Engine под конкретную ОС.

Что будет установлено:

  • docker-ce — Docker Engine;

  • docker-ce-cli — CLI-клиент docker;

  • containerd.io — container runtime;

  • docker-buildx-plugin — сборка образов через Buildx;

  • docker-compose-plugin — современный Docker Compose v2, который запускается как docker compose.

Проверка дистрибутива

. /etc/os-release printf 'ID=%s\nVERSION_CODENAME=%s\nUBUNTU_CODENAME=%s\n' "$ID" "${VERSION_CODENAME:-}" "${UBUNTU_CODENAME:-}"

Этот гайд покрывает Debian и Ubuntu. Если у вас производный дистрибутив вроде Kali, Linux Mint или LMDE, проверьте, какому Debian/Ubuntu-релизу он соответствует, и используйте его кодовое имя.

Удаление конфликтующих пакетов

Если Docker уже ставили из репозиториев дистрибутива, эти пакеты могут конфликтовать с официальными пакетами Docker.

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove -y "$pkg" 2>/dev/null || true done
Примечание:

Этот шаг не удаляет существующие образы, контейнеры, volumes и networks из /var/lib/docker.

Установка зависимости для APT-репозитория

sudo apt update sudo apt install -y ca-certificates curl

Добавление официального GPG-ключа Docker

. /etc/os-release case "$ID" in debian) DOCKER_REPO_URL="https://download.docker.com/linux/debian" DOCKER_CODENAME="$VERSION_CODENAME" ;; ubuntu) DOCKER_REPO_URL="https://download.docker.com/linux/ubuntu" DOCKER_CODENAME="${UBUNTU_CODENAME:-$VERSION_CODENAME}" ;; *) echo "Этот гайд покрывает только Debian и Ubuntu. Для '$ID' откройте официальную инструкцию Docker под ваш дистрибутив." exit 1 ;; esac sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL "$DOCKER_REPO_URL/gpg" -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc

Добавление официального APT-репозитория Docker

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF Types: deb URIs: $DOCKER_REPO_URL Suites: $DOCKER_CODENAME Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF sudo apt update

Установка Docker Engine и плагинов

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверьте, что Docker запущен:
sudo systemctl status docker --no-pager

Если сервис не запущен:

sudo systemctl start docker

На Debian и Ubuntu Docker обычно автоматически стартует при загрузке системы. Если нужно включить автозапуск явно:

sudo systemctl enable docker.service sudo systemctl enable containerd.service

Проверка установки

sudo docker run --rm hello-world docker compose version docker buildx version

Если hello-world отработал без ошибки, Docker установлен корректно. После этого можно переходить к установке DVT.

Опционально: запуск Docker без sudo

По умолчанию доступ к Docker-сокету есть только у root, поэтому команды запускаются через sudo. Если нужно запускать docker от обычного пользователя, добавьте пользователя в группу docker:

sudo groupadd docker 2>/dev/null || true sudo usermod -aG docker "$USER" newgrp docker

Проверьте:

docker run --rm hello-world
Важно!

Группа docker фактически даёт пользователю root-level доступ к хосту. На продакшен-серверах добавляйте в неё только доверенных пользователей.

Обновление Docker

Docker будет обновляться через обычный apt, так как установлен из официального APT-репозитория:

sudo apt update sudo apt upgrade -y

Источники

  • Docker Docs — Install Docker Engine on Debian: https://docs.docker.com/engine/install/debian/

  • Docker Docs — Install Docker Engine on Ubuntu: https://docs.docker.com/engine/install/ubuntu/

  • Docker Docs — Linux post-installation steps: https://docs.docker.com/engine/install/linux-postinstall/

Далее можно переходить к установке DVT.

Установка DVT

Установка по умолчанию

Запустите установочный скрипт:

bash <(sudo curl -fsSL https://raw.distribution.denvic.tech/dvt/install.sh)

Скрипт запустится и перейдёт в интерактивный режим настройки.

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

🚀 Добро пожаловать в установщик DVT

Далее последовательно будут заданы параметры окружения.


🔑 Лицензионный ключ

Скрипт запросит лицензионный ключ и выполнит его проверку на сервере лицензий:

🔑 Введите лицензионный ключ DVT. > XXXXX-XXXXX-XXXXX

При успешной проверке выводится подтверждение.


🗄 Каталог данных

Необходимо указать каталог, где будут храниться данные PostgreSQL, Redpanda и файлов окружения:

🗄 Каталог для данных DVT По умолчанию: /var/lib/dvt > /mnt/dvt

Каталог создаётся автоматически.


🌐 Публичный URL

Устанавливается адрес, по которому вы будете открывать интерфейс DVT:

🌐 Публичный URL DVT Например: http://localhost или https://dvt.company.local > http://localhost

Скрипт автоматически определяет необходимость использования Secure cookies.


⚙️ Выбор версии образов

Укажите Docker‑tag:

Введите версию DVT (docker tag) или оставьте latest: > latest

🗄 Параметры PostgreSQL

Скрипт разворачивает встроенный PostgreSQL и предлагает задать параметры:

Имя пользователя PostgreSQL: [dvt-user] Имя базы PostgreSQL: [DVT] Пароль PostgreSQL (пусто = сгенерировать случайный): > ******

При пустом вводе будет создан безопасный случайный пароль.


🔑 Аккаунт администратора

Создаётся первый пользователь админ‑панели:

Имя пользователя администратора: [dvt-admin] Пароль администратора (пусто = сгенерировать случайный): > ******

🔐 Токены внутренних сервисов

Генерируются ключи для Store Service, gRPC Forward Service и Fernet. Каждый можно ввести вручную или оставить генерацию скрипту.


⚙️ Формирование .env

Установщик автоматически создаёт файл окружения .env в каталоге установки. В нём хранятся параметры доступа к БД, токены сервисов, публичный URL и настройки контейнеров.

При наличии существующего .env создаётся резервная копия.


📋 Итоговая конфигурация

Перед запуском сервисов отображается краткое резюме параметров:

Сводка конфигурации: Лицензионный ключ: XXXXX... Каталог данных: /var/lib/dvt Публичный URL: http://localhost Версия образов: latest Продолжить установку? [Y/n]

🚀 Запуск сервисов

Скрипт скачивает файл docker-compose.yaml, авторизуется в Container Registry и запускает DVT:

🚀 Запускаем DVT через 'sudo docker compose -f /var/lib/dvt/docker-compose.yaml up -d'

После старта появится сообщение:

✓ DVT запущен. Откройте в браузере: http://localhost

Установка не в интерактивном режиме

Также есть возможность запустить установщик не в интерактивном режиме.
Флаги установщика DVT:

Флаг

Описание

-n, --non-interactive

запуск без интерактивных вопросов. Все параметры должны быть переданы через флаги.

--license

лицензионный ключ DVT.

--dir

директория для хранения данных DVT. По умолчанию: /var/lib/dvt.

--version

версия DVT / тег Docker-образов. По умолчанию: latest.

--public-url

публичный URL DVT. Можно указывать несколько раз для нескольких адресов.

--pg-user

пользователь PostgreSQL.

--pg-db

имя базы PostgreSQL.

--pg-pass

пароль PostgreSQL.

--valkey-pass

пароль Valkey.

--valkey-db

номер базы Valkey.

--grpc-token

токен внутреннего gRPC Forward Service.

--fernet-key

Fernet-ключ для шифрования внутренних данных.

Пример:

sudo bash install.sh -n --license XXXXX --version 1.15.0 --public-url https://dvt.example.ru

Полезные рекомендации

  • Установщик полностью интерактивный — достаточно отвечать на вопросы по порядку.

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

  • Все данные и конфигурации располагаются в каталоге, который вы указали на этапе установки.


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

sudo docker ps

Настройка HTTPS для DVT через Angie

Ниже приведён пример настройки HTTPS и обратного проксирования запросов к DVT с помощью веб-сервера Angie.Конфигурация является лишь примером. При необходимости ее можно адаптировать под инфраструктуру вашей организации.

Предварительные требования

Перед настройкой необходимо подготовить:

  • Доменное имя для DVT;

  • SSL-сертификат и соответствующий ему приватный ключ;

  • Установленный и запущенный Angie;

  • Сетевой доступ от сервера Angie до сервера, на котором развернут DVT;

  • Доступность входящих подключений на порты 80 и 443.

В примере используются следующие переменные:

Домен DVT: dvt.your_org.ru Адрес сервера DVT: 192.168.111.111:80 SSL-сертификат: /etc/ssl/private/your_org.ru.crt Приватный ключ: /etc/ssl/private/your_org.ru.key

При использовании примера замените эти значения на параметры вашей инфраструктуры.

Глобальная настройка Websocket

DVT использует Websocket-соединения, поэтому для корректного формирования заголовка Connection добавьте глобальную директиву map.

Создайте файл:

nano /etc/angie/http.d/00-map-websocket.conf

Добавьте в него:

map $http_upgrade $connection_upgrade { default upgrade; '' close; }

Эта настройка указывается только один раз и может использоваться несколькими виртуальными хостами.

Для проксирования WebSocket требуется передавать заголовки Upgrade и Connection, а также использовать HTTP/1.1 при соединении с upstream-сервером.

Настройка виртуального хоста DVT

Создайте отдельный конфигурационный файл, например:

nano /etc/angie/http.d/dvt.conf

Добавьте следующую конфигурацию:

server { listen 80; server_name dvt.your_org.ru; return 301 https://$host$request_uri; } server { listen 443 ssl; http2 on; server_name dvt.your_org.ru; # SSL-сертификаты ssl_certificate /etc/ssl/private/your_org.ru.crt; ssl_certificate_key /etc/ssl/private/your_org.ru.key; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4'; ssl_prefer_server_ciphers on; # Логирование access_log /var/log/angie/dvt.your_org.ru-access.log; error_log /var/log/angie/dvt.your_org.ru-error.log; # WebSocket-соединения location /ws { proxy_pass http://192.168.111.111:80; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # Таймауты для долгоживущих соединений proxy_read_timeout 86400s; proxy_send_timeout 86400s; # Стандартные прокси-заголовки proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } # Основной HTTP-трафик DVT location / { proxy_pass http://192.168.111.111:80/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; client_max_body_size 10m; client_body_buffer_size 128k; proxy_read_timeout 300s; proxy_send_timeout 300s; } }

Первый блок server перенаправляет HTTP запросы с 80 порта на HTTPS.

Второй блок:

  • принимает HTTPS запросы на 443 порту;

  • подключает SSL сертификат;

  • включает HTTP/2;

  • проксирует основной трафик на сервер DVT;

  • отдельно обрабатывает соединения Websocket по пути /ws;

  • передаёт upstream-серверу исходный домен, IP-адрес клиента и информацию о протоколе HTTPS.

Настройка listen 443 ssl, а также директивы ssl_certificate и ssl_certificate_key соответствуют стандартной схеме настройки HTTPS в Angie. HTTP/2 в Angie включается отдельной директивой http2 on.

Какие параметры необходимо заменить

Перед применением конфигурации замените:

  • Доменное имя server_name dvt.your_org.ru; на доменное имя вашего экземпляра DVT.

  • Адрес DVT proxy_pass http://158.160.216.111:80; На IP-адрес и порт сервера, где развернут DVT.

  • Адрес необходимо заменить в обоих блоках location.

  • Пути к SSL-сертификатам:

ssl_certificate /etc/ssl/private/your_org.ru.crt; ssl_certificate_key /etc/ssl/private/your_org.ru.key;

Укажите реальные пути к сертификату и приватному ключу вашего домена.

Пути к журналам

При необходимости измените:

access_log /var/log/angie/dvt.your_org.ru-access.log; error_log /var/log/angie/dvt.your_org.ru-error.log;

У пользователя, от имени которого работает Angie, должны быть права на запись в соответствующий каталог.

Применение конфигурации

После сохранения файлов:

  1. Проверьте конфигурацию Angie на наличие синтаксических ошибок.

  2. Если проверка прошла успешно, перезагрузите конфигурацию Angie.

  3. Откройте DVT по настроенному HTTPS адресу.

  4. Проверьте работу интерфейса и WebSocket-соединений.

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

/var/log/angie/dvt.your_org.ru-access.log /var/log/angie/dvt.your_org.ru-error.log

Также убедитесь, что сервер Angie имеет сетевой доступ к указанному в proxy_pass адресу DVT.

Проверка результата

После завершения настройки должны выполняться следующие условия:

  • обращение по http://dvt.your_org.ru перенаправляется на HTTPS;

  • интерфейс DVT открывается по https://dvt.your_org.ru;

  • браузер не сообщает об ошибках SSL-сертификата;

  • загрузка файлов работает корректно;

  • Websocket соединение по пути /ws успешно устанавливается;

  • в интерфейсе DVT отсутствуют ошибки соединения с сервером.