Технологии

Полный гайд: Установка Frigate на Yandex Cloud с NetBird

Константин Стародубов
Руководитель комплаенса ИБ
14 февраля 2025 г. 7 мин чтения
Содержание

Frigate NVR — система видеонаблюдения с AI

Этот гайд описывает полный процесс развертывания системы видеонаблюдения Frigate на сервере в Yandex Cloud с хранением записей на отдельном диске и доступом к домашним камерам через защищённый VPN NetBird.

Гайд включает:

  • настройку NetBird
  • подключение сервера к домашней сети
  • подключение и монтирование диска
  • установку Docker и Docker Compose
  • установку и настройку Frigate
  • настройку хранения видео
  • получение доступа к Web UI

Архитектура

Yandex Cloud — облачная платформа

Схема работы: камеры отдают RTSP-поток на устройство в домашней сети (роутер, NAS или ПК). NetBird соединяет это устройство с виртуальной машиной в Yandex Cloud. Frigate в Docker на VM получает потоки по NetBird IP, пишет записи на отдельный диск и отдаёт Web UI на порт 8971.

Домашние камеры
      │
      │ RTSP
      │
Домашний сервер / роутер
      │
      │ NetBird VPN
      │
Yandex Cloud VM
      │
      │ Docker
      │
      │ Frigate
      │
      └── /data/frigate/media (записи)

Часть 1. Настройка NetBird

NetBird — Zero Trust VPN на базе WireGuard

NetBird используется для создания защищённой приватной сети между:

  • сервером в Yandex Cloud
  • домашней сетью

Зачем это нужно: Камеры находятся дома, а Frigate — в облаке. Без VPN сервер в Yandex Cloud не сможет достучаться до RTSP-потоков камер в вашей локальной сети. NetBird создаёт зашифрованный туннель между облаком и домом — камеры остаются за NAT, но сервер получает к ним доступ как к устройствам в одной сети. Это безопаснее, чем пробрасывать порты на роутере.

Официальный сайт:

https://app.netbird.io/


Шаг 1. Регистрация и вход

Перейдите:

https://app.netbird.io/

Создайте аккаунт или войдите.

Зачем: NetBird Cloud управляет всеми подключёнными устройствами и правилами доступа. Без аккаунта вы не сможете создать Setup Key и связать сервер с домашней сетью.


Шаг 2. Создание Setup Key для сервера

Перейдите:

Access Control → Setup Keys

Нажмите:

Create Setup Key

Укажите:

Name:

yandex-cloud

Group:

remote

Сохраните Setup Key.

Пример:

6A40F5F1-777-XXXX

Зачем: Setup Key — это одноразовый токен для подключения устройства к вашей NetBird-сети. Он привязывает сервер к группе remote и позволяет потом настроить правила: кто к кому может подключаться. Отдельный ключ для облачного сервера нужен, чтобы отличать его от домашних устройств в политиках доступа.

⚠️ Важно: используйте Setup Key, иначе устройство может отключиться.


Шаг 3. Установка NetBird на сервер Yandex Cloud

Подключитесь к серверу:

ssh skv@SERVER_IP

Установите NetBird:

curl -fsSL https://pkgs.netbird.io/install.sh | sh

Подключите сервер:

sudo netbird up --setup-key YOUR_SETUP_KEY

Проверьте статус:

netbird status

Должно быть:

Connected: yes

Зачем: NetBird-клиент на сервере подключает его к вашей приватной сети и выдаёт ему виртуальный IP (например, 100.64.0.x). После этого сервер сможет обращаться к домашним устройствам по этому IP, как будто они в одной локальной сети.


Шаг 4. Установка NetBird дома

На домашнем сервере или компьютере:

curl -fsSL https://pkgs.netbird.io/install.sh | sh
sudo netbird up --setup-key YOUR_HOME_SETUP_KEY

Добавьте устройство в группу:

Home

Зачем: Домашнее устройство (роутер, NAS или ПК с камерами) должно быть в сети NetBird и в группе Home. Тогда по правилам доступа сервер из группы remote сможет подключаться к нему. Группы нужны для сегментации: вы явно разрешаете, кто к кому имеет доступ.


