Развёртывание и запуск RID
Пошаговое руководство по установке, настройке и запуску системы управления информационными дисплеями.
Требования
Для запуска RID необходимы:
- Docker и Docker Compose (рекомендуется)
- Redis — хранение состояния и истории дисплеев
- Сетевой доступ к дисплеям по протоколу ModBus TCP (порт 502)
Если планируется сборка без Docker:
- Go 1.26 или новее
- ОС: Linux (рекомендуется), macOS, Windows
Конфигурация
Настройки задаются через JSON-файл. Путь к файлу указывается через переменную окружения APP_CONFIG или флаг -config. Можно указать HTTP/HTTPS-адрес вместо локального пути.
Пример файла конфигурации
{
"redis_url": "redis://127.0.0.1:6379",
"displays": [
{
"display_ip": "192.168.0.195",
"display_port": 502
}
],
"clean_displays_on_startup": false,
"debug": false,
"log_level": "info",
"api_host": "0.0.0.0",
"api_port": 8000
}
Все параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
redis_url | redis://127.0.0.1:6379 | Адрес подключения к Redis |
displays | [] | Список дисплеев: display_ip, display_port |
clean_displays_on_startup | false | Очищать дисплеи при старте |
debug | false | Режим отладки |
log_level | info | Уровень журнала: debug, info, warn, error |
log_file | — | Путь к файлу журнала (необязательно) |
log_max_size_mb | 100 | Максимальный размер файла журнала (МБ) |
log_max_files | 5 | Количество ротируемых файлов |
api_host | 0.0.0.0 | Адрес прослушивания |
api_port | 8000 | Порт прослушивания |
displays_ping_interval | 2 | Интервал опроса дисплеев (сек.) |
displays_ping_timeout | 1 | Тайм-аут опроса (сек.) |
displays_ping_threshold | 0.3 | Порог медленного ответа (сек.) — логируется в поток ошибок |
reconcile_interval | 5 | Интервал синхронизации состояния (сек.) |
apply_timeout | 10 | Тайм-аут применения команды (сек.) |
Запуск через Docker
Рекомендуемый способ развёртывания. Создайте файл config.json с параметрами дисплеев и адресом Redis.
Docker Compose
services: rid: image: rid-api:2.0 ports: - "8002:8000" environment: APP_CONFIG: /etc/rid_api/config.json volumes: - ./config.json:/etc/rid_api/config.json:ro cap_add: - NET_RAW # для ARP-сканирования сети restart: unless-stopped
docker compose up -d
Сборка образа вручную
# Сборка Go-образа (рекомендуется) docker build -f go.Dockerfile -t rid-api:2.0 . # Запуск контейнера docker run -d --name rid \ -p 8002:8000 \ -e APP_CONFIG=/etc/rid_api/config.json \ -v ./config.json:/etc/rid_api/config.json:ro \ --cap-add NET_RAW \ rid-api:2.0
Права на сканирование сети. Для работы автообнаружения дисплеев через ARP контейнеру нужна привилегия NET_RAW. Без неё сканирование не будет работать, остальные функции — будут.
Запуск без Docker
Если вы собрали бинарный файл из исходного кода:
# Сборка make build-go # Запуск ./bin/rid-api -config ./config.json # Или с указанием порта ./bin/rid-api -config ./config.json -port 8000 -host 0.0.0.0
Флаги командной строки
| Флаг | По умолчанию | Описание |
|---|---|---|
-config | — | Путь к файлу конфигурации (или URL) |
-host | 0.0.0.0 | Адрес прослушивания |
-port | 8000 | Порт прослушивания |
Переменные окружения
Переменные окружения имеют приоритет над параметрами из файла конфигурации. Флаги командной строки имеют наивысший приоритет.
| Переменная | По умолчанию | Описание |
|---|---|---|
APP_CONFIG | — | Путь к файлу конфигурации |
REDIS_URL | redis://127.0.0.1:6379 | Адрес подключения к Redis |
API_HOST | 0.0.0.0 | Адрес прослушивания |
API_PORT | 8000 | Порт прослушивания |
DEBUG | false | Режим отладки (true или 1) |
LOG_LEVEL | info | Уровень журнала |
Приоритет применения настроек (от низшего к высшему):
- Значения по умолчанию в коде
- JSON-файл конфигурации
- Переменные окружения
- Флаги командной строки
Проверка работоспособности
После запуска убедитесь, что сервис отвечает:
# Быстрая проверка curl http://localhost:8000/_ping # Ответ: {"pong": "pong"} # Подробный статус curl http://localhost:8000/health # Ответ: # { # "status": "healthy", # "redis": "ok", # "displays_configured": 2, # "displays_online": 1 # } # Сводка по дисплеям curl http://localhost:8000/dashboard
Коды ответа
| Адрес | Код | Описание |
|---|---|---|
/_ping | 200 | Сервис запущен |
/health | 200 | Redis доступен, дисплеи сконфигурированы |
/health | 503 | Redis недоступен или нет сконфигурированных дисплеев |
Важные замечания
Только один экземпляр сервиса. Каждый дисплей поддерживает только одно ModBus-подключение. Запуск нескольких экземпляров RID, работающих с одними и теми же дисплеями, приведёт к ошибкам соединения.
- Redis обязателен. Без Redis сервис не запустится — в нём хранится всё состояние дисплеев.
- Порт 502. Дисплеи общаются по стандартному порту ModBus TCP. Убедитесь, что сетевой экран не блокирует этот порт между сервером и дисплеями.
- Очистка при старте. Параметр
clean_displays_on_startupсбрасывает все дисплеи в выключенное состояние. Используйте при первичной настройке или перезапуске после сбоя. - Журналирование. По умолчанию журнал выводится в stdout. Для записи в файл укажите
log_file— ротация происходит автоматически. - Часовой пояс. В Docker-контейнере установлен часовой пояс
Europe/Moscow.