Представь, что у тебя есть мощный сервер TrueNAS с терабайтами свободного места. Зачем покупать отдельный видеорегистратор, если можно превратить его в профессиональную систему видеонаблюдения? Давай разберем, как это сделать правильно, используя всю мощь контейнеризации.
Почему TrueNAS — идеальная платформа для видеонаблюдения?
TrueNAS (ранее FreeNAS) — это не просто файловое хранилище. Это полноценная операционная система на базе FreeBSD с поддержкой виртуализации и контейнеризации. Для организации видеонаблюдения она предлагает:
- Надежное ZFS-хранилище с защитой от битового разложения (bit rot) n
- Встроенную поддержку Docker через плагин TrueCharts или виртуальные машины
- Гибкое управление дисковыми пространствами и квотами
- Возможность резервного копирования и репликации данных
Архитектура системы: как всё устроено
Прежде чем переходить к настройке, давай поймем общую схему работы:
IP-камеры → Сеть → Docker-контейнер (NVR) → Запись на ZFS-пул → Просмотр через веб-интерфейс
Выбор NVR-решения для Docker
Есть несколько популярных вариантов для организации видеонаблюдения Docker TrueNAS:
| Решение | Плюсы | Минусы | Сложность |
|---|---|---|---|
| Shinobi | Бесплатный, открытый исходный код, много функций | Требует настройки, документация средняя | Средняя |
| ZoneMinder | Очень зрелый проект, детекция движения | Устаревший интерфейс, ресурсоемкий | Высокая |
| Frigate | ИИ-детекция объектов, интеграция с Home Assistant | Требует Coral USB для аппаратного ускорения | Средняя |
| MotionEye | Простой, легковесный, быстрый старт | Ограниченный функционал | Низкая |
Пошаговая настройка: Shinobi на TrueNAS через Docker
Давай развернем Shinobi — один из самых гибких вариантов для truenas видеонаблюдение.
Шаг 1: Подготовка хранилища в TrueNAS
Сначала создадим отдельный dataset для видеозаписей:
- Зайди в Storage → Pools
- Выбери свой пул и нажми Add Dataset
- Назови его, например,
surveillance - В настройках dataset установи:
- Compression: LZ4 (для экономии места)
- Record Size: 1M (оптимально для видео)
Шаг 2: Настройка SMB/NFS общего доступа
Чтобы Docker-контейнер мог писать на ZFS, нужно расшарить папку:
# Путь к dataset:
/mnt/pool_name/surveillance
# 1. Shares → Windows (SMB) Shares → Add
# 2. Укажи путь: /mnt/pool_name/surveillance
# 3. Настрой права: Read/Write для нужного пользователя
# 4. Apply permissions recursively
Шаг 3: Установка Docker на TrueNAS
В зависимости от версии TrueNAS, подход будет разным:
Вариант A: TrueNAS Scale (рекомендуется)
Используем встроенный Kubernetes (K3s) через TrueCharts:
# 1. Установи TrueCharts каталог:
# Apps → Settings → Manage Catalogs → Add Catalog
# Name: truecharts
# Repository: https://github.com/truecharts/catalog
# 2. Установи Shinobi через TrueCharts:
# Apps → Available Applications → Поиск "shinobi"
# Настрой storage mounts на наш dataset
Вариант B: TrueNAS Core через виртуальную машину
Создаем Ubuntu/Debian VM и монтируем общую папку:
# В гостевой системе (Ubuntu):
sudo apt update
sudo apt install docker.io docker-compose
# Монтируем SMB-шару от TrueNAS:
sudo mkdir -p /mnt/surveillance
sudo mount -t cifs //truenas_ip/surveillance /mnt/surveillance \
-o username=your_user,password=your_pass,uid=1000,gid=1000
Шаг 4: Запуск Shinobi через Docker Compose
Создадим docker-compose.yml для удобного управления:
version: '3.8'
services:
shinobi:
image: shinobisystems/shinobi:latest
container_name: shinobi
restart: unless-stopped
ports:
- "8080:8080" # Веб-интерфейс
environment:
- TZ=Europe/Moscow
- ADMIN_USER=admin@shinobi.video
- ADMIN_PASSWORD=your_secure_password
- PLUGIN_KEY_MOTION=true
- PLUGIN_KEY_OPENCV=true
volumes:
# Конфигурация
- ./config:/config
# База данных SQLite
- ./database:/var/lib/mysql
# Видеозаписи (монтируем с TrueNAS)
- /mnt/surveillance/shinobi:/opt/shinobi/videos
# Для аппаратного ускорения (если есть GPU)
- /dev/dri:/dev/dri # Intel VAAPI
devices:
# Для USB-камер
- /dev/video0:/dev/video0
networks:
- shinobi-net
networks:
shinobi-net:
driver: bridge
Запускаем контейнер:
# Создаем папки для конфигов
mkdir -p ./config ./database
# Запускаем Shinobi
docker-compose up -d
# Проверяем логи
docker-compose logs -f shinobi
Шаг 5: Настройка IP-камер в Shinobi
После запуска зайди на http://truenas_ip:8080 и добавь камеры:
- Войди с учетными данными из docker-compose.yml
- Нажми "Add New Camera"
- Выбери тип подключения: RTSP или ONVIF
- Укажи RTSP-поток (пример для Hikvision):
rtsp://admin:password@camera_ip:554/Streaming/Channels/101 - Настрой расписание записи (постоянно или по движению)
- Укажи путь сохранения:
/opt/shinobi/videos(это наш dataset)
Оптимизация производительности
Чтобы система видеонаблюдения на TrueNAS работала стабильно:
1. Настройка ZFS для видео
# На TrueNAS через Shell настрой dataset:
zfs set recordsize=1M pool_name/surveillance
zfs set compression=lz4 pool_name/surveillance
zfs set atime=off pool_name/surveillance # Отключаем запись времени доступа
# Создаем квоту (например, 500GB):
zfs set quota=500G pool_name/surveillance
2. Аппаратное ускорение в Docker
Для декодирования видео используй GPU или Intel QuickSync:
services:
shinobi:
# ...
environment:
- FFMPEG_VAAPI=1 # Включаем VAAPI
- LIBVA_DRIVER_NAME=i965 # Для Intel
# Монтируем устройство GPU
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
# Даем права
group_add:
- "44" # video group
- "107" # render group
3. Сетевые настройки
Выдели для видеонаблюдения отдельную VLAN или подсеть. Настрой Jumbo Frames (MTU 9000) если камер много.
Альтернатива: Frigate + Home Assistant
Если нужна интеллектуальная детекция объектов (люди, машины, животные), рассмотри связку:
version: '3.9'
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
container_name: frigate
restart: unless-stopped
shm_size: "512mb" # Важно для детекции!
ports:
- "5000:5000"
- "8554:8554" # RTSP ретрансляция
- "8555:8555/tcp" # WebRTC
environment:
FRIGATE_RTSP_PASSWORD: "password"
volumes:
- /mnt/surveillance/frigate:/media/frigate
- ./config.yml:/config/config.yml
- /dev/bus/usb:/dev/bus/usb # Для Coral USB
devices:
# Для Coral PCIe или M.2
- /dev/apex_0:/dev/apex_0
# Для Intel GPU
- /dev/dri/renderD128:/dev/dri/renderD128
Часто задаваемые вопросы (FAQ)
Сколько камер выдержит TrueNAS?
Зависит от разрешения, fps и битрейта. На среднем железе (Xeon E3, 16GB RAM):
• 5-8 камер в 1080p@15fps
• 2-4 камеры в 4K@20fps
Главный ограничитель — CPU для декодирования и сетевой интерфейс.
Как организовать ротацию записей?
В Shinobi: Настройки камеры → Диск → "Auto-Delete". Укажи лимит по времени (дни) или размеру (ГБ). ZFS сам удалит самые старые файлы при достижении квоты dataset.
Можно ли использовать облачное хранилище для архива?
Да! TrueNAS умеет реплицировать dataset на S3-совместимые хранилища (Backblaze B2, Wasabi). Настрой Cloud Sync Tasks для периодической выгрузки важных записей.
Как смотреть записи удаленно?
1. Пробрось порт Shinobi (8080) через роутер (небезопасно).
2. Используй WireGuard VPN на TrueNAS.
3. Настрой обратный прокси (Nginx) с HTTPS и аутентификацией.
Заключение
TrueNAS — это мощная платформа для построения профессиональной системы видеонаблюдения. Комбинируя надежность ZFS, гибкость Docker и современные NVR-решения, ты получаешь систему, которая:
- Масштабируется от 1 до десятков камер
- Хранит записи с защитой от повреждения
- Позволяет использовать ИИ-аналитику
- Интегрируется с умным домом
- Обходится дешевле коммерческих NVR
Начни с простой настройки MotionEye для тестирования, затем переходи на Shinobi или Frigate для полноценной системы. Не забывай про безопасность: изолируй камеры в отдельной сети, используй сложные пароли и регулярно обновляй контейнеры.