job "navidrome" { datacenters = ["dc1"] type = "service" constraint { attribute = "${attr.unique.hostname}" operator = "regexp" value = "odroid.*" } group "navidrome" { count = 1 volume "navidrome-csi-vol" { type = "csi" source = "navidrome-volume" # This must match the 'id' in your volume registration attachment_mode = "file-system" access_mode = "multi-node-multi-writer" } # Main Navidrome task task "navidrome" { driver = "docker" volume_mount { volume = "navidrome-csi-vol" # Matches the name in the volume block above destination = "/data" # Where it appears inside the container read_only = false } config { image = "ghcr.io/navidrome/navidrome:latest" memory_hard_limit = "2048" ports = ["http"] volumes = [ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro", "/mnt/Public/Downloads/news/slskd/downloads:/music/slskd:ro", "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro", #"/mnt/configs/navidrome:/data" ] } env { ND_SCANSCHEDULE = "32 8-20 * * *" ND_LOGLEVEL = "debug" ND_REVERSEPROXYWHITELIST = "0.0.0.0/0" ND_REVERSEPROXYUSERHEADER = "X-Forwarded-User" ND_SCANNER_GROUPALBUMRELEASES = "False" ND_BACKUP_PATH = "/data" ND_BACKUP_SCHEDULE = "0 0 * * *" ND_BACKUP_COUNT = "7" } resources { cpu = 100 memory = 128 } service { name = "navidrome" tags = [ "navidrome", "web", "urlprefix-/navidrome", "tools", "traefik.http.routers.navidromelan.rule=Host(`navidrome.service.dc1.consul`)", "traefik.http.routers.navidromewan.rule=Host(`m.fbleagh.duckdns.org`)", "traefik.http.routers.navidromewan.middlewares=dex@consulcatalog", "traefik.http.routers.navidromewan.tls=true", ] port = "http" check { type = "tcp" interval = "10s" timeout = "2s" } } } network { port "http" { static = 4533 to = 4533 } } } }