diff --git a/containers/navidrome/docker-compose.yml b/containers/navidrome/docker-compose.yml new file mode 100644 index 0000000..47b76fd --- /dev/null +++ b/containers/navidrome/docker-compose.yml @@ -0,0 +1,51 @@ +networks: + DOCKER_NETWORK_DATA: #LIBREPORTAL|DOCKER_NETWORK_TAG|DOCKER_NETWORK_DATA + external: true + +services: + # Navidrome Music Server + navidrome-service: #LIBREPORTAL|SERVICE_TAG_1|navidrome-service + container_name: navidrome-service + image: deluan/navidrome:latest + # GLUETUN_OFF_BEGIN + ports: + - "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1 + # GLUETUN_OFF_END + volumes: + # Navidrome's own state: SQLite DB, config and cache. + - ./data:/data + # The music library — read-only; Navidrome only ever reads from it. + - ./music:/music:ro + environment: + - TZ:TIMEZONE_DATA #LIBREPORTAL|TIMEZONE_TAG|TIMEZONE_DATA + - ND_MUSICFOLDER=/music + - ND_DATAFOLDER=/data + - ND_SCANSCHEDULE=1h + - ND_LOGLEVEL=info + - ND_SESSIONTIMEOUT=24h + labels: + libreportal.category: "CATEGORY_DATA" #LIBREPORTAL|CATEGORY_TAG|CATEGORY_DATA + libreportal.title: "TITLE_DATA" #LIBREPORTAL|TITLE_TAG|TITLE_DATA + libreportal.backup.db: "sqlite:::data/navidrome.db" + libreportal.backup.files: "navidrome-service:/data:data" + traefik.enable: TRAEFIK_ENABLE_DATA #LIBREPORTAL|TRAEFIK_ENABLE_TAG|TRAEFIK_ENABLE_DATA + # TRAEFIK_PORT_1_BEGIN + traefik.http.routers.navidrome-service.entrypoints: web,websecure + traefik.http.routers.navidrome-service.rule: Host(`DOMAINSUBNAME_DATA_1`) #LIBREPORTAL|DOMAINSUBNAME_TAG_1|DOMAINSUBNAME_DATA_1 + traefik.http.routers.navidrome-service.tls: true + traefik.http.routers.navidrome-service.tls.certresolver: production + traefik.http.services.navidrome-service.loadbalancer.server.port: PORT_INTERNAL_DATA_1 #LIBREPORTAL|PORT_INTERNAL_TAG_1|PORT_INTERNAL_DATA_1 + traefik.http.routers.navidrome-service.middlewares: MIDDLEWARE_DATA_1 #LIBREPORTAL|MIDDLEWARE_TAG_1|MIDDLEWARE_DATA_1 + # TRAEFIK_PORT_1_END + traefik.docker.network: DOCKER_NETWORK_DATA #LIBREPORTAL|DOCKER_NETWORK_TAG|DOCKER_NETWORK_DATA + healthcheck: + disable: HEALTHCHECK_DATA #LIBREPORTAL|HEALTHCHECK_TAG|HEALTHCHECK_DATA + restart: 'unless-stopped' + # GLUETUN_OFF_BEGIN + networks: + DOCKER_NETWORK_DATA: #LIBREPORTAL|DOCKER_NETWORK_TAG|DOCKER_NETWORK_DATA + ipv4_address: IP_DATA_1 #LIBREPORTAL|IP_TAG_1|IP_DATA_1 + # GLUETUN_OFF_END + # GLUETUN_ON_BEGIN + # network_mode: "container:gluetun-service" + # GLUETUN_ON_END diff --git a/containers/navidrome/navidrome.config b/containers/navidrome/navidrome.config new file mode 100644 index 0000000..91119b4 --- /dev/null +++ b/containers/navidrome/navidrome.config @@ -0,0 +1,61 @@ +# +# ============================================================================= +# GENERAL CONFIGURATION +# ============================================================================= +# APP_NAME = name of application for use in scripts +# COMPOSE_FILE = default for no app_name in docker-compose file name, app if there is +# BACKUP = if true, include this application in backup operations +# HEALTHCHECK = if true, default docker health checks for that container will be enabled +# AUTHELIA = if true, use Authelia authentication, if false turned off. +# HEADSCALE = options : false, local, remote (see general config). e.g false or local,remote +# +CFG_NAVIDROME_APP_NAME=navidrome +CFG_NAVIDROME_BACKUP=true +CFG_NAVIDROME_BACKUP_STRATEGY=auto +CFG_NAVIDROME_COMPOSE_FILE=default +CFG_NAVIDROME_HEALTHCHECK=true +CFG_NAVIDROME_AUTHELIA=false +CFG_NAVIDROME_HEADSCALE=false +# +# ============================================================================= +# METADATA +# ============================================================================= +# CATEGORY = application category for grouping +# TITLE = display name for the application +# DESCRIPTION = short description of the application +# LONG_DESCRIPTION = detailed description of the application +# URL = source repository or documentation URL +# ACTIONS = available actions for this application +# +CFG_NAVIDROME_CATEGORY="media" +CFG_NAVIDROME_TITLE="Navidrome" +CFG_NAVIDROME_DESCRIPTION="Music Server" +CFG_NAVIDROME_LONG_DESCRIPTION="Navidrome is a self-hosted, open-source music streaming server with a Subsonic-compatible API — stream your personal music collection to any device from a fast, modern web player." +CFG_NAVIDROME_URL="https://github.com/navidrome/navidrome" +CFG_NAVIDROME_ACTIONS="configure|install|restart|shutdown|uninstall" +# +# ============================================================================= +# NETWORK CONFIGURATION +# ============================================================================= +# DOMAIN = number of domain from the general config, useful when using multiple domains +# WHITELIST = if true only allow whitelisted ips (see general config), if false allow all +# +CFG_NAVIDROME_DOMAIN=1 +CFG_NAVIDROME_WHITELIST=false +CFG_NAVIDROME_NETWORK=default +# +# ============================================================================= +# PORT CONFIGURATION +# ============================================================================= +# PORT_ = port configuration: app|name|external:internal|access|protocol|login|traefik|webui|description|paths|subdomain +# - app: application name +# - name: service identifier (webui, dns, ssh, etc.) +# - external:internal: port mapping (external can be 'random' for auto-allocation) +# - access: 'public' (internet accessible), 'private' (local network only), 'disabled' (not running) +# - protocol: 'tcp' or 'udp' +# - login: if true, this port requires basic-auth via Traefik (only meaningful when traefik=true) +# - traefik: if true, Traefik handles this port (reverse proxy) +# - webui: if true, this port serves the main web interface +# - description: human-readable description of the service +# +CFG_NAVIDROME_PORT_1="navidrome-service|webui|random:4533|public|tcp|false|true|true|Music Server||music" diff --git a/containers/navidrome/navidrome.svg b/containers/navidrome/navidrome.svg new file mode 100644 index 0000000..0b21648 --- /dev/null +++ b/containers/navidrome/navidrome.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + +