Merge pull request #85 from outis1one/claude/zealous-heisenberg-8ylloi

Claude/zealous heisenberg 8ylloi
This commit is contained in:
Outis
2026-06-20 00:19:22 -04:00
committed by GitHub
40 changed files with 769 additions and 368 deletions
+19 -8
View File
@@ -202,7 +202,24 @@ install_actualbudget() {
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
cat > docker-compose.yml << 'AB_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << AB_COMPOSE
name: actualbudget
services:
@@ -216,13 +233,7 @@ services:
- ./data:/data
env_file:
- .env
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
AB_COMPOSE
cat > .env << AB_ENV
+19 -8
View File
@@ -195,7 +195,24 @@ install_archivebox() {
ensure_docker_dir_ownership "$AB_DIR"
cd "$AB_DIR" || return 1
cat > docker-compose.yml << 'ABCOMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << ABCOMPOSE
name: archivebox
services:
@@ -214,13 +231,7 @@ services:
- ./data:/data
ports:
- "8000:8000"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
ABCOMPOSE
cat > .env << ABENV
+18 -7
View File
@@ -233,6 +233,23 @@ install_arm() {
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << ARM_COMPOSE
name: arm
@@ -258,13 +275,7 @@ services:
# Add more optical drives as needed:
# - /dev/sr1:/dev/sr1
privileged: true
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
ARM_COMPOSE
cat > .env << ARM_ENV
+18 -7
View File
@@ -208,6 +208,23 @@ install_audiobookshelf() {
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << ABS_COMPOSE
name: audiobookshelf
@@ -226,13 +243,7 @@ services:
- \${PODCASTS_PATH:-./podcasts}:/podcasts
ports:
- "13378:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
ABS_COMPOSE
cat > .env << ABS_ENV
+18 -7
View File
@@ -197,6 +197,23 @@ install_calibre_web() {
ensure_docker_dir_ownership "$CW_DIR"
cd "$CW_DIR" || return 1
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << CW_COMPOSE
name: calibre-web
@@ -216,13 +233,7 @@ services:
- ./books:/books
ports:
- "8083:8083"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
CW_COMPOSE
cat > .env << CW_ENV
+21 -12
View File
@@ -197,7 +197,24 @@ install_changedetection() {
ensure_docker_dir_ownership "$CD_DIR"
cd "$CD_DIR" || return 1
cat > docker-compose.yml << 'CD_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << CD_COMPOSE
name: changedetection
services:
@@ -209,13 +226,11 @@ services:
ports:
- "5000:5000"
environment:
- BASE_URL=${BASE_URL}
- BASE_URL=\${BASE_URL}
- PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000
volumes:
- ./data:/datastore
networks:
- caddy_net
depends_on:
${_CADDY_NET_BLOCK} depends_on:
- playwright-chrome
playwright-chrome:
@@ -225,13 +240,7 @@ services:
restart: unless-stopped
environment:
- DEFAULT_LAUNCH_ARGS=--no-sandbox --disable-dev-shm-usage
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
CD_COMPOSE
cat > .env << CD_ENV
+19 -8
View File
@@ -214,7 +214,24 @@ install_drum-rhythm-game() {
chown -R "$ACTUAL_USER:$ACTUAL_USER" "$DRUM_DIR/html"
cat > docker-compose.yml << 'DRUM_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << DRUM_COMPOSE
name: drum-rhythm-game
services:
@@ -227,13 +244,7 @@ services:
- ./html:/usr/share/nginx/html:ro
ports:
- "8096:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
DRUM_COMPOSE
cat > .env << DRUM_ENV
+18 -7
View File
@@ -222,6 +222,23 @@ install_emby() {
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << EMBY_COMPOSE
name: emby
@@ -244,13 +261,7 @@ services:
# Uncomment for hardware transcoding (Intel/AMD):
# devices:
# - /dev/dri:/dev/dri
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
EMBY_COMPOSE
cat > .env << EMBY_ENV
+18 -7
View File
@@ -199,6 +199,23 @@ install_filebrowser() {
local FB_PATH=""
prompt_text "Primary files directory to browse [default: $ACTUAL_HOME]:" "$ACTUAL_HOME" FB_PATH
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << FB_COMPOSE
name: filebrowser
@@ -215,13 +232,7 @@ services:
- ${FB_PATH}:/files
ports:
- "8085:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
FB_COMPOSE
cat > .env << FB_ENV
+20 -9
View File
@@ -214,7 +214,24 @@ install_fmd() {
local FMD_PASS
FMD_PASS=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9' | head -c 16)
cat > docker-compose.yml << 'FMD_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << FMD_COMPOSE
name: fmd
services:
@@ -224,18 +241,12 @@ services:
hostname: fmd
restart: unless-stopped
environment:
- FMD_ADMIN_PASSWORD=${FMD_ADMIN_PASSWORD}
- FMD_ADMIN_PASSWORD=\${FMD_ADMIN_PASSWORD}
volumes:
- ./data:/fmd/data
ports:
- "8084:8080"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
FMD_COMPOSE
cat > .env << FMD_ENV
+19 -7
View File
@@ -375,6 +375,23 @@ ENVEOF
[ -n "$DRI_LINE" ] && DEVICES_BLOCK="${DEVICES_BLOCK}\n ${DRI_LINE}"
fi
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > "$DIR/docker-compose.yml" << 'COMPOSEEOF'
# Frigate NVR + Mosquitto MQTT + frigate-notify
# Generated by ubuntu-post-install setup.sh
@@ -416,9 +433,7 @@ COMPOSEEOF
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
networks:
- caddy_net
healthcheck:
${_CADDY_NET_BLOCK} healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:5000/api/version"]
interval: 10s
timeout: 5s
@@ -451,10 +466,7 @@ COMPOSEEOF
volumes:
- ./frigate-notify/config.yml:/app/config.yml:ro
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
COMPOSEEOF
log_success "docker-compose.yml written"
+19 -8
View File
@@ -211,7 +211,24 @@ install_frigate-notify() {
ensure_docker_dir_ownership "$FN_DIR"
cd "$FN_DIR" || return 1
cat > docker-compose.yml << 'FN_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << FN_COMPOSE
name: frigate-notify
services:
@@ -222,13 +239,7 @@ services:
restart: unless-stopped
volumes:
- ./config.yml:/app/config.yml:ro
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
FN_COMPOSE
# Smart defaults based on what's installed
+18 -7
View File
@@ -230,6 +230,23 @@ install_frigate() {
log_warning "No /dev/dri/renderD128 — Frigate will use CPU detection."
fi
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << FRIGATE_COMPOSE
name: frigate
@@ -256,13 +273,7 @@ $DEVICE_BLOCK
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
FRIGATE_COMPOSE
cat > .env << FRIGATE_ENV
+19 -8
View File
@@ -210,7 +210,24 @@ install_gatus() {
local TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
cat > docker-compose.yml << 'GATUS_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << GATUS_COMPOSE
name: gatus
services:
@@ -225,13 +242,7 @@ services:
volumes:
- ./gatus_config:/config
- ./gatus_data:/data
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
GATUS_COMPOSE
cat > .env << GATUS_ENV
+16 -6
View File
@@ -218,11 +218,25 @@ install_homeassistant() {
else
HA_NET_LINES=" ports:
- \"8123:8123\""
HA_CADDY_NET_LINES=" networks:
if [ -d "$DOCKER_DIR/caddy" ]; then
HA_CADDY_NET_LINES=" networks:
- caddy_net"
else
HA_CADDY_NET_LINES=""
fi
echo " → Bridge networking selected (port 8123 published)."
fi
local _CADDY_NET_SECTION=""
if [ "$HA_NETMODE" != "2" ] && [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << HOMEASSISTANT_COMPOSE
name: homeassistant
@@ -240,11 +254,7 @@ services:
- /run/dbus:/run/dbus:ro
${HA_NET_LINES}
${HA_CADDY_NET_LINES}
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
HOMEASSISTANT_COMPOSE
mkdir -p config
+18 -7
View File
@@ -197,6 +197,23 @@ install_homebox() {
ensure_docker_dir_ownership "$HB_DIR"
cd "$HB_DIR" || return 1
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << HB_COMPOSE
name: homebox
@@ -213,13 +230,7 @@ services:
- ./data:/data
ports:
- "7745:7745"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
HB_COMPOSE
cat > .env << HB_ENV
+38 -33
View File
@@ -291,17 +291,34 @@ install_immich() {
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
# ── Write docker-compose.yml ────────────────────────────────────────────
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
if [ -n "$EXTERNAL_LIBRARY" ]; then
cat > docker-compose.yml << 'IMMICH_COMPOSE'
cat > docker-compose.yml << IMMICH_COMPOSE
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
image: ghcr.io/immich-app/immich-server:\${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- ${EXTERNAL_LIBRARY}:/usr/src/app/external:ro
- \${UPLOAD_LOCATION}:/usr/src/app/upload
- \${EXTERNAL_LIBRARY}:/usr/src/app/external:ro
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
@@ -313,12 +330,10 @@ services:
restart: always
healthcheck:
disable: false
networks:
- caddy_net
${_CADDY_NET_BLOCK}
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
image: ghcr.io/immich-app/immich-machine-learning:\${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
@@ -338,32 +353,28 @@ services:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_PASSWORD: \${DB_PASSWORD}
POSTGRES_USER: \${DB_USERNAME}
POSTGRES_DB: \${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
- \${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
model-cache:
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
IMMICH_COMPOSE
else
cat > docker-compose.yml << 'IMMICH_COMPOSE'
cat > docker-compose.yml << IMMICH_COMPOSE
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
image: ghcr.io/immich-app/immich-server:\${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- \${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
@@ -375,12 +386,10 @@ services:
restart: always
healthcheck:
disable: false
networks:
- caddy_net
${_CADDY_NET_BLOCK}
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
image: ghcr.io/immich-app/immich-machine-learning:\${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
@@ -400,21 +409,17 @@ services:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_PASSWORD: \${DB_PASSWORD}
POSTGRES_USER: \${DB_USERNAME}
POSTGRES_DB: \${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
- \${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
model-cache:
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
IMMICH_COMPOSE
fi
+25 -20
View File
@@ -268,8 +268,25 @@ install_iopaint() {
# Volume ./models:/root/.cache persists ALL model caches:
# /root/.cache/torch/hub/checkpoints/ (LaMa, CV2, ZITS, etc.)
# /root/.cache/huggingface/ (SD, PowerPaint, LDM, etc.)
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
if [[ "$USE_GPU" =~ ^[Yy]$ ]]; then
cat > docker-compose.yml << 'IOPAINT_GPU'
cat > docker-compose.yml << IOPAINT_GPU
name: iopaint
services:
@@ -280,8 +297,8 @@ services:
restart: unless-stopped
command: >-
iopaint start
--model=${MODEL:-lama}
--device=${DEVICE:-cuda}
--model=\${MODEL:-lama}
--device=\${DEVICE:-cuda}
--port=8080
--host=0.0.0.0
ports:
@@ -298,16 +315,10 @@ services:
- driver: nvidia
count: 1
capabilities: [gpu]
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
IOPAINT_GPU
else
cat > docker-compose.yml << 'IOPAINT_CPU'
cat > docker-compose.yml << IOPAINT_CPU
name: iopaint
services:
@@ -318,8 +329,8 @@ services:
restart: unless-stopped
command: >-
iopaint start
--model=${MODEL:-lama}
--device=${DEVICE:-cpu}
--model=\${MODEL:-lama}
--device=\${DEVICE:-cpu}
--port=8080
--host=0.0.0.0
ports:
@@ -329,13 +340,7 @@ services:
- ./models:/root/.cache
- ./input:/app/input
- ./output:/app/output
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
IOPAINT_CPU
fi
+18 -7
View File
@@ -225,6 +225,23 @@ install_jellyfin() {
log_warning "No /dev/dri/renderD128 — Jellyfin will use CPU transcoding."
fi
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << JELLYFIN_COMPOSE
name: jellyfin
@@ -245,13 +262,7 @@ $HWACCEL_BLOCK
- "8096:8096"
- "1900:1900/udp"
- "7359:7359/udp"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
JELLYFIN_COMPOSE
cat > .env << JELLYFIN_ENV
+20 -11
View File
@@ -201,7 +201,24 @@ install_joplin() {
DB_PASS="$(generate_password 32)"
local BASE_URL="https://joplin.${SITE_DOMAIN}"
cat > docker-compose.yml << 'JOPLIN_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << JOPLIN_COMPOSE
name: joplin
services:
@@ -215,9 +232,7 @@ services:
env_file: .env
ports:
- "22300:22300"
networks:
- caddy_net
${_CADDY_NET_BLOCK}
joplin-db:
image: postgres:15-alpine
container_name: joplin-db
@@ -226,13 +241,7 @@ services:
env_file: .env
volumes:
- ./db-data:/var/lib/postgresql/data
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
JOPLIN_COMPOSE
cat > .env << JOPLIN_ENV
+17 -9
View File
@@ -346,8 +346,19 @@ install_koha() {
ensure_docker_dir_ownership "$KOHA_DIR"
cd "$KOHA_DIR" || return 1
local _CADDY_NET_ENTRY=""
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_ENTRY=" - caddy_net
"
_CADDY_NET_SECTION=" caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
# ── docker-compose.yml ────────────────────────────────────────────────────
cat > docker-compose.yml << 'KOHA_COMPOSE'
cat > docker-compose.yml << KOHA_COMPOSE
name: koha
services:
@@ -370,18 +381,17 @@ services:
- koha-rabbitmq
networks:
- koha_internal
- caddy_net
${_CADDY_NET_ENTRY}
koha-db:
image: mariadb:11
container_name: koha-db
hostname: koha-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_ROOT_PASSWORD: \${DB_ROOT_PASS}
MYSQL_DATABASE: koha_default
MYSQL_USER: koha_default
MYSQL_PASSWORD: ${DB_PASS}
MYSQL_PASSWORD: \${DB_PASS}
volumes:
- ./data:/var/lib/mysql
networks:
@@ -402,16 +412,14 @@ services:
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: koha
RABBITMQ_DEFAULT_PASS: ${RABBIT_PASS}
RABBITMQ_DEFAULT_PASS: \${RABBIT_PASS}
networks:
- koha_internal
networks:
koha_internal:
internal: true
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
KOHA_COMPOSE
# ── config-main.env ───────────────────────────────────────────────────────
-4
View File
@@ -242,10 +242,6 @@ services:
- ./playlists:/playlists:rw
- /etc/localtime:/etc/localtime:ro
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
LYRION_COMPOSE
cat > .env << LYRION_ENV
+18 -7
View File
@@ -231,6 +231,23 @@ install_magicmirror() {
ensure_docker_dir_ownership "$MM_DIR"
cd "$MM_DIR" || continue
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << MM_COMPOSE
name: mm-$MM_PORT
@@ -248,13 +265,7 @@ services:
- ./css:/opt/magic_mirror/css
ports:
- "$MM_PORT:8080"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
MM_COMPOSE
mkdir -p config modules css
+20 -9
View File
@@ -212,7 +212,24 @@ install_mail-archiver() {
ADMIN_PASS=$(generate_password 24)
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
cat > docker-compose.yml << 'MA_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << MA_COMPOSE
name: mail-archiver
services:
@@ -227,9 +244,7 @@ services:
depends_on:
mailarchiver-db:
condition: service_healthy
networks:
- caddy_net
${_CADDY_NET_BLOCK}
mailarchiver-db:
image: postgres:17-alpine
container_name: mailarchiver-db
@@ -246,11 +261,7 @@ services:
timeout: 10s
retries: 5
start_period: 30s
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
MA_COMPOSE
cat > .env << MA_ENV
+24 -15
View File
@@ -247,7 +247,24 @@ install_mattermost() {
prompt_text "Mattermost site URL [$SITE_URL]:" "$SITE_URL" CONFIGURED_SITEURL
[[ -n "$CONFIGURED_SITEURL" ]] && SITE_URL="$CONFIGURED_SITEURL"
cat > docker-compose.yml << 'EOF'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << EOF
name: mattermost
services:
@@ -259,10 +276,8 @@ services:
env_file: .env
volumes:
- ./db:/var/lib/postgresql/data
networks:
- caddy_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
${_CADDY_NET_BLOCK} healthcheck:
test: ["CMD-SHELL", "pg_isready -U \${POSTGRES_USER} -d \${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
@@ -284,9 +299,7 @@ services:
ports:
- "8065:8065"
- "8443:8443/udp"
networks:
- caddy_net
${_CADDY_NET_BLOCK}
coturn:
image: coturn/coturn:latest
container_name: mattermost-coturn
@@ -298,8 +311,8 @@ services:
- --listening-ip=0.0.0.0
- --fingerprint
- --use-auth-secret
- --static-auth-secret=${COTURN_SECRET}
- --realm=${MM_REALM:-localhost}
- --static-auth-secret=\${COTURN_SECRET}
- --realm=\${MM_REALM:-localhost}
- --min-port=49153
- --max-port=49352
- --no-tls
@@ -308,11 +321,7 @@ services:
- --no-multicast-peers
- --log-file=stdout
restart: unless-stopped
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_SECTION}
EOF
cat > .env << EOF
+18 -7
View File
@@ -212,6 +212,23 @@ install_mealie() {
MEALIE_BASE_URL="https://recipes.${SITE_DOMAIN}"
fi
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << MEALIE_COMPOSE
name: mealie
@@ -233,13 +250,7 @@ services:
- ./data:/app/data
ports:
- "9925:9000"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
MEALIE_COMPOSE
cat > .env << MEALIE_ENV
+22 -11
View File
@@ -215,7 +215,24 @@ install_meshcentral() {
ensure_docker_dir_ownership "$MC_DIR"
cd "$MC_DIR" || return 1
cat > docker-compose.yml << 'MC_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << MC_COMPOSE
name: meshcentral
services:
@@ -226,9 +243,9 @@ services:
restart: unless-stopped
environment:
- NODE_ENV=production
- HOSTNAME=${MC_HOSTNAME:-localhost}
- REVERSE_PROXY=${MC_REVERSE_PROXY:-false}
- REVERSE_PROXY_TLS_PORT=${MC_TLS_PORT:-443}
- HOSTNAME=\${MC_HOSTNAME:-localhost}
- REVERSE_PROXY=\${MC_REVERSE_PROXY:-false}
- REVERSE_PROXY_TLS_PORT=\${MC_TLS_PORT:-443}
- IFRAME=false
- ALLOW_NEW_ACCOUNTS=true
- WEBRTC=true
@@ -239,13 +256,7 @@ services:
ports:
- "4430:443"
- "4433:4433"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
MC_COMPOSE
cat > .env << MC_ENV
+22 -11
View File
@@ -197,7 +197,24 @@ install_n8n() {
ensure_docker_dir_ownership "$N8N_DIR"
cd "$N8N_DIR" || return 1
cat > docker-compose.yml << 'N8N_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << N8N_COMPOSE
name: n8n
services:
@@ -213,18 +230,12 @@ services:
environment:
- N8N_PORT=5678
- N8N_PROTOCOL=https
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-UTC}
- N8N_HOST=${N8N_HOST:-n8n}
- WEBHOOK_URL=${WEBHOOK_URL}
- GENERIC_TIMEZONE=\${GENERIC_TIMEZONE:-UTC}
- N8N_HOST=\${N8N_HOST:-n8n}
- WEBHOOK_URL=\${WEBHOOK_URL}
volumes:
- ./data:/home/node/.n8n
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
N8N_COMPOSE
cat > .env << N8N_ENV
+20 -11
View File
@@ -205,8 +205,25 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/*
NCDF
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
# ── docker-compose.yml ──────────────────────────────────────────────────
cat > docker-compose.yml << 'NCCOMPOSE'
cat > docker-compose.yml << NCCOMPOSE
name: nextcloud
services:
nextcloud:
@@ -223,9 +240,7 @@ services:
- ./custom_apps:/var/www/html/custom_apps
ports:
- "8080:80"
networks:
- caddy_net
${_CADDY_NET_BLOCK}
db:
image: mariadb:10.11
container_name: nextcloud-db
@@ -234,13 +249,7 @@ services:
env_file: .env
volumes:
- ./db:/var/lib/mysql
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
NCCOMPOSE
# ── .env ────────────────────────────────────────────────────────────────
+20 -9
View File
@@ -203,7 +203,24 @@ install_ntfy() {
ensure_docker_dir_ownership "$NTFY_DIR"
cd "$NTFY_DIR" || return 1
cat > docker-compose.yml << 'NTFY_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << NTFY_COMPOSE
name: ntfy
services:
@@ -214,19 +231,13 @@ services:
restart: unless-stopped
command: serve
environment:
- TZ=${TZ}
- TZ=\${TZ}
volumes:
- ./cache:/var/cache/ntfy
- ./config:/etc/ntfy
ports:
- "8090:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
NTFY_COMPOSE
cat > .env << NTFY_ENV
+19 -8
View File
@@ -243,8 +243,25 @@ install_onlyoffice() {
fi
[[ -z "$JWT_SECRET" ]] && JWT_SECRET="$(generate_password 32)"
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
# ── docker-compose.yml ──────────────────────────────────────────────────
cat > docker-compose.yml << 'OOCOMPOSE'
cat > docker-compose.yml << OOCOMPOSE
name: onlyoffice
services:
onlyoffice:
@@ -259,13 +276,7 @@ services:
- ./fonts:/usr/share/fonts/truetype/custom
ports:
- "8082:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
OOCOMPOSE
# ── .env ────────────────────────────────────────────────────────────────
+19 -8
View File
@@ -194,7 +194,24 @@ install_portainer() {
ensure_docker_dir_ownership "$PORTAINER_DIR"
cd "$PORTAINER_DIR" || return 1
cat > docker-compose.yml << 'PORTAINER_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << PORTAINER_COMPOSE
name: portainer
services:
@@ -209,13 +226,7 @@ services:
ports:
- "9000:9000"
- "9443:9443"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
PORTAINER_COMPOSE
mkdir -p data
+19 -8
View File
@@ -197,7 +197,24 @@ install_stirling_pdf() {
ensure_docker_dir_ownership "$PDF_DIR"
cd "$PDF_DIR" || return 1
cat > docker-compose.yml << 'PDF_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << PDF_COMPOSE
name: stirling-pdf
services:
@@ -213,13 +230,7 @@ services:
- ./training-data:/usr/share/tessdata
- ./extraConfigs:/configs
- ./logs:/logs
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
PDF_COMPOSE
cat > .env << PDF_ENV
+18 -7
View File
@@ -172,6 +172,23 @@ install_syncthing() {
PUID="$(id -u "$ACTUAL_USER")"
PGID="$(id -g "$ACTUAL_USER")"
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << EOF
name: syncthing
@@ -193,13 +210,7 @@ services:
volumes:
- ./config:/var/syncthing/config
- ./data:/var/syncthing
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
EOF
cat > .env << ENV
+19 -8
View File
@@ -203,7 +203,24 @@ install_traccar() {
ensure_docker_dir_ownership "$TRACCAR_DIR"
cd "$TRACCAR_DIR" || return 1
cat > docker-compose.yml << 'TRACCAR_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << TRACCAR_COMPOSE
name: traccar
services:
@@ -220,13 +237,7 @@ services:
- "8082:8082"
- "5000-5150:5000-5150"
- "5000-5150:5000-5150/udp"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
TRACCAR_COMPOSE
mkdir -p logs data config
+22 -12
View File
@@ -118,8 +118,25 @@ install_unifi() {
UID_VAL=$(id -u "$ACTUAL_USER")
GID_VAL=$(id -g "$ACTUAL_USER")
# Single-quoted heredoc: ${...} left literal for Docker Compose to expand from .env
cat > docker-compose.yml << 'UNIFI_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
# Unquoted heredoc; ${...} used for caddy_net vars; all Docker Compose vars escaped with \$
cat > docker-compose.yml << UNIFI_COMPOSE
name: unifi
services:
@@ -158,20 +175,13 @@ services:
# - "8880:8880" # guest portal HTTP
# - "6789:6789" # mobile speed test
# - "5514:5514/udp" # remote syslog
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
# Inline MongoDB init — Docker Compose interpolates vars from .env at startup.
configs:
init-mongo.js:
content: |
db.getSiblingDB("${MONGO_DBNAME}").createUser({user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [{role: "${MONGO_ROLE}", db: "${MONGO_DBNAME}"}]});
db.getSiblingDB("${MONGO_DBNAME}_stat").createUser({user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [{role: "${MONGO_ROLE}", db: "${MONGO_DBNAME}_stat"}]});
db.getSiblingDB("\${MONGO_DBNAME}").createUser({user: "\${MONGO_USER}", pwd: "\${MONGO_PASS}", roles: [{role: "\${MONGO_ROLE}", db: "\${MONGO_DBNAME}"}]});
db.getSiblingDB("\${MONGO_DBNAME}_stat").createUser({user: "\${MONGO_USER}", pwd: "\${MONGO_PASS}", roles: [{role: "\${MONGO_ROLE}", db: "\${MONGO_DBNAME}_stat"}]});
UNIFI_COMPOSE
cat > .env << UNIFI_ENV
+19 -8
View File
@@ -196,7 +196,24 @@ install_uptimekuma() {
ensure_docker_dir_ownership "$UPTIME_DIR"
cd "$UPTIME_DIR" || return 1
cat > docker-compose.yml << 'UPTIME_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << UPTIME_COMPOSE
name: uptime-kuma
services:
@@ -210,13 +227,7 @@ services:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "3001:3001"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
UPTIME_COMPOSE
mkdir -p data
+19 -8
View File
@@ -242,7 +242,24 @@ install_vaultwarden() {
prompt_text "SMTP password:" "" SMTP_PASS
fi
cat > docker-compose.yml << 'VW_COMPOSE'
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << VW_COMPOSE
name: vaultwarden
services:
@@ -256,13 +273,7 @@ services:
- ./vaultwarden_data:/data
ports:
- "8888:80"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: ${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
VW_COMPOSE
cat > .env << VW_ENV
+18 -7
View File
@@ -128,6 +128,23 @@ install_watchtower() {
NTFY_URL="http://ntfy/watchtower"
fi
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << WT_COMPOSE
name: watchtower
@@ -152,13 +169,7 @@ services:
- WATCHTOWER_DEBUG=false
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
WT_COMPOSE
# Create .env
+18 -7
View File
@@ -234,6 +234,23 @@ install_wg-easy() {
# Escape $ in hash for docker-compose env (bcrypt hashes contain $$)
local WG_HASH_ESCAPED="${WG_PASSWORD_HASH//\$/\$\$}"
local _CADDY_NET_BLOCK=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_BLOCK=" networks:
- caddy_net
"
fi
local _CADDY_NET_SECTION=""
if [ -d "$DOCKER_DIR/caddy" ]; then
_CADDY_NET_SECTION="
networks:
caddy_net:
external: true
name: ${SITE_CADDY_NET:-caddy_net}
"
fi
cat > docker-compose.yml << WGEASY_COMPOSE
name: wg-easy
@@ -258,13 +275,7 @@ services:
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
networks:
- caddy_net
networks:
caddy_net:
external: true
name: \${CADDY_NET:-caddy_net}
${_CADDY_NET_BLOCK}${_CADDY_NET_SECTION}
WGEASY_COMPOSE
cat > .env << WGEASY_ENV