#!/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}") _VIDEO_DEV='/dev/dri/renderD128' if [ -c "${_VIDEO_DEV}" ]; then MEDIA_GID_RENDER=$(stat -c '%g' "${_VIDEO_DEV}") fi cat <<-EOF >docker-compose.yml version: '3' services: proxy: image: "sigkill.top/proxy" build: context: ./proxy args: - PYTHON_VERSION=${ARGS_PYTHON_VERSION} - ALPINE_VERSION=${ARGS_ALPINE_VERSION} - APK_MIRROR=${ARGS_APK_MIRROR} environment: - NMP_ENDPOINT=${PROXY_NMP_ENDPOINT} - NMP_TOKEN=${PROXY_NMP_TOKEN} networks: - localnet ports: - ${PROXY_SOCKS_PORT}:10086 - ${PROXY_HTTP_PORT}: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} - APK_MIRROR=${ARGS_APK_MIRROR} networks: - localnet ports: - 80:80 volumes: - 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 jellyfin: image: "sigkill.top/jellyfin" build: context: ./jellyfin args: - JELLYFIN_VERSION=${ARGS_JELLYFIN_VERSION} user: ${MEDIA_UGID} group_add:$( \ if [ -n "${MEDIA_GID_RENDER}" ]; then echo " - ${MEDIA_GID_RENDER}" fi)$( \ 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$( \ if [ -c "${_VIDEO_DEV}" ]; then echo ' devices:' echo ' - /dev/dri:/dev/dri' fi) 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: jellyfin_config: jellyfin_cache: motd_data: EOF