#!/usr/bin/bash set -e source ./custom.env ########################### ### Configs - Automatic ### ########################### gid_of() { getent group "$1" | cut -d':' -f3 } # network BRIDGE_SUBNET='172.16.10.0/24' DNS_IP='172.16.10.53' # 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}") DEV_DRI_RENDER='/dev/dri/renderD128' if [ -c "${DEV_DRI_RENDER}" ]; then MEDIA_GID_RENDER=$(stat -c '%g' "${DEV_DRI_RENDER}") fi cat <<-EOF >docker-compose.yml version: '3' services: smartdns: image: "sigkill.top/smartdns" build: context: ./smartdns args: - ALPINE_VERSION=${ARGS_ALPINE_VERSION} - APK_MIRROR=${ARGS_APK_MIRROR} networks: localnet: ipv4_address: ${DNS_IP} ports: - 53:53/udp - 53:53/tcp volumes: - smartdns_cache:/smartdns restart: unless-stopped 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 dns: - ${DNS_IP} ports: - ${PROXY_SOCKS_PORT}:10086 # - ${PROXY_HTTP_PORT}:10080 - 20080:20080 - 20086:20086 depends_on: - smartdns 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} environment: - TITLE:${SPEED_TITLE} - PASSWORD:${SPEED_PASSWD} 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 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 dns: - ${DNS_IP} volumes: - ${VOLUME_PATH}/jellyfin/config:/config - ${VOLUME_PATH}/jellyfin/cache:/cache - ${MEDIA_PATH}:/media devices:$( \ if [ -c "${DEV_DRI_RENDER}" ]; then echo echo ' - /dev/dri:/dev/dri' fi)$( \ ls /dev/video* >/dev/null 2>&1 && echo && for dev in /dev/video*; do echo " - $dev:$dev" done) depends_on: - smartdns 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 dns: - ${DNS_IP} volumes: - motd_data:/mnt/motd depends_on: - smartdns 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 depends_on: - smartdns restart: unless-stopped EOF_ARIA2 done) networks: localnet: driver: bridge attachable: false ipam: driver: default config: - subnet: "${BRIDGE_SUBNET}" volumes: smartdns_cache: motd_data: EOF