Initial Home Assistant Container deployment

- docker-compose.yml: homeassistant/home-assistant:stable, bridge, 127.0.0.1:8123, journald
- config/ исключён из git (.gitignore)
- README + CLAUDE с описанием стека, деплоя, nginx-нюансов
This commit is contained in:
striker
2026-05-08 04:36:06 +03:00
commit 19e0d4b1b1
4 changed files with 114 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
config/
!config/.gitkeep
*.log
*.db
*.db-shm
*.db-wal
.HA_VERSION

52
CLAUDE.md Normal file
View File

@@ -0,0 +1,52 @@
# 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
```
Иначе HA отвергнет соединения от nginx как "untrusted proxy".
## Доступы
- UI: https://ha.striker.su (онбординг при первом входе — создаёт admin)
- Локально: `curl http://127.0.0.1:8123` (только с самого сервера)

33
README.md Normal file
View File

@@ -0,0 +1,33 @@
# Home Assistant — str-u-01
Home Assistant Container на str-u-01.striker.su.
## Стек
- **Image**: `homeassistant/home-assistant:stable`
- **Network**: bridge, биндинг `127.0.0.1:8123` (только loopback)
- **Публичный доступ**: nginx reverse-proxy на `ha.striker.su` с LE-сертификатом
- **Логи**: journald (`docker logs` + journalctl)
- **Volume**: `./config:/config` (bind-mount, локально на сервере, в git не попадает)
## Деплой
```bash
ssh striker@str-u-01.striker.su
cd /opt/docker/sites/home-assistant
git pull
docker compose pull
docker compose up -d
```
## Обновление
HA в режиме Container обновляется ручным `docker compose pull && docker compose up -d`. Авто-обновлений нет специально (контроль над брейкинг-чейнджами).
## Доступ
- UI: https://ha.striker.su
- Локально на сервере: http://127.0.0.1:8123
- Первый запуск: онбординг (создание учётки админа) при первом заходе на UI
## Заметки
- **trusted_proxies** в `config/configuration.yaml` должен включать `127.0.0.1` (для корректного `X-Forwarded-For` от nginx). Прописывается после первого запуска через `http:` секцию.
- Папка `config/` исключена из git (`.gitignore`) — содержит секреты (токены, пароли, БД состояния).

22
docker-compose.yml Normal file
View File

@@ -0,0 +1,22 @@
services:
homeassistant:
image: homeassistant/home-assistant:stable
container_name: home-assistant
restart: unless-stopped
ports:
- "127.0.0.1:8123:8123"
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Europe/Moscow
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8123/manifest.json"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
logging:
driver: journald
options:
tag: "{{.Name}}"