mirror of
https://github.com/casjaysdevdocker/ympd
synced 2025-01-18 12:34:37 -05:00
🦈🏠🐜❗ Initial Commit ❗🐜🦈🏠
This commit is contained in:
commit
3c508a7b3a
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
# gitignore created on 02/05/22 at 19:35
|
||||
# Disable reminder in prompt
|
||||
ignoredirmessage
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# Other
|
||||
.installed
|
||||
# ignore commit message
|
||||
.gitcommit
|
89
Dockerfile
Normal file
89
Dockerfile
Normal file
@ -0,0 +1,89 @@
|
||||
FROM casjaysdev/alpine:latest as build
|
||||
|
||||
WORKDIR /app/src
|
||||
|
||||
ENV \
|
||||
EMBEDDED_ASSETS="ON" \
|
||||
ENABLE_FLAC="ON" \
|
||||
ENABLE_IPV6="OFF" \
|
||||
ENABLE_LIBASAN="OFF" \
|
||||
ENABLE_SSL="ON" \
|
||||
MANPAGES="ON" \
|
||||
MYMPD_BUILDIR="build" \
|
||||
DESTDIR="/app/dist" \
|
||||
MYMPD_INSTALL_PREFIX="/usr" \
|
||||
MPD_HOST="172.17.0.1" \
|
||||
MPD_PORT="6600"
|
||||
|
||||
RUN apk -U upgrade && \
|
||||
apk add --no-cache \
|
||||
cmake \
|
||||
perl \
|
||||
libid3tag-dev \
|
||||
flac-dev \
|
||||
lua5.4-dev \
|
||||
alpine-sdk \
|
||||
linux-headers \
|
||||
pkgconf \
|
||||
pcre2-dev \
|
||||
jq \
|
||||
g++ \
|
||||
make \
|
||||
libmpdclient-dev \
|
||||
openssl-dev \
|
||||
git \
|
||||
abuild \
|
||||
musl-dev
|
||||
|
||||
RUN \
|
||||
git clone https://github.com/jcorporation/myMPD ./ && \
|
||||
bash ./build.sh installdeps && \
|
||||
bash ./build.sh releaseinstall \
|
||||
mkdir -p "$DESTDIR"
|
||||
|
||||
COPY ./bin/. ${DESTDIR}/usr/local/bin/
|
||||
|
||||
FROM casjaysdev/alpine:latest
|
||||
ARG BUILD_DATE="$(date +'%Y-%m-%d %H:%M')"
|
||||
|
||||
LABEL \
|
||||
org.label-schema.name="ympd" \
|
||||
org.label-schema.description="Web interface to mpd" \
|
||||
org.label-schema.url="https://github.com/casjaysdev/ympd" \
|
||||
org.label-schema.vcs-url="https://github.com/casjaysdev/ympd" \
|
||||
org.label-schema.build-date=$BUILD_DATE \
|
||||
org.label-schema.version=$BUILD_DATE \
|
||||
org.label-schema.vcs-ref=$BUILD_DATE \
|
||||
org.label-schema.license="MIT" \
|
||||
org.label-schema.vcs-type="Git" \
|
||||
org.label-schema.schema-version="1.0" \
|
||||
org.label-schema.vendor="CasjaysDev" \
|
||||
maintainer="CasjaysDev <docker-admin@casjaysdev.com>"
|
||||
|
||||
RUN apk -U upgrade && \
|
||||
apk add --no-cache \
|
||||
libmpdclient \
|
||||
openssl \
|
||||
libid3tag \
|
||||
flac \
|
||||
lua5.4 \
|
||||
pcre2 \
|
||||
mpc \
|
||||
mpd \
|
||||
pulseaudio-utils
|
||||
|
||||
RUN addgroup -S mympd 2>/dev/null && \
|
||||
adduser -S -D -H -h /var/lib/mympd -s /sbin/nologin \
|
||||
-G mympd -g myMPD mympd 2>/dev/null
|
||||
|
||||
EXPOSE 8082 6600
|
||||
ENV HOSTNAME="ympd"
|
||||
|
||||
COPY --from=build /app/dist/. /
|
||||
COPY ./config/mpd.conf /etc/mpd.conf
|
||||
COPY ./config/mympd/. /var/lib/mympd/config/
|
||||
COPY ./config/pulse-client.conf /etc/pulse/client.conf
|
||||
|
||||
VOLUME [ "/config", "/var/lib/mpd", "/var/lib/mympd", "/music", "/playlists" ]
|
||||
HEALTHCHECK CMD ["/usr/local/bin/entrypoint-ympd.sh", "healthcheck"]
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint-ympd.sh"]
|
13
LICENSE.md
Normal file
13
LICENSE.md
Normal file
@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2022 Jason Hempstead <git-admin@casjaysdev.com>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
1. You just DO WHAT THE FUCK YOU WANT TO.
|
50
README.md
Normal file
50
README.md
Normal file
@ -0,0 +1,50 @@
|
||||
# 👋 ympd Readme 👋
|
||||
|
||||
ympd README
|
||||
|
||||
## Run container
|
||||
|
||||
### via command line
|
||||
|
||||
```shell
|
||||
docker run -d \
|
||||
--restart always \
|
||||
--name ympd \
|
||||
--device /dev/snd \
|
||||
-e HOSTNAME=ympd \
|
||||
-e TZ=${TIMEZONE:-America/New_York} \
|
||||
-e MYMPD_SSL=false \
|
||||
-v $PWD/ympd/data/mpd:/var/lib/mpd:z \
|
||||
-v $PWD/ympd/data/mympd:/var/lib/mympd:z \
|
||||
-v $PWD/ympd/config:/config:z \
|
||||
-v $HOME/Music:/music:z \
|
||||
-p 6600:600 \
|
||||
-p 8082:8082 \
|
||||
casjaysdev/ympd:latest
|
||||
```
|
||||
|
||||
### via docker-compose
|
||||
|
||||
```yaml
|
||||
version: "2"
|
||||
services:
|
||||
ympd:
|
||||
image: casjaysdev/ympd
|
||||
container_name: ympd
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
- HOSTNAME=ympd
|
||||
volumes:
|
||||
- $HOME/Music:/music
|
||||
- $HOME/.local/share/docker/storage/ympd/data/mpd:/var/lib/mpd \
|
||||
- $HOME/.local/share/docker/storage/ympd/data/mympd:/var/lib/mympd \
|
||||
- $HOME/.local/share/docker/storage/ympd/config:/config \
|
||||
ports:
|
||||
- 80:80
|
||||
restart: always
|
||||
```
|
||||
|
||||
## Authors
|
||||
|
||||
🤖 Casjay: [Github](https://github.com/casjay) [Docker](https://hub.docker.com/casjay) 🤖
|
||||
⛵ CasjaysDev: [Github](https://github.com/casjaysdev) [Docker](https://hub.docker.com/casjaysdev) ⛵
|
82
bin/entrypoint-ympd.sh
Executable file
82
bin/entrypoint-ympd.sh
Executable file
@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
DOCKER_PORT="8082"
|
||||
DOCKER_HOST="$(ip route | awk '/default/ { print $3 }')"
|
||||
export TZ="${TZ:-America/New_York}"
|
||||
export HOSTNAME="${HOSTNAME:-casjaysdev-ympd}"
|
||||
|
||||
[ -n "${TZ}" ] && echo "${TZ}" >/etc/timezone
|
||||
[ -n "${HOSTNAME}" ] && echo "${HOSTNAME}" >/etc/hostname
|
||||
[ -n "${HOSTNAME}" ] && echo "127.0.0.1 $HOSTNAME localhost" >/etc/hosts
|
||||
[ -f "/usr/share/zoneinfo/${TZ}" ] && ln -sf "/usr/share/zoneinfo/${TZ}" "/etc/localtime"
|
||||
[ -d "/config/mympd" ] || mkdir -p "/config/mympd"
|
||||
|
||||
if [ ! -f "/config/mympd/.env" ]; then
|
||||
cat <<EOF >"/config/mympd/.env"
|
||||
# See https://jcorporation.github.io/myMPD/configuration/ for more information
|
||||
export MPD_HOST=$DOCKER_HOST
|
||||
export MPD_PORT=6600
|
||||
export MYMPD_HTTP_HOST="${MYMPD_HTTP_HOST:-0.0.0.0}"
|
||||
export MYMPD_HTTP_PORT="${MYMPD_HTTP_PORT:-$DOCKER_PORT}"
|
||||
export MYMPD_LOGLEVEL="${MYMPD_LOGLEVEL:-5}"
|
||||
export MYMPD_SSL="${MYMPD_SSL:-false}"
|
||||
export MYMPD_SSL_PORT="${MYMPD_SSL_PORT:-$DOCKER_PORT}"
|
||||
export MYMPD_SSL_KEY="${MYMPD_SSL_KEY:-/config/certs/mympd.key}"
|
||||
export MYMPD_SSL_CERT="${MYMPD_SSL_CERT:-/config/certs/mympd.crt}"
|
||||
#export MYMPD_ACL="${MYMPD_ACL:-}"
|
||||
#export MYMPD_SSL_SAN="${MYMPD_SSL_SAN:-}"
|
||||
#export MYMPD_LUALIBS="${MYMPD_LUALIBS:-}"
|
||||
#export MYMPD_SCRIPTACL="${MYMPD_SCRIPTACL:-}"
|
||||
#export MYMPD_CUSTOM_CERT="${MYMPD_CUSTOM_CERT:-}"
|
||||
|
||||
EOF
|
||||
fi
|
||||
|
||||
[ -f "/config/mympd/.env" ] && . "/config/mympd/.env"
|
||||
[ -f "/config/mympd/ssl" ] || printf '%s' "$MYMPD_SSL" >"/config/mympd/ssl"
|
||||
[ -f "/config/mympd/http_host" ] || printf '%s' "$MYMPD_HTTP_HOST" >"/config/mympd/http_host"
|
||||
[ -f "/config/mympd/http_port" ] || printf '%s' "$MYMPD_HTTP_PORT" >"/config/mympd/http_port"
|
||||
|
||||
[ -f "/config/pulse-client.conf" ] && cp -Rf "/config/pulse-client.conf" "/etc/pulse/client.conf" ||
|
||||
cp -Rf "/etc/pulse/client.conf" "/config/pulse-client.conf"
|
||||
[ -f "/config/mpd.conf" ] && cp -Rf "/config/mpd.conf" "/etc/mpd.conf" ||
|
||||
cp -Rf "/etc/mpd.conf" "/config/mpd.conf"
|
||||
[ -d "/config/mympd" ] && cp -Rf "/config/mympd/." "/var/lib/mympd/config/" ||
|
||||
cp -Rf "/var/lib/mympd/config/." "/config/mympd/"
|
||||
|
||||
export MYMPD_USER="--user ${MYMPD_USER:-mympd}"
|
||||
export MYMPD_DIR="--workdir ${MYMPD_DIR:-/var/lib/mympd}"
|
||||
export MYMPD_CACHE="--cache ${MYMPD_CACHE:-/var/cache/mympd}"
|
||||
|
||||
case "$1" in
|
||||
healthcheck)
|
||||
shift 1
|
||||
if curl -q -LSs --fail "localhost:$DOCKER_PORT"; then
|
||||
echo '{"status": "ok" }'
|
||||
exit 0
|
||||
else
|
||||
echo '{"status": "fail" }'
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bash | sh | shell)
|
||||
shift 1
|
||||
exec bash -l "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Setting ympd options to: ${CMDOPTS:-none}"
|
||||
if [[ $# = 0 ]]; then
|
||||
echo "listening on http://$DOCKER_HOST:$DOCKER_PORT"
|
||||
pacat -vvvv /dev/urandom
|
||||
mpd --no-daemon /etc/mpd.conf
|
||||
mympd $MYMPD_USER $MYMPD_DIR $MYMPD_CACHE $CMDOPTS
|
||||
else
|
||||
CMDOPTS="$*"
|
||||
mympd $MYMPD_USER $MYMPD_DIR $MYMPD_CACHE $CMDOPTS
|
||||
pacat -vvvv /dev/urandom
|
||||
mpd --no-daemon /etc/mpd.conf
|
||||
fi
|
||||
;;
|
||||
esac
|
124
config/mpd.conf
Normal file
124
config/mpd.conf
Normal file
@ -0,0 +1,124 @@
|
||||
###############################################################################
|
||||
music_directory "/music"
|
||||
playlist_directory "/playlists"
|
||||
state_file "/var/lib/mpd/state"
|
||||
db_file "/var/lib/mpd/database.db"
|
||||
sticker_file "/var/lib/mpd/sticker.sql"
|
||||
log_file "/var/log/mpd/mpd.log"
|
||||
pid_file "/run/mpd/pid"
|
||||
bind_to_address "/run/mpd/socket"
|
||||
###############################################################################
|
||||
user "root"
|
||||
group "root"
|
||||
bind_to_address "any"
|
||||
port "6600"
|
||||
log_level "default"
|
||||
gapless_mp3_playback "yes"
|
||||
restore_paused "yes"
|
||||
save_absolute_paths_in_playlists "no"
|
||||
metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
|
||||
auto_update "yes"
|
||||
auto_update_depth "5"
|
||||
###############################################################################
|
||||
follow_outside_symlinks "yes"
|
||||
follow_inside_symlinks "yes"
|
||||
###############################################################################
|
||||
zeroconf_enabled "yes"
|
||||
zeroconf_name "%h"
|
||||
###############################################################################
|
||||
#password "password@read,add,control,admin"
|
||||
#default_permissions "read,add,control,admin"
|
||||
###############################################################################
|
||||
#database {
|
||||
#plugin "proxy"
|
||||
#host "other.mpd.host"
|
||||
#port "6600"
|
||||
#}
|
||||
###############################################################################
|
||||
input {
|
||||
plugin "curl"
|
||||
#proxy "proxy.isp.com:8080"
|
||||
#proxy_user "user"
|
||||
#proxy_password "password"
|
||||
}
|
||||
###############################################################################
|
||||
audio_output {
|
||||
type "alsa"
|
||||
name "speakers"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
#type "shout"
|
||||
#encoder "vorbis" # optional
|
||||
#name "My Shout Stream"
|
||||
#host "localhost"
|
||||
#port "8000"
|
||||
#mount "/mpd.ogg"
|
||||
#password "hackme"
|
||||
#quality "5.0"
|
||||
#bitrate "128"
|
||||
#format "44100:16:1"
|
||||
#protocol "icecast2" # optional
|
||||
#user "source" # optional
|
||||
#description "My Stream Description" # optional
|
||||
#url "http://example.com" # optional
|
||||
#genre "jazz" # optional
|
||||
#public "no" # optional
|
||||
#timeout "2" # optional
|
||||
#mixer_type "software" # optional
|
||||
#}
|
||||
###############################################################################
|
||||
#audio_output {
|
||||
# type "recorder"
|
||||
# name "My recorder"
|
||||
# encoder "vorbis" # optional, vorbis or lame
|
||||
# path "/var/lib/mpd/recorder/mpd.ogg"
|
||||
## quality "5.0" # do not define if bitrate is defined
|
||||
# bitrate "128" # do not define if quality is defined
|
||||
# format "44100:16:1"
|
||||
#}
|
||||
###############################################################################
|
||||
audio_output {
|
||||
type "httpd"
|
||||
name "HTTP Stream"
|
||||
encoder "lame" #to support safari on ios
|
||||
port "8000"
|
||||
bitrate "128"
|
||||
format "44100:16:1"
|
||||
always_on "yes"
|
||||
tags "yes"
|
||||
}
|
||||
###############################################################################
|
||||
audio_output {
|
||||
type "pulse"
|
||||
name "pulse"
|
||||
#server "remote_server"
|
||||
#sink "remote_server_sink"
|
||||
#media_role "media_role"
|
||||
}
|
||||
#
|
||||
###############################################################################
|
||||
#audio_output {
|
||||
# type "osx"
|
||||
# name "My OS X Device"
|
||||
# device "Built-in Output" # optional
|
||||
# channel_map "-1,-1,0,1" # optional
|
||||
#}
|
||||
###############################################################################
|
||||
#audio_output {
|
||||
#type "pipe"
|
||||
#name `"my pipe"
|
||||
#command "aplay -f cd 2>/dev/null"
|
||||
#command "AudioCompress -m | aplay -f cd 2>/dev/null"
|
||||
#command "nc example.org 8765"
|
||||
# format "44100:16:2"
|
||||
#}
|
||||
###############################################################################
|
||||
#replaygain "album"
|
||||
#replaygain_preamp "0"
|
||||
#replaygain_missing_preamp "0"
|
||||
#replaygain_limit "yes"
|
||||
#volume_normalization "no"
|
||||
###############################################################################
|
||||
filesystem_charset "UTF-8"
|
||||
###############################################################################
|
9
config/pulse-client.conf
Normal file
9
config/pulse-client.conf
Normal file
@ -0,0 +1,9 @@
|
||||
# Connect to the host's server using the mounted UNIX socket
|
||||
default-server = unix:/run/user/REPLACE_UUID/pulse/native
|
||||
|
||||
# Prevent a server running in the container
|
||||
autospawn = no
|
||||
daemon-binary = /bin/true
|
||||
|
||||
# Prevent the use of shared memory
|
||||
enable-shm = false
|
Loading…
x
Reference in New Issue
Block a user