Updated compose files for an OpenMediaVault NAS running self-hosted Docker services.
The repo is organized as one compose file per stack so the OMV Compose plugin or docker compose can run each stack independently.
See CHECKLIST.md for the full step-by-step OMV install checklist, including reboot checkpoints and every container in this repo.
Real API keys and passwords must stay out of git.
- Copy
.env.exampleto.env. - Edit
.envwith real values on the OMV host. - Do not commit
.env. - Rotate any key/password that was ever committed or pasted publicly.
cp .env.example .env
nano .envStart the VPN gateway first, then stacks that use its network namespace.
docker compose --env-file .env -f gluetun.yml up -d
docker compose --env-file .env -f arr.yml up -d
docker compose --env-file .env -f qbittorrent.yml up -dServices with network_mode: "container:gluetun" publish their ports from gluetun.yml, not from their own compose file.
| File | Purpose |
|---|---|
gluetun.yml |
VPN gateway and shared port publishing |
arr.yml |
Sonarr, Radarr, Lidarr, Prowlarr, Bazarr, SABnzbd, BookBounty, Listenarr, Requestrr, Recyclarr |
qbittorrent.yml |
qBittorrent behind Gluetun, with VueTorrent mod |
jellyfin.yml |
Jellyfin, xTeVe LazyStream, Jellyseerr |
audiobookshelf.yml |
Audiobook and podcast server |
copyparty.yml |
File sharing service |
cups.yml |
CUPS print server |
ersatztv.yml |
ErsatzTV |
heimdall.yml |
Heimdall dashboard |
librespeed.yml |
LibreSpeed speedtest |
mumble.yml |
Mumble voice server |
notifiarr.yml |
Notifiarr client |
swag.yml |
SWAG reverse proxy and MariaDB |
teamspeak.yml |
TeamSpeak 6 and MariaDB |
glutun.yml and temspeak.yml are included only as compatibility copies for the old misspelled filenames. Prefer gluetun.yml and teamspeak.yml going forward.
bash scripts/validate-compose.shThis checks YAML syntax, warns about obvious secret leaks, and runs docker compose config for each compose file when Docker is available.
Run this on OMV after editing .env:
sudo bash scripts/bootstrap-omv-dirs.shIt creates the expected /Docker, /pool/Media, /pool/Storage, and /pool/tmp subdirectories and chowns container appdata to the configured UID/GID.