<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Self-Hosted | Константин Стародубов</title><link>https://starodubov.pro/tags/self-hosted/</link><description>Личный сайт Константина Стародубова — информационная безопасность, комплаенс и технологии идентификации.</description><language>ru-RU</language><managingEditor>xaku68@gmail.com (Константин Стародубов)</managingEditor><lastBuildDate>Thu, 11 Jun 2026 22:08:39 +0300</lastBuildDate><atom:link href="https://starodubov.pro/tags/self-hosted/index.xml" rel="self" type="application/rss+xml"/><item><title>Полный гайд: Установка Frigate на Yandex Cloud с NetBird</title><link>https://starodubov.pro/%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9-%D0%B3%D0%B0%D0%B9%D0%B4-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-frigate-%D0%BD%D0%B0-yandex-cloud-%D1%81-netbird/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0300</pubDate><author>xaku68@gmail.com (Константин Стародубов)</author><guid>https://starodubov.pro/%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9-%D0%B3%D0%B0%D0%B9%D0%B4-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-frigate-%D0%BD%D0%B0-yandex-cloud-%D1%81-netbird/</guid><description>Развёртывание Frigate NVR на Yandex Cloud: NetBird VPN, Docker, отдельный диск для записей и доступ к домашним камерам.</description><content:encoded><![CDATA[<p><img src="/images/external/frigate-logo.svg" alt="Frigate NVR — система видеонаблюдения с AI" title="Frigate NVR" loading="lazy" decoding="async"></p>
<p>Этот гайд описывает полный процесс развертывания системы видеонаблюдения Frigate на сервере в Yandex Cloud с хранением записей на отдельном диске и доступом к домашним камерам через защищённый VPN NetBird.</p>
<p>Гайд включает:</p>
<ul>
<li>настройку NetBird</li>
<li>подключение сервера к домашней сети</li>
<li>подключение и монтирование диска</li>
<li>установку Docker и Docker Compose</li>
<li>установку и настройку Frigate</li>
<li>настройку хранения видео</li>
<li>получение доступа к Web UI</li>
</ul>
<hr>
<h2 id="архитектура">Архитектура</h2>
<p><img src="/images/external/yandex-cloud-logo.svg" alt="Yandex Cloud — облачная платформа" title="Yandex Cloud" loading="lazy" decoding="async"></p>
<p>Схема работы: камеры отдают RTSP-поток на устройство в домашней сети (роутер, NAS или ПК). NetBird соединяет это устройство с виртуальной машиной в Yandex Cloud. Frigate в Docker на VM получает потоки по NetBird IP, пишет записи на отдельный диск и отдаёт Web UI на порт 8971.</p>
<pre tabindex="0"><code>Домашние камеры
      │
      │ RTSP
      │
Домашний сервер / роутер
      │
      │ NetBird VPN
      │
Yandex Cloud VM
      │
      │ Docker
      │
      │ Frigate
      │
      └── /data/frigate/media (записи)
