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.
283 lines
6.7 KiB
283 lines
6.7 KiB
#!/usr/bin/env 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'
|
|
DNS_NAME=adguard
|
|
|
|
# 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_UGID_GUEST=$(stat -c '%u:%g' "${SMB_PATH_PUBLIC}")
|
|
SMB_UID_ADMIN=$(id -u ${SMB_UNAME_ADMIN})
|
|
|
|
# media(jellyfin) service
|
|
MEDIA_UGID=$(stat -c '%u:%g' "${MEDIA_PATH}")
|
|
MEDIA_GID_VIDEO=$(gid_of video)
|
|
DEV_DRI_RENDER='/dev/dri/renderD128'
|
|
if [ -c "${DEV_DRI_RENDER}" ]; then
|
|
MEDIA_GID_RENDER=$(stat -c '%g' "${DEV_DRI_RENDER}")
|
|
fi
|
|
if [ "${MEDIA_GID_VIDEO}" = "${MEDIA_GID_RENDER}" ]; then
|
|
unset MEDIA_GID_RENDER
|
|
fi
|
|
|
|
cat <<-EOF >docker-compose.yml
|
|
version: '3'
|
|
|
|
services:
|
|
# smartdns:
|
|
# image: "lanhost.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
|
|
|
|
adguard:
|
|
image: "adguard/adguardhome:${ARGS_ADGUARD_VERSION}"
|
|
networks:
|
|
localnet:
|
|
ipv4_address: ${DNS_IP}
|
|
ports:
|
|
- 53:53/udp
|
|
- 53:53/tcp
|
|
volumes:
|
|
- adguard_data:/opt/adguardhome
|
|
restart: unless-stopped
|
|
|
|
proxy:
|
|
image: "lanhost.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:
|
|
- ${DNS_NAME}
|
|
restart: unless-stopped
|
|
|
|
samba:
|
|
image: "lanhost.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: "lanhost.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
|
|
|
|
caddy:
|
|
image: "lanhost.top/caddy"
|
|
build:
|
|
context: ./caddy
|
|
args:
|
|
- CADDY_VERSION=${ARGS_CADDY_VERSION}
|
|
# - APK_MIRROR=${ARGS_APK_MIRROR}
|
|
# environment:
|
|
# - TITLE:${SPEED_TITLE}
|
|
# - PASSWORD:${SPEED_PASSWD}
|
|
networks:
|
|
- localnet
|
|
ports:
|
|
- 80:80
|
|
volumes:
|
|
- http_data:/srv/http/motd:rw
|
|
- 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
|
|
|
|
files:
|
|
image: "filebrowser/filebrowser:${ARGS_FILEBROWSER_VERSION}"
|
|
user: ${SMB_UGID_GUEST}
|
|
networks:
|
|
- localnet
|
|
volumes:
|
|
- /srv/share/protect:/srv/protect:ro
|
|
- /srv/share/public:/srv/public
|
|
- /srv/share/tmp:/srv/tmp
|
|
- /srv/share/tmp/.filebrowser.db:/database.db
|
|
restart: unless-stopped
|
|
|
|
jellyfin:
|
|
image: "lanhost.top/jellyfin"
|
|
build:
|
|
context: ./jellyfin
|
|
args:
|
|
- JELLYFIN_VERSION=${ARGS_JELLYFIN_VERSION}
|
|
user: ${MEDIA_UGID}
|
|
group_add:
|
|
- "$(gid_of video)"$( \
|
|
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
|
|
- ${VOLUME_PATH}/jellyfin/fonts:/fonts
|
|
- ${MEDIA_PATH}:/media$( \
|
|
if [ -c "${DEV_DRI_RENDER}" ]; then
|
|
echo
|
|
echo ' devices:'
|
|
echo ' - /dev/dri:/dev/dri'
|
|
fi)$( \
|
|
ls /dev/video* >/dev/null 2>&1 && echo && echo ' devices:' && for dev in /dev/video*; do
|
|
echo " - $dev:$dev"
|
|
done)
|
|
depends_on:
|
|
- ${DNS_NAME}
|
|
restart: unless-stopped
|
|
|
|
motd:
|
|
image: "lanhost.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:
|
|
- ${DNS_NAME}
|
|
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: "lanhost.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:
|
|
- ${DNS_NAME}
|
|
- proxy
|
|
restart: unless-stopped
|
|
EOF_ARIA2
|
|
done)
|
|
|
|
portainer:
|
|
image: "portainer/portainer-ce:${ARGS_PORTAINER_VERSION}"
|
|
networks:
|
|
- localnet
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- portainer_data:/data
|
|
restart: unless-stopped
|
|
|
|
|
|
networks:
|
|
localnet:
|
|
driver: bridge
|
|
attachable: false
|
|
ipam:
|
|
driver: default
|
|
config:
|
|
- subnet: "${BRIDGE_SUBNET}"
|
|
|
|
volumes:
|
|
# smartdns_cache:
|
|
motd_data:
|
|
adguard_data:
|
|
http_data:
|
|
portainer_data:
|
|
EOF
|
|
|