commit 20ba018a038b38dfbbd058b4c88b560a1e957274 Author: Colin Powell Date: Sun Sep 20 12:37:20 2026 -0400 Initial commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a76d784 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +music +config +.git +docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a673525 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config/mopidy.conf +music diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7b66720 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM debian:trixie-slim + +ENV DEBIAN_FRONTEND=noninteractive \ + HOME=/var/lib/mopidy \ + PIP_DISABLE_PIP_VERSION_CHECK=1 \ + PYTHONUNBUFFERED=1 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ca-certificates wget \ + && mkdir -p /etc/apt/keyrings \ + && wget -q -O /etc/apt/keyrings/mopidy-archive-keyring.gpg \ + https://apt.mopidy.com/mopidy-archive-keyring.gpg \ + && wget -q -O /etc/apt/sources.list.d/mopidy.sources \ + https://apt.mopidy.com/trixie.sources \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + gstreamer1.0-plugins-base \ + gstreamer1.0-plugins-good \ + gstreamer1.0-plugins-ugly \ + gstreamer1.0-tools \ + mopidy \ + mopidy-mpd \ + mopidy-spotify \ + python3-pip \ + && rm -rf /var/lib/apt/lists/* + +# Mopidy-Iris: latest release supplies the prebuilt frontend, then overlay the +# develop branch's Python modules for Mopidy 4 support (jaedb/Iris#1003). +RUN python3 -m pip install --break-system-packages --no-cache-dir Mopidy-Iris==3.70.0 \ + && wget -qO /tmp/iris-develop.tar.gz \ + https://github.com/jaedb/Iris/archive/83770dddb388b8699df414f47f8c80e33d75720d.tar.gz \ + && tar -xzf /tmp/iris-develop.tar.gz -C /tmp \ + && cp /tmp/Iris-83770dddb388b8699df414f47f8c80e33d75720d/mopidy_iris/*.py \ + "$(python3 -c 'import os, mopidy_iris; print(os.path.dirname(mopidy_iris.__file__))')" \ + && rm -rf /tmp/Iris-83770dddb388b8699df414f47f8c80e33d75720d /tmp/iris-develop.tar.gz + +RUN mkdir -p /var/lib/mopidy/media /var/lib/mopidy/playlists /var/cache/mopidy \ + && chown -R mopidy:audio /var/lib/mopidy /var/cache/mopidy + +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +RUN chmod 755 /usr/local/bin/docker-entrypoint.sh + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] +CMD ["mopidy"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3bc6d18 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +services: + mopidy: + build: . + image: mopidy:4 + container_name: mopidy + restart: unless-stopped + init: true + environment: + EXTRA_PIP_PACKAGES: "https://code.lab.unbl.ink/secstate/mopidy-webhooks/archive/0.2.3.zip Mopidy-Muse mopidy-bandcamp mopidy-party mopidy-soundcloud mopidy-api-explorer setuptools<81" + volumes: + - ./config/mopidy.conf:/etc/mopidy/mopidy.conf:ro + - ./music:/var/lib/mopidy/media:ro + - mopidy-data:/var/lib/mopidy + - mopidy-cache:/var/cache/mopidy + ports: + - "6602:6600" + - "6682:6680" + +volumes: + mopidy-data: + mopidy-cache: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..8e675fb --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +if [ "$(id -u)" = "0" ]; then + if [ -n "${EXTRA_PIP_PACKAGES:-}" ]; then + packages=$(printf '%s' "${EXTRA_PIP_PACKAGES}" | tr ',' ' ') + echo "Installing extra pip packages: ${packages}" + python3 -m pip install --break-system-packages --no-cache-dir ${packages} + fi + + if [ -z "${RUN_AS_ROOT:-}" ]; then + exec setpriv --reuid=mopidy --regid=audio --init-groups "$@" + fi +fi + +exec "$@"