- Stef Smeets - Research Software Engineer/
- Posts/
- Notes on moving Home Assistant from Raspberry Pi to Docker/
Notes on moving Home Assistant from Raspberry Pi to Docker
Table of Contents
I started out running Home Assistant about 3 years ago, playing around with a few light bulbs. Installing it on an SD card was (and still is) the recommended way to go. However, SD cards can’t handle small I/O very well, and tend to crash after a while. This has happened to me twice. Usually not a big deal if you keep your back-ups, but increasingly worrysome as the number of devices and thus my dependence on Home Assistant grows. This is always in the back of my mind.
Recently I installed a home server to serve as a NAS, media server, DNS, etc using Docker containers. And I figured I would also move my Home Assistant installation to it. This blog post contains some notes on the migration.
Restoring from back-up #
I did a full backup of Home Assistant on my old installation and copied it over.
Unfortunately, the Docker install of Home Assistant does not support restoring from a back-up.
So in the end, I extracted the backup. I extracted homeassistant.tar.gz
. Inside is a directory data
, which I renamed to config
and moved to $DOCKERDIR/homeassistant/
(see below). Anything else in the archive is not used. It seems that I simply could have copied over the config
directory directly from my old install.
Docker compose #
I use docker compose
to load my Docker containers. This is the docker compose snippet I added to my docker-compose.yml
:
|
|
The snippet is slightly modified from the Home Assistant documentation. I did not want to use network_mode: host
, so I had to forward the 8123
port.
$DOCKERDIR
is an environment variable defined in a .env
file in the same directory. It points to a path where my Docker config files are stored.
Uninstall system integrations #
There are some integrations that are included for interfacing with the Home Assistant Operating System. With a Docker install these are no longer needed. Starting the container would greet me with a couple of errors of the likes: The following integrations could not be set up...
for hassio
and raspberrypi
.
The Raspberry Pi integration could be removed from the integrations page.
Then I removed the hassio
integration by hand (it cannot be removed via the GUI), by opening config/.storage/core.config_entries
.
Look for the entry that looks below this and remove it
|
|
USB permissions in Docker rootless #
I run Docker in rootless mode. This gave some issues with accessing my Zigbee stick and other usb devices in Home Assistant. As a work-around, I had to update the permissions.
Get the IDs of the USB devices using: ls -l /dev/serial/by-id
Set the permissions:
|
|
This has to be done on every reboot. This link provides a method to set the permissions automatically.
HA sidebar shortcuts #
You can add shortcuts to he Home Assistant side bar to link to other services on the server, for example Jellyfin.
To do so, add this snippet to your configuration.yaml
:
|
|
Migrating InfluxDB #
I run InfluxDB on Home Assistant for long term data storage. The database also had to be moved. Make sure that you use InfluxDB version 1.8. To migrate the database I did the following.
On Home Assistant on the Raspberry Pi, I opend an SSH shell and entered the influxdb container:
docker exec -it addon_a0d7b954_influxdb /bin/bash
Then I backed up the database:
influxd backup -portable -database homeassistant /data/homeassistant.db
From the home assistant backup, I extracted a0d7b954_influxdb.tar.gz
and moved homeassistant.db
to my new server.
I entered my influxdb container:
docker exec -it influxdb /bin/bash
And imported restored the database:
influxd restore -portable /data/homeassistant.db
Afterwards I had to update the host/port to point to the new database location.
|
|
Conclusion #
I cannot say it was a painless exercise, but fairly happy with the result and learned a lot in the process. My new installation runs noticably faster, and I sleep better at night not having to worry about SD crashes 😅