Представь, что у тебя есть мощный сервер TrueNAS с тоннами места на ZFS, и ты хочешь превратить его в профессиональную систему видеонаблюдения. Проблема в том, что готовые NVR-решения часто дороги и ограничены. Решение — установить Shinobi, мощную open-source платформу для CCTV, прямо на твою TrueNAS. Давай разберем, как это сделать правильно, чтобы получить надежную систему с детекцией движения и облачным доступом.
Что такое Shinobi и зачем он на TrueNAS?
Shinobi — это веб-приложение для видеонаблюдения, написанное на Node.js. Оно поддерживает сотни моделей IP-камер, ведет запись, обнаруживает движение, отправляет уведомления и предоставляет API. Запуск Shinobi на TrueNAS дает тебе:
- Интеграцию с ZFS: Запись видео прямо в ZFS датасеты с поддержкой снапшотов и компрессии.
- Централизованное управление: Одна панель для хранения данных и видеонаблюдения.
- Масштабируемость: Легко добавлять диски в пул ZFS для увеличения архива.
- Гибкость развертывания: Можно использовать Docker или классические Jails.
Подготовка TrueNAS для Shinobi
Перед установкой нужно подготовить окружение. Представь, что ты настраиваешь сервер для продакшена.
Шаг 1: Создание датасета для видеозаписей
Зайди в Storage → Datasets и создай новый датасет, например, tank/videos/shinobi. Настройки для оптимальной работы с видео:
- Compression: LZ4 (хороший баланс скорости и сжатия для видео).
- Record Size: 1M (большие блоки лучше для потокового видео).
- Share Type: SMB (если нужен доступ по сети) или Generic.
Шаг 2: Настройка пользователей и прав
Создай отдельного пользователя и группу для Shinobi, чтобы изолировать доступ:
# В консоли TrueNAS Scale (если нужно)
sudo useradd -r -s /usr/sbin/nologin -d /var/lib/shinobi shinobi
sudo groupadd shinobi
sudo usermod -a -G shinobi shinobi
В GUI TrueNAS зайди в Credentials → Local Users и создай пользователя с UID/GID, например, 1001. Назначь права на датасет через ACL.
Установка Shinobi через Docker (TrueNAS Scale)
В TrueNAS Scale используем встроенный Apps (Kubernetes). Это самый простой путь.
Шаг 3: Настройка официального образа Shinobi
Идем в Apps → Discover Apps и ищем "shinobi". Если официального образа нет в каталоге, добавляем его вручную:
- Нажми Manage Docker Repositories.
- Добавь репозиторий:
shinobisystems/shinobi:latest. - Вернись и найди Shinobi в списке, нажми Install.
Шаг 4: Конфигурация контейнера Shinobi
При установке заполни ключевые настройки:
# Пример конфигурации в разделе Container Configuration:
environmentVariables:
- name: TZ
value: "Europe/Moscow"
- name: ADMIN_USER
value: "admin"
- name: ADMIN_PASSWORD
value: "secure_password_here"
# Маунты (Storage)
volumes:
- type: hostPath
mountPath: /opt/shinobi/videos
hostPath: /mnt/tank/videos/shinobi # Твой ZFS датасет
- type: hostPath
mountPath: /dev/shm
hostPath: /dev/shm
# Сетевые настройки
network:
hostNetwork: true # Для лучшей работы с RTSP
containerPort: 8080
hostPort: 8080
hostNetwork: true. Это дает контейнеру прямой доступ к сетевому стеку хоста.
Шаг 5: Запуск и первоначальная настройка
После развертывания открой http://truenas-ip:8080. Первый вход — с данными из переменных ADMIN_USER и ADMIN_PASSWORD.
- Создай нового пользователя для ежедневного использования (не используй admin).
- Настрой подключение к базе данных (по умолчанию SQLite, для продакшена лучше MySQL/MariaDB).
- Проверь путь к видео в настройках (Config → System).
Настройка IP-камер в Shinobi
Теперь добавим камеры. Представь, что у тебя есть камера с RTSP потоком.
Шаг 6: Добавление камеры через веб-интерфейс
- В Shinobi зайди в Monitor → Add New Monitor.
- Выбери тип подключения: FFmpeg (RTSP).
- Вставь URL потока. Пример для популярных камер:
bash
# Hikvision rtsp://username:password@192.168.1.100:554/Streaming/Channels/101 # Reolink rtsp://username:password@192.168.1.101:554/h264Preview_01_sub # Generic ONVIF rtsp://192.168.1.102:8554/stream1 - Настрой детектор движения (встроенный или плагин).
- Укажи путь для записи:
/opt/shinobi/videos(он смонтирован в ZFS датасет).
Шаг 7: Настройка записи и детекции
В настройках монитора (Monitor Settings) обрати внимание на ключевые параметры:
| Параметр | Значение | Описание |
|---|---|---|
| Record → Timed | /videos/{monitor_id}/{year}/{month}/{day}/{hour} | Автоматическая организация записей по времени |
| Detector → Type | OpenCV или TensorFlow | Детектор движения (OpenCV проще, TensorFlow точнее) |
| Storage → Max Storage Space | 50G (например) | Ограничение места на камеру. ZFS квоты тоже работают |
Интеграция с ZFS и автоматизация
Сила TrueNAS — в ZFS. Давай настроим автоматические снапшоты и очистку старых записей.
Шаг 8: Периодические снапшоты датасета
В TrueNAS зайди в Data Protection → Periodic Snapshot Tasks и создай задачу для датасета с видео:
# Пример задачи через CLI (если нужно)
zfs snapshot tank/videos/shinobi@auto_$(date +%Y%m%d_%H%M)
# Или через GUI:
# Dataset: tank/videos/shinobi
# Schedule: Daily, каждый день в 2:00
# Lifetime: 30 дней (удерживать 30 снапшотов)
Шаг 9: Очистка старых записей через скрипт
Shinobi может удалять старые записи, но можно сделать это средствами ZFS. Создай задачу в Tasks → Cron Jobs:
#!/bin/bash
# Очистка видео старше 30 дней
find /mnt/tank/videos/shinobi -type f -name "*.mp4" -mtime +30 -delete
# Или через zfs destroy (если используешь отдельные датасеты на день)
# zfs destroy tank/videos/shinobi/$(date -d "-30 days" +%Y-%m-%d)
Оптимизация производительности
Для обработки нескольких камер в высоком качестве нужна оптимизация.
- Аппаратное ускорение FFmpeg: Если в системе есть Intel QuickSync или NVIDIA GPU, настрой переменные окружения в Docker:
bash
-e NVIDIA_VISIBLE_DEVICES=all # Для NVIDIA -e LIBVA_DRIVER_NAME=i965 # Для Intel iGPU - Ограничение ресурсов: В настройках контейнера установи лимиты CPU и RAM, чтобы Shinobi не мешал другим сервисам TrueNAS.
- Кэширование: Для ZFS настрой
primarycache=metadataна датасете с видео, чтобы не тратить RAM на кэш видеофайлов.
Альтернатива: Установка Shinobi в Jail (TrueNAS Core)
Если ты используешь TrueNAS Core, установка происходит через Jail. Вот краткий алгоритм:
- Создай Jail в Jails → Add.
- Подключи датасет через Storage в настройках Jail.
- Войди в Jail через shell и установи зависимости:
bash
pkg update && pkg install -y nano git node npm ffmpeg - Клонируй Shinobi и настрой:
bash
git clone https://gitlab.com/Shinobi-Systems/Shinobi.git /usr/local/shinobi cd /usr/local/shinobi chmod -R 755 . npm install cp conf.sample.json conf.json # Отредактируй conf.json - Запусти через PM2 или как службу.
Часто задаваемые вопросы (FAQ)
Shinobi не видит камеру по RTSP. Что делать?
Сначала проверь поток вне Shinobi: ffplay -rtsp_transport tcp rtsp://.... Если работает, проверь настройки Firewall в TrueNAS и убедись, что контейнер/Jail имеет сетевой доступ. Попробуй использовать hostNetwork в Docker или настрой NAT/бридж в Jail.
Как настроить отправку уведомлений в Telegram?
В Shinobi зайди в Config → Plugins → Notifications. Установи плагин Telegram. Получи токен бота у @BotFather, настрой chat_id. Затем в настройках детектора движения выбери этот плагин для уведомлений.
Записи не сохраняются в ZFS датасет. В чем проблема?
Проверь права на папку: внутри контейнера/Jail пользователь Shinobi должен иметь права на запись. Посмотри логи Shinobi (docker logs shinobi). Убедись, что путь монтирования в Docker совпадает с путем в настройках Shinobi (обычно /opt/shinobi/videos).
Можно ли использовать GPU для декодирования видео?
Да, но нужна дополнительная настройка. Для NVIDIA: установи драйверы на хосте TrueNAS, настрой Docker с флагом --runtime=nvidia. Для Intel: передай устройства /dev/dri в контейнер. В Shinobi настройте параметры FFmpeg с использованием -hwaccel cuvid (NVIDIA) или -hwaccel qsv (Intel).
Как обновить Shinobi на TrueNAS?
Для Docker: в TrueNAS Scale зайди в Apps → Installed Apps, найди Shinobi и выбери Update. Для Jail: останови службу, сделай git pull в директории Shinobi, затем npm install и перезапусти. Не забудь备份 базы данных перед обновлением.
Заключение
Интеграция Shinobi с TrueNAS дает тебе мощную, масштабируемую и экономичную систему видеонаблюдения. Ты получаешь все преимущества ZFS — снапшоты, компрессию, целостность данных — вместе с гибкостью open-source CCTV платформы. Начни с одной-двух камер, проверь стабильность, затем масштабируй. Не забывай мониторить использование дискового пространства и настраивать автоматическую очистку. Теперь у тебя есть профессиональная система, готовая к работе 24/7.
Следующие шаги для углубления: настройка кластера Shinobi для отказоустойчивости, интеграция с Home Assistant, настройка глубокой аналитики через TensorFlow модели для распознавания объектов.