Установка панели 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 API | alertweb-api | JWT, gRPC-сервер для агентов |
| Фоновые задачи | alertweb-worker | Создание VM, миграции, ISO… |
| Нода KVM | alertweb-agent | libvirt, диски, сеть на гипервизоре |
| Веб-интерфейс | /var/www/alertweb-ui | React SPA за nginx |
| База данных | MySQL 8 / MariaDB | Схема alertweb, пользователь alertweb |
Режимы развёртывания
| Режим | Состав | Когда |
|---|---|---|
| A. Control plane | api + 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
Установка из релиза
- Купите лицензию на my.alertweb.ru — укажите публичный IP панели.
- Скачайте tarball с
repo.alertweb.ru(ссылка в ЛК после оплаты) или соберите из исходников. - Скопируйте распакованный релиз на сервер, например
/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 8g; и длинные proxy_read_timeout на location /api/.
Активация лицензии
- Оплатите на my.alertweb.ru — ключ в разделе «Мои лицензии».
- В панели: Настройки → Лицензия — введите ключ.
- IP панели должен совпадать с указанным при заказе (публичный адрес, с которого идёт heartbeat).
Без активной лицензии создание VM и нод может быть ограничено. См. правила.
Подключение KVM-ноды
- В панели: Ноды → Добавить — получите
bootstrap_tokenи UUID ноды. - На сервере 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— корневой CAserver.pem/server-key.pem— APIclient.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.
Обновления панели
- Сделайте бэкап MySQL.
- Остановите
alertweb-worker, обновите бинарники API/worker и миграции. - Запустите API — миграции применятся при старте.
- Обновите статику UI в
/var/www/alertweb-ui. - Запустите worker. Проверьте Настройки → Обновления в AlertWeb.
sudo bash deploy/almalinux/install-update.sh
Диагностика
| Симптом | Действие |
|---|---|
| API не стартует | journalctl -u alertweb-api -n 100, проверьте DSN и миграции |
| Нода offline | journalctl -u alertweb-agent -f, firewall, mTLS, clock skew |
| VM stuck в provisioning | Jobs → логи job; POST /vms/{uuid}/abort-operation |
| Лицензия не активируется | IP панели, исходящий HTTPS, ключ из ЛК |
| ISO upload 413 | Увеличьте client_max_body_size в nginx |
sudo bash deploy/almalinux/diagnose-alertweb.sh