mopidy-generate-docker.sh
· 3.3 KiB · Bash
Raw
#!/bin/bash
# This script generates a Dockerfile and a docker-compose.yml file for running
# Mopidy with various extensions.
#
# This is customized for my setup, so you may need to adjust it to fit the
# extensions that you actually need.
#
# You may also want to use a Pulse sink for audio output if you already have
# PulseAudio running on the host system, otherwise ALSA won't to
# control the audio output.
#
# Also note that the docker-compose.yml will mount the configuration and work
# directories from the host system ($HOME/.config/mopidy and
# $HOME/.local/share/mopidy).
cat <<EOF > Dockerfile
FROM debian:12-slim
LABEL Author="Fabio Manganiello"
# Change the architecture if needed, e.g. arm64, armhf, etc.
ARG ARCH=amd64
ENV DEBIAN_FRONTEND=noninteractive
ENV PIP_NO_CACHE_DIR=1
RUN apt update && apt upgrade -y \\
&& apt install -y \\
alsa-utils \\
cmake \\
curl \\
dumb-init \\
gstreamer1.0-alsa \\
gstreamer1.0-pulseaudio \\
libcairo2-dev \\
mopidy \\
pkg-config \\
pulseaudio-utils \\
python3-pip \\
sudo \\
&& mkdir -p ~/.config/pip && printf "[global]\nbreak-system-packages = true\n" | tee ~/.config/pip/pip.conf \\
&& pip install --no-cache-dir \\
tidalapi==0.8.3 \\
mopidy-bandcamp \\
mopidy-funkwhale \\
mopidy-iris \\
mopidy-jellyfin \\
mopidy-local \\
mopidy-mobile \\
mopidy-mpd \\
mopidy-podcast \\
mopidy-scrobbler \\
mopidy-soundcloud \\
mopidy-tidal \\
mopidy-tunein \\
mopidy-youtube \\
yt-dlp \\
&& apt purge --auto-remove -y \\
cmake \\
gcc \\
libcairo2-dev \\
pkg-config \\
&& apt clean \\
&& apt autoremove -y \\
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ~/.cache /root/.cache
# Needed to map the audio group to the host audio group,
# and that the mopidy user is part of it, and that the user has the same UID as the host user.
RUN usermod -u $(id -u) mopidy
RUN groupmod -g $(grep audio /etc/group | sed -r -e 's/^([^:]+:){2}([0-9]+):.*/\2/') audio
RUN usermod -aG audio mopidy
RUN sh -c 'echo "mopidy ALL=NOPASSWD: /usr/local/lib/python3.11/dist-packages/mopidy_iris/system.sh" >> /etc/sudoers'
USER mopidy
EXPOSE 6600
EXPOSE 6680
EXPOSE 5555/udp
ADD ./start.sh /start.sh
ENTRYPOINT ["dumb-init", "--"]
CMD ["/start.sh"]
HEALTHCHECK --interval=60s --timeout=5s --retries=3 \\
CMD curl --connect-timeout 5 --silent --show-error --fail http://localhost:6680/ || exit 1
EOF
cat <<EOF > docker-compose.yml
services:
mopidy:
build:
context: .
dockerfile: Dockerfile
container_name: mopidy
ports:
- "6600:6600" # MPD port
- "6680:6680" # HTTP port
- "5555:5555" # Streaming UDP port
devices:
- /dev/snd:/dev/snd # Audio device
hostname: mopidy
environment:
PULSE_SERVER: unix:/run/user/$(id -u)/pulse/native # Adjust user ID as needed
volumes:
- /run/user/$(id -u)/pulse:/run/user/$(id -u)/pulse # Adjust user ID as needed
- /run/user/$(id -u)/pulse/native:/run/user/$(id -u)/pulse/native # Adjust user ID as needed
# - /mnt/hd/media/music:/mnt/hd/media/music # Music library path
- $HOME/.config/mopidy/mopidy.conf:/mopidy/mopidy.conf # Configuration file
- $HOME/.local/share/mopidy:/var/lib/mopidy/.local/share/mopidy # Local data storage
- ./cache:/var/lib/mopidy/.cache/mopidy
restart: unless-stopped
EOF
1 | #!/bin/bash |
2 | |
3 | # This script generates a Dockerfile and a docker-compose.yml file for running |
4 | # Mopidy with various extensions. |
5 | # |
6 | # This is customized for my setup, so you may need to adjust it to fit the |
7 | # extensions that you actually need. |
8 | # |
9 | # You may also want to use a Pulse sink for audio output if you already have |
10 | # PulseAudio running on the host system, otherwise ALSA won't to |
11 | # control the audio output. |
12 | # |
13 | # Also note that the docker-compose.yml will mount the configuration and work |
14 | # directories from the host system ($HOME/.config/mopidy and |
15 | # $HOME/.local/share/mopidy). |
16 | |
17 | cat <<EOF > Dockerfile |
18 | FROM debian:12-slim |
19 | LABEL Author="Fabio Manganiello" |
20 | |
21 | # Change the architecture if needed, e.g. arm64, armhf, etc. |
22 | ARG ARCH=amd64 |
23 | |
24 | ENV DEBIAN_FRONTEND=noninteractive |
25 | ENV PIP_NO_CACHE_DIR=1 |
26 | |
27 | RUN apt update && apt upgrade -y \\ |
28 | && apt install -y \\ |
29 | alsa-utils \\ |
30 | cmake \\ |
31 | curl \\ |
32 | dumb-init \\ |
33 | gstreamer1.0-alsa \\ |
34 | gstreamer1.0-pulseaudio \\ |
35 | libcairo2-dev \\ |
36 | mopidy \\ |
37 | pkg-config \\ |
38 | pulseaudio-utils \\ |
39 | python3-pip \\ |
40 | sudo \\ |
41 | && mkdir -p ~/.config/pip && printf "[global]\nbreak-system-packages = true\n" | tee ~/.config/pip/pip.conf \\ |
42 | && pip install --no-cache-dir \\ |
43 | tidalapi==0.8.3 \\ |
44 | mopidy-bandcamp \\ |
45 | mopidy-funkwhale \\ |
46 | mopidy-iris \\ |
47 | mopidy-jellyfin \\ |
48 | mopidy-local \\ |
49 | mopidy-mobile \\ |
50 | mopidy-mpd \\ |
51 | mopidy-podcast \\ |
52 | mopidy-scrobbler \\ |
53 | mopidy-soundcloud \\ |
54 | mopidy-tidal \\ |
55 | mopidy-tunein \\ |
56 | mopidy-youtube \\ |
57 | yt-dlp \\ |
58 | && apt purge --auto-remove -y \\ |
59 | cmake \\ |
60 | gcc \\ |
61 | libcairo2-dev \\ |
62 | pkg-config \\ |
63 | && apt clean \\ |
64 | && apt autoremove -y \\ |
65 | && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ~/.cache /root/.cache |
66 | |
67 | # Needed to map the audio group to the host audio group, |
68 | # and that the mopidy user is part of it, and that the user has the same UID as the host user. |
69 | RUN usermod -u $(id -u) mopidy |
70 | RUN groupmod -g $(grep audio /etc/group | sed -r -e 's/^([^:]+:){2}([0-9]+):.*/\2/') audio |
71 | RUN usermod -aG audio mopidy |
72 | RUN sh -c 'echo "mopidy ALL=NOPASSWD: /usr/local/lib/python3.11/dist-packages/mopidy_iris/system.sh" >> /etc/sudoers' |
73 | |
74 | USER mopidy |
75 | |
76 | EXPOSE 6600 |
77 | EXPOSE 6680 |
78 | EXPOSE 5555/udp |
79 | |
80 | ADD ./start.sh /start.sh |
81 | |
82 | ENTRYPOINT ["dumb-init", "--"] |
83 | CMD ["/start.sh"] |
84 | |
85 | HEALTHCHECK --interval=60s --timeout=5s --retries=3 \\ |
86 | CMD curl --connect-timeout 5 --silent --show-error --fail http://localhost:6680/ || exit 1 |
87 | EOF |
88 | |
89 | cat <<EOF > docker-compose.yml |
90 | services: |
91 | mopidy: |
92 | build: |
93 | context: . |
94 | dockerfile: Dockerfile |
95 | container_name: mopidy |
96 | ports: |
97 | - "6600:6600" # MPD port |
98 | - "6680:6680" # HTTP port |
99 | - "5555:5555" # Streaming UDP port |
100 | devices: |
101 | - /dev/snd:/dev/snd # Audio device |
102 | hostname: mopidy |
103 | environment: |
104 | PULSE_SERVER: unix:/run/user/$(id -u)/pulse/native # Adjust user ID as needed |
105 | volumes: |
106 | - /run/user/$(id -u)/pulse:/run/user/$(id -u)/pulse # Adjust user ID as needed |
107 | - /run/user/$(id -u)/pulse/native:/run/user/$(id -u)/pulse/native # Adjust user ID as needed |
108 | # - /mnt/hd/media/music:/mnt/hd/media/music # Music library path |
109 | - $HOME/.config/mopidy/mopidy.conf:/mopidy/mopidy.conf # Configuration file |
110 | - $HOME/.local/share/mopidy:/var/lib/mopidy/.local/share/mopidy # Local data storage |
111 | - ./cache:/var/lib/mopidy/.cache/mopidy |
112 | restart: unless-stopped |
113 | EOF |
114 |