</code></pre><hr>
<h2 id="часть-1-настройка-netbird">Часть 1. Настройка NetBird</h2>
<p><img src="/images/external/netbird-logo.png" alt="NetBird — Zero Trust VPN на базе WireGuard" title="NetBird" loading="lazy" decoding="async"></p>
<p>NetBird используется для создания защищённой приватной сети между:</p>
<ul>
<li>сервером в Yandex Cloud</li>
<li>домашней сетью</li>
</ul>
<p><strong>Зачем это нужно:</strong> Камеры находятся дома, а Frigate — в облаке. Без VPN сервер в Yandex Cloud не сможет достучаться до RTSP-потоков камер в вашей локальной сети. NetBird создаёт зашифрованный туннель между облаком и домом — камеры остаются за NAT, но сервер получает к ним доступ как к устройствам в одной сети. Это безопаснее, чем пробрасывать порты на роутере.</p>
<p>Официальный сайт:</p>
<p><a href="https://app.netbird.io/" target="_blank" rel="noopener">https://app.netbird.io/</a></p>
<hr>
<h2 id="шаг-1-регистрация-и-вход">Шаг 1. Регистрация и вход</h2>
<p>Перейдите:</p>
<p><a href="https://app.netbird.io/" target="_blank" rel="noopener">https://app.netbird.io/</a></p>
<p>Создайте аккаунт или войдите.</p>
<p><strong>Зачем:</strong> NetBird Cloud управляет всеми подключёнными устройствами и правилами доступа. Без аккаунта вы не сможете создать Setup Key и связать сервер с домашней сетью.</p>
<hr>
<h2 id="шаг-2-создание-setup-key-для-сервера">Шаг 2. Создание Setup Key для сервера</h2>
<p>Перейдите:</p>
<pre tabindex="0"><code>Access Control → Setup Keys
</code></pre><p>Нажмите:</p>
<pre tabindex="0"><code>Create Setup Key
</code></pre><p>Укажите:</p>
<p>Name:</p>
<pre tabindex="0"><code>yandex-cloud
</code></pre><p>Group:</p>
<pre tabindex="0"><code>remote
</code></pre><p>Сохраните Setup Key.</p>
<p>Пример:</p>
<pre tabindex="0"><code>6A40F5F1-777-XXXX
</code></pre><p><strong>Зачем:</strong> Setup Key — это одноразовый токен для подключения устройства к вашей NetBird-сети. Он привязывает сервер к группе <code>remote</code> и позволяет потом настроить правила: кто к кому может подключаться. Отдельный ключ для облачного сервера нужен, чтобы отличать его от домашних устройств в политиках доступа.</p>
<p>⚠️ Важно: используйте Setup Key, иначе устройство может отключиться.</p>
<hr>
<h2 id="шаг-3-установка-netbird-на-сервер-yandex-cloud">Шаг 3. Установка NetBird на сервер Yandex Cloud</h2>
<p>Подключитесь к серверу:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh skv@SERVER_IP
</span></span></code></pre></div><p>Установите NetBird:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://pkgs.netbird.io/install.sh <span class="p">|</span> sh
</span></span></code></pre></div><p>Подключите сервер:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo netbird up --setup-key YOUR_SETUP_KEY
</span></span></code></pre></div><p>Проверьте статус:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">netbird status
</span></span></code></pre></div><p>Должно быть:</p>
<pre tabindex="0"><code>Connected: yes
</code></pre><p><strong>Зачем:</strong> NetBird-клиент на сервере подключает его к вашей приватной сети и выдаёт ему виртуальный IP (например, 100.64.0.x). После этого сервер сможет обращаться к домашним устройствам по этому IP, как будто они в одной локальной сети.</p>
<hr>
<h2 id="шаг-4-установка-netbird-дома">Шаг 4. Установка NetBird дома</h2>
<p>На домашнем сервере или компьютере:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://pkgs.netbird.io/install.sh <span class="p">|</span> sh
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo netbird up --setup-key YOUR_HOME_SETUP_KEY
</span></span></code></pre></div><p>Добавьте устройство в группу:</p>
<pre tabindex="0"><code>Home
</code></pre><p><strong>Зачем:</strong> Домашнее устройство (роутер, NAS или ПК с камерами) должно быть в сети NetBird и в группе <code>Home</code>. Тогда по правилам доступа сервер из группы <code>remote</code> сможет подключаться к нему. Группы нужны для сегментации: вы явно разрешаете, кто к кому имеет доступ.</p>
<hr>
<h2 id="шаг-5-настройка-правил-доступа">Шаг 5. Настройка правил доступа</h2>
<p>Перейдите:</p>
<pre tabindex="0"><code>Access Control → Policies
</code></pre><p>Создайте правило:</p>
<p>Source:</p>
<pre tabindex="0"><code>remote
</code></pre><p>Destination:</p>
<pre tabindex="0"><code>Home
</code></pre><p>Action:</p>
<pre tabindex="0"><code>Allow
</code></pre><p><strong>Зачем:</strong> По умолчанию NetBird использует Zero Trust — устройства не видят друг друга, пока вы не разрешите. Это правило говорит: «устройства из группы <code>remote</code> (облачный сервер) могут подключаться к устройствам из группы <code>Home</code>». Без него ping и RTSP-подключения к камерам не пройдут.</p>
<hr>
<h2 id="шаг-6-проверка-соединения">Шаг 6. Проверка соединения</h2>
<p>Получите NetBird IP домашнего устройства:</p>
<p>Пример:</p>
<pre tabindex="0"><code>100.64.0.5
</code></pre><p>С сервера:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ping 100.64.0.5
</span></span></code></pre></div><p>Если работает — сеть настроена.</p>
<p><strong>Зачем:</strong> Проверка подтверждает, что VPN работает и сервер в облаке может достучаться до домашней сети. Если ping проходит, Frigate тоже сможет получать RTSP-потоки с камер по NetBird IP.</p>
<hr>
<h2 id="часть-2-подключение-и-монтирование-диска">Часть 2. Подключение и монтирование диска</h2>
<p><strong>Зачем отдельный диск:</strong> Системный диск (vda) в Yandex Cloud обычно 10–40 ГБ — этого мало для видеозаписей. Frigate пишет круглосуточно, и за несколько дней место закончится. Отдельный диск (vdb) на 256–512 ГБ даёт место для хранения записей с настраиваемым сроком хранения.</p>
<p>Проверяем диски:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">lsblk
</span></span></code></pre></div><p>Пример:</p>
<pre tabindex="0"><code>vda 40G
vdb 512G
</code></pre><hr>
<h2 id="шаг-7-форматирование-диска">Шаг 7. Форматирование диска</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mkfs.ext4 /dev/vdb
</span></span></code></pre></div><p><strong>Зачем:</strong> Новый диск приходит «сырым» — без файловой системы. <code>mkfs.ext4</code> создаёт ext4, которая хорошо подходит для Linux: журналирование, стабильность при сбоях, нормальная работа с большими файлами видео. Важно: форматирование удаляет все данные на диске.</p>
<hr>
<h2 id="шаг-8-монтирование">Шаг 8. Монтирование</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mkdir /data
</span></span><span class="line"><span class="cl">sudo mount /dev/vdb /data
</span></span></code></pre></div><p><strong>Зачем:</strong> Диск нужно «привязать» к каталогу, чтобы система могла с ним работать. Без монтирования запись в <code>/data</code> пойдёт на системный диск. После <code>mount</code> всё, что пишется в <code>/data</code>, сохраняется на отдельном диске.</p>
<p>Проверка:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">df -h
</span></span></code></pre></div><hr>
<h2 id="шаг-9-автомонтирование">Шаг 9. Автомонтирование</h2>
<p>Получаем UUID:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo blkid /dev/vdb
</span></span></code></pre></div><p>Редактируем:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo nano /etc/fstab
</span></span></code></pre></div><p>Добавляем:</p>
<pre tabindex="0"><code>UUID=YOUR_UUID /data ext4 defaults,nofail 0 2
</code></pre><p><strong>Зачем:</strong> После перезагрузки диск размонтируется, и Frigate перестанет писать записи. Запись в <code>/etc/fstab</code> заставляет систему автоматически монтировать диск при загрузке. UUID используется вместо <code>/dev/vdb</code>, потому что имена устройств могут меняться, а UUID диска — постоянный. <code>nofail</code> не даёт системе зависнуть при загрузке, если диск временно недоступен.</p>
<hr>
<h2 id="шаг-10-настройка-прав">Шаг 10. Настройка прав</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mkdir -p /data/frigate/<span class="o">{</span>config,media,db<span class="o">}</span>
</span></span><span class="line"><span class="cl">sudo chown -R skv:skv /data/frigate
</span></span></code></pre></div><p><strong>Зачем:</strong> Frigate в Docker будет работать от вашего пользователя (или от root в контейнере). Каталоги <code>config</code>, <code>media</code> и <code>db</code> нужны для конфигурации, видеозаписей и базы данных. <code>chown</code> даёт вашему пользователю права на запись, чтобы не использовать <code>sudo</code> при редактировании конфигов и чтобы Docker мог писать в эти каталоги.</p>
<hr>
<h2 id="часть-3-установка-docker">Часть 3. Установка Docker</h2>
<p><img src="/images/external/docker-logo.png" alt="Docker — платформа контейнеризации" title="Docker" loading="lazy" decoding="async"></p>
<p><strong>Зачем Docker:</strong> Frigate поставляется как готовый Docker-образ со всеми зависимостями (Python, FFmpeg, детекторы и т.д.). Установка через Docker избавляет от ручной настройки окружения, конфликтов версий и упрощает обновления — достаточно перезапустить контейнер с новым образом.</p>
<p>Обновляем систему:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt update
</span></span></code></pre></div><p>Устанавливаем Docker:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install docker.io -y
</span></span></code></pre></div><p>Запускаем:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> docker
</span></span><span class="line"><span class="cl">sudo systemctl start docker
</span></span></code></pre></div><p>Добавляем пользователя:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo usermod -aG docker skv
</span></span><span class="line"><span class="cl">newgrp docker
</span></span></code></pre></div><p>Проверка:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker ps
</span></span></code></pre></div><p><strong>Зачем <code>usermod -aG docker</code>:</strong> По умолчанию только root может запускать контейнеры. Добавление пользователя в группу <code>docker</code> позволяет запускать Docker без <code>sudo</code>, что удобнее и безопаснее для повседневной работы.</p>
<hr>
<h2 id="часть-4-установка-docker-compose">Часть 4. Установка Docker Compose</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install docker-compose -y
</span></span></code></pre></div><p>Проверка:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose version
</span></span></code></pre></div><p><strong>Зачем Docker Compose:</strong> Вместо длинной команды <code>docker run</code> с кучей флагов Compose описывает сервисы в YAML-файле. Проще хранить конфигурацию в репозитории, менять параметры и перезапускать одной командой <code>docker compose up -d</code>.</p>
<hr>
<h2 id="часть-5-установка-frigate">Часть 5. Установка Frigate</h2>
<p><img src="/images/external/frigate-logo.svg" alt="Frigate — NVR с AI-детекцией объектов" title="Frigate NVR" loading="lazy" decoding="async"></p>
<p>Создаем compose файл:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano /data/frigate/docker-compose.yml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">frigate</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">frigate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">ghcr.io/blakeblackshear/frigate:stable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">shm_size</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;512mb&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/data/frigate/config:/config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/data/frigate/media:/media/frigate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/data/frigate/db:/db</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/etc/localtime:/etc/localtime:ro</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;8971:8971&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;8554:8554&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;8555:8555/tcp&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;8555:8555/udp&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">environment</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">TZ=Europe/Berlin</span><span class="w">
</span></span></span></code></pre></div><p><strong>Что за что в compose:</strong></p>
<ul>
<li><code>shm_size: &quot;512mb&quot;</code> — Frigate хранит кадры в shared memory для детекции. Для 2–4 камер 720p хватает 256–512 МБ; при нехватке будет ошибка «Bus error».</li>
<li><code>volumes</code> — привязка каталогов: <code>config</code> для настроек и БД, <code>media</code> для записей и клипов, <code>db</code> для SQLite. <code>localtime</code> нужен для корректного времени в логах и метаданных.</li>
<li><code>8971</code> — Web UI и API (с авторизацией). <code>8554</code> — RTSP-рестрим для камер. <code>8555</code> — WebRTC для двусторонней связи с камерами.</li>
<li><code>TZ</code> — часовой пояс для корректного отображения времени событий.</li>
</ul>
<hr>
<h2 id="часть-6-создание-конфигурации-frigate">Часть 6. Создание конфигурации Frigate</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano /data/frigate/config/config.yml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">mqtt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">record</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">retain</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">days</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="l">all</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">cameras</span><span class="p">:</span><span class="w"> </span>{}<span class="w">
</span></span></span></code></pre></div><p><strong>Зачем такая конфигурация:</strong> Минимальный конфиг для первого запуска. MQTT отключён — он нужен только для интеграции с Home Assistant. <code>record</code> включает запись с хранением 3 дней в режиме <code>all</code> (все кадры, не только при детекции). <code>cameras: {}</code> пустой — камеры добавите позже через Web UI или вручную в конфиг, указав RTSP-путь через NetBird IP (например, <code>rtsp://100.64.0.5:554/stream1</code>).</p>
<hr>
<h2 id="часть-7-запуск">Часть 7. Запуск</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> /data/frigate
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">docker compose up -d
</span></span></code></pre></div><p>Проверка:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker ps
</span></span></code></pre></div><p><strong>Зачем <code>-d</code>:</strong> Флаг <code>-d</code> (detached) запускает контейнер в фоне. Без него терминал будет занят логами Frigate. Контейнер продолжит работать после закрытия SSH.</p>
<hr>
<h2 id="часть-8-получение-пароля">Часть 8. Получение пароля</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker logs frigate
</span></span></code></pre></div><p>или</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker logs frigate <span class="p">|</span> grep password
</span></span></code></pre></div><p>Логин:</p>
<pre tabindex="0"><code>admin
</code></pre><p><strong>Зачем:</strong> При первом запуске Frigate генерирует случайный пароль и выводит его в логи. Это защищает Web UI от несанкционированного доступа. Пароль можно сменить в настройках после входа.</p>
<hr>
<h2 id="часть-9-доступ-к-web-ui">Часть 9. Доступ к Web UI</h2>
<pre tabindex="0"><code>http://SERVER_IP:8971
</code></pre><p><strong>Зачем:</strong> Web UI — основной интерфейс Frigate: просмотр камер в реальном времени, настройка зон и масок, просмотр событий и записей, добавление камер. Убедитесь, что в Security Groups Yandex Cloud открыт порт 8971 для вашего IP, иначе доступ извне будет закрыт.</p>
<hr>
<h2 id="часть-10-проверка-записи">Часть 10. Проверка записи</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ls /data/frigate/media
</span></span></code></pre></div><p><strong>Зачем:</strong> Проверка, что Frigate пишет на отдельный диск. В <code>media/recordings</code> появятся каталоги по камерам и датам. Если камеры ещё не добавлены, каталоги будут пустыми — это нормально. Главное, что путь смонтирован и доступен для записи.</p>
<hr>
<h2 id="структура">Структура</h2>
<pre tabindex="0"><code>/data/frigate
 ├── config
 ├── media
 ├── db
 └── docker-compose.yml
</code></pre><p><strong>Назначение каталогов:</strong> <code>config</code> — конфиг и SQLite с событиями; <code>media</code> — записи, клипы и экспорты; <code>db</code> — дополнительные данные Frigate; <code>docker-compose.yml</code> — описание сервиса для перезапуска и обновлений.</p>
<hr>
<h2 id="готово">Готово</h2>
<p>Теперь Frigate работает на Yandex Cloud и имеет доступ к домашним камерам через NetBird.</p>
<p>Видео сохраняется на отдельном диске.</p>
<p>Система готова к production использованию.</p>
]]></content:encoded></item><item><title>GEEKOM A5: как мини-ПК заменил мне сервер</title><link>https://starodubov.pro/geekom-a5-%D0%BA%D0%B0%D0%BA-%D0%BC%D0%B8%D0%BD%D0%B8-%D0%BF%D0%BA-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D0%BB-%D0%BC%D0%BD%D0%B5-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80/</link><pubDate>Sat, 11 Jan 2025 00:00:00 +0300</pubDate><author>xaku68@gmail.com (Константин Стародубов)</author><guid>https://starodubov.pro/geekom-a5-%D0%BA%D0%B0%D0%BA-%D0%BC%D0%B8%D0%BD%D0%B8-%D0%BF%D0%BA-%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D0%BB-%D0%BC%D0%BD%D0%B5-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80/</guid><description>История о том, как я заменил громоздкий домашний сервер на компактный GEEKOM A5 и не прогадал. Рассказ о проблемах, поиске решения и впечатлениях от использования.</description><content:encoded><![CDATA[<p><img src="/images/geekom-a5/geekom-1_hu_bdff855cfb307174.webp"
    srcset="/images/geekom-a5/geekom-1_hu_26253d5589150224.webp 800w, /images/geekom-a5/geekom-1_hu_bdff855cfb307174.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="GEEKOM A5 МиниПК" title="GEEKOM A5 МиниПК"
    loading="lazy" decoding="async"></p>
