1. Назначение документа и роли администраторов
Документ предназначен для специалистов, выполняющих настройку и сопровождение программного обеспечения «CShark» на объекте заказчика.
Повседневная работа с системой описана в отдельном документе «Руководство пользователя», развёртывание — в документе «Инструкция по установке экземпляра программного обеспечения».
| Роль | Зона ответственности |
|---|---|
| Администратор системы | топология объекта, устройства, камеры, табло, интеграции, системные параметры, обновление |
| Администратор парковки | правила обработки событий, режимы зон, операторы и их права |
| Системный инженер заказчика | инфраструктура, резервное копирование, мониторинг, сеть |
Права разграничиваются ролевой моделью (раздел 12); разделение на роли выше — организационное.
2. Состав программного обеспечения и размещение компонентов
| Служба | Назначение | Порт |
|---|---|---|
core | сервер приложений: прикладная логика, REST API, WebSocket, потребители событий | внутренний |
gateway | шлюз устройств: приём событий камер и управление табло | 18010/tcp |
web | веб-интерфейс и единая точка доступа к API | 8088/tcp |
postgres | база данных PostgreSQL 17 | внутренний |
nats | шина событий NATS JetStream | внутренний |
seaweedfs | объектное хранилище кадров, протокол S3 | 18333/tcp |
Профиль наблюдаемости входит в проверочный комплект; наружу публикуется Grafana на 13000/tcp, остальные его службы доступны только внутри Compose-сети.
Все службы выполняются в контейнерах в закрытом сетевом периметре объекта. Обращения к внешним сервисам в процессе работы не выполняются.
3. Управление службами
Рабочий каталог: /opt/cshark-stand.
# состояние служб
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs ps
# запуск
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs up -d
# остановка
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml --profile obs stop
# перезапуск отдельной службы
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml restart core
# журналы службы
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml logs -f core
4. Параметры настройки
Параметры задаются переменными окружения (файл .env рядом с файлом описания служб). После изменения параметров службу требуется перезапустить.
| Переменная | Назначение | Значение по умолчанию |
|---|---|---|
CSHARK_DATABASE_URL | строка подключения к базе данных | — |
CSHARK_NATS_URL | адрес шины событий | nats://nats:4222 |
CSHARK_S3_ENDPOINT_URL | адрес объектного хранилища | http://seaweedfs:8333 |
CSHARK_S3_PUBLIC_ENDPOINT_URL | адрес хранилища для формирования ссылок клиенту | — |
CSHARK_S3_ACCESS_KEY, CSHARK_S3_SECRET_KEY | ключи доступа к хранилищу | — |
CSHARK_S3_BUCKET | контейнер объектов | cshark-media |
CSHARK_AUTH_ENFORCE | обязательная аутентификация | true |
CSHARK_AUTH_SECRET | секрет подписи сессионных токенов | задаётся при установке |
CSHARK_CORS_ORIGINS | разрешённые источники веб-интерфейса | — |
CSHARK_WEB_PORT | порт публикации веб-интерфейса | 8088 |
CSHARK_OTEL_ENDPOINT | адрес сборщика телеметрии | не задан |
5. Первичная настройка объекта
При первом входе доступен мастер первичной настройки. Последовательность:
- Сменить пароль встроенной учётной записи администратора.
- Создать объект (парковку), уровни, зоны, машиноместа.
- Загрузить графическую подложку уровня и разместить объекты на схеме.
- Зарегистрировать камеры и связать их с машиноместами.
- Создать шаблоны и устройства информационных табло.
- Настроить граф достижимости зон и точки въезда.
- Создать роли и учётные записи операторов.
- Настроить правила обработки событий.
6. Настройка топологии и схемы
Раздел «Администрирование» → «Топология».
Иерархия: организация → парковка → уровень → зона → машиноместо.
| Действие | Порядок |
|---|---|
| Создание уровня | указать наименование и порядковый номер |
| Создание зоны | указать наименование, привязку к уровню, тип |
| Создание машиноместа | указать код (уникален в пределах объекта), зону, тип |
| Загрузка подложки уровня | загрузить графический файл плана уровня |
| Размещение на схеме | задать координаты и форму машиномест, зон и устройств в редакторе схемы |
Коды машиномест отображаются пользователям и должны соответствовать разметке на объекте.
7. Настройка камер видеоаналитики
Раздел «Оборудование».
- Настроить камеру на отправку событий по адресу шлюза устройств (протокол вендора поверх HTTP). Адрес и порт указываются в настройках камеры.
- Камера, обратившаяся к системе, появляется в списке необнаруженных устройств.
- Зарегистрировать камеру: задать наименование, сетевой адрес, размещение.
- Связать камеру с машиноместами, которые она обслуживает.
- Проверить поступление событий: статус связанного машиноместа должен изменяться при изменении обстановки.
Контроль работоспособности выполняется автоматически по периодическим сигналам присутствия. Состояние устройства отображается в разделе «Оборудование» и на схеме объекта. История изменения состояния сохраняется.
Для устройств, поддерживающих управление, доступна передача команд через командный канал.
8. Настройка информационных табло
Раздел «Табло».
8.1. Шаблоны
Шаблон описывает компоновку кадра и состоит из регионов:
| Тип региона | Содержание |
|---|---|
| Текст | произвольный текст с подстановкой значений контекста |
| Счётчик свободных мест | число свободных мест зоны или объекта |
| Стрелка направления | направление движения к зоне |
| Изображение | статическое изображение |
| QR-код | ссылка, кодируемая в изображение |
| Карта уровня | схема уровня для мониторов высокого разрешения |
| Таблица зон | сводка по зонам |
| Показатель | числовой показатель |
Размер шрифта подбирается автоматически под размеры региона; при недостаточной вместимости региона выдаётся предупреждение при сохранении шаблона.
8.2. Устройства отображения
- Создать устройство, выбрать класс: текстовая светодиодная панель (протокол EK07, TCP/RS-485) либо веб-киоск на мониторе высокого разрешения.
- Указать параметры подключения.
- Привязать шаблон, зону и точку въезда.
- Проверить результат предварительным просмотром сформированного кадра.
Для веб-киоска формируется публичный адрес вида /kiosk/display/<идентификатор>?token=<токен>; монитор открывает эту страницу в режиме киоска. Токен ограничивает доступ к содержимому.
8.3. Приоритеты содержимого
Аварийное → ручное замещение → расписание → штатное. Аварийное содержимое (режим пожара или укрытия) вытесняет любое другое и не может быть замещено вручную.
8.4. Адресат текстов
Формулировки причин недоступности разделены на публичные (отображаются водителю) и административные (доступны только персоналу). Административные тексты физически отсутствуют в публичном ответе киоска и в потоке WebSocket. Диагностическое состояние табло доступно по адресу /api/displays/{id}/state только для аутентифицированного персонала.
10. Настройка режимов объекта и зон
Состояния зоны и объекта: штатный, пожарный, укрытие, обслуживание.
| Способ смены режима | Порядок |
|---|---|
| Вручную | раздел «Администрирование» → «Зоны» → выбор режима |
| Автоматически | по сигналу от систем противопожарной автоматики через шлюз устройств |
Смена режима одномоментно изменяет: доступность машиномест зоны, содержимое информационных табло (аварийное содержимое получает высший приоритет), правила обработки событий, состав уведомлений.
Возврат в штатный режим выполняется администратором вручную после устранения причины.
11. Настройка правил обработки событий
Раздел «Администрирование» → «Правила».
Правило задаётся по схеме:
триггер (тип события) × область (объект, зона, группа мест, конкретное место) × условие (время, статус, иные признаки) → действия
Доступные действия: уведомить оператора, создать инцидент, изменить статус, передать команду устройству.
Правило вступает в силу без перезапуска служб. Порядок применения правил определяется их приоритетом.
Примеры: «нарушение разметки в зоне для маломобильных граждан → создать инцидент критического уровня»; «машиноместо у входа занято более 10 минут без разрешения → уведомить старшего смены».
12. Управление пользователями, ролями и правами
Раздел «Администрирование» → «Пользователи» и «Роли».
- Разрешения задаются в едином пространстве вида «ресурс:действие» (например,
displays:manage,users:manage). - Роль — именованный набор разрешений. Пользователю назначается роль; дополнительно могут выдаваться индивидуальные разрешения.
- Разделы интерфейса, недоступные пользователю по правам, не отображаются в навигации.
- Действия пользователей фиксируются в журнале действий.
Требования к паролям: не менее 6 символов. Пароли хранятся в виде хешей (алгоритм bcrypt), в открытом виде не хранятся и не передаются.
Сессии реализованы подписанными токенами; секрет подписи задаётся параметром CSHARK_AUTH_SECRET. Смена секрета завершает все активные сессии.
13. Настройка интеграции с внешними системами
Раздел «Администрирование» → «Интеграции».
| Возможность | Описание |
|---|---|
| Программный интерфейс REST | справочники объекта, доступность машиномест, приём сведений о сессиях внешней системы контроля доступа; спецификация OpenAPI доступна по адресу /openapi.json |
| Ключи доступа | создаются с указанием областей видимости и ограничения частоты запросов |
| Исходящие вебхуки | подписка внешней системы на события; запросы подписываются, доставка повторяется при ошибке |
Взаимодействие с партнёрской автоматизированной парковочной системой (въездная группа) выполняется через эти механизмы.
14. Хранение данных и политики срока хранения
| Данные | Место хранения | Срок хранения |
|---|---|---|
| Справочники, топология, пользователи | база данных | бессрочно |
| Посещения, события машиномест, снимки занятости | штатные таблицы PostgreSQL с индексами по объекту и времени | определяется утверждённой эксплуатационной политикой |
| Кадры событий | объектное хранилище | настраивается, согласуется со сроком хранения событий |
| Журнал действий пользователей | база данных | настраивается |
Срок хранения задаётся политиками в разделе системных настроек. Кадры доступны только по ссылкам с ограниченным сроком действия; прямой публичный доступ к объектам хранилища закрыт.
15. Резервное копирование и восстановление
15.1. Резервное копирование
tools/backup/backup.sh /path/to/backups
Формируется дамп базы данных и манифест медиаматериалов. Объекты хранилища копируются отдельно средствами синхронизации — команда выводится сценарием. Рекомендуемая периодичность: база данных — ежедневно (по расписанию на хосте), медиаматериалы — еженедельно. Глубина хранения копий — не менее срока хранения данных в системе.
15.2. Проверка копии
Восстановление во временную базу без риска для рабочей:
tools/backup/restore.sh backups/cshark-XXXX.dump cshark_restore_check
Сценарий выводит контрольные счётчики (машиноместа, посещения, инциденты, пользователи) для сверки.
15.3. Восстановление
Перед восстановлением остановить core и gateway через Compose-файл /opt/cshark-stand/compose.yml, выполнить штатный сценарий восстановления из поставки и затем запустить те же службы. Команды и путь к резервной копии фиксируются в журнале работ; восстановление сначала проверяется на отдельном стенде.
Медиаматериалы восстанавливаются синхронизацией в контейнер объектов со сверкой по манифесту.
16. Мониторинг и диагностика
| Проверка | Команда или адрес |
|---|---|
| Работоспособность приложения | curl -fsS http://127.0.0.1:8088/api/health |
| Состояние служб | sudo docker compose --env-file /opt/cshark-stand/.env -f /opt/cshark-stand/compose.yml --profile obs ps |
| Журналы | sudo docker compose --env-file /opt/cshark-stand/.env -f /opt/cshark-stand/compose.yml logs -f core |
Программное обеспечение формирует метрики, журналы и трассировки по стандарту OpenTelemetry. При включённом профиле наблюдаемости доступны панели Grafana.
Ключевые показатели:
| Показатель | Что означает |
|---|---|
| число опубликованных событий | поступление данных от оборудования |
| число обработанных событий | работа потребителей сервера приложений |
| объём необработанных сообщений | рост означает, что сервер не успевает или потребитель остановлен |
| число подключённых клиентов WebSocket | активные рабочие места операторов |
Персональные и чувствительные данные исключаются из журналов автоматически.
17. Обновление программного обеспечения
Обновление инициируется администратором заказчика. Механизмы принудительного обновления и удалённого управления из-за пределов периметра объекта отсутствуют.
Текущий выпуск не содержит автоматического удалённого обновления. До внедрения перспективного управляемого механизма обновление выполняется как отдельная регламентная поставка: принять подписанный offline-комплект, проверить SHA-256 и подпись внешним ключом, создать и проверить резервную копию, выполнить инструкцию конкретного выпуска и полный smoke-test. Операция проводится администратором в согласованное окно обслуживания.
Миграции выполняются по принципу «расширение — сжатие»: разрушающие изменения схемы выпускаются в релизе, следующем за релизом кода, который работает без них. Поэтому возврат на предыдущую версию кода безопасен и не требует отката схемы.
Возврат допускается только на заранее сохранённый и проверенный комплект предыдущей версии после оценки совместимости схемы данных. Произвольная смена тега контейнеров в установленном экземпляре не является штатным обновлением.
18. Типовые неисправности и способы устранения
| Признак | Вероятная причина | Действия |
|---|---|---|
| Статусы машиномест не обновляются | нарушена доставка событий | проверить доступность камеры; проверить журналы шлюза устройств; проверить показатель необработанных сообщений — при его росте перезапустить сервер приложений |
| События поступают без кадров | недоступно объектное хранилище | проверить службу хранилища; события при этом не теряются, кадры будут отсутствовать только за период недоступности |
| Табло не обновляется | недоступно устройство отображения | проверить связь в разделе «Оборудование»; выполнить предварительный просмотр кадра — если кадр формируется, проблема в канале связи с устройством |
| Веб-интерфейс недоступен | не запущена служба либо занят порт | проверить состояние контейнеров; при конфликте порта задать CSHARK_WEB_PORT и перезапустить |
| Веб-интерфейс циклически перезапускается | потеряна сеть контейнеров | пересоздать службу с ключом --force-recreate |
| Не выполняется вход всех пользователей | изменён секрет подписи токенов | проверить CSHARK_AUTH_SECRET; после смены секрета требуется повторный вход |
| Ошибка загрузки кадров в хранилище с указанием на расхождение времени | расхождение часов хоста и контейнеров | синхронизировать время хоста по NTP |
| Растёт объём базы данных | не настроены политики срока хранения | задать срок хранения событий и кадров в системных настройках |
19. Расположение файлов и компонентов
| Компонент | Расположение |
|---|---|
| Файл описания служб | /opt/cshark-stand/compose.yml |
| Параметры окружения | /opt/cshark-stand/.env |
| Первичные реквизиты | /opt/cshark-stand/INITIAL-CREDENTIALS.txt |
| Журнал установки | /opt/cshark-stand/install.log |
| Данные базы данных | том Docker pg_data |
| Данные объектного хранилища | том Docker seaweed_data |
| Данные шины событий | том Docker nats_data |
| Исходный текст сервера приложений (внутри образа) | /app/apps/core/app/ |
| Исходный текст шлюза устройств (внутри образа) | /app/apps/gateway/gateway/ |
| Миграции схемы базы данных | /app/apps/core/alembic/versions/ |
| Статические файлы веб-интерфейса | /usr/share/nginx/html/ в контейнере веб-интерфейса |
| Спецификация программного интерфейса | http://<адрес>:8088/openapi.json |
| Интерактивная документация программного интерфейса | http://<адрес>:8088/docs |
Доступ внутрь контейнера:
sudo docker compose --env-file /opt/cshark-stand/.env \
-f /opt/cshark-stand/compose.yml exec core sh
docker run --rm cshark-core:<версия> cat /etc/os-release # базовая ОС образа
20. Техническая поддержка
| Канал | Значение |
|---|---|
| Организация | ООО «КОМПЕТЕНЦИЯ» |
| Телефон | +7 495 532-61-18 |
| Режим работы | понедельник–пятница, 09:00–18:00 по московскому времени |
| Адрес службы поддержки | 115280, Москва, ул. Ленинская Слобода, д. 21, к. 1 |
Порядок обработки обращений, приоритеты и сроки реакции приведены в документе «Описание процессов, обеспечивающих поддержание жизненного цикла программного обеспечения».