I, along with a lot of others, have used the supervised install method of running HA for a long time. It’s as close to using home assistant OS as you can get. In the past you could migrate from HA OS to a supervised install without issue. Here’s and old post of someone talking about doing it. The guest VM has be be debian bullseye so that HA doesn’t complain, but your host machine can be windows, macos, linux, whatever. If you haven’t tried a supervised install I’d give it a try.
I appreciate your feedback and some valuable tips, but unfortunately, this still didn’t answer the main subject of my question and this thread - migration. I understand the primary purpose of HA full backup, however, the world went beyond simple restore functionality long ago. Take mobile phones for example. With full backup, you can easily migrate from one device to another. Granted, when changing device manufacturer you will have to tweak a couple of things, provide credentials to your apps again, etc. but if you stick with the same brand the entire process is pretty straightforward and beginner friendly.
I would love to see your compose.yaml
Sure. But be aware that I tend to experiment with settings a lot and maybe my config is not the best one out there. I will post just a part of it as I have a lot of containers, but for some basic setup this should be enough.
docker-compose.yml file
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:latest
restart: always
ports:
- "9000:9000/tcp"
- "9443:9443/tcp"
environment:
- TZ=Europe/Zagreb
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /opt/portainer:/data
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
devices:
- /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_23_90_C7_F4-if00-port0
environment:
- TZ=Europe/Zagreb
cap_add:
- NET_ADMIN
security_opt:
- no-new-privileges
volumes:
- /opt/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- mosquitto
- influxdb
stop_grace_period: 60s
restart: always
network_mode: host
### zigbee2mqtt
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:latest
restart: unless-stopped
volumes:
- ./zigbee2mqtt/data:/app/data
- /run/udev:/run/udev:ro
ports:
- 8090:8080
environment:
- TZ=Europe/Zagreb
devices:
# Make sure this matched your adapter location
- /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_23_90_C7_F4-if00-port0:/dev/ttyACM0
# user and group settings
group_add:
- dialout
user: 1001:1001
depends_on:
- mosquitto
### esphome
esphome:
container_name: esphome
image: esphome/esphome
environment:
- ESPHOME_DASHBOARD_USE_PING=true
volumes:
- /opt/esphome/config:/config
- /etc/localtime:/etc/localtime:ro
depends_on:
- homeassistant
restart: always
privileged: true
network_mode: host
### frigate
frigate:
container_name: frigate
privileged: false
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
runtime: nvidia
shm_size: "128mb" # update for your cameras based on calculation above
devices:
- /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
- /dev/nvidia0
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/frigate/storage:/media
- /opt/go2rtc:/config:rw
- /opt/frigate/config/model_cache/tensorrt:/config/model_cache/tensorrt
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "1935:1935" # RTMP feeds
environment:
TZ: Europe/Zagreb
FRIGATE_RTSP_PASSWORD: "_your_password"
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: all
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
cap_add:
- NET_ADMIN
### glances
glances:
container_name: glances
image: nicolargo/glances:3.4.0.5
restart: always
pid: host
network_mode: host
environment:
- TZ=Europe/Zagreb
- GLANCES_OPT=-C /etc/glances.conf -w
- PUID=1001
- PGID=8123
- UMASK=007
- PACKAGES=iputils
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
- NET_ADMIN
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /run/user/1001/podman/podman.sock:/run/user/1001/podman/podman.sock
- /opt/glances/conf/glances.conf:/etc/glances.conf
- /etc/os-release:/etc/os-release:ro
healthcheck:
test: curl --fail http://192.168.8.40:61208/ || exit 1
interval: 15s
timeout: 1m
retries: 2
### samba
samba:
image: crazymax/samba
container_name: samba
network_mode: host
volumes:
- "/opt/samba/data:/data"
- "/opt/homeassistant:/opt/homeassistant/"
- "/opt:/opt/"
- "/home/daniel:/home/daniel/"
environment:
- "BROWSABLE=yes"
- "SAMBA_WORKGROUP=HASSIO"
restart: always
cap_add:
- NET_ADMIN
- NET_RAW
### mosquitto
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
environment:
- TZ=Europe/Zagreb
- PUID=1883
- PGID=1883
- UMASK=007
- PACKAGES=iputils
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
- NET_ADMIN
security_opt:
- no-new-privileges
volumes:
- /opt/mosquitto:/mosquitto
- /opt/mosquitto/config:/mosquitto/config:rw
- /opt/mosquitto/data:/mosquitto/data
- /opt/mosquitto/log:/mosquitto/log
ports:
- 1883:1883
- 9001:9001
restart: unless-stopped
### go2rtc
go2rtc:
container_name: go2rtc
image: alexxit/go2rtc:master-hardware
network_mode: host
privileged: true
environment:
- TZ=Europe/Zagreb
- PUID=65534
- PGID=65534
- UMASK=007
- PACKAGES=iputils
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
healthcheck:
test: curl --fail http://192.168.8.40:1984/ || exit 1
interval: 15s
timeout: 1m
retries: 2
volumes:
- /opt/go2rtc:/config
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]