<p>История о том, как я избавился от громоздкого сервера под столом и нашёл решение, которое работает тихо, экономно и надёжно. Если вы тоже устали от шума, лишнего железа и компромиссов — этот рассказ может быть вам полезен.</p>
<h2 id="как-всё-начиналось">Как всё начиналось</h2>
<p>До недавнего времени у меня дома стоял полноценный сервер. На бумаге выглядело впечатляюще: мощная платформа, много портов, поддержка NVMe, возможность запускать виртуалки. Казалось, что это идеальное решение для домашнего NAS и хостинга сервисов.</p>
<p><img src="/images/geekom-a5/old-server-1_hu_e82b3e9156016dd0.webp"
    srcset="/images/geekom-a5/old-server-1_hu_944c55a221b65476.webp 800w, /images/geekom-a5/old-server-1_hu_e82b3e9156016dd0.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="Мой старый домашний сервер" title="Старый сервер в корпусе Ginzzu CL150"
    loading="lazy" decoding="async"></p>
<p>Сердцем системы была материнская плата <strong>HUANANZHI X99 BD4</strong> на сокете LGA2011-3 — китайская реплика серверной платформы. На ней работал процессор <strong>Intel Xeon E5-2680 v4</strong> — четырнадцатиядерный монстр с поддержкой 28 потоков. Оперативная память была собрана из разных модулей: 16 ГБ в виде двух планок по 8 ГБ и ещё 32 ГБ двумя планками по 16 ГБ, итого <strong>48 ГБ DDR4</strong>. Система стояла на быстром NVMe-накопителе объёмом <strong>256 ГБ</strong>, а для охлаждения использовался кулер <strong>A04</strong>.</p>
<p><img src="/images/geekom-a5/old-server-2_hu_c57ea12ae68bb3fa.webp"
    srcset="/images/geekom-a5/old-server-2_hu_a05bdc68afd34fd5.webp 800w, /images/geekom-a5/old-server-2_hu_c57ea12ae68bb3fa.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="Внутренности сервера" title="Серверная платформа HUANANZHI X99 BD4 с Xeon E5-2680 v4"
    loading="lazy" decoding="async"></p>
