118 lines
3.0 KiB
HCL
118 lines
3.0 KiB
HCL
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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|