Развёртывание ЛиманИСУ 2.0
Данный раздел описывает процедуру установки и запуска ПО СВД «ЛиманИСУ 2.0» на локальном сервере мониторинга (ЛСМ) и центральном сервере диспетчеризации (ЦСД).
Установка на ЛСМ
ЛСМ -- основной сервер системы. Здесь развёртывается полный стек ПО ЛиманИСУ 2.0. Все компоненты запускаются в контейнерах Docker.
Установка зависимостей
Перед развёртыванием необходимо установить Docker и Docker Compose.
- Обновите систему:
sudo apt update && sudo apt upgrade -y
- Установите Docker и Docker Compose:
sudo apt install -y docker.io=25.0.5+astra2 docker-compose=1.29.2+astra2
- Добавьте текущего пользователя в группу
docker:
sudo usermod -aG docker $USER && newgrp docker
- Проверьте корректность установки:
docker --version
# Docker version 25.0.5+astra2
docker compose version
# docker-compose version 1.29.2
Развёртывание из дистрибутива
После установки зависимостей выполняется развёртывание системы из дистрибутивного архива.
- Распакуйте дистрибутив в системный каталог:
sudo tar -xf LimanISU_v2.1.0.tar.xz -C /opt/
cd /opt/LimanISU
- Проверьте целостность архива:
sha256sum -c ../LimanISU_v2.1.0.sha256
# Ожидаемо: "LimanISU_v2.1.0.tar.xz: OK"
- Загрузите Docker-образы в локальный реестр:
docker load -i images.tar
Настройка переменных окружения
- Настройте файл
.env, заменив заглушки на реальные пароли:
POSTGRES_PASSWORD=__POSTGRES_PASSWORD__
CLICKHOUSE_PASSWORD=__CLICKHOUSE_PASSWORD__
MINIO_ROOT_PASSWORD=__MINIO_ROOT_PASSWORD__
KC_ADMIN_PASSWORD=__KEYCLOAK_ADMIN_PASSWORD__
Все пароли в файле .env обязательно должны быть заменены на надёжные уникальные значения перед запуском системы. Не используйте пароли по умолчанию в промышленной эксплуатации.
Пример фактических переменных окружения:
POSTGRES_PASSWORD=Secret123!
CLICKHOUSE_USER=admin
MINIO_ACCESS_KEY=ACCESS_KEY
security:
api_key: "Bearer XYZ123"
rate_limit: 1000/мин
Запуск системы
- Запустите развёртывание при помощи скрипта:
sudo ./run.sh --update
Скрипт run.sh использует конфигурационный файл docker-compose.yml для определения состава, зависимостей и параметров запускаемых контейнеров.
Проверка работоспособности на ЛСМ
После установки проверьте, что все компоненты запущены и функционируют корректно.
- Проверьте, что все контейнеры запущены (должно быть не менее 12 строк):
docker ps --filter "status=running" | grep -E "postgres|clickhouse|minio|keycloak|nats|webui|sensor"
- Проверьте инициализацию 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"]}
- Проверьте веб-интерфейс локально:
curl -s http://localhost:3000 | grep "<title>"
# Ожидаемо: "<title>СВД «ЛиманИСУ 2.0»</title>"
Установка на ЦСД
На ЦСД устанавливается только веб-прокси (Nginx) для безопасного доступа к веб-интерфейсу ЛиманИСУ 2.0, который физически работает на ЛСМ.
Docker, базы данных и микросервисы на ЦСД не устанавливаются. ЦСД осуществляет доступ к данным через прокси-сервис без прямого подключения к БД ЛСМ.
Настройка reverse-proxy (Nginx)
- Установите Nginx:
sudo apt install -y nginx
- Создайте конфигурацию
/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;
}
- Активируйте конфигурацию:
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.
- Откройте админ-панель Keycloak:
http://<IP_ЛСМ>:8080 - Введите логин и пароль администратора из файла
.envна ЛСМ - В левом меню выберите Realm ->
vzor, затем Clients ->vzor-web - Добавьте в Valid Redirect URIs:
https://<FQDN_ЦСД>/* - Добавьте в Web Origins:
https://<FQDN_ЦСД> - Сохраните изменения
Выполните пробный вход через ЦСД: откройте https://<FQDN_ЦСД> -- должна отобразиться страница входа Keycloak.
Первый вход в систему
Откройте в браузере адрес системы и войдите под учётной записью:
- Логин:
admin@localhost.ru - Пароль:
TempPass2025
Система потребует сменить временный пароль при первом входе. После смены пароля отобразится дерево объектов, телеметрия в реальном времени и диаграммы ЛиманИСУ 2.0.
Настройка NTP (синхронизация времени)
Для корректной работы системы время на всех серверах должно быть синхронизировано.
- Удалите серверные службы синхронизации (если установлены):
sudo apt purge ntp
sudo apt purge chrony
- Включите и запустите клиент
systemd-timesyncd:
sudo timedatectl set-ntp true
sudo systemctl start systemd-timesyncd
В Astra Linux SE x.8 пакет systemd-timesyncd устанавливается отдельно: sudo apt install systemd-timesyncd. В более ранних обновлениях он интегрирован в пакет systemd.
- Проверьте результат:
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"]
}
Проверка веб-интерфейса через ЦСД
- Откройте в браузере адрес ЦСД
- Убедитесь, что отображается страница авторизации 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, логин, пароль, роль) и сохраните изменения.

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

Сброс пароля
- Перейдите в Настройки -> Пользователи
- Найдите пользователя, нажмите троеточие (...) -> Изменить
- Введите новый временный пароль и сохраните
- При следующем входе система потребует сменить пароль
Диагностика типичных ошибок
Ошибки установки
| Сообщение | Причина | Решение |
|---|---|---|
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 found | Docker-сеть отсутствует | docker network create liman-isu_default |
no matching manifest for linux/amd64 | Несовместимая архитектура | Проверить uname -m, использовать образы для linux/amd64 |
permission denied | Недостаточно прав | Запускать run.sh с sudo |
Ошибки запуска сервисов
| Сообщение | Причина | Решение |
|---|---|---|
Keycloak health check failed | Keycloak не запустился | docker logs keycloak --tail 50, проверить postgres |
Соединение с ClickHouse разорвано | Потеряна связь с ClickHouse | docker ps | grep clickhouse, проверить логи |
MinIO not reachable | MinIO недоступен | docker exec minio mc ready local/ |
NATS: connection refused | NATS не отвечает | 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"