<p>Всё это было собрано в корпусе <strong>Ginzzu CL150</strong> с закалённым стеклом — выглядело внушительно, но занимало много места. Питание обеспечивал блок питания <strong>Ginzzu SB500</strong> на 500 Вт. Для подключения к сети использовалась сетевая карта <strong>Intel AX210 Desktop Kit</strong> с поддержкой Wi-Fi 6. Видеокарта <strong>GeForce GT 730</strong> на 2 ГБ была нужна для вывода изображения, так как у серверного процессора нет встроенной графики. А для хранения данных — корзина <strong>ExeGate HS435-02</strong> на четыре жёстких диска.</p>
<p><img src="/images/geekom-a5/old-server-3_hu_ad7c6f20362f0c6c.webp"
    srcset="/images/geekom-a5/old-server-3_hu_b234f1d02ab778a9.webp 800w, /images/geekom-a5/old-server-3_hu_ad7c6f20362f0c6c.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="Серверная конфигурация" title="Полная конфигурация старого сервера"
    loading="lazy" decoding="async"></p>
<p>На бумаге конфигурация выглядела серьёзно. Шесть портов SATA для подключения дисков, четыре USB 3.0, поддержка четырёхканальной памяти, слот M.2 для быстрого накопителя. Всё это в теории позволяло собрать мощный домашний сервер для виртуалок, файлового хранилища и различных сервисов.</p>
<p>Но реальность оказалась другой.</p>
<h2 id="первые-звоночки">Первые звоночки</h2>
<p>Первое, что начало меня беспокоить — это шум. Даже с относительно тихими вентиляторами сервер постоянно напоминал о себе монотонным гудением. Он не кричал, но его присутствие чувствовалось всегда. Особенно ночью, когда хотелось тишины.</p>
<p>Потом я начал обращать внимание на счёт за электричество. Платформа, которая работала 24/7, съедала не так уж мало. А ещё она нагревалась. Даже зимой комната, где стоял сервер, ощущалась теплее остальных.</p>
<p>Но главная проблема была в другом — в софте.</p>
<h2 id="опыт-с-xpenology-когда-красиво-не-значит-надёжно">Опыт с XPEnology: когда красиво не значит надёжно</h2>
<p>Изначально на сервере я поставил <strong>XPEnology</strong> — неофициальную сборку прошивки Synology. Интерфейс был знакомый и удобный, всё выглядело как у настоящего Synology, только без необходимости платить за железо. Звучало отлично.</p>
<p>На практике же начались проблемы. Обновления системы были запрещены — любое обновление могло сломать всё к чертям. Постоянно всплывали мелкие баги, которые приходилось решать вручную. Диски периодически «отваливались» без видимой причины. XPEnology переставал их видеть, и приходилось перезагружаться, надеясь, что после перезагрузки всё вернётся на свои места.</p>
<p>В какой-то момент я понял: такая схема не даёт того, ради чего всё это затевалось — надёжности. Когда у тебя домашний сервер, ты хочешь, чтобы он просто работал. Без сюрпризов, без танцев с бубном, без постоянного внимания.</p>
<h2 id="поворотный-момент">Поворотный момент</h2>
<p>Именно тогда я решил: хватит. Нужно что-то другое. Не огромный железный монстр, который требует к себе внимания, а что-то простое, тихое и стабильное.</p>
<p>Я начал искать альтернативы и наткнулся на мини-ПК <strong>GEEKOM A5</strong>. По размерам — коробочка, которая поместится на ладони. По характеристикам — вполне серьёзное устройство с процессором AMD Ryzen.</p>
<p>И тут меня осенило: а что, если использовать мини-ПК как головной узел, а диски вынести в отдельное устройство? Так родилась идея связки <strong>GEEKOM A5 + внешний DAS</strong> (Direct Attached Storage).</p>
<h2 id="новое-решение">Новое решение</h2>
<p>Когда GEEKOM A5 приехал, первое, что я заметил — тишина. После постоянного гудения сервера эта коробочка работала практически бесшумно. Да, там есть вентилятор, но его почти не слышно. Это был первый плюс.</p>
<p><img src="/images/geekom-a5/geekom-1_hu_bdff855cfb307174.webp"
    srcset="/images/geekom-a5/geekom-1_hu_26253d5589150224.webp 800w, /images/geekom-a5/geekom-1_hu_bdff855cfb307174.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="GEEKOM A5 - вид спереди" title="Компактный GEEKOM A5"
    loading="lazy" decoding="async"></p>