Шаг 5. Настройка правил доступа

Перейдите:

Access Control → Policies

Создайте правило:

Source:

remote

Destination:

Home

Action:

Allow

Зачем: По умолчанию NetBird использует Zero Trust — устройства не видят друг друга, пока вы не разрешите. Это правило говорит: «устройства из группы remote (облачный сервер) могут подключаться к устройствам из группы Home». Без него ping и RTSP-подключения к камерам не пройдут.


Шаг 6. Проверка соединения

Получите NetBird IP домашнего устройства:

Пример:

100.64.0.5

С сервера:

ping 100.64.0.5

Если работает — сеть настроена.

Зачем: Проверка подтверждает, что VPN работает и сервер в облаке может достучаться до домашней сети. Если ping проходит, Frigate тоже сможет получать RTSP-потоки с камер по NetBird IP.


Часть 2. Подключение и монтирование диска

Зачем отдельный диск: Системный диск (vda) в Yandex Cloud обычно 10–40 ГБ — этого мало для видеозаписей. Frigate пишет круглосуточно, и за несколько дней место закончится. Отдельный диск (vdb) на 256–512 ГБ даёт место для хранения записей с настраиваемым сроком хранения.

Проверяем диски:

lsblk

Пример:

vda 40G
vdb 512G

Шаг 7. Форматирование диска

sudo mkfs.ext4 /dev/vdb

Зачем: Новый диск приходит «сырым» — без файловой системы. mkfs.ext4 создаёт ext4, которая хорошо подходит для Linux: журналирование, стабильность при сбоях, нормальная работа с большими файлами видео. Важно: форматирование удаляет все данные на диске.


Шаг 8. Монтирование

sudo mkdir /data
sudo mount /dev/vdb /data

Зачем: Диск нужно «привязать» к каталогу, чтобы система могла с ним работать. Без монтирования запись в /data пойдёт на системный диск. После mount всё, что пишется в /data, сохраняется на отдельном диске.

Проверка:

df -h

Шаг 9. Автомонтирование

Получаем UUID:

sudo blkid /dev/vdb

Редактируем:

sudo nano /etc/fstab

Добавляем:

UUID=YOUR_UUID /data ext4 defaults,nofail 0 2

Зачем: После перезагрузки диск размонтируется, и Frigate перестанет писать записи. Запись в /etc/fstab заставляет систему автоматически монтировать диск при загрузке. UUID используется вместо /dev/vdb, потому что имена устройств могут меняться, а UUID диска — постоянный. nofail не даёт системе зависнуть при загрузке, если диск временно недоступен.


Шаг 10. Настройка прав

sudo mkdir -p /data/frigate/{config,media,db}
sudo chown -R skv:skv /data/frigate

Зачем: Frigate в Docker будет работать от вашего пользователя (или от root в контейнере). Каталоги config, media и db нужны для конфигурации, видеозаписей и базы данных. chown даёт вашему пользователю права на запись, чтобы не использовать sudo при редактировании конфигов и чтобы Docker мог писать в эти каталоги.


Часть 3. Установка Docker

Docker — платформа контейнеризации

Зачем Docker: Frigate поставляется как готовый Docker-образ со всеми зависимостями (Python, FFmpeg, детекторы и т.д.). Установка через Docker избавляет от ручной настройки окружения, конфликтов версий и упрощает обновления — достаточно перезапустить контейнер с новым образом.

Обновляем систему:

sudo apt update

Устанавливаем Docker:

sudo apt install docker.io -y

Запускаем:

sudo systemctl enable docker
sudo systemctl start docker

Добавляем пользователя:

sudo usermod -aG docker skv
newgrp docker

Проверка:

docker ps

Зачем usermod -aG docker: По умолчанию только root может запускать контейнеры. Добавление пользователя в группу docker позволяет запускать Docker без sudo, что удобнее и безопаснее для повседневной работы.


Часть 4. Установка Docker Compose

sudo apt install docker-compose -y

Проверка:

docker compose version

