🦈🏠🐜 Initial Commit 🐜🦈🏠

This commit is contained in:
casjay 2022-09-06 22:33:07 -04:00
commit a9cc79022a
No known key found for this signature in database
GPG Key ID: 4F765975C1F0EE5F
16 changed files with 443 additions and 0 deletions

11
.dockerigore Normal file
View File

@ -0,0 +1,11 @@
.DS_Store
ui/node_modules
Dockerfile
docker-compose*.yml
data
*.db
testDB
navidrome
navidrome.db
navidrome.toml

98
.gitignore vendored Normal file
View File

@ -0,0 +1,98 @@
# gitignore created on 09/06/22 at 22:01
# Disable reminder in prompt
ignoredirmessage
# Disable reminder in prompt
ignoredirmessage
# OS generated files
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Other
**/.installed
# ignore commit message
**/.gitcommit
#ignore .failed
**/.build_failed
# ignore .bak files
**/*.bak
# ignore .no_push files
**/.no_push
# ignore .no_git files
**/.no_git
# ignore commit message
.gitcommit

53
Dockerfile Normal file
View File

@ -0,0 +1,53 @@
FROM casjaysdevdocker/alpine:latest as build
ARG LICENSE=WTFPL \
IMAGE_NAME=music \
TIMEZONE=America/New_York \
PORT=
ENV SHELL=/bin/bash \
TERM=xterm-256color \
HOSTNAME=${HOSTNAME:-casjaysdev-$IMAGE_NAME} \
TZ=$TIMEZONE
RUN mkdir -p /bin/ /config/ /data/ && \
rm -Rf /bin/.gitkeep /config/.gitkeep /config/*/.gitkeep /data/.gitkeep /data/*/.gitkeep && \
apk update -U --no-cache && \
apk add mpd navidrome nginx
COPY ./bin/. /usr/local/bin/
COPY ./config/. /config/
COPY ./data/. /data/
FROM scratch
ARG BUILD_DATE="$(date +'%Y-%m-%d %H:%M')"
LABEL org.label-schema.name="music" \
org.label-schema.description="Containerized version of music" \
org.label-schema.url="https://hub.docker.com/r/casjaysdevdocker/music" \
org.label-schema.vcs-url="https://github.com/casjaysdevdocker/music" \
org.label-schema.build-date=$BUILD_DATE \
org.label-schema.version=$BUILD_DATE \
org.label-schema.vcs-ref=$BUILD_DATE \
org.label-schema.license="$LICENSE" \
org.label-schema.vcs-type="Git" \
org.label-schema.schema-version="latest" \
org.label-schema.vendor="CasjaysDev" \
maintainer="CasjaysDev <docker-admin@casjaysdev.com>"
ENV SHELL="/bin/bash" \
TERM="xterm-256color" \
HOSTNAME="casjaysdev-music" \
TZ="${TZ:-America/New_York}"
WORKDIR /root
VOLUME ["/config","/data"]
EXPOSE $PORT
COPY --from=build /. /
ENTRYPOINT [ "tini", "--" ]
HEALTHCHECK CMD [ "/usr/local/bin/entrypoint-music.sh", "healthcheck" ]
CMD [ "/usr/local/bin/entrypoint-music.sh" ]

13
LICENSE.md Normal file
View File

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2022 casjay <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.

49
README.md Normal file
View File

