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 #
docker compose to load my Docker containers. This is the docker compose snippet I added to my
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
$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
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
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
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.
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 😅