Last active
February 27, 2026 19:03
-
-
Save sombreroEnPuntas/6963ab1f0f635b0bb0484286ca5270ea to your computer and use it in GitHub Desktop.
Servarr stack for a Synology NAS, using VPN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # create a file named .env replacing this with your own vars | |
| # NOTE: Install Container Manager from Synology Package Center, otherwise the system won't give user access to docker | |
| # Container Manager App will create the shared folder /volume1/docker/ | |
| # --- Synology Host Paths --- | |
| CONFIG_BASE_PATH=/volume1/docker/servarr # Create this folder and upload .env and docker-compose.yaml | |
| DOWNLOADS_PATH=${CONFIG_BASE_PATH}/downloads/qbittorrent | |
| # You MUST create this Shared Folder in Synology DSM Control Panel >> Shared Folder | |
| # Then give read/write access to your user and user group | |
| MOVIES_PATH=/volume1/Movies | |
| TV_PATH=/volume1/TV | |
| # --- Common Container Configuration --- | |
| DEFAULT_PUID=1026 | |
| DEFAULT_PGID=100 | |
| DEFAULT_TZ=Europe/Amsterdam | |
| DEFAULT_UMASK=002 | |
| # --- VPN Credentials --- | |
| OPENVPN_USER=your_vpn_username | |
| OPENVPN_PASSWORD=your_vpn_password |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| version: "3.8" | |
| services: | |
| # VPN manager: creates VPN network from NordVPN | |
| # used for torrents and servarr apps | |
| gluetun: | |
| image: qmcgaw/gluetun | |
| container_name: gluetun | |
| cap_add: | |
| - NET_ADMIN | |
| ports: | |
| - 9091:9091 # transmission Web UI | |
| - 9000:9000 # optional | |
| - 8989:8989 # Sonarr Web UI | |
| - 7878:7878 # Radarr Web UI | |
| - 9696:9696 # Prowlarr Web UI | |
| - 6767:6767 # Bazarr Web UI | |
| environment: | |
| - VPN_SERVICE_PROVIDER=nordvpn | |
| - OPENVPN_USER=${OPENVPN_USER} | |
| - OPENVPN_PASSWORD=${OPENVPN_PASSWORD} | |
| - SERVER_COUNTRIES=Netherlands | |
| - TZ=${DEFAULT_TZ} | |
| - DNS_ADDRESS=1.1.1.1 | |
| - DNS_KEEP_NAMESERVER=on | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/gluetun:/gluetun | |
| restart: unless-stopped | |
| # Torrent client (Transmission) | |
| transmission: | |
| image: lscr.io/linuxserver/transmission:latest | |
| container_name: transmission | |
| depends_on: | |
| - gluetun | |
| network_mode: "service:gluetun" | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - TZ=${DEFAULT_TZ} | |
| - UMASK=${DEFAULT_UMASK} | |
| - WEBUI_PORT=9091 # Default Transmission Web UI port | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/transmission:/config | |
| - ${DOWNLOADS_PATH}:/downloads | |
| restart: unless-stopped | |
| # Servarr stack apps | |
| prowlarr: | |
| image: lscr.io/linuxserver/prowlarr:latest | |
| container_name: prowlarr | |
| depends_on: | |
| - gluetun | |
| network_mode: "service:gluetun" | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - UMASK=${DEFAULT_UMASK} | |
| - TZ=${DEFAULT_TZ} | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/prowlarr:/config | |
| restart: unless-stopped | |
| sonarr: | |
| image: lscr.io/linuxserver/sonarr | |
| container_name: sonarr | |
| depends_on: | |
| - gluetun | |
| network_mode: "service:gluetun" | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - UMASK=${DEFAULT_UMASK} | |
| - TZ=${DEFAULT_TZ} | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/sonarr:/config | |
| - ${TV_PATH}:/tv | |
| - ${DOWNLOADS_PATH}:/downloads | |
| restart: unless-stopped | |
| radarr: | |
| image: lscr.io/linuxserver/radarr | |
| container_name: radarr | |
| depends_on: | |
| - gluetun | |
| network_mode: "service:gluetun" | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - UMASK=${DEFAULT_UMASK} | |
| - TZ=${DEFAULT_TZ} | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/radarr:/config | |
| - ${MOVIES_PATH}:/movies | |
| - ${DOWNLOADS_PATH}:/downloads | |
| restart: unless-stopped | |
| bazarr: | |
| image: lscr.io/linuxserver/bazarr:latest | |
| container_name: bazarr | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - UMASK=${DEFAULT_UMASK} | |
| - TZ=${DEFAULT_TZ} | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/bazarr:/config | |
| - ${TV_PATH}:/tv | |
| - ${MOVIES_PATH}:/movies | |
| restart: unless-stopped | |
| network_mode: "service:gluetun" | |
| depends_on: | |
| - gluetun | |
| - sonarr | |
| - radarr | |
| # Media streaming | |
| jellyfin: | |
| image: lscr.io/linuxserver/jellyfin:latest | |
| container_name: jellyfin | |
| environment: | |
| - PUID=${DEFAULT_PUID} | |
| - PGID=${DEFAULT_PGID} | |
| - TZ=${DEFAULT_TZ} | |
| - UMASK=${DEFAULT_UMASK} | |
| volumes: | |
| - ${CONFIG_BASE_PATH}/jellyfin:/config | |
| - ${MOVIES_PATH}:/data/movies | |
| - ${TV_PATH}:/data/tvshows | |
| # Add other media types if you have them, e.g.: | |
| # - /volume1/Music:/data/music | |
| # - /volume1/Photos:/data/photos | |
| network_mode: host | |
| restart: unless-stopped | |
| # Auto update docker images | |
| watchtower: | |
| image: containrrr/watchtower | |
| container_name: watchtower | |
| volumes: | |
| - /var/run/docker.sock:/var/run/docker.sock # Essential: Allows Watchtower to control Docker | |
| environment: | |
| - TZ=${DEFAULT_TZ} | |
| # Schedule updates (e.g., every day at 3:00 AM) | |
| # Uses cron syntax. Here: 0 minutes, 3 hours, * day of month, * month, * day of week | |
| - WATCHTOWER_SCHEDULE=0 0 3 * * * | |
| # What to do after updating: | |
| - WATCHTOWER_CLEANUP=true # Remove old images after updating (recommended) | |
| restart: unless-stopped |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment