Содержание

Установка панели AlertWeb

AlertWeb ставится на ваши серверы. Мы поставляем лицензию и документацию; железо, ОС на нодах и сеть — зона ответственности заказчика (правила).

Имена на сервере Бинарники alertweb-api, alertweb-worker, alertweb-agent; конфиги в /etc/alertweb/; переменные окружения — префикс ALERTWEB_*.

Архитектура

Браузер → nginx (UI + /api proxy) → alertweb-api (:8080 HTTP, :9090 gRPC)
                                         ↓
                                    MySQL (jobs, vms, nodes…)
                                         ↓
                              alertweb-worker → gRPC+mTLS → alertweb-agent (KVM-нода)
                                                              ↓
                                                         libvirt / KVM
КомпонентПроцесс / путьНазначение
REST APIalertweb-apiJWT, gRPC-сервер для агентов
Фоновые задачиalertweb-workerСоздание VM, миграции, ISO…
Нода KVMalertweb-agentlibvirt, диски, сеть на гипервизоре
Веб-интерфейс/var/www/alertweb-uiReact SPA за nginx
База данныхMySQL 8 / MariaDBСхема alertweb, пользователь alertweb

Режимы развёртывания

РежимСоставКогда
A. Control planeapi + worker + mysql + nginx/uiПанель готова, ноды подключите позже
B. Panel + нодыA + agent на каждой KVM-нодеProduction
C. All-in-oneВсё на одном хостеPoC, малые инсталляции

Требования

Сервер control plane

  • ОС: AlmaLinux 8 / 9 / 10 (рекомендуется), RHEL-совместимые
  • CPU/RAM: от 4 vCPU, 8 GB RAM (зависит от числа jobs и API-нагрузки)
  • Диск: SSD, от 40 GB + хранилище ISO (ALERTWEB_ISO_STORAGE, по умолчанию /var/lib/alertweb/iso)
  • Сеть: статический IP или DNS, порты 80/443 для UI, исходящий HTTPS для license-server
  • БД: MySQL 8.0+ или MariaDB 10.6+

KVM-нода

  • AlmaLinux с KVM/libvirt, мосты/VXLAN по вашей схеме
  • Каталог дисков VM (по умолчанию /vm)
  • Исходящее gRPC+mTLS соединение к API (порт 9090 на control plane)
  • Для VNC: websockify на ноде, прокси через /api/console/ws

Установка из релиза

  1. Купите лицензию на my.alertweb.ru — укажите публичный IP панели.
  2. Скачайте tarball с repo.alertweb.ru (ссылка в ЛК после оплаты) или соберите из исходников.
  3. Скопируйте распакованный релиз на сервер, например /opt/alertweb.
# Пример: all-in-one на AlmaLinux (root)
cd /opt/alertweb
export ALERTWEB_PANEL_IP=203.0.113.10
export ALERTWEB_JWT_SECRET=$(openssl rand -hex 32)
sudo bash deploy/almalinux/install-all-in-one.sh

Только control plane без KVM на том же хосте:

export ALERTWEB_PANEL_IP=203.0.113.10
sudo bash deploy/almalinux/install-control-plane.sh

Control plane (подробно)

Бинарники и systemd

Установщик кладёт бинарники и unit-файлы автоматически. Вручную:

sudo cp alertweb-api alertweb-worker /usr/local/bin/
sudo cp deploy/almalinux/systemd/alertweb-*.service /etc/systemd/system/
sudo cp -a migrations/. /usr/share/alertweb/migrations/
sudo systemctl daemon-reload
sudo systemctl enable --now alertweb-api alertweb-worker

Конфиг API (/etc/alertweb/api.env)

ALERTWEB_HTTP_ADDR=:8080
ALERTWEB_GRPC_ADDR=:9090
ALERTWEB_MYSQL_DSN=alertweb:SECRET@tcp(127.0.0.1:3306)/alertweb?parseTime=true&multiStatements=true&charset=utf8mb4
ALERTWEB_JWT_SECRET=change-me-long-random
ALERTWEB_MIGRATIONS_DIR=/usr/share/alertweb/migrations
ALERTWEB_CONTROL_PLANE_GRPC=127.0.0.1:9090
ALERTWEB_ISO_STORAGE=/var/lib/alertweb/iso
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/server.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/server-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
# Production (обязательно смените dev-значения):
ALERTWEB_GRPC_INTERNAL_TOKEN=random
ALERTWEB_METRICS_TOKEN=random
ALERTWEB_NODE_ISO_TOKEN=random
# Лицензия (обычно через UI; опционально в env):
# ALERTWEB_LICENSE_SERVER=https://license.alertweb.ru

