При 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.
2.4 KiB
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 при первом запуске.
Деплой
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 обязательно добавить:
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(только с самого сервера)