job "navidrome" { datacenters = ["dc1"] type = "service" constraint { attribute = "${attr.unique.hostname}" operator = "regexp" value = "odroid.*" } group "navidrome" { count = 1 # Prestart restore task task "restore" { driver = "docker" lifecycle { hook = "prestart" sidecar = false } config { image = "litestream/litestream:latest" args = [ "restore", "-if-replica-exists", "-if-db-not-exists", "-o", "/alloc/tmp/navidrome.db", "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/navidrome.db" ] volumes = [ "/mnt/configs/navidrome:/data" ] } } # Main Navidrome task task "navidrome" { driver = "docker" 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_DATAFOLDER = "/alloc/tmp/" ND_CACHEFOLDER = "./data/cache" 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" } } } # Litestream sidecar for continuous replication task "litestream" { driver = "docker" lifecycle { hook = "poststart" # runs after main task starts sidecar = true } config { image = "litestream/litestream:latest" args = [ "replicate", "/alloc/tmp/navidrome.db", "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/navidrome.db" ] volumes = [ "/mnt/configs/navidrome:/data" ] } } network { port "http" { static = 4533 to = 4533 } } } }