Worker (/etc/alertweb/worker.env)

ALERTWEB_MYSQL_DSN=alertweb:SECRET@tcp(127.0.0.1:3306)/alertweb?parseTime=true&multiStatements=true&charset=utf8mb4
ALERTWEB_JWT_SECRET=same-as-api
ALERTWEB_WORKER_ID=worker-1
ALERTWEB_CONTROL_PLANE_GRPC=127.0.0.1:9090
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/client.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/client-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
ALERTWEB_GRPC_TLS_SERVER_NAME=alertweb-api

Первый вход

После миграций создаётся администратор по умолчанию: admin@alertweb.local / admin123смените пароль после входа. Проверка API:

curl -sS http://127.0.0.1:8080/health

nginx и веб-интерфейс

sudo bash deploy/almalinux/install-panel-nginx.sh panel.example.ru /var/www/alertweb-ui 127.0.0.1:8080
# UI из релиза (каталог alertweb-ui в tarball — имя сборки):
sudo rsync -a alertweb-ui/dist/ /var/www/alertweb-ui/

Браузер обращается к /api/... — nginx срезает префикс и проксирует на API. WebSocket VNC: wss://panel.example.ru/api/console/ws.

client_max_body_size Для загрузки ISO задайте в nginx client_max_body_size 8g; и длинные proxy_read_timeout на location /api/.

Активация лицензии

  1. Оплатите на my.alertweb.ru — ключ в разделе «Мои лицензии».
  2. В панели: Настройки → Лицензия — введите ключ.
  3. IP панели должен совпадать с указанным при заказе (публичный адрес, с которого идёт heartbeat).

Без активной лицензии создание VM и нод может быть ограничено. См. правила.

Подключение KVM-ноды

  1. В панели: Ноды → Добавить — получите bootstrap_token и UUID ноды.
  2. На сервере KVM установите агент:
sudo bash deploy/almalinux/install-node.sh
# или только агент на уже подготовленной ноде:
sudo bash deploy/almalinux/install-agent-node.sh

Пример /etc/alertweb/agent.env:

ALERTWEB_AGENT_NODE_UUID=uuid-from-panel
ALERTWEB_AGENT_BOOTSTRAP_TOKEN=token-from-panel
ALERTWEB_CONTROL_PLANE_GRPC=203.0.113.10:9090
ALERTWEB_HYPERVISOR_DRIVER=libvirt
LIBVIRT_DEFAULT_URI=qemu:///system
ALERTWEB_VM_DISKS_DIR=/vm
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/client.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/client-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
ALERTWEB_GRPC_TLS_SERVER_NAME=alertweb-api
sudo systemctl enable --now alertweb-agent

Сертификаты mTLS

Агенты и worker подключаются к API по gRPC с клиентскими сертификатами. Каталог /etc/alertweb/certs/:

  • ca.pem — корневой CA
  • server.pem / server-key.pem — API
  • client.pem / client-key.pem — worker и агенты

Для dev/lab: make dev-certs в корне репозитория (если доступен в вашей сборке).

Docker Compose (разработка)

Локальный стенд AlertWeb без реального KVM (mock hypervisor):

docker compose -f deploy/docker-compose.lab.yml up --build -d
bash deploy/scripts/lab-bootstrap.sh
# UI: http://localhost:3000  API: http://localhost:8080

Для production используйте AlmaLinux-скрипты и реальный libvirt.

Обновления панели

  1. Сделайте бэкап MySQL.
  2. Остановите alertweb-worker, обновите бинарники API/worker и миграции.
  3. Запустите API — миграции применятся при старте.
  4. Обновите статику UI в /var/www/alertweb-ui.
  5. Запустите worker. Проверьте Настройки → Обновления в AlertWeb.
sudo bash deploy/almalinux/install-update.sh

Диагностика

СимптомДействие
API не стартуетjournalctl -u alertweb-api -n 100, проверьте DSN и миграции
Нода offlinejournalctl -u alertweb-agent -f, firewall, mTLS, clock skew
VM stuck в provisioningJobs → логи job; POST /vms/{uuid}/abort-operation
Лицензия не активируетсяIP панели, исходящий HTTPS, ключ из ЛК
ISO upload 413Увеличьте client_max_body_size в nginx
sudo bash deploy/almalinux/diagnose-alertweb.sh