Skip to main content

Развёртывание сервера

Руководство для администратора: как развернуть сервер 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. Проверка

  1. Откройте веб-интерфейс в браузере: http://<адрес-сервера>/. Должна открыться страница «Подключения».
  2. Запустите на тестовом устройстве минимальный пример из раздела Быстрый старт.
  3. Убедитесь, что устройство появилось в таблице подключений, а телеметрия обновляется.

Развёртывание в 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.

Обновление

  1. Обновите образ в манифесте/compose-файле.
  2. docker compose pull && docker compose up -d (или kubectl rollout restart deployment/<имя>).
  3. Роботы переподключатся автоматически (SDK делает до 5 попыток с задержкой 1–5 с). Если сервер был недоступен дольше — перезапустите ПО на роботах.