Skip to main content

Развёртывание ЛиманИСУ 2.0

Данный раздел описывает процедуру установки и запуска ПО СВД «ЛиманИСУ 2.0» на локальном сервере мониторинга (ЛСМ) и центральном сервере диспетчеризации (ЦСД).

Установка на ЛСМ

ЛСМ -- основной сервер системы. Здесь развёртывается полный стек ПО ЛиманИСУ 2.0. Все компоненты запускаются в контейнерах Docker.

Установка зависимостей

Перед развёртыванием необходимо установить Docker и Docker Compose.

  1. Обновите систему:
sudo apt update && sudo apt upgrade -y
  1. Установите Docker и Docker Compose:
sudo apt install -y docker.io=25.0.5+astra2 docker-compose=1.29.2+astra2
  1. Добавьте текущего пользователя в группу docker:
sudo usermod -aG docker $USER && newgrp docker
  1. Проверьте корректность установки:
docker --version
# Docker version 25.0.5+astra2

docker compose version
# docker-compose version 1.29.2

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

После установки зависимостей выполняется развёртывание системы из дистрибутивного архива.

  1. Распакуйте дистрибутив в системный каталог:
sudo tar -xf LimanISU_v2.1.0.tar.xz -C /opt/
cd /opt/LimanISU
  1. Проверьте целостность архива:
sha256sum -c ../LimanISU_v2.1.0.sha256
# Ожидаемо: "LimanISU_v2.1.0.tar.xz: OK"
  1. Загрузите Docker-образы в локальный реестр:
docker load -i images.tar

Настройка переменных окружения

  1. Настройте файл .env, заменив заглушки на реальные пароли:
.env
POSTGRES_PASSWORD=__POSTGRES_PASSWORD__
CLICKHOUSE_PASSWORD=__CLICKHOUSE_PASSWORD__
MINIO_ROOT_PASSWORD=__MINIO_ROOT_PASSWORD__
KC_ADMIN_PASSWORD=__KEYCLOAK_ADMIN_PASSWORD__
Безопасность

Все пароли в файле .env обязательно должны быть заменены на надёжные уникальные значения перед запуском системы. Не используйте пароли по умолчанию в промышленной эксплуатации.

Пример фактических переменных окружения:

.env (основные переменные)
POSTGRES_PASSWORD=Secret123!
CLICKHOUSE_USER=admin
MINIO_ACCESS_KEY=ACCESS_KEY
config/api-config.yml
security:
api_key: "Bearer XYZ123"
rate_limit: 1000/мин

Запуск системы

  1. Запустите развёртывание при помощи скрипта:
sudo ./run.sh --update
info

Скрипт run.sh использует конфигурационный файл docker-compose.yml для определения состава, зависимостей и параметров запускаемых контейнеров.

Проверка работоспособности на ЛСМ

После установки проверьте, что все компоненты запущены и функционируют корректно.

  1. Проверьте, что все контейнеры запущены (должно быть не менее 12 строк):
docker ps --filter "status=running" | grep -E "postgres|clickhouse|minio|keycloak|nats|webui|sensor"
  1. Проверьте инициализацию Keycloak:
curl -s http://localhost:8080/realms/vzor | jq -r '.realm'
# Ожидаемо: "vzor"
  1. Проверьте доступность API:
curl -s http://localhost:8000/health | jq .
# Ожидаемо: {"status":"ok","services":["postgres","clickhouse","nats"]}
  1. Проверьте веб-интерфейс локально:
curl -s http://localhost:3000 | grep "<title>"
# Ожидаемо: "<title>СВД «ЛиманИСУ 2.0»</title>"

Установка на ЦСД

На ЦСД устанавливается только веб-прокси (Nginx) для безопасного доступа к веб-интерфейсу ЛиманИСУ 2.0, который физически работает на ЛСМ.

info

Docker, базы данных и микросервисы на ЦСД не устанавливаются. ЦСД осуществляет доступ к данным через прокси-сервис без прямого подключения к БД ЛСМ.

Настройка reverse-proxy (Nginx)

  1. Установите Nginx:
sudo apt install -y nginx
  1. Создайте конфигурацию /etc/nginx/sites-available/lisu-csd:
upstream lisu_web {
server <IP_ЛСМ>:3000; # например, 10.177.72.11
}

upstream keycloak_auth {
server <IP_ЛСМ>:8080;
}

