Коротко
Фраза «работает локально» может означать очень разные вещи. Приложение установлено на сервере, но при старте скачивает контейнеры из внешнего registry. Лицензия проверяется в облаке. CAPTCHA или почта обязательны. Backup существует только как команда в инструкции и никогда не восстанавливался.
Настоящий on-prem-контур нужно проверять по зависимостям, сетевым поверхностям и процедурам отказа.
Уровни автономности
Локальное хранение, облачная зависимость
Данные находятся на объекте, но runtime требует внешнюю авторизацию, обновления или сервис. Это on-prem по размещению, но не автономный контур.
Закрытая сеть с контролируемым выходом
Основные функции работают внутри, а обновления/почта/внешний мониторинг проходят через согласованные шлюзы.
Air-gap
Рабочий контур физически или логически изолирован. Дистрибутив, зависимости, ключи и обновления переносятся контролируемым способом; runtime не должен пытаться обращаться к внешним сервисам.
До закупки выберите нужный уровень. Требовать air-gap для обычного коммерческого объекта может быть избыточно; считать простой локальный Docker air-gap — опасно.
Из каких компонентов состоит локальная парковка
Типовой CShark-контур включает:
- Web UI;
- Core API;
- Device Gateway;
- PostgreSQL;
- NATS JetStream;
- S3-совместимое хранилище;
- reverse proxy/edge surfaces;
- опциональные Prometheus/Grafana/Tempo;
- драйверы/эмуляторы.
Матрица сетевых поверхностей
Не публикуйте БД и NATS на пользовательскую сеть. Разделите:
| Поверхность | Потребитель | Пример | Политика |
|---|---|---|---|
| пользовательская | браузер оператора | Web/API | TLS, auth, firewall |
| device | камеры/табло | HTTP/MQTT/TCP | ACL, vendor constraints |
| integration | АПС/СКУД | REST/webhook | TLS, API key, allowlist |
| management | администратор | SSH/metrics | отдельный сегмент |
| private | Core/DB/NATS/S3 | внутренние сети | не публиковать наружу |
CShark offline profile описывает network zones и генерирует edge-конфигурацию. Физические VLAN/ACL остаются задачей инфраструктуры объекта.
Поставка без внешнего registry
Проверяемый offline kit должен содержать:
- точные application images;
- системные зависимости/локальный repository, если установка на чистую ОС;
- compose/config templates;
- manifest файлов и image digests;
- checksum;
- подпись;
- публичный ключ, переданный независимым каналом;
- source commit/version;
- installation/preflight scripts;
- demo/clean variant identity.
Demo и clean
Demo нужен для воспроизводимого показа: синтетический объект, места и эмуляторы.
Clean — для клиента: тот же runtime и контракты, но без демонстрационных сущностей.
Различие должно быть машинно проверяемым. В документации CShark demo seed создаёт вымышленный объект на 50 мест, а clean — ноль.
Нельзя устанавливать demo в production и затем «чистить вручную»: это оставляет неизвестные артефакты.
Секреты и production defaults
Критические параметры:
- auth signing secret;
- admin password;
- DB runtime/migrator credentials;
- S3 access/secret;
- webhook token;
- integration keys;
- SMTP/ONVIF/MQTT credentials;
- TLS private keys.
CShark validate_runtime_security останавливает защищённый контур при dev secrets, слабом admin password или небезопасной публичной конфигурации. Offline installer генерирует отдельные случайные DB-секреты и root-only env.
Но проверка приложения не заменяет secret management объекта. Нужно определить rotation, backup ключей, emergency access и аудит.
TLS и trusted proxy
Локальная сеть не автоматически доверенная. Web/API и integration surface нуждаются в TLS или обоснованной изоляции. Reverse proxy должен корректно передавать IP только по доверенной цепочке.
В CShark resolve_client_ip принимает X-Forwarded-For только от сетей trusted_proxy_ips. Стендовая инструкция прямо предупреждает: текущий HTTP без TLS использовать только в закрытом сегменте.
Раздельные роли базы и миграции
Приложение не должно иметь постоянное DDL-право. Безопаснее:
- preflight проверяет target schema;
- backup фиксируется и проверяется;
- одноразовый migrator накатывает Alembic;
- runtime работает ограниченной ролью;
- schema gate не запускает несовместимый код.
CShark следует этой модели в offline/deploy инструментах.
Backup — это восстановление, а не файл
Для парковки нужно разделить:
- PostgreSQL business/config/audit;
- S3 media;
- конфигурацию и секреты;
- release identity;
- при необходимости NATS/outbox state.
Проверяемый процесс:
- создаёт PostgreSQL custom dump;
- считает checksum;
- восстанавливает во временную БД;
- сверяет контрольные счётчики;
- копирует media в новый пустой bucket;
- сравнивает manifest/fingerprint;
- фиксирует отчёт и время.
Обновление и возврат
Откат к старому контейнеру после новой миграции может не работать. Поэтому миграции должны быть expand-contract, а процедура — учитывать совместимость старого кода с новой схемой.
Минимальный upgrade workflow:
- проверить подписанный target kit;
- preflight platform/space/ports;
- сделать и проверить backup;
- применить миграцию;
- запустить exact images;
- выполнить smoke;
- при ошибке использовать предусмотренный recovery, а не импровизированный
docker compose down; - сохранить operation manifest.
Наблюдаемость без phone-home
Закрытый контур всё равно нуждается в:
- health endpoints;
- container health;
- метриках очередей и consumer lag;
- журнале ошибок;
- трассировках;
- алертах;
- контроле диска outbox/S3/PostgreSQL.
В CShark доступны OpenTelemetry, Prometheus, Grafana и Tempo. Offline профиль отключает внешнюю продуктовую телеметрию. Наличие дашборда не заменяет локальный процесс реагирования.
Чек-лист приёмки
- installation with network denied;
- no image pull/runtime phone-home;
- listeners соответствуют матрице;
- dev secrets отсутствуют;
- auth enforce включён;
- DB runtime не имеет DDL;
- backup восстановлен в отдельную БД;
- media manifest совпал;
- reboot host и restart services;
- NATS outage и Gateway outbox recovery;
- disk pressure alert;
- upgrade и rollback/recovery rehearsal;
- exact version/commit видимы;
- demo/clean identity проверена.
FAQ
Нужен ли интернет для работы CShark?
Offline профиль предназначен для работы без внешнего registry/runtime-зависимости. Конкретная конфигурация публичной PWA, CAPTCHA, email и интеграций может требовать внешних сервисов — их нужно отключить или локализовать.
Нужен ли TLS внутри локальной сети?
Зависит от модели угроз, но локальная сеть не считается автоматически безопасной. Для пользовательских и интеграционных поверхностей TLS обычно нужен.
Как обновлять air-gap систему?
Переносить подписанный полный kit, проверять checksum/signature, делать проверяемый backup, применять controlled migration и smoke с operation доказательные материалы.
Поддерживается ли ARM64?
Текущая основная поставка и инструкция — Ubuntu 24.04 AMD64. ARM64 нельзя обещать без отдельного принятого профиля/артефакта.
Какие RPO/RTO у CShark?
Поставка содержит эксплуатационные инструменты, но численные RPO/RTO определяются инфраструктурой, расписанием резервного копирования и восстановительным учением конкретного объекта. Подставьте RPO/RTO после теста.
Граница применимости к CShark
Материал описывает проверяемый инженерный подход. Конкретный состав CShark зависит от версии, подключённых источников данных, прав, конфигурации и приёмки оборудования на объекте.
Посмотрите, какие возможности CShark доступны водителю и оператору и как они применяются на парковке, на странице возможностей системы.