refactor(hosts): split chelsty monolith into chelsty-ha and chelsty-infra

- remove legacy hosts/chelsty/ monolith
- chelsty-infra: add capabilities, networking, paths, runtime (mosquitto, zigbee2mqtt, stability-agent)
- chelsty-ha: add capabilities
- align with site/node model

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
oskar 2026-05-20 14:20:49 +02:00
parent 8a12b7ff17
commit 9d2f748557
14 changed files with 85 additions and 151 deletions

View file

@ -0,0 +1,24 @@
host: chelsty-ha
site: chelsty
capabilities:
networking:
reachability: tailscale-only
tailscale_ip: 100.122.201.23
ingress_suitability: false
bandwidth: LTE
runtime:
container_engine: docker
os: debian
operational:
connectivity: intermittent
availability_target: best-effort
offline_first: true
uplink: lte
deployment:
suitability:
- homeassistant
restricted: false

View file

@ -0,0 +1,20 @@
hostname: chelsty-ha
site: chelsty
roles:
- homeassistant
network:
tailscale_ip: 100.122.201.23
runtime:
root: /opt/homelab
deployment:
mode: pull
managed_by: saturn
constraints:
connectivity:
intermittent: true
uplink: lte

View file

@ -0,0 +1,6 @@
host: chelsty-ha
site: chelsty
services:
homeassistant:
role: home-automation-controller

View file

@ -1,3 +1,6 @@
host: chelsty-infra
site: chelsty
capabilities:
hardware:
cpu:
@ -31,10 +34,11 @@ capabilities:
power_constraint: low-power
connectivity: intermittent
availability_target: best-effort
offline_operation_required: true
deployment:
suitability:
- staging
- homeassistant
- infra
- edge
restricted: false

View file

@ -1,9 +1,10 @@
hostname: chelsty
hostname: chelsty-infra
site: chelsty
roles:
- edge
- hypervisor
- homeassistant
- infra
- staging
network:

View file

@ -1,4 +1,4 @@
host: chelsty
host: chelsty-infra
uplink:
type: lte
@ -20,7 +20,7 @@ exposure_classes:
networks:
home_automation_lan:
purpose: Home Assistant, MQTT, Zigbee coordinator, and local device control.
purpose: MQTT broker, Zigbee coordinator, and local device control.
offline_required: true
internet_required_for_core_operation: false

View file

@ -1,4 +1,4 @@
host: chelsty
host: chelsty-infra
runtime_root: /opt/homelab
@ -9,12 +9,6 @@ conventions:
logs: /opt/homelab/logs
services:
homeassistant:
data: /opt/homelab/data/homeassistant
config: /opt/homelab/config/homeassistant
logs: /opt/homelab/logs/homeassistant
backup_priority: critical
zigbee2mqtt:
data: /opt/homelab/data/zigbee2mqtt
config: /opt/homelab/config/zigbee2mqtt
@ -27,13 +21,13 @@ services:
logs: /opt/homelab/logs/mosquitto
backup_priority: high
backup_sets:
homeassistant:
include:
- /opt/homelab/config/homeassistant
- /opt/homelab/data/homeassistant
restore_note: Restore before starting the Home Assistant container.
stability-agent:
data: /opt/homelab/state
config: /opt/homelab/config/stability-agent
logs: /opt/homelab/events
backup_priority: low
backup_sets:
zigbee2mqtt:
include:
- /opt/homelab/config/zigbee2mqtt

View file

@ -1,7 +1,8 @@
services:
stability-agent:
environment:
- NODE_NAME=chelsty
- NODE_NAME=chelsty-infra
- SITE_NAME=chelsty
- REDIS_HOST=100.108.208.3
- REDIS_PORT=6379
- REDIS_ENABLED=true

View file

@ -0,0 +1,10 @@
host: chelsty-infra
site: chelsty
services:
mosquitto:
role: local-mqtt-broker
zigbee2mqtt:
role: zigbee-mqtt-bridge
stability-agent:
role: node-stability-monitor

View file

@ -1,126 +0,0 @@
host: chelsty
exposure_classes:
local-only:
description: Reachable only from CHELSTY-local networks or container networks.
public_ingress: false
tailscale_required: false
tailscale-internal:
description: Reachable through the Tailscale mesh by approved tailnet clients.
public_ingress: false
tailscale_required: true
public:
description: Reachable from the public internet through an explicit ingress path.
public_ingress: true
tailscale_required: false
operational_constraints:
uplink: lte
connectivity: intermittent
offline_operation_required: true
must_not_depend_on:
- saturn
- vps
- forgejo
services:
homeassistant:
role: home-automation-controller
deployment_model: docker-compose
exposure: tailscale-internal
offline_required: true
depends_on:
local:
- mosquitto
- zigbee2mqtt
external: []
ports:
- name: http
container_port: 8123
protocol: tcp
runtime:
config_path: /opt/homelab/config/homeassistant
data_path: /opt/homelab/data/homeassistant
logs_path: /opt/homelab/logs/homeassistant
backup:
recommended: true
include:
- /opt/homelab/config/homeassistant
- /opt/homelab/data/homeassistant
notes:
- Back up before Home Assistant core, supervisor-equivalent, or integration upgrades.
- Keep local restore copies on CHELSTY because LTE connectivity may be unavailable during recovery.
zigbee2mqtt:
role: zigbee-mqtt-bridge
deployment_model: docker-compose
exposure: local-only
offline_required: true
depends_on:
local:
- mosquitto
external:
- slzb-06u
coordinator:
name: slzb-06u
connection: network
usb_device: null
ports:
- name: frontend
container_port: 8080
protocol: tcp
exposure: tailscale-internal
runtime:
config_path: /opt/homelab/config/zigbee2mqtt
data_path: /opt/homelab/data/zigbee2mqtt
logs_path: /opt/homelab/logs/zigbee2mqtt
backup:
recommended: true
include:
- /opt/homelab/config/zigbee2mqtt
- /opt/homelab/data/zigbee2mqtt
notes:
- Include configuration.yaml, database.db, coordinator backup files, and network key material.
- Restore Zigbee2MQTT state together with the SLZB-06U coordinator state when replacing hardware.
mosquitto:
role: local-mqtt-broker
deployment_model: docker-compose
exposure: local-only
offline_required: true
depends_on:
local: []
external: []
ports:
- name: mqtt
container_port: 1883
protocol: tcp
runtime:
config_path: /opt/homelab/config/mosquitto
data_path: /opt/homelab/data/mosquitto
logs_path: /opt/homelab/logs/mosquitto
backup:
recommended: true
include:
- /opt/homelab/config/mosquitto
- /opt/homelab/data/mosquitto
notes:
- Retain ACL, password, persistence, and bridge configuration if enabled.
stability-agent:
role: node-stability-monitor
deployment_model: docker-compose
exposure: local-only
offline_required: true
depends_on:
local:
- mosquitto
external: []
runtime:
config_path: /opt/homelab/config/stability-agent
data_path: /opt/homelab/state
logs_path: /opt/homelab/events
backup:
recommended: false
notes:
- Events and state are transient or can be reconstructed; high-frequency writes.