All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 41s
77 lines
2.1 KiB
Bash
77 lines
2.1 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Configuration from environment
|
|
SERVICE_NAME="navidrome"
|
|
SERVICE_ID="${SERVICE_NAME}-${NOMAD_ALLOC_ID:-$(hostname)}"
|
|
PORT=4533
|
|
CONSUL_HTTP_ADDR="${CONSUL_URL:-http://localhost:8500}"
|
|
NODE_IP="${ADVERTISE_IP}"
|
|
|
|
# Tags for the Primary service (Traefik enabled)
|
|
PRIMARY_TAGS='["navidrome","web","traefik.enable=true","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"]'
|
|
|
|
# --- Helper Functions ---
|
|
|
|
# Register Service with TTL Check
|
|
register_service() {
|
|
echo "Registering service ${SERVICE_ID} with Consul..."
|
|
curl -s -X PUT "${CONSUL_HTTP_ADDR}/v1/agent/service/register" -d "{
|
|
\"ID\": \"${SERVICE_ID}\",
|
|
\"Name\": \"${SERVICE_NAME}\",
|
|
\"Tags\": ${PRIMARY_TAGS},
|
|
\"Address\": \"${NODE_IP}\",
|
|
\"Port\": ${PORT},
|
|
\"Check\": {
|
|
\"DeregisterCriticalServiceAfter\": \"1m\",
|
|
\"TTL\": \"15s\"
|
|
}
|
|
}"
|
|
}
|
|
|
|
# Send Heartbeat to Consul
|
|
pass_ttl() {
|
|
curl -s -X PUT "${CONSUL_HTTP_ADDR}/v1/agent/check/pass/service:${SERVICE_ID}" > /dev/null
|
|
}
|
|
|
|
# Deregister Service
|
|
deregister_service() {
|
|
echo "Deregistering service ${SERVICE_ID} from Consul..."
|
|
curl -s -X PUT "${CONSUL_HTTP_ADDR}/v1/agent/service/deregister/${SERVICE_ID}"
|
|
}
|
|
|
|
# --- Cleanup ---
|
|
cleanup() {
|
|
echo "Shutting down..."
|
|
deregister_service
|
|
exit 0
|
|
}
|
|
|
|
trap cleanup TERM INT
|
|
|
|
# --- Main Logic ---
|
|
|
|
echo "Starting Navidrome Primary Node..."
|
|
|
|
# 1. Ensure shared directories exist on persistent host volume
|
|
mkdir -p /data/plugins /data/cache /data/backup
|
|
|
|
# 2. Tell Navidrome to use the database directly from the LiteFS mount.
|
|
export ND_DBPATH="/litefs/navidrome.db?cache=shared&_busy_timeout=15000&_journal_mode=WAL&_foreign_keys=on"
|
|
|
|
# 3. Register with Consul
|
|
register_service
|
|
|
|
# 4. Start Navidrome and Maintain TTL
|
|
/app/navidrome &
|
|
NAVIDROME_PID=$!
|
|
|
|
echo "Navidrome running (PID: $NAVIDROME_PID)"
|
|
|
|
while kill -0 $NAVIDROME_PID 2>/dev/null; do
|
|
pass_ttl
|
|
sleep 10
|
|
done
|
|
|
|
cleanup
|