<p>Второй плюс обнаружился через месяц — счёт за электричество стал заметно меньше. Мини-ПК потребляет в разы меньше энергии, чем серверная платформа, работающая круглосуточно.</p>
<p><img src="/images/geekom-a5/geekom-2_hu_5117336710993066.webp"
    srcset="/images/geekom-a5/geekom-2_hu_7f55be63c0cd214a.webp 800w, /images/geekom-a5/geekom-2_hu_5117336710993066.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="GEEKOM A5 - порты и разъёмы" title="Богатый набор портов на GEEKOM A5"
    loading="lazy" decoding="async"></p>
<p>Третий плюс — компактность. Вместо большого корпуса под столом теперь на полке стоит аккуратная коробочка, которую легко не заметить.</p>
<p><img src="/images/geekom-a5/geekom-3_hu_85d1cc89fba3f8f2.webp"
    srcset="/images/geekom-a5/geekom-3_hu_92203c5493d377e7.webp 800w, /images/geekom-a5/geekom-3_hu_85d1cc89fba3f8f2.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="GEEKOM A5 в рабочей обстановке" title="GEEKOM A5 на рабочем месте"
    loading="lazy" decoding="async"></p>
<h2 id="первые-впечатления-от-работы">Первые впечатления от работы</h2>
<p>Первые дни я приглядывался. Работает ли всё стабильно? Не будет ли проблем с производительностью? Справится ли он с теми задачами, которые я на него возложил?</p>
<p>Оказалось, справляется. Система загружается быстро благодаря NVMe-накопителю. Docker-контейнеры запускаются без проблем. Файловое хранилище, подключённое через DAS, работает стабильно. Нет тех глюков и «отвалов» дисков, которые были с XPEnology.</p>
<p>Через неделю я уже забыл, что у меня под столом стоял сервер. Новое решение просто работало. Без лишнего внимания, без проблем.</p>
<h2 id="что-изменилось">Что изменилось</h2>
<p>Иногда меньше — действительно лучше. Вместо громоздкого и прожорливого сервера я получил:</p>
<ul>
<li><strong>Тихую систему</strong> — можно забыть о постоянном гудении</li>
<li><strong>Стабильную работу</strong> — нет неожиданных сбоев и «отвалов»</li>
<li><strong>Меньше костылей</strong> — не нужно обходить баги и искать обходные пути</li>
<li><strong>Больше контроля</strong> — понимаю, что происходит и как это работает</li>
</ul>
<p><img src="/images/geekom-a5/geekom-4_hu_d0cff7f962013eef.webp"
    srcset="/images/geekom-a5/geekom-4_hu_fc54b450e46d77fd.webp 800w, /images/geekom-a5/geekom-4_hu_d0cff7f962013eef.webp 1400w"
    sizes="(max-width: 860px) 100vw, 760px"
    width="1400" height="1050"
    alt="GEEKOM A5 - боковой вид" title="Компактные размеры GEEKOM A5"
    loading="lazy" decoding="async"></p>
