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