При reverse-proxy через nginx на 127.0.0.1:8123 source IP внутри контейнера — это gateway docker-сети (172.x.0.1), а не 127.0.0.1. Без 172.16.0.0/12 в trusted_proxies HA возвращает 400.
57 lines
2.4 KiB
Markdown
57 lines
2.4 KiB
Markdown
# CLAUDE.md — home-assistant
|
||
|
||
## Что
|
||
Home Assistant Container на str-u-01 (45.10.53.148). UI публикуется через nginx на `ha.striker.su`.
|
||
|
||
## Стек
|
||
- `homeassistant/home-assistant:stable` (Docker Hub, обычный Container — не Supervised, без addons)
|
||
- bridge network, `127.0.0.1:8123:8123` (только loopback на сервере)
|
||
- volume bind-mount: `./config:/config` (НЕ в git)
|
||
- log-driver: journald (см. memory `reference_fail2ban_gitea.md` про journald на str-u-01)
|
||
- `restart: unless-stopped`, healthcheck на `/manifest.json`
|
||
|
||
## Структура
|
||
```
|
||
home-assistant/
|
||
├── docker-compose.yml # сервис ha
|
||
├── .gitignore # исключает config/
|
||
├── README.md
|
||
└── CLAUDE.md
|
||
```
|
||
|
||
На сервере: `/opt/docker/sites/home-assistant/`. Папка `config/` создаётся автоматически HA при первом запуске.
|
||
|
||
## Деплой
|
||
```bash
|
||
ssh striker@str-u-01.striker.su
|
||
cd /opt/docker/sites/home-assistant
|
||
git pull
|
||
docker compose pull && docker compose up -d
|
||
```
|
||
|
||
## nginx
|
||
vhost: `/etc/nginx/conf.d/ha.striker.su` на str-u-01 (ssl + reverse-proxy на 127.0.0.1:8123).
|
||
Обязательно `proxy_set_header Upgrade` / `Connection upgrade` для WebSocket — UI ломается без них.
|
||
|
||
## LE-сертификат
|
||
DNS-01 через Technitium API (см. memory `feedback_acme_technitium_dns01.md`).
|
||
Файлы: `/etc/letsencrypt/live/ha.striker.su/fullchain.pem` + `privkey.pem`.
|
||
|
||
## HA конфиг
|
||
После первого запуска в `config/configuration.yaml` обязательно добавить:
|
||
```yaml
|
||
http:
|
||
use_x_forwarded_for: true
|
||
trusted_proxies:
|
||
- 127.0.0.1
|
||
- ::1
|
||
- 172.16.0.0/12 # docker bridge — nginx изнутри контейнера виден как 172.x.0.1
|
||
```
|
||
⚠️ `127.0.0.1` **недостаточно**: nginx идёт на `127.0.0.1:8123` хоста, Docker NAT'ит трафик, и внутри контейнера source IP — это IP gateway docker-сети (`172.20.0.1` или подобный). Без `172.16.0.0/12` HA отвергает запросы как "untrusted proxy" → 400.
|
||
|
||
После правок: `docker restart home-assistant`.
|
||
|
||
## Доступы
|
||
- UI: https://ha.striker.su (онбординг при первом входе — создаёт admin)
|
||
- Локально: `curl http://127.0.0.1:8123` (только с самого сервера)
|