<p>GEEKOM A5 оказался отличной базой не только для офисных задач, но и для домашнего сервера. Особенно если вы, как и я, устали от шума, лишнего железа и вечных компромиссов.</p>
<h2 id="-полные-технические-характеристики-geekom-a5">📋 Полные технические характеристики GEEKOM A5</h2>
<h3 id="основные-характеристики">Основные характеристики</h3>
<h4 id="процессор">Процессор</h4>
<ul>
<li><strong>Модель</strong>: AMD Ryzen 7 5825U</li>
<li><strong>Архитектура</strong>: Zen 3</li>
<li><strong>Количество ядер</strong>: 8 ядер</li>
<li><strong>Количество потоков</strong>: 16 потоков</li>
<li><strong>Базовая частота</strong>: 2,0 ГГц</li>
<li><strong>Максимальная частота (Boost)</strong>: 4,5 ГГц</li>
<li><strong>TDP</strong>: 15 Вт</li>
</ul>
<h4 id="оперативная-память">Оперативная память</h4>
<ul>
<li><strong>Объём</strong>: 16 ГБ DDR4</li>
<li><strong>Тип</strong>: DDR4 (двухканальная)</li>
<li><strong>Возможность расширения</strong>: до 64 ГБ</li>
<li><strong>Слоты</strong>: 2 слота SO-DIMM DDR4</li>
</ul>
<h4 id="накопитель-данных">Накопитель данных</h4>
<ul>
<li><strong>Объём</strong>: 512 ГБ SSD</li>
<li><strong>Тип</strong>: NVMe PCIe 3.0 M.2 2280</li>
<li><strong>Возможность расширения</strong>: до 2 ТБ</li>
<li><strong>Слоты</strong>: 1 слот M.2 2280 PCIe 3.0</li>
</ul>
<h4 id="графическая-подсистема">Графическая подсистема</h4>
<ul>
<li><strong>Интегрированная видеокарта</strong>: AMD Radeon Vega 8</li>
<li><strong>Количество GPU ядер</strong>: 8</li>
<li><strong>Поддержка видео</strong>:
<ul>
<li>H.265/HEVC декодирование</li>
<li>4K видеовоспроизведение</li>
<li>Поддержка до 4 мониторов одновременно</li>
</ul>
</li>
</ul>
<h4 id="порты-и-интерфейсы">Порты и интерфейсы</h4>
<h5 id="usb-порты">USB порты</h5>
<ul>
<li><strong>USB-C 3.2 Gen 2</strong>: 1 порт (с поддержкой DisplayPort)</li>
<li><strong>USB-A 3.2 Gen 2</strong>: 4 порта</li>
<li><strong>USB-A 2.0</strong>: нет</li>
</ul>
<h5 id="видеовыходы">Видеовыходы</h5>
<ul>
<li><strong>HDMI 2.0</strong>: 2 порта (поддержка 4K@60Hz)</li>
<li><strong>USB-C DisplayPort</strong>: 1 порт (через USB-C 3.2 Gen 2)</li>
<li><strong>Поддержка подключения</strong>: до 4 мониторов одновременно</li>
</ul>
<h5 id="сетевые-интерфейсы">Сетевые интерфейсы</h5>
<ul>
<li><strong>Ethernet</strong>: 2.5 Gigabit Ethernet (RJ-45)</li>
<li><strong>Wi-Fi</strong>: Wi-Fi 6 (802.11ax)</li>
<li><strong>Bluetooth</strong>: Bluetooth 5.2</li>
</ul>
<h5 id="другие-порты">Другие порты</h5>
<ul>
<li><strong>SD-картридер</strong>: поддержка SD/SDHC/SDXC карт</li>
<li><strong>Аудио выход</strong>: 3.5 мм комбинированный разъём (наушники/микрофон)</li>
</ul>
<h4 id="операционная-система">Операционная система</h4>
<ul>
<li><strong>Предустановленная ОС</strong>: Windows 11 Pro</li>
<li><strong>Лицензия</strong>: Windows 11 Pro (включена в комплект)</li>
</ul>
<h4 id="физические-характеристики">Физические характеристики</h4>
<ul>
<li><strong>Размеры</strong>: 112 × 112 × 38 мм</li>
<li><strong>Вес</strong>: 500 г</li>
<li><strong>Материал корпуса</strong>: металл (алюминий)</li>
<li><strong>Цвет</strong>: чёрный/серебристый</li>
<li><strong>Охлаждение</strong>: активное (вентилятор)</li>
</ul>
<h4 id="питание">Питание</h4>
<ul>
<li><strong>Блок питания</strong>: внешний адаптер питания</li>
<li><strong>Мощность адаптера</strong>: 65 Вт</li>
<li><strong>Разъём питания</strong>: USB-C (PD) или отдельный разъём DC</li>
</ul>
<h4 id="производительность">Производительность</h4>
<h5 id="вычислительная-производительность">Вычислительная производительность</h5>
<ul>
<li>Отличная производительность для офисных задач</li>
<li>Хорошая производительность для веб-браузинга и мультизадачности</li>
<li>Поддержка лёгких задач обработки видео и изображений</li>
<li>Энергоэффективность для длительной работы</li>
</ul>
<h5 id="графическая-производительность">Графическая производительность</h5>
<ul>
<li>Плавное воспроизведение видео 4K</li>
<li>Поддержка лёгких игр и инди-игр</li>
<li>Отличная производительность для мультимедиа контента</li>
</ul>
<h4 id="гарантия-и-поддержка">Гарантия и поддержка</h4>
<ul>
<li><strong>Гарантия</strong>: 3 года</li>
<li><strong>Поддержка</strong>: официальная поддержка GEEKOM</li>
<li><strong>Онлайн-магазин</strong>: <a href="https://www.geekom.ru/geekom-mini-pc-a-5/" target="_blank" rel="noopener">GEEKOM официальный сайт</a></li>
</ul>
<h2 id="-преимущества-geekom-a5">💾 Преимущества GEEKOM A5</h2>
<ul>
<li>✅ <strong>Компактный размер</strong> — занимает минимум места на столе</li>
<li>✅ <strong>Высокая производительность</strong> — процессор AMD Ryzen 7 5825U обеспечивает отличную производительность</li>
<li>✅ <strong>Гибкость подключения</strong> — поддержка до 4 мониторов одновременно</li>
<li>✅ <strong>Быстрая загрузка</strong> — SSD накопитель обеспечивает быструю загрузку системы и приложений</li>
<li>✅ <strong>Современные технологии</strong> — Wi-Fi 6, Bluetooth 5.2, USB-C</li>
<li>✅ <strong>Тихая работа</strong> — эффективная система охлаждения</li>
<li>✅ <strong>Легко обновляем</strong> — доступ к слотам памяти и SSD для апгрейда</li>
</ul>
<h2 id="-области-применения-geekom-a5">🎯 Области применения GEEKOM A5</h2>
<ul>
<li>🏢 <strong>Офисная работа</strong> — идеально подходит для работы с документами, таблицами, презентациями</li>
<li>🎓 <strong>Обучение</strong> — отлично подходит для студентов и образовательных задач</li>
<li>🏠 <strong>Домашний медиа-центр</strong> — поддержка 4K видео и множественных мониторов</li>
<li>💻 <strong>Разработка</strong> — подходит для веб-разработки и лёгкой работы с кодом</li>
<li>🖥️ <strong>Домашний сервер</strong> — отличная база для Docker, виртуалок и файлового хранилища</li>
<li>📺 <strong>Цифровая вывеска</strong> — компактный размер делает его идеальным для рекламных экранов</li>
<li>🎮 <strong>Лёгкий гейминг</strong> — поддержка инди-игр и старых игр</li>
</ul>
<p><strong>Полезные ссылки:</strong></p>
<ul>
<li>🌐 <a href="https://www.geekom.ru/mini-pc/geekom-a5" target="_blank" rel="noopener">Официальная страница устройства</a></li>
<li>📊 <a href="https://www.amd.com/ru/products/ryzen-processors" target="_blank" rel="noopener">Обзор характеристик Ryzen в мини-ПК</a></li>
<li>🌐 <a href="https://www.geekom.ru/" target="_blank" rel="noopener">Официальный сайт GEEKOM</a></li>
<li>🛒 <a href="https://www.geekom.ru/geekom-mini-pc-a-5/" target="_blank" rel="noopener">GEEKOM A5 в магазине</a></li>
<li>📖 <a href="https://www.geekom.ru/" target="_blank" rel="noopener">Документация и поддержка</a></li>
</ul>
<hr>
<p><em>Продолжение следует — в следующих статьях расскажу про DAS, файловую систему и выбранный софт.</em></p>
]]></content:encoded></item></channel></rss>