2026-05-12 kraken: full update — containers, compose structure, real commands

This commit is contained in:
Alexey Martemyanov
2026-05-12 21:16:38 +06:00
parent f1b7f16458
commit 0cb0156e2b
+69 -114
View File
@@ -6,12 +6,12 @@ tags:
- how-to
created: '2026-05-11'
updated: '2026-05-12'
status: network-ready
status: containers-running
ip: 192.168.1.14
---
# OpenMediaVault на Raspberry Pi 5
**Статус:** Сеть настроена, готов к подключению HDD (май 2026)
**Статус:** Контейнеры запущены, Time Machine pending (май 2026)
**Цель:** NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD
## Прогресс
@@ -22,10 +22,10 @@ ip: 192.168.1.14
| 2 — Первый запуск + обновление | ✅ | apt upgrade выполнен |
| 3 — Установка OMV | ✅ | OMV 7 установлен |
| 4 — Первый вход в веб-интерфейс | ✅ | Пароль сменён |
| 5 — Подключить к роутеру, static IP | ✅ | `192.168.1.14` (MAC `2c:cf:67:64:03:f3`), static lease на роутере; WiFi отключён (modprobe blacklist) |
| 6 — USB HDD | ✅ | 12TB Seagate, EXT4, смонтирован через OMV в `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade` |
| 7 — omv-extras + Docker + Portainer | ✅ | Docker 29.4.3, Portainer на :9000, данные на HDD |
| 8 — Контейнеры | ✅ | Watchtower, Home Assistant (:8123), Jellyfin (:8096), Transmission (:9091), Rclone (cron воскр. 03:00 → mailru-crypt:kraken/docker) |
| 5 — Сеть | ✅ | DHCP static lease `192.168.1.14` (eth0 MAC `2c:cf:67:64:03:f3`); WiFi отключён (modprobe blacklist brcmfmac/brcmutil) |
| 6 — USB HDD | ✅ | 12TB Seagate ST12000NT001, EXT4, UUID `49e8f586-3839-4c5d-a1e1-58bfc3579ade`, смонтирован через OMV в `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade` |
| 7 — omv-extras + Docker | ✅ | omv-extras 7.0.6, Docker 29.4.3, kraken в группе docker |
| 8 — Контейнеры | ✅ | Все через отдельные docker compose, конфиги на HDD (см. ниже) |
| 9 — Time Machine share | 🔲 | |
| 10 — Перенос данных | 🔲 | |
| 11 — Hermes агент Кракен | 🔲 | |
@@ -115,135 +115,90 @@ Pi перезагрузится автоматически по окончани
---
## Шаг 5 — Подключить Pi к роутеру, настроить static IP, отключить WiFi
## Шаг 5 — Сеть: DHCP + static lease, отключить WiFi
1. Переключить ethernet-кабель: Pi → роутер (не Mac)
2. В роутере: DHCP reservation для MAC `2c:cf:67:64:03:f3` → выбрать постоянный IP (например `192.168.1.X`)
3. Отключить WiFi на Pi:
```bash
sudo nmcli radio wifi off
Переключить кабель Pi → роутер. Настроить DHCP через netplan (OMV управляет `/etc/netplan/20-openmediavault-eth0.yaml`):
```yaml
network:
ethernets:
eth0:
match:
macaddress: "2c:cf:67:64:03:f3"
dhcp4: yes
dhcp6: no
link-local: []
```
4. Убедиться что Pi доступен по новому IP, проверить OMV web UI
В роутере (ASUS): добавить static lease в `dhcp_staticlist` через nvram:
```bash
ssh -i ~/.ssh/id_rsa admin@192.168.1.1 \
"nvram set dhcp_staticlist='...<2C:CF:67:64:03:F3>192.168.1.14>kraken>' && nvram commit && service restart_dnsmasq"
```
Отключить WiFi навсегда (modprobe blacklist):
```bash
sudo sh -c 'echo blacklist brcmfmac > /etc/modprobe.d/disable-wifi.conf' < /dev/null
sudo sh -c 'echo blacklist brcmutil >> /etc/modprobe.d/disable-wifi.conf' < /dev/null
sudo update-initramfs -u -k all < /dev/null
```
> ⚠️ Все sudo команды через SSH требуют `< /dev/null` — иначе sudo ждёт stdin и зависает
---
## Шаг 6 — Подключить USB HDD, форматировать, смонтировать
## Шаг 6 — USB HDD
1. Подключить HDD к USB 3.0 порту Pi (синий разъём)
2. OMV Web UI → Storage → Disks → убедиться что диск виден
3. Storage → File Systems → Create → выбрать диск → EXT4 → Save → Mount
4. Storage → Shared Folders → Add:
- `media` — для фильмов/музыки
- `timemachine` — для Time Machine бэкапов
- `docker` — для данных контейнеров
1. Подключить HDD к синему (USB 3.0) порту Pi
2. Проверить скорость: `sudo apt install hdparm && sudo hdparm -t --direct /dev/sda` → должно быть ~200-250 MB/s
3. Разметить: `sudo parted -s /dev/sda mklabel gpt mkpart primary 0% 100%`
4. Форматировать (агент не может — только вручную или через скрипт):
```bash
sudo bash /tmp/fmt.sh # скрипт с mkfs.ext4 -L storage /dev/sda1
```
5. OMV Web UI → Storage → File Systems → выбрать `/dev/sda1` → Mount
6. OMV монтирует в: `/srv/dev-disk-by-uuid-<UUID>/`
> ⚠️ Не монтировать вручную через fstab — OMV должен управлять монтированием сам
---
## Шаг 7 — omv-extras + Docker + Portainer
Установить omv-extras (даёт доступ к Docker плагину):
```bash
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash
```
В OMV Web UI:
- System → Plugins → найти `openmediavault-compose` → установить
- Или через SSH: установить Docker + Portainer вручную:
## Шаг 7 — omv-extras + Docker
```bash
curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker kraken
# omv-extras
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash < /dev/null
# Portainer
sudo docker volume create portainer_data
sudo docker run -d \
--name portainer \
--restart always \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# Docker
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh && sudo sh /tmp/get-docker.sh < /dev/null
sudo usermod -aG docker kraken < /dev/null
```
Portainer UI: `http://kraken.local:9000`
---
## Шаг 8 — Docker контейнеры
Все контейнеры управляются через Portainer или `docker compose`.
Данные хранить на HDD в `/srv/<filesystem>/docker/`.
Каждый сервис — отдельный `docker-compose.yml` в `/home/kraken/<name>/`.
Все конфиги на HDD: `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/<name>/`
### Watchtower (авто-обновление контейнеров)
```yaml
watchtower:
image: containrrr/watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 4 * * * # каждую ночь в 4:00
| Сервис | Compose | URL | Данные |
|--------|---------|-----|--------|
| Portainer | `/home/kraken/portainer/` | :9000 | HDD/docker/portainer |
| Watchtower | `/home/kraken/watchtower/` | — | stateless |
| Home Assistant | `/home/kraken/homeassistant/` | :8123 | HDD/docker/homeassistant |
| Jellyfin | `/home/kraken/media/` | :8096 | HDD/docker/jellyfin, media:ro |
| Transmission | `/home/kraken/media/` | :9091 | HDD/docker/transmission, HDD/media/downloads |
| Rclone | `/home/kraken/rclone/` | — | cron воскр. 03:00 → mailru-crypt:kraken/docker |
Управление:
```bash
cd /home/kraken/<name> && sudo docker compose up -d # запустить
cd /home/kraken/<name> && sudo docker compose restart # рестарт
cd /home/kraken/<name> && sudo docker compose pull && sudo docker compose up -d # обновить
```
### Home Assistant
```yaml
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
restart: always
network_mode: host
volumes:
- /srv/.../docker/homeassistant:/config
privileged: true
```
### Zigbee2MQTT
```yaml
zigbee2mqtt:
image: koenkk/zigbee2mqtt
restart: always
volumes:
- /srv/.../docker/zigbee2mqtt:/app/data
- /run/udev:/run/udev:ro
devices:
- /dev/ttyUSB0:/dev/ttyUSB0 # Zigbee адаптер
```
### Jellyfin
```yaml
jellyfin:
image: jellyfin/jellyfin
restart: always
ports:
- 8096:8096
volumes:
- /srv/.../docker/jellyfin:/config
- /srv/.../media:/media:ro
```
### Transmission
```yaml
transmission:
image: lscr.io/linuxserver/transmission
restart: always
ports:
- 9091:9091
- 51413:51413
volumes:
- /srv/.../docker/transmission:/config
- /srv/.../media/downloads:/downloads
```
### Rclone (бэкап на облако)
```yaml
rclone:
image: rclone/rclone
restart: unless-stopped
volumes:
- /srv/.../:/data:ro
- /home/kraken/.config/rclone:/config/rclone
command: sync /data remote:backup --progress
```
> ⚠️ Watchtower: нужна переменная `DOCKER_API_VERSION=1.54` — иначе крашится (API mismatch)
> ⚠️ sudo через SSH требует `< /dev/null` для каждой команды с tee/pipe
---