fix(services): conditional caddy_net across all Docker service scripts
Only include the caddy_net network block in generated docker-compose.yml files when ~/docker/caddy exists. Prevents "network caddy_net declared as external, but could not be found" on standalone installs without Caddy. Affected: actualbudget, archivebox, arm, audiobookshelf, calibre-web, changedetection, drum-rhythm-game, emby, fmd, frigate, frigate-audio, frigate-notify, gatus, homeassistant, immich, iopaint, jellyfin, joplin, koha, lyrion, magicmirror, mail-archiver, mattermost, mealie, meshcentral, n8n, nextcloud, ntfy, onlyoffice, portainer, stirling-pdf, syncthing, traccar, unifi, uptimekuma, vaultwarden, wg-easy Skipped: authelia (creates caddy_net itself), caddy, crowdsec, wolf, wolf-pair, and services using network_mode: host with no caddy_net. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
+20
-9
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+38
-33
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 ───────────────────────────────────────────────────────
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user