Развёртывание сервера
Руководство для администратора: как развернуть сервер ARTEX и окружающую инфраструктуру.
Имена образов и переменные окружения ХАБа в примерах ниже приведены как шаблон. Перед развёртыванием сверьте их с актуальным репозиторием платформы.
Состав развёртывания
| Компонент | Контейнер | Обязательность |
|---|---|---|
| ХАБ платформы (Gateway, Stream Engine, Device Manager) | образ ARTEX HUB | Обязательно |
| Веб-интерфейс оператора | статический фронтенд (React), раздаётся ХАБом (ClientIOModule) или отдельным веб-сервером | Обязательно |
| Redis | redis |
Рекомендуется |
| PostgreSQL | postgres |
Обязательно для многопользовательского режима |
| S3-совместимое хранилище | minio/minio |
Для записи видео и датасетов |
| Time Series DB | например, TimescaleDB или InfluxDB | Для записи телеметрии |
| AI Runtime / модели | отдельные контейнеры с GPU | При использовании моделей ИИ |
| Prometheus + Grafana | prom/prometheus, grafana/grafana |
Рекомендуется |
Требования к серверу
| Ресурс | Минимум (демо, 1–5 роботов) | Рекомендуется (соревнования, модели ИИ) |
|---|---|---|
| CPU | 4 ядра | 8+ ядер |
| RAM | 8 ГБ | 32 ГБ |
| GPU | не требуется | NVIDIA с поддержкой CUDA для YOLO / RL |
| Диск | 50 ГБ SSD | 1 ТБ+ под видео и датасеты |
| Сеть | 100 Мбит/с | 1 Гбит/с; ~2–5 Мбит/с на каждый видеопоток |
| ПО | Linux, Docker, Docker Compose | Kubernetes-кластер |
Шаг 1. Подготовка хоста
# Docker и Compose
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Для моделей ИИ на GPU — NVIDIA Container Toolkit
# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/
Доступ администраторов к серверу — только по SSH-ключам.
Шаг 2. Инфраструктура хранения (Docker Compose)
# docker-compose.infra.yml
services:
redis:
image: redis:7
restart: unless-stopped
ports: ["6379:6379"]
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: artex
POSTGRES_USER: artex
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes: ["pg_data:/var/lib/postgresql/data"]
minio:
image: minio/minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_USER}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD}
ports: ["9000:9000", "9001:9001"]
volumes: ["minio_data:/data"]
timescaledb:
image: timescale/timescaledb:latest-pg16
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${TSDB_PASSWORD}
volumes: ["tsdb_data:/var/lib/postgresql/data"]
volumes:
pg_data:
minio_data:
tsdb_data:
docker compose -f docker-compose.infra.yml up -d
Шаг 3. Запуск ХАБа
# docker-compose.hub.yml (шаблон)
services:
artex-hub:
image: <registry>/artex-hub:<version>
restart: unless-stopped
ports:
- "80:80" # веб-интерфейс, WebSocket, Socket.IO для роботов
environment:
REDIS_URL: redis://redis:6379
POSTGRES_DSN: postgres://artex:${POSTGRES_PASSWORD}@postgres:5432/artex
S3_ENDPOINT: http://minio:9000
JWT_SECRET: ${JWT_SECRET}
Роботы по умолчанию подключаются к адресу http://artex.arcon:80 — это значение параметра server в SDK. Настройте DNS-запись (или /etc/hosts на роботах) либо укажите реальный адрес сервера в params.json каждого робота.
Шаг 4. Проверка
- Откройте веб-интерфейс в браузере:
http://<адрес-сервера>/. Должна открыться страница «Подключения». - Запустите на тестовом устройстве минимальный пример из раздела Быстрый старт.
- Убедитесь, что устройство появилось в таблице подключений, а телеметрия обновляется.
Развёртывание в Kubernetes
Для продуктивного режима каждый сервис разворачивается отдельным Deployment:
- Gateway / Stream Engine / Device Manager — горизонтально масштабируются; для Socket.IO и WebSocket включите «липкие» сессии (sticky sessions) на Ingress.
- AI Runtime — Deployment на узлах с GPU (
nodeSelector/tolerations), ресурсnvidia.com/gpu. - Хранилища — StatefulSet или управляемые сервисы.
- Секреты (
JWT_SECRET, пароли БД, ключи S3) — через Kubernetes Secrets. - Метрики — через ServiceMonitor для Prometheus.
Обновление
- Обновите образ в манифесте/compose-файле.
docker compose pull && docker compose up -d(илиkubectl rollout restart deployment/<имя>).- Роботы переподключатся автоматически (SDK делает до 5 попыток с задержкой 1–5 с). Если сервер был недоступен дольше — перезапустите ПО на роботах.