Docker services on my home NAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

198 lines
4.6 KiB

#!/usr/bin/bash
set -e
source ./custom.env
###########################
### Configs - Automatic ###
###########################
gid_of() {
getent group "$1" | cut -d':' -f3
}
# samba/wsdd service
SMB_GID_PRIVATE=$(stat -c '%g' "${SMB_PATH_PRIVATE}")
SMB_GID_PROTECT=$(stat -c '%g' "${SMB_PATH_PROTECT}")
SMB_GID_PUBLIC=$(stat -c '%g' "${SMB_PATH_PUBLIC}")
SMB_UID_GUEST=$(stat -c '%u' "${SMB_PATH_PUBLIC}")
SMB_UID_ADMIN=$(id -u ${SMB_UNAME_ADMIN})
# media(jellyfin) service
MEDIA_UGID=$(stat -c '%u:%g' "${MEDIA_PATH}")
MEDIA_GID_RENDER=$(stat -c '%g' /dev/dri/renderD128)
cat <<-EOF >docker-compose.yml
version: '3'
services:
nmp:
image: "oxfs.io/nmp"
build:
context: ./nmp
args:
- PYTHON_VERSION=${ARGS_PYTHON_VERSION}
- ALPINE_VERSION=${ARGS_ALPINE_VERSION}
environment:
- NMP_ENDPOINT=${PROXY_NMP_ENDPOINT}
- NMP_TOKEN=${PROXY_NMP_TOKEN}
networks:
- localnet
ports:
- ${PROXY_SOCKS_PORT}:10086
#- 10080:10080
restart: unless-stopped
samba:
image: "sigkill.top/samba"
build:
context: ./samba
args:
- ALPINE_VERSION=${ARGS_ALPINE_VERSION}
- APK_MIRROR=${ARGS_APK_MIRROR}
environment:
- GID_PRIVATE=${SMB_GID_PRIVATE}
- GID_PROTECT=${SMB_GID_PROTECT}
- GID_PUBLIC=${SMB_GID_PUBLIC}
- UID_GUEST=${SMB_UID_GUEST}
- UID_ADMIN=${SMB_UID_ADMIN}
- ADMIN_NAME=${SMB_UNAME_ADMIN}
- ADMIN_PASSWD=${SMB_ADMIN_PASSWD}
networks:
- localnet
ports:
- 137:137/udp
- 138:138/udp
- 139:139/tcp
- 445:445/tcp
volumes:
- ${SMB_PATH_PRIVATE}:/mnt/share/private
- ${SMB_PATH_PROTECT}:/mnt/share/protect
- ${SMB_PATH_PUBLIC}:/mnt/share/public
- ${SMB_PATH_TMP}:/mnt/share/tmp
restart: unless-stopped
wsdd2:
image: "sigkill.top/wsdd2"
build:
context: ./wsdd2
args:
- ALPINE_VERSION=${ARGS_ALPINE_VERSION}
- APK_MIRROR=${ARGS_APK_MIRROR}
environment:
- HOSTNAME=$(hostname)
- WORKGROUP=${SMB_WORKGROUP:-WORKGROUP}
network_mode: host
restart: unless-stopped
nginx:
image: "sigkill.top/nginx"
build:
context: ./nginx
args:
- NGINX_VERSION=${ARGS_NGINX_VERSION}
networks:
- localnet
ports:
- 80:80
volumes:
- etc_nginx:/etc/nginx
- www_data:/srv/http
- motd_data:/srv/http/motd:ro
- /srv/share/protect:/srv/http/files/protect:ro
- /srv/share/public:/srv/http/files/public:ro
- /srv/share/tmp:/srv/http/files/tmp:ro
restart: unless-stopped
php-fpm:
image: "php:${ARGS_PHP_VERSION}-fpm-alpine${ARGS_ALPINE_VERSION}"
networks:
- localnet
volumes:
- www_data:/srv/http
- /srv/share/protect:/srv/http/files/protect:ro
- /srv/share/public:/srv/http/files/public:ro
- /srv/share/tmp:/srv/http/files/tmp:ro
restart: unless-stopped
jellyfin:
image: "sigkill.top/jellyfin"
build:
context: ./jellyfin
args:
- JELLYFIN_VERSION=${ARGS_JELLYFIN_VERSION}
user: ${MEDIA_UGID}
group_add:
- "$MEDIA_GID_RENDER"$( \
for GNAME in "${MEDIA_GNAME_EXTRA[@]}"; do
echo
echo " - \"$(gid_of $GNAME)\""
done)$( \
if [ -n "${MEDIA_PUBLISHED_URL}" ]; then
echo
echo " environment:"
echo " - JELLYFIN_PublishedServerUrl=${MEDIA_PUBLISHED_URL}"
fi)
network_mode: host
volumes:
- jellyfin_config:/config
- jellyfin_cache:/cache
- ${MEDIA_PATH}:/media
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
motd:
image: "sigkill.top/motd"
build:
context: ./motd
args:
- ALPINE_VERSION=${ARGS_ALPINE_VERSION}
- APK_MIRROR=${ARGS_APK_MIRROR}
environment:
- TZ=${TZ:-Asia/Shanghai}
networks:
- localnet
volumes:
- motd_data:/mnt/motd
restart: unless-stopped
$(for CONF in ${ARIA2_CONFS[@]}; do
SRV_NAME="aria2-$(echo $CONF | cut -d':' -f1)"
SRV_PATH="$(echo $CONF | cut -d':' -f2)"
SRV_UGID=$(stat -c '%u:%g' "${SRV_PATH}")
cat <<-EOF_ARIA2
$SRV_NAME:
image: "sigkill.top/aria2"
build:
context: ./aria2
args:
- ALPINE_VERSION=${ARGS_ALPINE_VERSION}
- APK_MIRROR=${ARGS_APK_MIRROR}
user: ${SRV_UGID}
networks:
- localnet
volumes:
- ${SRV_PATH}:/mnt/downloads
restart: unless-stopped
EOF_ARIA2
done)
networks:
localnet:
driver: bridge
attachable: false
ipam:
driver: default
config:
- subnet: "172.16.10.0/24"
volumes:
etc_nginx:
www_data:
jellyfin_config:
jellyfin_cache:
motd_data:
EOF