2026-05-12 kraken: full update — containers, compose structure, real commands
This commit is contained in:
@@ -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
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user