"Быстрый
<br />
На свежий OpenMediaVault первым делом устанавливают:</p>
<ul>
<li><strong>omv-extras</strong> — репозиторий с плагинами, без него ничего нет</li>
<li><strong>openmediavault-compose</strong> — Docker Compose прямо в WebGUI, основа для всего остального</li>
<li><strong>Portainer CE</strong> — веб-интерфейс для управления контейнерами</li>
<li><strong>Jellyfin</strong> — медиасервер без подписки и аккаунта</li>
<li><strong>Nextcloud</strong> — приватное облако вместо Google Drive</li>
</ul>
<p>Все остальные 15 приложений из этого списка ставятся через <a href="https://it-apteka.com/ustanovka-docker-compose-polnyj-gajd-ot-sisadmina/" title="Установка Docker Compose: Полный гайд сисадмина (2026)" target="_blank" rel="noopener" data-wpil-monitor-id="2472">Docker Compose после установки</a> omv-extras и плагина compose.<br />
<h2>OMV голый — это просто Debian с веб-мордой</h2>
<p>Установил OpenMediaVault, зашёл в веб-интерфейс, настроил диски — и что дальше? А дальше ты смотришь на минималистичное меню и понимаешь: из коробки OMV умеет только раздавать файлы по <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="2481">сети</a>. Samba, NFS, FTP — всё есть. Медиасервер — нет. Облако — нет. Мониторинг — нет.</p>
<p>Это не баг. Это архитектурное решение. OMV намеренно держит ядро маленьким и чистым. Всё расширение — через плагины и <a class="wpil_keyword_link" href="https://it-apteka.com/tag/docker/" target="_blank" rel="noopener" title="Docker" data-wpil-keyword-link="linked" data-wpil-monitor-id="2477">Docker</a>. И вот тут начинается интересное.</p>
<p>Статья для тех, кто уже установил OMV и хочет понять, что туда поставить, зачем и в каком порядке. Без воды — только конкретные приложения, docker-compose файлы и объяснение почему именно это, а не что-то другое.</p>
<p>Что нужно до начала:</p>
<ul>
<li>OpenMediaVault 7.x или 8.x (OMV «Sandworm» или «Synchrony» на <a class="wpil_keyword_link" href="https://it-apteka.com/tag/debian/" target="_blank" rel="noopener" title="Debian" data-wpil-keyword-link="linked" data-wpil-monitor-id="2480">Debian</a> 12/13)</li>
<li>Минимум 4 ГБ RAM для базового набора, 8 ГБ для комфортной работы</li>
<li>Отдельный SSD/флешка для системы OMV (не трогай диски с данными)</li>
<li>Доступ в интернет для загрузки образов</li>
</ul>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 45, 'rankSpacing': 45}
}}%%
flowchart TD
A["OMV чистый"] --> B["omv-extras"]
B --> C["Плагин compose"]
C --> D["Docker Engine"]
D --> E["Медиа"]
D --> F["Облако"]
D --> G["Сеть"]
D --> H["Мониторинг"]
D --> I["Утилиты"]
E --> E1["Jellyfin"]
E --> E2["Sonarr/Radarr"]
F --> F1["Nextcloud"]
F --> F2["Vaultwarden"]
G --> G1["Pi-hole"]
G --> G2["Nginx Proxy Manager"]
H --> H1["Uptime Kuma"]
H --> H2["Grafana+Prometheus"]
I --> I1["Portainer"]
I --> I2["Watchtower"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
</pre>
<h2>Шаг 0: omv-extras и плагин compose — без этого никуда</h2>
<p>Прежде чем ставить любое приложение из этого списка — нужна инфраструктура. Два шага, без которых дальше нет смысла идти.</p>
<p><strong>Шаг 1.</strong> Установи omv-extras. Это репозиторий сторонних плагинов от сообщества. Без него в OMV нет ни Docker, ни половины нужных расширений.</p>
<p>Зайди на сервер по SSH от root и выполни:</p>
<pre><code class="language-bash">
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
</code></pre>
<p>После этого в WebGUI появится пункт System > omv-extras с дополнительными репозиториями.</p>
<p><strong>Шаг 2.</strong> Установи плагин openmediavault-compose. Это <a href="https://it-apteka.com/ustanovka-jellyfin-mediaserver-doma-bez-podpisok-i-slezhki/" target="_blank" rel="noopener" data-wpil-monitor-id="2530">Docker Compose прямо в сайдбаре OMV</a> — синтаксическая подсветка, кнопка валидации YAML, управление стеками из браузера.</p>
<p>WebGUI -> System -> Plugins -> найди openmediavault-compose -> Install.</p>
<p>После установки: Services -> Compose -> Settings. Укажи папку для YAML-файлов (например /data/compose) и папку для данных контейнеров (например /data/appdata). Нажми «Reinstall Docker».</p>
"Важно
<br />
Папки /data/compose и /data/appdata должны быть на дата-дисках, не на системном носителе OMV. Системный носитель — только для самого OMV. Иначе забьёшь системный диск данными контейнеров и получишь весёлый вечер.<br />
<h2>Категория 1: Управление контейнерами</h2>
<h3>1. Portainer CE — главный пульт управления Docker</h3>
<p>Portainer — это то, что ставят первым после установки Docker. Веб-интерфейс для управления контейнерами: смотришь что запущено, сколько RAM и CPU жрёт каждый контейнер, запускаешь и останавливаешь стеки, просматриваешь логи — всё из браузера.</p>
<p>Без Portainer управлять больше чем двумя контейнерами через командную строку — рецепт путаницы. Portainer всё упорядочивает.</p>
<pre><code class="language-text">
# /data/compose/portainer/docker-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports:
- "9443:9443"
- "8000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/appdata/portainer:/data
restart: unless-stopped
</code></pre>
<p>Открывается на https://твой-ip:9443. При первом входе создаёшь пароль администратора.</p>
<p>Community Edition бесплатна. Business Edition нужна только если управляешь несколькими серверами или нужны расширенные политики доступа.</p>
<h3>2. Watchtower — автообновление контейнеров</h3>
<p>Watchtower проверяет DockerHub раз в сутки и автоматически обновляет контейнеры до свежих образов. Настроил один раз — забыл. Больше не нужно вручную делать docker pull и перезапускать.</p>
<pre><code class="language-text">
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 4 * * *
restart: unless-stopped
</code></pre>
<p>WATCHTOWER_SCHEDULE=0 0 4 * * * — запускает проверку каждую ночь в 4:00. WATCHTOWER_CLEANUP=true — удаляет старые образы после обновления, не засоряет диск.</p>
"Осторожно
<br />
Watchtower удобен для homelab. Но если какой-то контейнер критичен — исключи его из автообновления через label com.centurylinklabs.watchtower.enable=false. Обновления иногда ломают конфиги.<br />
<h2>Категория 2: Медиасервер</h2>
<h3>3. Jellyfin — медиасервер без подписки</h3>
<p>Jellyfin — бесплатный open source медиасервер. Организует коллекцию фильмов, сериалов, музыки, скачивает метаданные и постеры автоматически, стримит на любые устройства в сети и за её пределами.</p>
<p>Plex делает то же самое, но берёт деньги за удалённый доступ и аппаратное транскодирование. В Jellyfin всё это бесплатно и без аккаунта.</p>
<pre><code class="language-text">
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/jellyfin:/config
- /data/media/movies:/data/movies
- /data/media/tv:/data/tv
- /data/media/music:/data/music
ports:
- "8096:8096"
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
</code></pre>
<p>Строка /dev/dri:/dev/dri подключает GPU для аппаратного транскодирования. Для Intel iGPU работает из коробки. Без этого транскодирование будет на CPU — медленнее и жрёт больше.</p>
<p>Открывается на http://твой-ip:8096. При первой настройке указываешь папки с медиа, дальше всё автоматически.</p>
<h3>4. Sonarr — автоматизация загрузки сериалов</h3>
<p>Sonarr мониторит RSS-ленты торрент-трекеров и автоматически скачивает новые серии добавленных сериалов. Вышла новая серия — Sonarr нашёл, скачал, переименовал по шаблону, положил в нужную папку. Jellyfin подхватил автоматически.</p>
<pre><code class="language-text">
services:
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/sonarr:/config
- /data/media/tv:/tv
- /data/downloads:/downloads
ports:
- "8989:8989"
restart: unless-stopped
</code></pre>
<h3>5. Radarr — то же самое, но для фильмов</h3>
<p>Radarr — форк Sonarr под фильмы. Принцип тот же: добавляешь фильм в список, указываешь нужное качество — Radarr ищет, скачивает, раскладывает по папкам.</p>
<pre><code class="language-text">
services:
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/radarr:/config
- /data/media/movies:/movies
- /data/downloads:/downloads
ports:
- "7878:7878"
restart: unless-stopped
</code></pre>
<h3>6. qBittorrent — торрент-клиент с веб-интерфейсом</h3>
<p>Sonarr и Radarr скачивают через торрент-клиент. qBittorrent — лучший выбор для Docker: лёгкий, без мусора, с веб-интерфейсом. Sonarr/Radarr ставятся в связку с ним через API.</p>
<pre><code class="language-text">
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- WEBUI_PORT=8080
volumes:
- /data/appdata/qbittorrent:/config
- /data/downloads:/downloads
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
restart: unless-stopped
</code></pre>
<p>После старта открываешь http://твой-ip:8080. Стандартный логин admin, пароль смотри в логах контейнера при первом запуске.</p>
<h2>Категория 3: Приватное облако</h2>
<h3>7. Nextcloud — замена Google Drive и Dropbox</h3>
<p>Nextcloud — самое популярное self-hosted облако. Файлы, календарь, контакты, совместная работа над документами. Мобильные приложения для iOS и Android. Автозагрузка фото с телефона на свой сервер.</p>
<p>Рекомендую AIO-вариант (All-in-One) — он ставится проще и включает базу данных и SSL из коробки. Но для старта подходит и обычный docker-compose:</p>
<pre><code class="language-text">
services:
nextcloud-db:
image: mariadb:latest
container_name: nextcloud-db
environment:
- MYSQL_ROOT_PASSWORD=тут_сильный_пароль
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=тут_другой_пароль
volumes:
- /data/appdata/nextcloud-db:/var/lib/mysql
restart: unless-stopped
nextcloud:
image: nextcloud:latest
container_name: nextcloud
ports:
- "8180:80"
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=тут_другой_пароль
volumes:
- /data/appdata/nextcloud:/var/www/html
- /data/nextcloud-data:/var/www/html/data
depends_on:
- nextcloud-db
restart: unless-stopped
</code></pre>
<p>Папку /data/nextcloud-data держи на самом большом диске — туда пойдут все файлы пользователей. Папка /data/appdata/nextcloud — конфиги, кеши, небольшая.</p>
<h3>8. Vaultwarden — менеджер паролей на своём сервере</h3>
<p>Vaultwarden — лёгкая реализация сервера Bitwarden, совместимая со всеми официальными клиентами Bitwarden. Ставишь на своём NAS, используешь штатные приложения Bitwarden на всех устройствах — но данные хранятся у тебя, а не в облаке.</p>
<p>1Password стоит $36/год. Bitwarden Premium — $10/год. Vaultwarden — бесплатно. При этом функциональность та же.</p>
<pre><code class="language-text">
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
environment:
- DOMAIN=https://vault.твой-домен.ru
- SIGNUPS_ALLOWED=false
volumes:
- /data/appdata/vaultwarden:/data
ports:
- "8280:80"
restart: unless-stopped
</code></pre>
<p>SIGNUPS_ALLOWED=false — отключает свободную регистрацию. Аккаунты создаёшь через CLI или временно включаешь регистрацию, регистрируешься и снова выключаешь.</p>
"Vaultwarden
<br />
Bitwarden-клиенты не подключаются к серверу по HTTP. Нужен SSL. Либо настраивай <a href="https://it-apteka.com/acme-nginx-nastrojka-let-s-encrypt-vruchnuju-i-cherez-nginx-proxy-manager/" title="ACME + Nginx: настройка Let’s Encrypt вручную и через Nginx Proxy Manager" target="_blank" rel="noopener" data-wpil-monitor-id="2468">Nginx Proxy Manager с Let's Encrypt</a>, либо используй Cloudflare Tunnel. Без HTTPS клиент просто откажется работать.<br />
<h3>9. Immich — Google Photos на своём железе</h3>
<p>Immich — self-hosted альтернатива Google Photos. Распознавание лиц, геотеги, автоматическая классификация по датам и событиям. Мобильные приложения для iOS и Android с автозагрузкой. По функциональности уже вплотную к Google Photos.</p>
<pre><code class="language-text">
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich-server
ports:
- "2283:2283"
volumes:
- /data/photos:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
environment:
- DB_HOSTNAME=immich-db
- DB_USERNAME=immich
- DB_PASSWORD=сильный_пароль_тут
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
depends_on:
- immich-db
- immich-redis
restart: unless-stopped
immich-redis:
image: redis:alpine
container_name: immich-redis
restart: unless-stopped
immich-db:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
container_name: immich-db
environment:
- POSTGRES_USER=immich
- POSTGRES_PASSWORD=сильный_пароль_тут
- POSTGRES_DB=immich
volumes:
- /data/appdata/immich-db:/var/lib/postgresql/data
restart: unless-stopped
</code></pre>
<p>Immich жрёт больше ресурсов чем другие приложения — нужен приличный процессор для ML-функций. На Raspberry Pi 4 будет медленно. На N100 или i3 — нормально.</p>
<h2>Категория 4: Сеть и безопасность</h2>
<h3>10. Pi-hole — блокировка рекламы на уровне DNS</h3>
<p>Pi-hole — <a class="wpil_keyword_link" href="https://it-apteka.com/tag/dns/" target="_blank" rel="noopener" title="DNS" data-wpil-keyword-link="linked" data-wpil-monitor-id="2484">DNS</a>-сервер с фильтрацией. Блокирует рекламу, трекеры и вредоносные домены на уровне всей сети. Не нужны расширения в каждом браузере — достаточно указать IP сервера как <a href="https://it-apteka.com/dyndns-polnyj-gajd-po-nastrojke-dinamicheskogo-dns-na-routere-keenetic-i-mikrotik-besplatno-i-bez-boli/" title="DynDNS: полный гайд по настройке динамического DNS на роутере, Keenetic и MikroTik — бесплатно и без боли" target="_blank" rel="noopener" data-wpil-monitor-id="2475">DNS в роутере</a>, и реклама пропадает на всех устройствах сразу.</p>
<pre><code class="language-text">
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8380:80"
environment:
- TZ=Europe/Moscow
- WEBPASSWORD=тут_твой_пароль
- PIHOLE_DNS_=1.1.1.1;8.8.8.8
volumes:
- /data/appdata/pihole/etc:/etc/pihole
- /data/appdata/pihole/dnsmasq:/etc/dnsmasq.d
restart: unless-stopped
</code></pre>
<p>Порт 53 занимает systemd-resolved на большинстве дистрибутивов. Если получишь ошибку «port already in use» при старте:</p>
<pre><code class="language-bash">
systemctl stop systemd-resolved
systemctl disable systemd-resolved
echo "nameserver 1.1.1.1" > /etc/resolv.conf
</code></pre>
<p>После старта Pi-hole открывается на http://твой-ip:8380/admin. В роутере меняешь DNS на IP NAS-сервера.</p>
<h3>11. <a href="https://it-apteka.com/mikrotik-nginx-proxy-manager-ustanovka-container-ssl-i-reverse-proxy-shpargalka/" title="MikroTik Nginx Proxy Manager: установка container, SSL и reverse proxy — шпаргалка" target="_blank" rel="noopener" data-wpil-monitor-id="2470">Nginx Proxy Manager</a> — красивые URL вместо IP:порт</h3>
<p><a href="https://it-apteka.com/nginx_proxy_manager/" title="Nginx Proxy Manager: настройка reverse proxy для Proxmox, Nextcloud, Vaultwarden и ещё семи сервисов" target="_blank" rel="noopener" data-wpil-monitor-id="2469">Nginx Proxy Manager</a> (NPM) позволяет обращаться к сервисам по именам вместо IP и порта. Вместо http://192.168.1.100:8096 получаешь http://jellyfin.home. Плюс управляет SSL-сертификатами через Let’s Encrypt — один клик и у тебя HTTPS.</p>
<pre><code class="language-text">
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- "80:80"
- "443:443"
- "8181:81"
volumes:
- /data/appdata/nginx-pm/data:/data
- /data/appdata/nginx-pm/letsencrypt:/etc/letsencrypt
restart: unless-stopped
</code></pre>
<p>Открывается на http://твой-ip:8181. Стандартный логин admin@example.com, пароль changeme. Сразу меняй.</p>
<h3>12. Tailscale — VPN без боли с NAT и роутером</h3>
<p>Tailscale — mesh VPN на базе WireGuard. Устанавливаешь на NAS и на все свои устройства — телефон, ноутбук, рабочий компьютер. Все они оказываются в одной приватной сети. Доступ к NAS из любой точки мира без проброса портов и настройки роутера.</p>
<pre><code class="language-text">
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
hostname: nas-omv
environment:
- TS_AUTHKEY=tskey-auth-тут-твой-ключ
- TS_STATE_DIR=/var/lib/tailscale
- TS_EXTRA_ARGS=--advertise-exit-node
volumes:
- /data/appdata/tailscale:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
</code></pre>
<p>Ключ авторизации берёшь на tailscale.com/settings/keys. Бесплатный тариф — до 3 пользователей и 100 устройств. Для homelab хватит за глаза.</p>
<p>Альтернатива — Headscale, самохостинговый контроллер Tailscale. Полностью бесплатно и без ограничений по устройствам, но требует отдельной настройки.</p>
<h2>Категория 5: Мониторинг</h2>
<h3>13. Uptime Kuma — мониторинг сервисов</h3>
<p>Uptime Kuma следит за тем, что все твои сервисы живые. Проверяет доступность по HTTP, TCP, DNS, пингу. Если что-то упало — шлёт уведомление в <a class="wpil_keyword_link" href="https://t.me/it_apteka_com/34" target="_blank" rel="noopener" title="Telegram" data-wpil-keyword-link="linked" data-wpil-monitor-id="2483">Telegram</a>, Email, Discord или куда настроишь. Красивый дашборд со статус-страницей.</p>
<pre><code class="language-text">
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- /data/appdata/uptime-kuma:/app/data
restart: unless-stopped
</code></pre>
<p>Открывается на http://твой-ip:3001. При первом входе создаёшь аккаунт. Добавляешь мониторы — URL каждого своего сервиса. Telegram-уведомления настраиваются в 2 клика через BotFather.</p>
<h3>14. Grafana + Prometheus — полноценный мониторинг сервера</h3>
<p>Uptime Kuma говорит «сервис живой или нет». Grafana + Prometheus говорит как именно работает сервер: CPU, RAM, температура дисков, сетевой трафик, IO. Красивые дашборды, алерты, история метрик.</p>
<pre><code class="language-text">
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- /data/appdata/prometheus:/etc/prometheus
- /data/appdata/prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
pid: host
network_mode: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- /data/appdata/grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=тут_твой_пароль
restart: unless-stopped
</code></pre>
<p>После старта: в Grafana (порт 3000) добавляй datasource Prometheus (http://prometheus:9090). Импортируй готовый дашборд для node-exporter — ID 1860 в Grafana Dashboards. Получишь готовую панель мониторинга <a href="https://it-apteka.com/vpn-na-mikrotik-polnyj-gajd-2026-wireguard-l2tp-ipsec-ikev2-nastrojka-servera-i-klienta/" title="VPN на MikroTik: полный гайд 2026 — WireGuard, L2TP/IPsec, IKEv2, настройка сервера и клиента" target="_blank" rel="noopener" data-wpil-monitor-id="2473">сервера без настройки</a> с нуля.</p>
<h2>Категория 6: Утилиты и продуктивность</h2>
<h3>15. Homepage — стартовая страница homelab</h3>
<p>Homepage — красивая стартовая страница со всеми твоими сервисами. Ссылки, статус сервисов в реальном времени, виджеты с метриками. Открываешь браузер — видишь весь homelab сразу.</p>
<pre><code class="language-text">
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3080:3000"
volumes:
- /data/appdata/homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
</code></pre>
<p>Конфиги — YAML-файлы в /data/appdata/homepage: services.yaml (список сервисов), settings.yaml (внешний вид), widgets.yaml (виджеты). Документация на github.com/gethomepage/homepage — там же примеры конфигов.</p>
<h3>16. Paperless-ngx — электронный архив документов</h3>
<p>Paperless-ngx сканирует PDF, изображения, делает OCR, автоматически тегирует по содержимому. Больше никаких папок «скан_договор_финальный_V2_точно_финальный.pdf». Полнотекстовый поиск по всем документам.</p>
<pre><code class="language-text">
services:
paperless-redis:
image: redis:alpine
container_name: paperless-redis
restart: unless-stopped
paperless:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless
ports:
- "8008:8000"
volumes:
- /data/appdata/paperless/data:/usr/src/paperless/data
- /data/appdata/paperless/media:/usr/src/paperless/media
- /data/paperless-consume:/usr/src/paperless/consume
- /data/paperless-export:/usr/src/paperless/export
environment:
- PAPERLESS_REDIS=redis://paperless-redis:6379
- PAPERLESS_OCR_LANGUAGE=rus+eng
- PAPERLESS_TIME_ZONE=Europe/Moscow
- PAPERLESS_SECRET_KEY=тут-длинная-случайная-строка
depends_on:
- paperless-redis
restart: unless-stopped
</code></pre>
<p>PAPERLESS_OCR_LANGUAGE=rus+eng — включает OCR на русском и английском. Paperless использует Tesseract, который поддерживает десятки языков. Бросаешь PDF в папку /data/paperless-consume — он автоматически обрабатывается и появляется в веб-интерфейсе.</p>
<h3>17. Mealie — рецепты без рекламы</h3>
<p>Mealie импортирует <a href="https://it-apteka.com/kak-uskorit-sajt-na-wordpress-cherez-keshirovanie-v-nginx-recept-dlja-teh-kto-ustal-zhdat/" title="Как ускорить сайт на WordPress через кеширование в Nginx: рецепт для тех, кто устал ждать" target="_blank" rel="noopener" data-wpil-monitor-id="2476">рецепты по URL с любых кулинарных сайтов</a>, хранит локально, строит планы питания и генерирует список покупок. Без рекламы. Без «прокрутите вниз чтобы увидеть рецепт».</p>
<pre><code class="language-text">
services:
mealie:
image: hkotel/mealie:latest
container_name: mealie
ports:
- "9925:9000"
volumes:
- /data/appdata/mealie:/app/data
environment:
- ALLOW_SIGNUP=false
- BASE_URL=http://твой-ip:9925
- DEFAULT_EMAIL=admin@example.com
- DEFAULT_PASSWORD=тут_твой_пароль
restart: unless-stopped
</code></pre>
<h3>18. ntfy — push-уведомления с сервера на телефон</h3>
<p>ntfy — HTTP-сервер для push-уведомлений. Любой <a class="wpil_keyword_link" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" title="Скрипты" data-wpil-keyword-link="linked" data-wpil-monitor-id="2485">скрипт</a>, cron-задача или приложение может отправить уведомление на твой телефон одним curl-запросом. Без Telegram-ботов, без внешних сервисов.</p>
<pre><code class="language-text">
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
ports:
- "8085:80"
volumes:
- /data/appdata/ntfy:/var/cache/ntfy
command: serve
restart: unless-stopped
</code></pre>
<p>Приложение ntfy для iOS и Android подписывается на топики. Отправить уведомление:</p>
<pre><code class="language-bash">
curl -d "Бэкап завершён" http://твой-ip:8085/мой-сервер
</code></pre>
<p>Это можно вставить в конец любого <a class="wpil_keyword_link" href="https://it-apteka.com/tag/bash/" target="_blank" rel="noopener" title="Bash" data-wpil-keyword-link="linked" data-wpil-monitor-id="2479">bash</a>-скрипта и знать когда он отработал. Одна команда на лошадь убивает весь отдел нотификаций.</p>
<h3>19. Gitea — приватный Git на своём сервере</h3>
<p>Gitea — лёгкий self-hosted GitHub. Приватные репозитории без ограничений, CI/CD через Gitea Actions, wiki, issues, pull requests. Хранишь конфиги инфраструктуры, docker-compose файлы, скрипты — всё под версионным контролем, всё у себя.</p>
<pre><code class="language-text">
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
ports:
- "3003:3000"
- "222:22"
volumes:
- /data/appdata/gitea:/data
restart: unless-stopped
</code></pre>
<p>SQLite достаточно для personal use. Если нужна поддержка команды из нескольких человек — переходи на PostgreSQL. Порт 222 для SSH-доступа к репозиториям (стандартный 22 занят системой).</p>
<h3>20. BorgBackup через плагин OMV — бэкапы с дедупликацией</h3>
<p>Плагин openmediavault-borgbackup устанавливается прямо из OMV Extras, без Docker. BorgBackup делает инкрементальные бэкапы с дедупликацией и шифрованием. Отлично подходит для бэкапа самого NAS на внешний диск или удалённый сервер.</p>
<p>Установка через WebGUI: System -> Plugins -> openmediavault-borgbackup -> Install.</p>
<p>После установки: Services -> BorgBackup. Создаёшь репозиторий, указываешь что бэкапить, настраиваешь расписание.</p>
<p>Для бэкапа в облако или на удалённый сервер используй Borgbase — платный хостинг для Borg-репозиториев (2 ГБ бесплатно).</p>
<pre><code class="language-bash">
# Создать репозиторий на внешнем диске
borg init --encryption=repokey /mnt/backup-disk/nas-backup
# Первый бэкап
borg create --stats --progress \
/mnt/backup-disk/nas-backup::nas-{now:%Y-%m-%d} \
/data/appdata \
/etc/openmediavault
# Список бэкапов
borg list /mnt/backup-disk/nas-backup
</code></pre>
<h2>Сводная таблица всех 20 приложений</h2>
<table>
<thead>
<tr>
<th>#</th>
<th>Приложение</th>
<th>Категория</th>
<th>Порт</th>
<th>RAM (ориент.)</th>
<th>Метод установки</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Portainer CE</td>
<td>Управление Docker</td>
<td>9443</td>
<td>~100 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>2</td>
<td>Watchtower</td>
<td>Управление Docker</td>
<td>—</td>
<td>~30 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>3</td>
<td>Jellyfin</td>
<td>Медиа</td>
<td>8096</td>
<td>~300 МБ+</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>4</td>
<td>Sonarr</td>
<td>Медиа</td>
<td>8989</td>
<td>~200 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>5</td>
<td>Radarr</td>
<td>Медиа</td>
<td>7878</td>
<td>~200 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>6</td>
<td>qBittorrent</td>
<td>Медиа</td>
<td>8080</td>
<td>~100 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>7</td>
<td>Nextcloud</td>
<td>Облако</td>
<td>8180</td>
<td>~500 МБ+</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>8</td>
<td>Vaultwarden</td>
<td>Облако</td>
<td>8280</td>
<td>~50 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>9</td>
<td>Immich</td>
<td>Облако</td>
<td>2283</td>
<td>~1 ГБ+</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>10</td>
<td>Pi-hole</td>
<td>Сеть</td>
<td>8380 / 53</td>
<td>~70 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>11</td>
<td>Nginx Proxy Manager</td>
<td>Сеть</td>
<td>80/443/8181</td>
<td>~100 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>12</td>
<td>Tailscale</td>
<td>Сеть</td>
<td>—</td>
<td>~50 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>13</td>
<td>Uptime Kuma</td>
<td>Мониторинг</td>
<td>3001</td>
<td>~100 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>14</td>
<td>Grafana + Prometheus</td>
<td>Мониторинг</td>
<td>3000/9090</td>
<td>~400 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>15</td>
<td>Homepage</td>
<td>Утилиты</td>
<td>3080</td>
<td>~50 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>16</td>
<td>Paperless-ngx</td>
<td>Утилиты</td>
<td>8008</td>
<td>~400 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>17</td>
<td>Mealie</td>
<td>Утилиты</td>
<td>9925</td>
<td>~200 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>18</td>
<td>ntfy</td>
<td>Утилиты</td>
<td>8085</td>
<td>~20 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>19</td>
<td>Gitea</td>
<td>Утилиты</td>
<td>3003</td>
<td>~150 МБ</td>
<td>Docker Compose</td>
</tr>
<tr>
<td>20</td>
<td>BorgBackup</td>
<td>Бэкап</td>
<td>—</td>
<td>~50 МБ</td>
<td>OMV Extras плагин</td>
</tr>
</tbody>
</table>
<h2>Порядок установки: с чего начать</h2>
<p>Всё сразу не ставь. Сервер под нагрузкой сломается не сразу — но именно тогда, когда ты забудешь что именно и почему поставил. Лучший порядок — постепенный.</p>
<p><strong>Неделя 1 — основа:</strong> omv-extras + плагин compose, Portainer, Watchtower. Разберись как работает Docker Compose через WebGUI OMV.</p>
<p><strong>Неделя 2 — медиа или облако:</strong> либо Jellyfin + qBittorrent, либо Nextcloud. Одно направление, не оба сразу.</p>
<p><strong>Неделя 3 — сеть:</strong> Pi-hole. Потрать время на <a href="https://it-apteka.com/10-oshibok-pri-nastrojke-domashnego-wi-fi-iz-za-kotoryh-tormozit-internet/" title="10 ошибок при настройке домашнего Wi-Fi, из-за которых тормозит интернет" target="_blank" rel="noopener" data-wpil-monitor-id="2474">настройку — это применяется ко всей домашней</a> сети, тут важно разобраться.</p>
<p><strong>Дальше — по потребности:</strong> <a href="https://it-apteka.com/zashhita-wordpress-ot-ddos-atak-mikrotik-nginx-proxy-manager-boevoj-gajd-2026/" title="Защита WordPress от DDoS атак: MikroTik + Nginx Proxy Manager — Боевой гайд 2026" target="_blank" rel="noopener" data-wpil-monitor-id="2471">Nginx Proxy Manager</a> если нужны красивые URL, Tailscale если нужен удалённый доступ, Uptime Kuma для мониторинга, остальное по желанию.</p>
<h2>Системные требования под весь стек</h2>
<table>
<thead>
<tr>
<th>Набор</th>
<th>RAM</th>
<th>CPU</th>
<th>Хранилище (система)</th>
<th>Примечание</th>
</tr>
</thead>
<tbody>
<tr>
<td>Минимум (3-5 контейнеров)</td>
<td>4 ГБ</td>
<td>Intel N100 / Celeron</td>
<td>32 ГБ <a class="wpil_keyword_link" href="https://it-apteka.com/tag/ssd/" target="_blank" rel="noopener" title="ssd" data-wpil-keyword-link="linked" data-wpil-monitor-id="2478">SSD</a></td>
<td>Portainer, Pi-hole, Jellyfin</td>
</tr>
<tr>
<td>Комфортный (10 контейнеров)</td>
<td>8 ГБ</td>
<td>i3 / Ryzen 3</td>
<td>64 ГБ SSD</td>
<td>Весь медиастек + облако</td>
</tr>
<tr>
<td>Полный стек (20 контейнеров)</td>
<td>16 ГБ</td>
<td>i5 / Ryzen 5</td>
<td>128 ГБ SSD</td>
<td>Всё из списка + запас</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальна версия OpenMediaVault 8.x (Synchrony) на Debian 13. Перед установкой проверь свежие релизы на <a href="https://www.openmediavault.org/" target="_blank" rel="nofollow">openmediavault.org</a>.</p>
<h2>Типичные проблемы при установке</h2>
<h3>Конфликт портов: Address already in use</h3>
<p>OMV сам занимает порт 80 (веб-интерфейс). Не назначай его приложениям. Nginx Proxy Manager на порт 80 ставится корректно — он перехватывает 80 после установки. Но если туда пытаешься поставить что-то ещё — получишь конфликт.</p>
<p>Проверь что занято:</p>
<pre><code class="language-bash">
ss -tlnp | grep -E ':(80|443|8080|9090)'
</code></pre>
<h3>PUID/PGID: контейнер не может читать файлы</h3>
<p>Jellyfin, Sonarr, Radarr запускаются с пользователем внутри контейнера. Если PUID/PGID не совпадает с владельцем файлов на диске — получишь ошибки доступа.</p>
<pre><code class="language-bash">
# Узнай свой UID/GID
id ваш_пользователь
# uid=1000(andrey) gid=1000(andrey) - вот это и ставь в PUID/PGID
</code></pre>
<h3>Docker образ не скачивается: connection timeout</h3>
<p>DockerHub периодически недоступен из России без VPN. Если тайм-аут при pull — используй зеркала:</p>
<pre><code class="language-bash">
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.gcr.io",
"https://dockerhub.timeweb.cloud"
]
}
</code></pre>
<pre><code class="language-bash">
systemctl restart docker
</code></pre>
<h3>Immich / Nextcloud не запускаются: база данных не готова</h3>
<p>Контейнер приложения стартует раньше чем база данных полностью инициализировалась. Добавь задержку или просто перезапусти стек через минуту:</p>
<pre><code class="language-bash">
docker compose down
docker compose up -d
</code></pre>
<p>Во второй раз база уже инициализирована и всё стартует нормально.</p>
<h2>FAQ — что спрашивают чаще всего</h2>
<h3>Как установить приложения на OpenMediaVault без Docker?</h3>
<p>Технически можно ставить deb-пакеты прямо на систему. Но официальная документация OMV это не рекомендует — обновления OMV могут сломать зависимости сторонних пакетов. Docker изолирует приложения и устраняет эту проблему. Единственное исключение — нативные плагины через omv-extras (BorgBackup, ZFS, KVM) — они сделаны специально для OMV и протестированы с его обновлениями.</p>
<h3>Чем OpenMediaVault отличается от TrueNAS и Unraid?</h3>
<p>OMV — минималистичный NAS на Debian, расширяется через Docker и плагины, бесплатный. TrueNAS SCALE — более мощный, ZFS из коробки, встроенные VM и Kubernetes, требует больше RAM и опыта. Unraid — платный ($69 один раз), самый простой Docker/VM, можно смешивать диски разного размера без RAID. Для начинающего homelab — OMV проще всего. Для серьёзных данных — TrueNAS надёжнее.</p>
<h3>Почему Jellyfin, а не Plex?</h3>
<p>Jellyfin полностью бесплатный и open source. Plex берёт $120/год за Plex Pass для аппаратного транскодирования и нормального удалённого доступа. Jellyfin эти же функции даёт бесплатно. Plex чуть удобнее для начинающих и лучше интегрируется с Chromecast. Но если ты строишь homelab — Jellyfin логичнее.</p>
<h3>Можно ли поставить OpenMediaVault на Raspberry Pi?</h3>
<p>Да, OMV официально поддерживает Raspberry Pi через скрипты omv-extras. На Pi 4 с 4 ГБ RAM нормально работает набор из 5-7 лёгких контейнеров (Pi-hole, Vaultwarden, Nextcloud, Gitea, Homepage). Jellyfin работает, но транскодирование медленное — Pi не тянет 4K. Immich с ML-функциями будет тормозить.</p>
<h3>Как обновить OpenMediaVault безопасно?</h3>
<p>До обновления: сделай бэкап конфига OMV (System -> <a class="wpil_keyword_link" href="https://it-apteka.com/category/rezervnoe-kopirovanie/" target="_blank" rel="noopener" title="Резервное копирование" data-wpil-keyword-link="linked" data-wpil-monitor-id="2482">Backup</a>), запиши список запущенных контейнеров. Обновление через WebGUI: System -> Update Management -> отметь обновления -> Install. После обновления проверь что все контейнеры запустились. Не обновляй ядро и OMV одновременно — если что-то сломается, проще диагностировать.</p>
<h2>Итог: homelab строится итерационно</h2>
<p>20 приложений в одной статье — это не значит «ставь всё сразу». Это карта возможностей. Начни с omv-extras, плагина compose и Portainer. Добавляй по одному приложению — разберись как оно работает, что жрёт, где хранит данные. Через месяц у тебя будет работающий homelab, который ты понимаешь от начала до конца.</p>
<p>Это важнее чем набор приложений. Homelab который работает непонятно как — это не homelab, это бомба с таймером.</p>
"Что-то
<br />
Пиши в комментарии — разберём конкретный кейс. Указывай версию OMV, какой контейнер, что именно в логах. Без этого диагностировать сложно.<br />
<p><strong>Источники и документация:</strong></p>
<ul>
<li><a href="https://docs.openmediavault.org/" target="_blank" rel="nofollow">OpenMediaVault Official Documentation</a></li>
<li><a href="https://wiki.omv-extras.org/" target="_blank" rel="nofollow">omv-extras.org — плагины и руководства</a></li>
<li><a href="https://github.com/OpenMediaVault-Plugin-Developers" target="_blank" rel="nofollow">GitHub OpenMediaVault Plugin Developers</a></li>
<li><a href="https://jellyfin.org/docs/" target="_blank" rel="nofollow">Jellyfin Documentation</a></li>
<li><a href="https://nextcloud.com/install/" target="_blank" rel="nofollow">Nextcloud Installation Guide</a></li>
<li><a href="https://immich.app/docs/" target="_blank" rel="nofollow">Immich Documentation</a></li>
<li><a href="https://corelab.tech/setup-omv/" target="_blank" rel="nofollow">Ultimate OMV8 Setup Guide 2026</a></li>
</ul>
Быстрый ответ - что поставить в первую очередь
На свежий OpenMediaVault первым делом устанавливают:
- omv-extras — репозиторий с плагинами, без него ничего нет
- openmediavault-compose — Docker Compose прямо в WebGUI, основа для всего остального
- Portainer CE — веб-интерфейс для управления контейнерами
- Jellyfin — медиасервер без подписки и аккаунта
- Nextcloud — приватное облако вместо Google Drive
Все остальные 15 приложений из этого списка ставятся через Docker Compose после установки omv-extras и плагина compose.
OMV голый — это просто Debian с веб-мордой
Установил OpenMediaVault, зашёл в веб-интерфейс, настроил диски — и что дальше? А дальше ты смотришь на минималистичное меню и понимаешь: из коробки OMV умеет только раздавать файлы по сети. Samba, NFS, FTP — всё есть. Медиасервер — нет. Облако — нет. Мониторинг — нет.
Это не баг. Это архитектурное решение. OMV намеренно держит ядро маленьким и чистым. Всё расширение — через плагины и Docker. И вот тут начинается интересное.
Статья для тех, кто уже установил OMV и хочет понять, что туда поставить, зачем и в каком порядке. Без воды — только конкретные приложения, docker-compose файлы и объяснение почему именно это, а не что-то другое.
Что нужно до начала:
- OpenMediaVault 7.x или 8.x (OMV «Sandworm» или «Synchrony» на Debian 12/13)
- Минимум 4 ГБ RAM для базового набора, 8 ГБ для комфортной работы
- Отдельный SSD/флешка для системы OMV (не трогай диски с данными)
- Доступ в интернет для загрузки образов
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '14px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 45, 'rankSpacing': 45}
}}%%
flowchart TD
A["OMV чистый"] --> B["omv-extras"]
B --> C["Плагин compose"]
C --> D["Docker Engine"]
D --> E["Медиа"]
D --> F["Облако"]
D --> G["Сеть"]
D --> H["Мониторинг"]
D --> I["Утилиты"]
E --> E1["Jellyfin"]
E --> E2["Sonarr/Radarr"]
F --> F1["Nextcloud"]
F --> F2["Vaultwarden"]
G --> G1["Pi-hole"]
G --> G2["Nginx Proxy Manager"]
H --> H1["Uptime Kuma"]
H --> H2["Grafana+Prometheus"]
I --> I1["Portainer"]
I --> I2["Watchtower"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style C fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style D fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
Прежде чем ставить любое приложение из этого списка — нужна инфраструктура. Два шага, без которых дальше нет смысла идти.
Шаг 1. Установи omv-extras. Это репозиторий сторонних плагинов от сообщества. Без него в OMV нет ни Docker, ни половины нужных расширений.
Зайди на сервер по SSH от root и выполни:
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
После этого в WebGUI появится пункт System > omv-extras с дополнительными репозиториями.
Шаг 2. Установи плагин openmediavault-compose. Это Docker Compose прямо в сайдбаре OMV — синтаксическая подсветка, кнопка валидации YAML, управление стеками из браузера.
WebGUI -> System -> Plugins -> найди openmediavault-compose -> Install.
После установки: Services -> Compose -> Settings. Укажи папку для YAML-файлов (например /data/compose) и папку для данных контейнеров (например /data/appdata). Нажми «Reinstall Docker».
Важно про пути
Папки /data/compose и /data/appdata должны быть на дата-дисках, не на системном носителе OMV. Системный носитель — только для самого OMV. Иначе забьёшь системный диск данными контейнеров и получишь весёлый вечер.
Категория 1: Управление контейнерами
1. Portainer CE — главный пульт управления Docker
Portainer — это то, что ставят первым после установки Docker. Веб-интерфейс для управления контейнерами: смотришь что запущено, сколько RAM и CPU жрёт каждый контейнер, запускаешь и останавливаешь стеки, просматриваешь логи — всё из браузера.
Без Portainer управлять больше чем двумя контейнерами через командную строку — рецепт путаницы. Portainer всё упорядочивает.
# /data/compose/portainer/docker-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports:
- "9443:9443"
- "8000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/appdata/portainer:/data
restart: unless-stopped
Открывается на https://твой-ip:9443. При первом входе создаёшь пароль администратора.
Community Edition бесплатна. Business Edition нужна только если управляешь несколькими серверами или нужны расширенные политики доступа.
2. Watchtower — автообновление контейнеров
Watchtower проверяет DockerHub раз в сутки и автоматически обновляет контейнеры до свежих образов. Настроил один раз — забыл. Больше не нужно вручную делать docker pull и перезапускать.
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 4 * * *
restart: unless-stopped
WATCHTOWER_SCHEDULE=0 0 4 * * * — запускает проверку каждую ночь в 4:00. WATCHTOWER_CLEANUP=true — удаляет старые образы после обновления, не засоряет диск.
Осторожно с автообновлением в продакшне
Watchtower удобен для homelab. Но если какой-то контейнер критичен — исключи его из автообновления через label com.centurylinklabs.watchtower.enable=false. Обновления иногда ломают конфиги.
Категория 2: Медиасервер
3. Jellyfin — медиасервер без подписки
Jellyfin — бесплатный open source медиасервер. Организует коллекцию фильмов, сериалов, музыки, скачивает метаданные и постеры автоматически, стримит на любые устройства в сети и за её пределами.
Plex делает то же самое, но берёт деньги за удалённый доступ и аппаратное транскодирование. В Jellyfin всё это бесплатно и без аккаунта.
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/jellyfin:/config
- /data/media/movies:/data/movies
- /data/media/tv:/data/tv
- /data/media/music:/data/music
ports:
- "8096:8096"
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
Строка /dev/dri:/dev/dri подключает GPU для аппаратного транскодирования. Для Intel iGPU работает из коробки. Без этого транскодирование будет на CPU — медленнее и жрёт больше.
Открывается на http://твой-ip:8096. При первой настройке указываешь папки с медиа, дальше всё автоматически.
4. Sonarr — автоматизация загрузки сериалов
Sonarr мониторит RSS-ленты торрент-трекеров и автоматически скачивает новые серии добавленных сериалов. Вышла новая серия — Sonarr нашёл, скачал, переименовал по шаблону, положил в нужную папку. Jellyfin подхватил автоматически.
services:
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/sonarr:/config
- /data/media/tv:/tv
- /data/downloads:/downloads
ports:
- "8989:8989"
restart: unless-stopped
5. Radarr — то же самое, но для фильмов
Radarr — форк Sonarr под фильмы. Принцип тот же: добавляешь фильм в список, указываешь нужное качество — Radarr ищет, скачивает, раскладывает по папкам.
services:
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- /data/appdata/radarr:/config
- /data/media/movies:/movies
- /data/downloads:/downloads
ports:
- "7878:7878"
restart: unless-stopped
6. qBittorrent — торрент-клиент с веб-интерфейсом
Sonarr и Radarr скачивают через торрент-клиент. qBittorrent — лучший выбор для Docker: лёгкий, без мусора, с веб-интерфейсом. Sonarr/Radarr ставятся в связку с ним через API.
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- WEBUI_PORT=8080
volumes:
- /data/appdata/qbittorrent:/config
- /data/downloads:/downloads
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
restart: unless-stopped
После старта открываешь http://твой-ip:8080. Стандартный логин admin, пароль смотри в логах контейнера при первом запуске.
Категория 3: Приватное облако
7. Nextcloud — замена Google Drive и Dropbox
Nextcloud — самое популярное self-hosted облако. Файлы, календарь, контакты, совместная работа над документами. Мобильные приложения для iOS и Android. Автозагрузка фото с телефона на свой сервер.
Рекомендую AIO-вариант (All-in-One) — он ставится проще и включает базу данных и SSL из коробки. Но для старта подходит и обычный docker-compose:
services:
nextcloud-db:
image: mariadb:latest
container_name: nextcloud-db
environment:
- MYSQL_ROOT_PASSWORD=тут_сильный_пароль
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=тут_другой_пароль
volumes:
- /data/appdata/nextcloud-db:/var/lib/mysql
restart: unless-stopped
nextcloud:
image: nextcloud:latest
container_name: nextcloud
ports:
- "8180:80"
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=тут_другой_пароль
volumes:
- /data/appdata/nextcloud:/var/www/html
- /data/nextcloud-data:/var/www/html/data
depends_on:
- nextcloud-db
restart: unless-stopped
Папку /data/nextcloud-data держи на самом большом диске — туда пойдут все файлы пользователей. Папка /data/appdata/nextcloud — конфиги, кеши, небольшая.
8. Vaultwarden — менеджер паролей на своём сервере
Vaultwarden — лёгкая реализация сервера Bitwarden, совместимая со всеми официальными клиентами Bitwarden. Ставишь на своём NAS, используешь штатные приложения Bitwarden на всех устройствах — но данные хранятся у тебя, а не в облаке.
1Password стоит $36/год. Bitwarden Premium — $10/год. Vaultwarden — бесплатно. При этом функциональность та же.
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
environment:
- DOMAIN=https://vault.твой-домен.ru
- SIGNUPS_ALLOWED=false
volumes:
- /data/appdata/vaultwarden:/data
ports:
- "8280:80"
restart: unless-stopped
SIGNUPS_ALLOWED=false — отключает свободную регистрацию. Аккаунты создаёшь через CLI или временно включаешь регистрацию, регистрируешься и снова выключаешь.
Vaultwarden требует HTTPS
Bitwarden-клиенты не подключаются к серверу по HTTP. Нужен SSL. Либо настраивай
Nginx Proxy Manager с Let’s Encrypt, либо используй Cloudflare Tunnel. Без HTTPS клиент просто откажется работать.
9. Immich — Google Photos на своём железе
Immich — self-hosted альтернатива Google Photos. Распознавание лиц, геотеги, автоматическая классификация по датам и событиям. Мобильные приложения для iOS и Android с автозагрузкой. По функциональности уже вплотную к Google Photos.
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich-server
ports:
- "2283:2283"
volumes:
- /data/photos:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
environment:
- DB_HOSTNAME=immich-db
- DB_USERNAME=immich
- DB_PASSWORD=сильный_пароль_тут
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
depends_on:
- immich-db
- immich-redis
restart: unless-stopped
immich-redis:
image: redis:alpine
container_name: immich-redis
restart: unless-stopped
immich-db:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
container_name: immich-db
environment:
- POSTGRES_USER=immich
- POSTGRES_PASSWORD=сильный_пароль_тут
- POSTGRES_DB=immich
volumes:
- /data/appdata/immich-db:/var/lib/postgresql/data
restart: unless-stopped
Immich жрёт больше ресурсов чем другие приложения — нужен приличный процессор для ML-функций. На Raspberry Pi 4 будет медленно. На N100 или i3 — нормально.
Категория 4: Сеть и безопасность
10. Pi-hole — блокировка рекламы на уровне DNS
Pi-hole — DNS-сервер с фильтрацией. Блокирует рекламу, трекеры и вредоносные домены на уровне всей сети. Не нужны расширения в каждом браузере — достаточно указать IP сервера как DNS в роутере, и реклама пропадает на всех устройствах сразу.
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8380:80"
environment:
- TZ=Europe/Moscow
- WEBPASSWORD=тут_твой_пароль
- PIHOLE_DNS_=1.1.1.1;8.8.8.8
volumes:
- /data/appdata/pihole/etc:/etc/pihole
- /data/appdata/pihole/dnsmasq:/etc/dnsmasq.d
restart: unless-stopped
Порт 53 занимает systemd-resolved на большинстве дистрибутивов. Если получишь ошибку «port already in use» при старте:
systemctl stop systemd-resolved
systemctl disable systemd-resolved
echo "nameserver 1.1.1.1" > /etc/resolv.conf
После старта Pi-hole открывается на http://твой-ip:8380/admin. В роутере меняешь DNS на IP NAS-сервера.
Nginx Proxy Manager (NPM) позволяет обращаться к сервисам по именам вместо IP и порта. Вместо http://192.168.1.100:8096 получаешь http://jellyfin.home. Плюс управляет SSL-сертификатами через Let’s Encrypt — один клик и у тебя HTTPS.
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- "80:80"
- "443:443"
- "8181:81"
volumes:
- /data/appdata/nginx-pm/data:/data
- /data/appdata/nginx-pm/letsencrypt:/etc/letsencrypt
restart: unless-stopped
Открывается на http://твой-ip:8181. Стандартный логин admin@example.com, пароль changeme. Сразу меняй.
12. Tailscale — VPN без боли с NAT и роутером
Tailscale — mesh VPN на базе WireGuard. Устанавливаешь на NAS и на все свои устройства — телефон, ноутбук, рабочий компьютер. Все они оказываются в одной приватной сети. Доступ к NAS из любой точки мира без проброса портов и настройки роутера.
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
hostname: nas-omv
environment:
- TS_AUTHKEY=tskey-auth-тут-твой-ключ
- TS_STATE_DIR=/var/lib/tailscale
- TS_EXTRA_ARGS=--advertise-exit-node
volumes:
- /data/appdata/tailscale:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
Ключ авторизации берёшь на tailscale.com/settings/keys. Бесплатный тариф — до 3 пользователей и 100 устройств. Для homelab хватит за глаза.
Альтернатива — Headscale, самохостинговый контроллер Tailscale. Полностью бесплатно и без ограничений по устройствам, но требует отдельной настройки.
Категория 5: Мониторинг
13. Uptime Kuma — мониторинг сервисов
Uptime Kuma следит за тем, что все твои сервисы живые. Проверяет доступность по HTTP, TCP, DNS, пингу. Если что-то упало — шлёт уведомление в Telegram, Email, Discord или куда настроишь. Красивый дашборд со статус-страницей.
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- /data/appdata/uptime-kuma:/app/data
restart: unless-stopped
Открывается на http://твой-ip:3001. При первом входе создаёшь аккаунт. Добавляешь мониторы — URL каждого своего сервиса. Telegram-уведомления настраиваются в 2 клика через BotFather.
14. Grafana + Prometheus — полноценный мониторинг сервера
Uptime Kuma говорит «сервис живой или нет». Grafana + Prometheus говорит как именно работает сервер: CPU, RAM, температура дисков, сетевой трафик, IO. Красивые дашборды, алерты, история метрик.
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- /data/appdata/prometheus:/etc/prometheus
- /data/appdata/prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
pid: host
network_mode: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- /data/appdata/grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=тут_твой_пароль
restart: unless-stopped
После старта: в Grafana (порт 3000) добавляй datasource Prometheus (http://prometheus:9090). Импортируй готовый дашборд для node-exporter — ID 1860 в Grafana Dashboards. Получишь готовую панель мониторинга сервера без настройки с нуля.
Категория 6: Утилиты и продуктивность
15. Homepage — стартовая страница homelab
Homepage — красивая стартовая страница со всеми твоими сервисами. Ссылки, статус сервисов в реальном времени, виджеты с метриками. Открываешь браузер — видишь весь homelab сразу.
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3080:3000"
volumes:
- /data/appdata/homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
Конфиги — YAML-файлы в /data/appdata/homepage: services.yaml (список сервисов), settings.yaml (внешний вид), widgets.yaml (виджеты). Документация на github.com/gethomepage/homepage — там же примеры конфигов.
16. Paperless-ngx — электронный архив документов
Paperless-ngx сканирует PDF, изображения, делает OCR, автоматически тегирует по содержимому. Больше никаких папок «скан_договор_финальный_V2_точно_финальный.pdf». Полнотекстовый поиск по всем документам.
services:
paperless-redis:
image: redis:alpine
container_name: paperless-redis
restart: unless-stopped
paperless:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless
ports:
- "8008:8000"
volumes:
- /data/appdata/paperless/data:/usr/src/paperless/data
- /data/appdata/paperless/media:/usr/src/paperless/media
- /data/paperless-consume:/usr/src/paperless/consume
- /data/paperless-export:/usr/src/paperless/export
environment:
- PAPERLESS_REDIS=redis://paperless-redis:6379
- PAPERLESS_OCR_LANGUAGE=rus+eng
- PAPERLESS_TIME_ZONE=Europe/Moscow
- PAPERLESS_SECRET_KEY=тут-длинная-случайная-строка
depends_on:
- paperless-redis
restart: unless-stopped
PAPERLESS_OCR_LANGUAGE=rus+eng — включает OCR на русском и английском. Paperless использует Tesseract, который поддерживает десятки языков. Бросаешь PDF в папку /data/paperless-consume — он автоматически обрабатывается и появляется в веб-интерфейсе.
17. Mealie — рецепты без рекламы
Mealie импортирует рецепты по URL с любых кулинарных сайтов, хранит локально, строит планы питания и генерирует список покупок. Без рекламы. Без «прокрутите вниз чтобы увидеть рецепт».
services:
mealie:
image: hkotel/mealie:latest
container_name: mealie
ports:
- "9925:9000"
volumes:
- /data/appdata/mealie:/app/data
environment:
- ALLOW_SIGNUP=false
- BASE_URL=http://твой-ip:9925
- DEFAULT_EMAIL=admin@example.com
- DEFAULT_PASSWORD=тут_твой_пароль
restart: unless-stopped
18. ntfy — push-уведомления с сервера на телефон
ntfy — HTTP-сервер для push-уведомлений. Любой скрипт, cron-задача или приложение может отправить уведомление на твой телефон одним curl-запросом. Без Telegram-ботов, без внешних сервисов.
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
ports:
- "8085:80"
volumes:
- /data/appdata/ntfy:/var/cache/ntfy
command: serve
restart: unless-stopped
Приложение ntfy для iOS и Android подписывается на топики. Отправить уведомление:
curl -d "Бэкап завершён" http://твой-ip:8085/мой-сервер
Это можно вставить в конец любого bash-скрипта и знать когда он отработал. Одна команда на лошадь убивает весь отдел нотификаций.
19. Gitea — приватный Git на своём сервере
Gitea — лёгкий self-hosted GitHub. Приватные репозитории без ограничений, CI/CD через Gitea Actions, wiki, issues, pull requests. Хранишь конфиги инфраструктуры, docker-compose файлы, скрипты — всё под версионным контролем, всё у себя.
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
ports:
- "3003:3000"
- "222:22"
volumes:
- /data/appdata/gitea:/data
restart: unless-stopped
SQLite достаточно для personal use. Если нужна поддержка команды из нескольких человек — переходи на PostgreSQL. Порт 222 для SSH-доступа к репозиториям (стандартный 22 занят системой).
20. BorgBackup через плагин OMV — бэкапы с дедупликацией
Плагин openmediavault-borgbackup устанавливается прямо из OMV Extras, без Docker. BorgBackup делает инкрементальные бэкапы с дедупликацией и шифрованием. Отлично подходит для бэкапа самого NAS на внешний диск или удалённый сервер.
Установка через WebGUI: System -> Plugins -> openmediavault-borgbackup -> Install.
После установки: Services -> BorgBackup. Создаёшь репозиторий, указываешь что бэкапить, настраиваешь расписание.
Для бэкапа в облако или на удалённый сервер используй Borgbase — платный хостинг для Borg-репозиториев (2 ГБ бесплатно).
# Создать репозиторий на внешнем диске
borg init --encryption=repokey /mnt/backup-disk/nas-backup
# Первый бэкап
borg create --stats --progress \
/mnt/backup-disk/nas-backup::nas-{now:%Y-%m-%d} \
/data/appdata \
/etc/openmediavault
# Список бэкапов
borg list /mnt/backup-disk/nas-backup
Сводная таблица всех 20 приложений
| # |
Приложение |
Категория |
Порт |
RAM (ориент.) |
Метод установки |
| 1 |
Portainer CE |
Управление Docker |
9443 |
~100 МБ |
Docker Compose |
| 2 |
Watchtower |
Управление Docker |
— |
~30 МБ |
Docker Compose |
| 3 |
Jellyfin |
Медиа |
8096 |
~300 МБ+ |
Docker Compose |
| 4 |
Sonarr |
Медиа |
8989 |
~200 МБ |
Docker Compose |
| 5 |
Radarr |
Медиа |
7878 |
~200 МБ |
Docker Compose |
| 6 |
qBittorrent |
Медиа |
8080 |
~100 МБ |
Docker Compose |
| 7 |
Nextcloud |
Облако |
8180 |
~500 МБ+ |
Docker Compose |
| 8 |
Vaultwarden |
Облако |
8280 |
~50 МБ |
Docker Compose |
| 9 |
Immich |
Облако |
2283 |
~1 ГБ+ |
Docker Compose |
| 10 |
Pi-hole |
Сеть |
8380 / 53 |
~70 МБ |
Docker Compose |
| 11 |
Nginx Proxy Manager |
Сеть |
80/443/8181 |
~100 МБ |
Docker Compose |
| 12 |
Tailscale |
Сеть |
— |
~50 МБ |
Docker Compose |
| 13 |
Uptime Kuma |
Мониторинг |
3001 |
~100 МБ |
Docker Compose |
| 14 |
Grafana + Prometheus |
Мониторинг |
3000/9090 |
~400 МБ |
Docker Compose |
| 15 |
Homepage |
Утилиты |
3080 |
~50 МБ |
Docker Compose |
| 16 |
Paperless-ngx |
Утилиты |
8008 |
~400 МБ |
Docker Compose |
| 17 |
Mealie |
Утилиты |
9925 |
~200 МБ |
Docker Compose |
| 18 |
ntfy |
Утилиты |
8085 |
~20 МБ |
Docker Compose |
| 19 |
Gitea |
Утилиты |
3003 |
~150 МБ |
Docker Compose |
| 20 |
BorgBackup |
Бэкап |
— |
~50 МБ |
OMV Extras плагин |
Порядок установки: с чего начать
Всё сразу не ставь. Сервер под нагрузкой сломается не сразу — но именно тогда, когда ты забудешь что именно и почему поставил. Лучший порядок — постепенный.
Неделя 1 — основа: omv-extras + плагин compose, Portainer, Watchtower. Разберись как работает Docker Compose через WebGUI OMV.
Неделя 2 — медиа или облако: либо Jellyfin + qBittorrent, либо Nextcloud. Одно направление, не оба сразу.
Неделя 3 — сеть: Pi-hole. Потрать время на настройку — это применяется ко всей домашней сети, тут важно разобраться.
Дальше — по потребности: Nginx Proxy Manager если нужны красивые URL, Tailscale если нужен удалённый доступ, Uptime Kuma для мониторинга, остальное по желанию.
Системные требования под весь стек
| Набор |
RAM |
CPU |
Хранилище (система) |
Примечание |
| Минимум (3-5 контейнеров) |
4 ГБ |
Intel N100 / Celeron |
32 ГБ SSD |
Portainer, Pi-hole, Jellyfin |
| Комфортный (10 контейнеров) |
8 ГБ |
i3 / Ryzen 3 |
64 ГБ SSD |
Весь медиастек + облако |
| Полный стек (20 контейнеров) |
16 ГБ |
i5 / Ryzen 5 |
128 ГБ SSD |
Всё из списка + запас |
На момент публикации актуальна версия OpenMediaVault 8.x (Synchrony) на Debian 13. Перед установкой проверь свежие релизы на openmediavault.org.
Типичные проблемы при установке
Конфликт портов: Address already in use
OMV сам занимает порт 80 (веб-интерфейс). Не назначай его приложениям. Nginx Proxy Manager на порт 80 ставится корректно — он перехватывает 80 после установки. Но если туда пытаешься поставить что-то ещё — получишь конфликт.
Проверь что занято:
ss -tlnp | grep -E ':(80|443|8080|9090)'
PUID/PGID: контейнер не может читать файлы
Jellyfin, Sonarr, Radarr запускаются с пользователем внутри контейнера. Если PUID/PGID не совпадает с владельцем файлов на диске — получишь ошибки доступа.
# Узнай свой UID/GID
id ваш_пользователь
# uid=1000(andrey) gid=1000(andrey) - вот это и ставь в PUID/PGID
Docker образ не скачивается: connection timeout
DockerHub периодически недоступен из России без VPN. Если тайм-аут при pull — используй зеркала:
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.gcr.io",
"https://dockerhub.timeweb.cloud"
]
}
systemctl restart docker
Immich / Nextcloud не запускаются: база данных не готова
Контейнер приложения стартует раньше чем база данных полностью инициализировалась. Добавь задержку или просто перезапусти стек через минуту:
docker compose down
docker compose up -d
Во второй раз база уже инициализирована и всё стартует нормально.
FAQ — что спрашивают чаще всего
Как установить приложения на OpenMediaVault без Docker?
Технически можно ставить deb-пакеты прямо на систему. Но официальная документация OMV это не рекомендует — обновления OMV могут сломать зависимости сторонних пакетов. Docker изолирует приложения и устраняет эту проблему. Единственное исключение — нативные плагины через omv-extras (BorgBackup, ZFS, KVM) — они сделаны специально для OMV и протестированы с его обновлениями.
Чем OpenMediaVault отличается от TrueNAS и Unraid?
OMV — минималистичный NAS на Debian, расширяется через Docker и плагины, бесплатный. TrueNAS SCALE — более мощный, ZFS из коробки, встроенные VM и Kubernetes, требует больше RAM и опыта. Unraid — платный ($69 один раз), самый простой Docker/VM, можно смешивать диски разного размера без RAID. Для начинающего homelab — OMV проще всего. Для серьёзных данных — TrueNAS надёжнее.
Почему Jellyfin, а не Plex?
Jellyfin полностью бесплатный и open source. Plex берёт $120/год за Plex Pass для аппаратного транскодирования и нормального удалённого доступа. Jellyfin эти же функции даёт бесплатно. Plex чуть удобнее для начинающих и лучше интегрируется с Chromecast. Но если ты строишь homelab — Jellyfin логичнее.
Можно ли поставить OpenMediaVault на Raspberry Pi?
Да, OMV официально поддерживает Raspberry Pi через скрипты omv-extras. На Pi 4 с 4 ГБ RAM нормально работает набор из 5-7 лёгких контейнеров (Pi-hole, Vaultwarden, Nextcloud, Gitea, Homepage). Jellyfin работает, но транскодирование медленное — Pi не тянет 4K. Immich с ML-функциями будет тормозить.
Как обновить OpenMediaVault безопасно?
До обновления: сделай бэкап конфига OMV (System -> Backup), запиши список запущенных контейнеров. Обновление через WebGUI: System -> Update Management -> отметь обновления -> Install. После обновления проверь что все контейнеры запустились. Не обновляй ядро и OMV одновременно — если что-то сломается, проще диагностировать.
Итог: homelab строится итерационно
20 приложений в одной статье — это не значит «ставь всё сразу». Это карта возможностей. Начни с omv-extras, плагина compose и Portainer. Добавляй по одному приложению — разберись как оно работает, что жрёт, где хранит данные. Через месяц у тебя будет работающий homelab, который ты понимаешь от начала до конца.
Это важнее чем набор приложений. Homelab который работает непонятно как — это не homelab, это бомба с таймером.
Что-то не получилось?
Пиши в комментарии — разберём конкретный кейс. Указывай версию OMV, какой контейнер, что именно в логах. Без этого диагностировать сложно.
Источники и документация: