Полный гайд: Установка Frigate на Yandex Cloud с подключением к домашней сети через NetBird
Этот гайд описывает полный процесс развертывания системы видеонаблюдения Frigate на сервере в Yandex Cloud с хранением записей на отдельном диске и доступом к домашним камерам через защищённый VPN NetBird.
Гайд включает:
- настройку NetBird
- подключение сервера к домашней сети
- подключение и монтирование диска
- установку Docker и Docker Compose
- установку и настройку Frigate
- настройку хранения видео
- получение доступа к Web UI
Архитектура
Схема работы: камеры отдают 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 используется для создания защищённой приватной сети между:
- сервером в Yandex Cloud
- домашней сетью
Зачем это нужно: Камеры находятся дома, а Frigate — в облаке. Без VPN сервер в Yandex Cloud не сможет достучаться до RTSP-потоков камер в вашей локальной сети. NetBird создаёт зашифрованный туннель между облаком и домом — камеры остаются за NAT, но сервер получает к ним доступ как к устройствам в одной сети. Это безопаснее, чем пробрасывать порты на роутере.
Официальный сайт:
Шаг 1. Регистрация и вход
Перейдите:
Создайте аккаунт или войдите.
Зачем: NetBird Cloud управляет всеми подключёнными устройствами и правилами доступа. Без аккаунта вы не сможете создать Setup Key и связать сервер с домашней сетью.
Шаг 2. Создание Setup Key для сервера
Перейдите:
Access Control → Setup KeysНажмите:
Create Setup KeyУкажите:
Name:
yandex-cloudGroup:
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 | shsudo netbird up --setup-key YOUR_HOME_SETUP_KEYДобавьте устройство в группу:
HomeЗачем: Домашнее устройство (роутер, NAS или ПК с камерами) должно быть в сети NetBird и в группе Home. Тогда по правилам доступа сервер из группы remote сможет подключаться к нему. Группы нужны для сегментации: вы явно разрешаете, кто к кому имеет доступ.
Шаг 5. Настройка правил доступа
Перейдите:
Access Control → PoliciesСоздайте правило:
Source:
remoteDestination:
HomeAction:
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: 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
Создаем compose файл:
nano /data/frigate/docker-compose.ymlservices:
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.ymlmqtt:
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 использованию.
