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.yamlttyUSB0 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.envAnd set the environment variables as needed.
- Once the container is running, open
http://host:8200in 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.envAnd 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/Luligu/matterbridge
Why: Similar to Homebridge but with Matter integration. My initial use case is to expose my own Xiaomi Roborock Robot Vacuum as an actual Robot Vacuum to HomeKit.
Installation: Once running, open the UI at http://your-host:8283/ and install the packages that you consider useful for your use case.
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.envAnd 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.envAnd 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.
URL: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
Why: Using Cloudflare Tunnel to have a secure remote connection to my server.
Installation: Copy the cloudflare-tunnel.base.env to ./data/cloudflare-tunnel/cloudflare-tunnel.env
cp ./data/cloudflare-tunnel/cloudflare-tunnel.base.env ./data/cloudflare-tunnel/cloudflare-tunnel.envAnd set the environment variable TUNNEL_TOKEN with the one provided by Cloudflare.
Note
HomeAssistant by default rejects requests from reverse proxies. To enable it, we need to add the following configuration to configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- ::1
ip_ban_enabled: true
login_attempts_threshold: 3I'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 -dor
docker-compose --profile no-network up -d