services: sonarr: container_name: sonarr image: lscr.io/linuxserver/sonarr:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/sonarr:/config" - "{{ arrstack_serve_dir }}/media/tv:/data/media/tv" - "{{ arrstack_serve_dir }}/files/usenet:/data/usenet" - "{{ arrstack_serve_dir }}/files/torrent:/data/torrent" restart: unless-stopped labels: caddy: "{{ arrstack_sonarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8989{{ '}}'}}" radarr: container_name: radarr image: lscr.io/linuxserver/radarr:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/radarr:/config" - "/mnt/ext/data/media/movies:/data/media/movies" # FIXME: Find solution - "{{ arrstack_serve_dir }}/files/usenet:/data/usenet" - "{{ arrstack_serve_dir }}/files/torrent:/data/torrent" restart: unless-stopped labels: caddy: "{{ arrstack_radarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 7878{{ '}}'}}" lidarr: container_name: lidarr image: lscr.io/linuxserver/lidarr:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} - MB_USER={{ arrstack_mb_user }} - MB_PASS={{ arrstack_mb_pass }} environment: - DOCKER_MODS=linuxserver/mods:universal-docker volumes: - "{{ arrstack_env_dir }}/config/lidarr:/config" - "/var/run/docker.sock:/var/run/docker.sock:ro" - "{{ arrstack_serve_dir }}/media/music:/data/media/music" - "{{ arrstack_serve_dir }}/files/usenet:/data/usenet" - "{{ arrstack_serve_dir }}/files/torrent:/data/torrent" restart: unless-stopped labels: caddy: "{{ arrstack_lidarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8686{{ '}}'}}" readarr: container_name: readarr image: lscr.io/linuxserver/readarr:develop networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/readarr:/config" - "{{ arrstack_serve_dir }}/media/audiobooks:/data/media/audiobooks" - "{{ arrstack_serve_dir }}/files/usenet:/data/usenet" - "{{ arrstack_serve_dir }}/files/torrent:/data/torrent" restart: unless-stopped labels: caddy: "{{ arrstack_readarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8787{{ '}}'}}" prowlarr: container_name: prowlarr image: lscr.io/linuxserver/prowlarr:develop networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/prowlarr:/config" restart: unless-stopped labels: caddy: "{{ arrstack_prowlarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 9696{{ '}}'}}" beets: image: lscr.io/linuxserver/beets:latest container_name: beets networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} - MB_USER={{ arrstack_mb_user }} - MB_PASS={{ arrstack_mb_pass }} volumes: - "{{ arrstack_env_dir }}/config/beets:/config" - "{{ arrstack_serve_dir }}/media/music:/music" - "{{ arrstack_serve_dir }}/files/music-unsorted:/downloads" restart: unless-stopped labels: caddy: "{{ arrstack_beets_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8337{{ '}}'}}" sabnzbd: container_name: sabnzbd image: lscr.io/linuxserver/sabnzbd:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/sabnzbd:/config" - "{{ arrstack_serve_dir }}/files/usenet:/data/usenet:rw" restart: unless-stopped labels: caddy: "{{ arrstack_sabnzbd_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8080{{ '}}'}}" vpn: container_name: vpn image: qmcgaw/gluetun:v3 networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} - VPN_PORT_FORWARDING_STATUS_FILE=/gluetun/forwarded_port - FIREWALL_OUTBOUND_SUBNETS=172.18.0.0/24 - BLOCK_SURVEILLANCE=on - VPN_SERVICE_PROVIDER={{ arrstack_vpn_provider }} - OPENVPN_USER={{ arrstack_vpn_user }} - OPENVPN_PASSWORD={{ arrstack_vpn_pass }} - SERVER_REGIONS={{ arrstack_vpn_regions }} - PORT_FORWARD_ONLY=true - VPN_PORT_FORWARDING=on - VPN_PORT_FORWARDING_PROVIDER={{ arrstack_vpn_provider }} - VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- --retry-connrefused --post-data "json={\"listen_port\":{{ '{{' }}PORTS{{ '}}' }} }" http://127.0.0.1:8888/api/v2/app/setPreferences 2>&1' - QBITTORRENT_USER={{ arrstack_qbit_user }} - QBITTORRENT_PASS={{ arrstack_qbit_pass }} cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun volumes: - "{{ arrstack_env_dir }}/config/gluetun:/gluetun" restart: unless-stopped labels: caddy: "{{ arrstack_qbit_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8888{{ '}}'}}" qbittorrent: image: linuxserver/qbittorrent container_name: qbittorrent environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} - WEBUI_PORT=8888 volumes: - "{{ arrstack_env_dir }}/config/piaqbit:/config" - "{{ arrstack_env_dir }}/config/gluetun:/gluetun" - "{{ arrstack_serve_dir }}/files/torrent:/downloads" depends_on: - vpn network_mode: "service:vpn" restart: unless-stopped homarr: image: ghcr.io/ajnart/homarr:latest container_name: homarr networks: - caddy volumes: - {{ arrstack_env_dir }}/config/homarr/configs:/app/data/configs - {{ arrstack_env_dir }}/config/homarr/icons:/app/public/icons - {{ arrstack_env_dir }}/config/homarr/data:/data - /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration restart: unless-stopped labels: caddy: "{{ arrstack_homarr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 7575{{ '}}'}}" jellyseerr: image: fallenbagel/jellyseerr:latest container_name: jellyseerr networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/jellyseerr:/app/config" restart: unless-stopped labels: caddy: "{{ arrstack_jellyseerr_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 5055{{ '}}'}}" audiobookshelf: container_name: audiobookshelf image: ghcr.io/advplyr/audiobookshelf:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/config/audiobookshelf:/config" - "{{ arrstack_env_dir }}/data/audiobookshelf:/metadata" - "{{ arrstack_serve_dir }}/media/audiobooks:/audiobooks" # - "{{ arrstack_serve_dir }}/media/podcasts:/podcasts" # TODO: If integrating podcasts restart: unless-stopped labels: caddy: "{{ arrstack_audiobookshelf_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 80{{ '}}'}}" jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} devices: - /dev/dri:/dev/dri #environment: #- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional volumes: - "{{ arrstack_env_dir }}/config/jellyfin:/config" - "{{ arrstack_env_dir }}/data/jellyfin:/config/data" - "/mnt/ext/data/media/movies:/media/movies" # FIXME: To be changed? - "{{ arrstack_serve_dir }}/media/tv:/media/tv" - "{{ arrstack_serve_dir }}/media/music:/media/music" ports: # FIXME: how to enable discovery behind proxies? - 7359:7359/udp #optional - network discovery - 1900:1900/udp #optional - dlna discovery restart: unless-stopped labels: caddy: "{{ arrstack_jellyfin_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 8096{{ '}}'}}" gonic: image: sentriz/gonic:latest networks: - caddy environment: - PUID={{ arrstack_puid }} - PGID={{ arrstack_pgid }} - TZ={{ arrstack_tz }} - UMASK_SET={{ arrstack_umask_set }} volumes: - "{{ arrstack_env_dir }}/data/gonic:/data" - "{{ arrstack_env_dir }}/data/gonic_playlists:/playlists" - "/srv/media/music:/music:ro" - "/srv/media/podcasts:/podcasts" #- /path/to/cache:/cache # transcode / covers / etc cache dir labels: caddy: "{{ arrstack_gonic_subdomain }}" caddy.reverse_proxy: "{{ '{{' }}upstreams 80{{ '}}'}}" {% if restic_enable is not undefined and not false and arrstack_restic_enable is not undefined and not false %} backup: image: mazzolino/restic hostname: "{{ ansible_hostname }}" environment: TZ: "{{ restic_tz }}" BACKUP_CRON: "{{ arrstack_restic_cron }}" RESTIC_REPOSITORY: "{{ restic_repo }}" RESTIC_PASSWORD: "{{ restic_pass }}" AWS_ACCESS_KEY_ID: "{{ restic_s3_key }}" AWS_SECRET_ACCESS_KEY: "{{ restic_s3_secret }}" RESTIC_BACKUP_ARGS: >- --tag arr RESTIC_BACKUP_SOURCES: "/backup" volumes: {% if restic_repo is regex('^/.+') %} - "{{ restic_repo }}:{{ restic_repo }}" {% endif %} - "{{ arrstack_env_dir }}:/backup/{{ arrstack_env_dir }}" {% endif %} networks: caddy: external: true volumes: caddy_data: {}