This repo is essentially listing all the services I want to run in my smart-home server in a docker-compose format.
Listing all the services included so far in the docker-compose, a small note of why/what I'm going to use it for, and some installation notes in case any further step is needed.
URL: https://www.zigbee2mqtt.io/
Why: So far I've been a HomeKit hard user, and I'm looking forward to Matter and Thread will keep making life easier and cheaper for me.
However, there is a moment in the HomeKit user where you wonder what if there was a communication layer that is more or less standard, so I can rely on different brands and vendors without buying hubs for each one of them?.
It looks like Z2M is the answer for Zigbee-based devices.
Installation: Copy the configuration.base.yaml to data/zigbee2mqtt/configuration.yaml
cp data/zigbee2mqtt/configuration.base.yaml data/zigbee2mqtt/configuration.yaml
ttyUSB0
still matches the name associated with your Zigbee dongle (sudo dmesg
can help with figuring it out). This check needs to happen in configuration.yaml
and docker-compose.yml
.
Why: Simply because I need an MQTT server for Zigbee2MQTT and it's the suggested one by Zigbee2MQTT docs.
URL: https://www.home-assistant.io/
Why: Home Assistant is the most powerful platform for managing your smart home. Such power comes at the cost of a steep learning curve, but it's worth it, and you can go at your own pace. It's very addicting, and it'll organically grow on you. Trying this service out was the best thing I could have done for my smart home.
URL: https://github.com/home-assistant-libs/python-matter-server
Why: Needed by Home Assistant to support Matter devices (docs).
URL: https://www.duplicati.com
Why: We all need a backup! All the services in this project generate a lot of files worth creating backups of: secrets, pairing tokens, autogenerated configurations (from UI actions), and DBs. The idea is to back up the entire /data
directory.
Installation:
- Copy the duplicati.base.env to
./data/duplicati/duplicati.env
cp ./data/duplicati/duplicati.base.env ./data/duplicati/duplicati.env
And set the environment variables as needed.
- Once the container is running, open
http://host:8200
in your browser to set up (or restore) the backups. If restoring a previous backup, make sure the affected service is stopped before restoring the files.
DISCLAIMER: Duplicati dropped support for the architecture linux/arm/v7
because managing the underlying libraries and dependencies in this architecture was too complex. If running on a Raspberry Pi, make sure it's running a 64-bit OS.
Why: As a HomeKit user, there are devices that would make a great addition to my automations, but they are not officially supported by this platform. I've been using this project for a long while, and I've already found out Home Assistant cannot fully replace it.
Installation: Copy the homebridge.base.env to ./data/homebridge/homebridge.env
cp ./data/homebridge/homebridge.base.env ./data/homebridge/homebridge.env
And set the environment variables as needed.
DISCLAIMER: I'm using a private Docker image for the time being. So other folks might not be able to run it. I'll try to anonymize the other project, so I can make it public, and so the Docker image.
URL: https://github.com/AdguardTeam/AdGuardHome
Why: Free local DNS-based ad-blocker that I can set at the router level. Do I need to explain why?
Installation: Once running, set the router to the IP of the host running this service.
For remote access, I need to use 2 additional services: a Dynamic DNS and a VPN.
Why: We need a service that allows us to have a domain that points to our public IP. Typically, the public IP in our router is not static and rotates from time to time. This service would make sure we can point to a static DNS that translates to the current public IP.
Installation: Copy the duckdns.base.env to ./data/duckdns/duckdns.env
cp ./data/duckdns/duckdns.base.env ./data/duckdns/duckdns.env
And set the environment variables as needed. Documentation on the settings of this service can be found in the official README: https://hub.docker.com/r/linuxserver/duckdns
Typically, it's just defining the subdomain that was created in the website, and the token retrieved from the website.
URL: https://www.wireguard.com
Why: I may need remote access to the system from time to time in case something doesn't work as expected. I've read that WireGuard is better than OpenVPN, and much simpler to use, so I looked no more.
Installation: Copy the wireguard.base.env to ./data/wireguard/wireguard.env
cp ./data/wireguard/wireguard.base.env ./data/wireguard/wireguard.env
And set the environment variables as needed. Documentation on the settings of this service can be found in the official README: https://github.com/linuxserver/docker-wireguard
Typically, it's just about updating the SERVERURL
to match the domain obtained from DuckDNS.
I'm using a hotspot service so my RPi can expose a Wi-Fi AP that I can connect to when I need to take it to a place with no internet.
I'm leveraging the profiles
feature of docker-compose to avoid running this image all the time. To enable it, I need to run either:
docker-compose up hotspot -d
or
docker-compose --profile no-network up -d