Зачем Docker Compose: Вместо длинной команды docker run с кучей флагов Compose описывает сервисы в YAML-файле. Проще хранить конфигурацию в репозитории, менять параметры и перезапускать одной командой docker compose up -d.


Часть 5. Установка Frigate

Frigate — NVR с AI-детекцией объектов

Создаем compose файл:

nano /data/frigate/docker-compose.yml
services:
  frigate:
    container_name: frigate
    image: ghcr.io/blakeblackshear/frigate:stable
    restart: unless-stopped

    shm_size: "512mb"

    volumes:
      - /data/frigate/config:/config
      - /data/frigate/media:/media/frigate
      - /data/frigate/db:/db
      - /etc/localtime:/etc/localtime:ro

    ports:
      - "8971:8971"
      - "8554:8554"
      - "8555:8555/tcp"
      - "8555:8555/udp"

    environment:
      - TZ=Europe/Berlin

Что за что в compose:

  • shm_size: "512mb" — Frigate хранит кадры в shared memory для детекции. Для 2–4 камер 720p хватает 256–512 МБ; при нехватке будет ошибка «Bus error».
  • volumes — привязка каталогов: config для настроек и БД, media для записей и клипов, db для SQLite. localtime нужен для корректного времени в логах и метаданных.
  • 8971 — Web UI и API (с авторизацией). 8554 — RTSP-рестрим для камер. 8555 — WebRTC для двусторонней связи с камерами.
  • TZ — часовой пояс для корректного отображения времени событий.

Часть 6. Создание конфигурации Frigate

nano /data/frigate/config/config.yml
mqtt:
  enabled: false

record:
  enabled: true
  retain:
    days: 3
    mode: all

cameras: {}

Зачем такая конфигурация: Минимальный конфиг для первого запуска. MQTT отключён — он нужен только для интеграции с Home Assistant. record включает запись с хранением 3 дней в режиме all (все кадры, не только при детекции). cameras: {} пустой — камеры добавите позже через Web UI или вручную в конфиг, указав RTSP-путь через NetBird IP (например, rtsp://100.64.0.5:554/stream1).


Часть 7. Запуск

cd /data/frigate

docker compose up -d

Проверка:

docker ps

Зачем -d: Флаг -d (detached) запускает контейнер в фоне. Без него терминал будет занят логами Frigate. Контейнер продолжит работать после закрытия SSH.


Часть 8. Получение пароля

docker logs frigate

или

docker logs frigate | grep password

Логин:

admin

Зачем: При первом запуске Frigate генерирует случайный пароль и выводит его в логи. Это защищает Web UI от несанкционированного доступа. Пароль можно сменить в настройках после входа.


Часть 9. Доступ к Web UI

http://SERVER_IP:8971

Зачем: Web UI — основной интерфейс Frigate: просмотр камер в реальном времени, настройка зон и масок, просмотр событий и записей, добавление камер. Убедитесь, что в Security Groups Yandex Cloud открыт порт 8971 для вашего IP, иначе доступ извне будет закрыт.


Часть 10. Проверка записи

ls /data/frigate/media

Зачем: Проверка, что Frigate пишет на отдельный диск. В media/recordings появятся каталоги по камерам и датам. Если камеры ещё не добавлены, каталоги будут пустыми — это нормально. Главное, что путь смонтирован и доступен для записи.


Структура

/data/frigate
 ├── config
 ├── media
 ├── db
 └── docker-compose.yml

Назначение каталогов: config — конфиг и SQLite с событиями; media — записи, клипы и экспорты; db — дополнительные данные Frigate; docker-compose.yml — описание сервиса для перезапуска и обновлений.


Готово

Теперь Frigate работает на Yandex Cloud и имеет доступ к домашним камерам через NetBird.

Видео сохраняется на отдельном диске.

Система готова к production использованию.


Есть вопрос или хотите обсудить статью?

Написать в Telegram →
Константин Стародубов

Руководитель группы комплаенса ИБ в финтехе Яндекса, к.т.н., доцент НИУ ВШЭ. Пишу про информационную безопасность, регуляторику, технологии и фотографию.

Обсудить задачу