@ -0,0 +1,49 @@
## 👋 Welcome to music 🚀
play music
## Run container
```shell
dockermgr update music
```
### via command line
```shell
docker pull casjaysdevdocker/music:latest && \
docker run -d \
--restart always \
--name casjaysdevdocker-music \
--hostname casjaysdev-music \
-e TZ=${TIMEZONE:-America/New_York} \
-v $HOME/.local/share/docker/storage/music/music/data:/data \
-v $HOME/.local/share/docker/storage/music/music/config:/config \
-p 80:80 \
casjaysdevdocker/music:latest
```
### via docker-compose
```yaml
version: "2"
services:
music:
image: casjaysdevdocker/music
container_name: music
environment:
- TZ=America/New_York
- HOSTNAME=casjaysdev-music
volumes:
- $HOME/.local/share/docker/storage/music/data:/data:z
- $HOME/.local/share/docker/storage/music/config:/config:z
ports:
- 80:80
restart: always
```
## Authors
🤖 casjay: [Github](https://github.com/casjay) [Docker](https://hub.docker.com/r/casjay) 🤖
⛵ CasjaysDevdDocker: [Github](https://github.com/casjaysdev) [Docker](https://hub.docker.com/r/casjaysdevdocker) ⛵

0
bin/.gitkeep Normal file
View File

132
bin/entrypoint-music.sh Executable file
View File

@ -0,0 +1,132 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202209062132-git
# @@Author : Jason Hempstead
# @@Contact : jason@casjaysdev.com
# @@License : WTFPL
# @@ReadME : entrypoint-music.sh --help
# @@Copyright : Copyright: (c) 2022 Jason Hempstead, Casjays Developments
# @@Created : Tuesday, Sep 06, 2022 21:32 EDT
# @@File : entrypoint-music.sh
# @@Description :
# @@Changelog : New script
# @@TODO : Better documentation
# @@Other :
# @@Resource :
# @@Terminal App : no
# @@sudo/root : no
# @@Template : other/docker-entrypoint
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
APPNAME="$(basename "$0" 2>/dev/null)"
VERSION="202209062132-git"
HOME="${USER_HOME:-$HOME}"
USER="${SUDO_USER:-$USER}"
RUN_USER="${SUDO_USER:-$USER}"
SCRIPT_SRC_DIR="${BASH_SOURCE%/*}"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Set bash options
[ "$1" == "--debug" ] && set -xo pipefail && export SCRIPT_OPTS="--debug" && export _DEBUG="on"
[ "$1" == "--raw" ] && export SHOW_RAW="true"
set -o pipefail
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Set functions
__version() { echo -e ${GREEN:-}"$VERSION"${NC:-}; }
__find() { ls -A "$*" 2>/dev/null; }
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# colorization
[ -n "$SHOW_RAW" ] || printf_color() { echo -e '\t\t'${2:-}"${1:-}${NC}"; }
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
__exec_bash() {
local cmd="${*:-/bin/bash}"
local exitCode=0
echo "Executing command: $cmd"
$cmd || exitCode=10
return ${exitCode:-$?}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Define default variables
TZ="${TZ:-America/New_York}"
HOSTNAME="${HOSTNAME:-casjaysdev-bin}"
BIN_DIR="${BIN_DIR:-/usr/local/bin}"
DATA_DIR="${DATA_DIR:-$(__find /data/ 2>/dev/null | grep '^' || false)}"
CONFIG_DIR="${CONFIG_DIR:-$(__find /config/ 2>/dev/null | grep '^' || false)}"
CONFIG_COPY="${CONFIG_COPY:-false}"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Additional variables
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Export variables
export TZ HOSTNAME
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# import variables from file
[ -f "/root/env.sh" ] && . "/root/env.sh"
[ -f "/config/.env.sh" ] && . "/config/.env.sh"
[ -f "/root/env.sh" ] && [ ! -f "/config/.env.sh" ] && cp -Rf "/root/env.sh" "/config/.env.sh"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Set timezone
[ -n "${TZ}" ] && echo "${TZ}" >/etc/timezone
[ -f "/usr/share/zoneinfo/${TZ}" ] && ln -sf "/usr/share/zoneinfo/${TZ}" "/etc/localtime"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Set hostname
if [ -n "${HOSTNAME}" ]; then
echo "${HOSTNAME}" >/etc/hostname
echo "127.0.0.1 ${HOSTNAME} localhost ${HOSTNAME}.local" >/etc/hosts
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Delete any gitkeep files
[ -n "${CONFIG_DIR}" ] && { [ -d "${CONFIG_DIR}" ] && rm -Rf "${CONFIG_DIR}/.gitkeep" || mkdir -p "/config/"; }
[ -n "${DATA_DIR}" ] && { [ -d "${DATA_DIR}" ] && rm -Rf "${DATA_DIR}/.gitkeep" || mkdir -p "/data/"; }
[ -n "${BIN_DIR}" ] && { [ -d "${BIN_DIR}" ] && rm -Rf "${BIN_DIR}/.gitkeep" || mkdir -p "/bin/"; }
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Copy config files to /etc
if [ -n "${CONFIG_DIR}" ] && [ "${CONFIG_COPY}" = "true" ]; then
for config in ${CONFIG_DIR}; do
if [ -d "/config/$config" ]; then
[ -d "/etc/$config" ] || mkdir -p "/etc/$config"
cp -Rf "/config/$config/." "/etc/$config/"
elif [ -f "/config/$config" ]; then
cp -Rf "/config/$config" "/etc/$config"
fi
done
fi
[ -f "/etc/.env.sh" ] && rm -Rf "/etc/.env.sh"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Additional commands
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case "$1" in
--help) # Help message
echo 'Docker container for '$APPNAME''
echo "Usage: $APPNAME [healthcheck, bash, command]"
echo "Failed command will have exit code 10"
echo
exitCode=$?
;;
healthcheck) # Docker healthcheck
echo "$(uname -s) $(uname -m) is running"
echo _other_commands here
exitCode=$?
;;
*/bin/sh | */bin/bash | bash | shell | sh) # Launch shell
shift 1
__exec_bash "${@:-/bin/bash}"
exitCode=$?
;;
*) # Execute primary command
if [ $# -eq 0 ]; then
__exec_bash "/bin/bash"
else
__exec_bash "/bin/bash"
fi
exitCode=$?
;;
esac
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# end of entrypoint
exit ${exitCode:-$?}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

0
config/.gitkeep Normal file
View File

30
config/mpd/mpd.conf Normal file
View File

@ -0,0 +1,30 @@
# Files and directories #######################################################
music_directory "/data/music"
playlist_directory "/data/playlists"
db_file "/data/mpd/database/tag_cache"
log_file "/data/mpd/mpd.log"
pid_file "/data/mpd/mpd.pid"
state_file "/data/mpd/database/state"
sticker_file "/data/mpd/database/sticker.sql"
user "mpd"
bind_to_address "0.0.0.0"
port "6600"
log_level "default"
gapless_mp3_playback "yes"
restore_paused "no"
save_absolute_paths_in_playlists "yes"
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 "no"
zeroconf_name "mpd server"
# Character Encoding ##########################################################
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
# Input #######################################################################
input {
plugin "curl"
}
###############################################################################

View File

@ -0,0 +1,41 @@
MusicFolder = "/data/music"
PlaylistsPath = "/data/playlists:**/**"
DataFolder = "/data/navidrome"
ScanSchedule = "@every 360m"
BaseUrl = "/"
Address = "127.0.0.1"
Port = 4533
EnableTranscodingConfig = true
TranscodingCacheSize = "500MB"
ImageCacheSize = "100MB"
AutoImportPlaylists = true
UILoginBackgroundUrl = "https://source.unsplash.com/random/1600x900?music"
UIWelcomeMessage = ""
EnableCoverAnimation = true
RecentlyAddedByModTime = false
CoverArtPriority = "embedded, cover.*, folder.*, front.*"
CoverJpegQuality = 75
EnableDownloads = true
SessionTimeout = "720h"
AuthRequestLimit = 5
AuthWindowLength = "20s"
EnableGravatar = false
EnableExternalServices = true
EnableFavourites = true
EnableStarRating = true
EnableUserEditing = true
DefaultTheme = "Dark"
PasswordEncryptionKey = ""
#GATrackingID = ""
# [Scanner]
Extractor = "taglib"
# [LastFM]
#Enabled = true
#ApiKey = ""
#Secret = ""
#Language = "en"
# [ListenBrainz]
Enabled = true

View File

@ -0,0 +1,16 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name *;
location / {
# replace local-address with your navidrome server's IP
proxy_pass http://127.0.0.1:4533/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_buffering off;
}

0
data/.gitkeep Normal file
View File

0
data/mpd/.gitkeep Normal file
View File

0
data/music/.gitkeep Normal file
View File

0
data/navidrome/.gitkeep Normal file
View File

0
data/playlists/.gitkeep Normal file
View File