This Docker Compose stack uses the following web services:
- HomeAssistant - home automation
- Immich - photo archive
- Jellyfin - private media streaming
- Lidarr - music management
- ProjectSend - private file sharing
- Radarr - movie management
- RuTorrent - torrent handling (backed by a gluetun VPN client)
- Seer - Movie and TV show request handling
- Sickchill - TV shows management
- Sonarr - TV shows management
- Syncthing - private backups
- Vaultwarden - password management
as well as the following support services:
- Autoheal - container monitoring
- Caddy - web proxy and SSL certificate handler
- Cloudflared - secure tunnel to Cloudflare
- Collectd Graph Panel - collectd statistics viewer
- DDclient - dynamic DNS updates
- KODI - headless KODI server
- LibreSpeed - private speed testing
- MariaDB - SQL server
- Mosquitto - MQTT server
- Postfix - mail server
- Prowlarr - index manager for "arr" apps
- Smokeping - internet latency statistics
- Sungather - solar panel inverter metrics
- Zigbee2MQTT - Zigbee to MQTT bridge
To use the stack, make sure to create a .env file, and populate it with the required variables:
cp .env_example .env
vim .env
docker compose up -d# Media services only
docker compose --profile media up -d
# Home automation stack
docker compose --profile home-automation up -d
# Networking services
docker compose --profile networking up -d
# Multiple profiles
docker compose --profile media --profile monitoring up -dhome-automation- IoT and smart home servicesimmich- Photo management with AI featuresmedia- Media management and streamingmonitoring- Health and performance monitoringnetworking- VPN, proxy, SSL servicesutilities- Database and utility services
To update all containers' packages to their latest versions, run the script below. Please note that ALL containers running on the server will have their packages upgraded!
./patch_containers
To run it periodically, run the following to add it to your crontab:
crontab -l | { cat; echo -e "# Container patcher\n0 5 * * * $pwd/patch_containers"; } | crontab -
Check if your network devices need a certificate update by running:
./update_certs -v
To run it periodically, run the following to add it to your crontab:
crontab -l | { cat; echo -e "# Certificate checker\n0 6 * * * $pwd/update_certs"; } | crontab -
To use nvenc transcoding in Jellyfin, on an Ubuntu host run the following:
Set up the libnvidia-container repository:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Install the Nvidia container toolkit and configure it:
apt update
apt install nvidia-container-toolkit
nvidia-ctk runtime configure
systemctl restart docker
If not available or not required, remove the 'runtime' and the 'NVIDIA_VISIBLE_DEVICES' environment variable from the 'jellyfin' container