server {
listen 443 ssl http2;
server_name <FQDN_ЦСД>;

ssl_certificate /etc/ssl/certs/lisu.crt;
ssl_certificate_key /etc/ssl/private/lisu.key;
ssl_protocols TLSv1.2 TLSv1.3;

location / {
proxy_pass http://lisu_web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}

location /auth {
proxy_pass http://keycloak_auth;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

server {
listen 80;
server_name <FQDN_ЦСД>;
return 301 https://$host$request_uri;
}
  1. Активируйте конфигурацию:
sudo ln -sf /etc/nginx/sites-available/lisu-csd /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Проверка доступа через ЦСД

С клиентской машины откройте в браузере адрес ЦСД по HTTPS. Должна открыться страница авторизации Keycloak.

Настройка Keycloak для прокси

Система аутентификации Keycloak по умолчанию настроена на прямое взаимодействие с ЛСМ, а пользователи получают доступ через ЦСД. Необходимо добавить адрес ЦСД в настройки Keycloak.

  1. Откройте админ-панель Keycloak: http://<IP_ЛСМ>:8080
  2. Введите логин и пароль администратора из файла .env на ЛСМ
  3. В левом меню выберите Realm -> vzor, затем Clients -> vzor-web
  4. Добавьте в Valid Redirect URIs: https://<FQDN_ЦСД>/*
  5. Добавьте в Web Origins: https://<FQDN_ЦСД>
  6. Сохраните изменения

Выполните пробный вход через ЦСД: откройте https://<FQDN_ЦСД> -- должна отобразиться страница входа Keycloak.

Первый вход в систему

Откройте в браузере адрес системы и войдите под учётной записью:

  • Логин: admin@localhost.ru
  • Пароль: TempPass2025
warning

Система потребует сменить временный пароль при первом входе. После смены пароля отобразится дерево объектов, телеметрия в реальном времени и диаграммы ЛиманИСУ 2.0.

Настройка NTP (синхронизация времени)

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

  1. Удалите серверные службы синхронизации (если установлены):
sudo apt purge ntp
sudo apt purge chrony
  1. Включите и запустите клиент systemd-timesyncd:
sudo timedatectl set-ntp true
sudo systemctl start systemd-timesyncd
info

В Astra Linux SE x.8 пакет systemd-timesyncd устанавливается отдельно: sudo apt install systemd-timesyncd. В более ранних обновлениях он интегрирован в пакет systemd.

  1. Проверьте результат:
timedatectl

Пример ожидаемого вывода:

Local time: Сб 2025-07-12 10:12:19 MSK
Universal time: Сб 2025-07-12 07:12:19 UTC
RTC time: Сб 2025-07-12 07:12:19
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Строка System clock synchronized: yes подтверждает успешную синхронизацию.

Проверка системы после установки

Проверка контейнеров Docker

docker ps --filter "status=running" | grep -E "postgres|clickhouse|minio|keycloak|nats|webui|sensor"

В выводе должно присутствовать не менее 12 строк с именами контейнеров.

Проверка Keycloak

curl -s http://localhost:8080/realms/vzor | jq -r '.realm'
# Ожидаемо: "vzor"

Проверка API-сервисов

curl -s http://localhost:8000/health | jq .

Ожидаемый ответ:

{
"status": "ok",
"services": ["postgres", "clickhouse", "nats"]
}

Проверка веб-интерфейса через ЦСД

  1. Откройте в браузере адрес ЦСД
  2. Убедитесь, что отображается страница авторизации Keycloak

Контрольный пример: проверка цепочки сбора данных

Проверка сквозного потока данных -- от имитации работы оборудования до отображения в веб-интерфейсе.

1. Определите тестовый объект

Откройте веб-интерфейс ЛиманИСУ 2.0, выберите контролируемый объект и запишите его идентификатор и номер канала вибрации.

2. Отправьте тестовые данные через MQTT

mosquitto_pub -h 10.177.72.11 -p 1883 -t "telemetry/5/6/279/mp325" -m '{
"timestamp": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'",
"equipment_id": "<ID_оборудования>",
"channel": 1,
"vibration_rms": 2.45,
"temperature": 65.3,
"status": "normal"
}'

3. Проверьте запись в MinIO

docker exec minio ls /data/rawdata/<ID_оборудования>/$(date +%Y)/$(date +%m)/$(date +%d)/

В каталоге должны присутствовать Parquet-файлы с текущей датой.

4. Проверьте данные в ClickHouse

docker exec clickhouse clickhouse-client \
--query "SELECT equipment_id, vibration_rms, timestamp
FROM telemetry.vibration
WHERE equipment_id = '<ID_оборудования>'
ORDER BY timestamp DESC LIMIT 1"

5. Проверьте отображение в веб-интерфейсе

В веб-интерфейсе на графике вибрации должна появиться точка со значением ~2.45 м/с^2.

Критерии успешности

NКритерийМетод проверкиОжидаемый результат
1Инфраструктура запущенаdocker ps, curlВсе 12+ контейнеров в статусе Up
2Внешний доступ обеспеченОткрытие в браузереСтраница авторизации через ЦСД по HTTPS
3Сбор данных работаетИмитация данных -> проверка цепочкиДанные в MinIO, ClickHouse и на графике
4Мониторинг активенПревышение порогов -> проверкаКрасный статус, запись в журнале событий

Ролевая модель и управление пользователями

Роли пользователей

ЛиманИСУ 2.0 поддерживает следующие роли:

  • Администратор -- полный доступ к настройкам, управлению пользователями и конфигурации
  • Диагност -- доступ к данным мониторинга, аналитике, настройке параметров измерений
  • Оператор станка -- мониторинг в пределах зоны ответственности
  • Оператор завода -- мониторинг на уровне завода
  • Оператор диспетчерского центра -- мониторинг из диспетчерского центра

Создание пользователей

Перейдите в раздел Настройки -> вкладка Пользователи и нажмите +Добавить пользователя.

Вкладка Пользователи

Заполните параметры (ФИО, email, логин, пароль, роль) и сохраните изменения.

Добавление пользователя

Редактирование и удаление

Наведите курсор на многоточие напротив учётной записи и выберите нужную опцию.

Редактирование пользователя

Сброс пароля

  1. Перейдите в Настройки -> Пользователи
  2. Найдите пользователя, нажмите троеточие (...) -> Изменить
  3. Введите новый временный пароль и сохраните
  4. При следующем входе система потребует сменить пароль

Диагностика типичных ошибок

Ошибки установки

СообщениеПричинаРешение
ERROR: port 5432 is already allocatedПорт PostgreSQL занятsudo lsof -i :5432, остановить процесс или изменить порт
Bind for 0.0.0.0:3000 failedПорт WebUI занятsudo netstat -tlnp | grep :3000, освободить порт
network liman-isu_default not foundDocker-сеть отсутствуетdocker network create liman-isu_default
no matching manifest for linux/amd64Несовместимая архитектураПроверить uname -m, использовать образы для linux/amd64
permission deniedНедостаточно правЗапускать run.sh с sudo

Ошибки запуска сервисов

СообщениеПричинаРешение
Keycloak health check failedKeycloak не запустилсяdocker logs keycloak --tail 50, проверить postgres
Соединение с ClickHouse разорваноПотеряна связь с ClickHousedocker ps | grep clickhouse, проверить логи
MinIO not reachableMinIO недоступенdocker exec minio mc ready local/
NATS: connection refusedNATS не отвечаетdocker restart nats
PostgreSQL not ready, retrying...БД инициализируетсяПодождать 30-60 секунд

Ошибки эксплуатации

СообщениеПричинаРешение
Disk usage of /opt/raw_data is above 90%Диск переполняетсяОчистить старые данные или увеличить раздел
Parquet file write error: no space leftНет места на дискеОсвободить место в /opt/raw_data
Authorization failed: invalid tokenТокен устарелПерезайти в систему
Device Passer-V not responding to ModbusУСД не отвечаетПроверить питание и ping <IP_Пассер>

Общие команды диагностики

# Просмотр логов контейнера
docker logs <имя_контейнера> --tail 100 -f

# Состояние всех контейнеров
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# Сетевая связность между контейнерами
docker exec <контейнер> ping <имя-цели>

# Использование ресурсов
docker stats --no-stream

# Свободное место на дисках
df -h /opt/raw_data /opt/backup

# Перезапуск проблемного сервиса
docker-compose restart <имя_сервиса>

# Проверка баз данных
docker exec postgres psql -U admin -d db -c "SELECT 1;"
docker exec clickhouse clickhouse-client --query "SELECT 1;"

# Проверка переменных окружения контейнера
docker exec <container_name> env | grep -E "POSTGRES|CLICKHOUSE|MINIO"