Replace CADDY_REMOTE_HOST with explicit CADDY_MODE in site config
The old CADDY_REMOTE_HOST variable was confusingly named — it sounded like the Caddy server's address but actually stored this machine's IP (so Caddy knew how to reach services here). Services don't need to know where Caddy is; they only need to know whether to write a Caddyfile or create a snippet. Changes in lib/common.sh: - Add CADDY_MODE=local|remote|none as the authoritative setting - load_site_config: parse CADDY_MODE; if old CADDY_REMOTE_HOST present and CADDY_MODE unset, infer CADDY_MODE=remote (backward compat) - save_site_config: write CADDY_MODE, drop CADDY_REMOTE_HOST output - configure_caddy_for_service: use CADDY_MODE for mode detection; for remote snippets auto-detect this machine's primary IP via hostname -I instead of requiring a stored value (still falls back to CADDY_REMOTE_HOST if present in an old .config) Changes in setup.sh (run_site_configure wizard): - Replace free-text "Caddy remote host" prompt with a 3-choice menu: [1] This machine [2] Remote machine [3] None/skip - Existing installs with CADDY_REMOTE_HOST pre-select option 2 automatically https://claude.ai/code/session_01S7UecmQRG6CKTYPoBqbVLj
This commit is contained in:
+29
-20
@@ -56,7 +56,8 @@ SITE_DOMAIN=""
|
||||
SITE_CADDY_NET="caddy_net"
|
||||
SITE_PUID=""
|
||||
SITE_PGID=""
|
||||
CADDY_REMOTE_HOST="" # LAN IP/hostname of this machine, used when Caddy runs elsewhere
|
||||
CADDY_MODE="" # local | remote | none (set by site configure wizard)
|
||||
CADDY_REMOTE_HOST="" # legacy — kept for backward compat with old .config files
|
||||
|
||||
load_site_config() {
|
||||
local cfg="$DOCKER_DIR/.config"
|
||||
@@ -66,16 +67,19 @@ load_site_config() {
|
||||
[[ "$key" =~ ^[[:space:]]*# ]] && continue
|
||||
[[ -z "${key// }" ]] && continue
|
||||
case "$key" in
|
||||
SITE_TZ) SITE_TZ="$val" ;;
|
||||
SITE_DOMAIN) SITE_DOMAIN="$val" ;;
|
||||
SITE_TZ) SITE_TZ="$val" ;;
|
||||
SITE_DOMAIN) SITE_DOMAIN="$val" ;;
|
||||
SITE_CADDY_NET) SITE_CADDY_NET="$val" ;;
|
||||
SITE_PUID) SITE_PUID="$val" ;;
|
||||
SITE_PGID) SITE_PGID="$val" ;;
|
||||
CADDY_MODE) CADDY_MODE="$val" ;;
|
||||
CADDY_REMOTE_HOST) CADDY_REMOTE_HOST="$val" ;;
|
||||
BASE_DOMAIN) [ -z "$SITE_DOMAIN" ] && SITE_DOMAIN="$val" ;;
|
||||
esac
|
||||
done < "$cfg"
|
||||
export SITE_TZ SITE_DOMAIN SITE_CADDY_NET SITE_PUID SITE_PGID CADDY_REMOTE_HOST
|
||||
# Backward compat: old installs used CADDY_REMOTE_HOST to signal remote mode
|
||||
[ -z "$CADDY_MODE" ] && [ -n "$CADDY_REMOTE_HOST" ] && CADDY_MODE="remote"
|
||||
export SITE_TZ SITE_DOMAIN SITE_CADDY_NET SITE_PUID SITE_PGID CADDY_MODE CADDY_REMOTE_HOST
|
||||
}
|
||||
|
||||
save_site_config() {
|
||||
@@ -87,11 +91,11 @@ save_site_config() {
|
||||
[ -n "$SITE_TZ" ] && echo "SITE_TZ=$SITE_TZ"
|
||||
[ -n "$SITE_DOMAIN" ] && echo "SITE_DOMAIN=$SITE_DOMAIN"
|
||||
[ -n "$SITE_CADDY_NET" ] && echo "SITE_CADDY_NET=$SITE_CADDY_NET"
|
||||
[ -n "$SITE_PUID" ] && echo "SITE_PUID=$SITE_PUID"
|
||||
[ -n "$SITE_PGID" ] && echo "SITE_PGID=$SITE_PGID"
|
||||
[ -n "$CADDY_REMOTE_HOST" ] && echo "CADDY_REMOTE_HOST=$CADDY_REMOTE_HOST"
|
||||
[ -n "$SITE_PUID" ] && echo "SITE_PUID=$SITE_PUID"
|
||||
[ -n "$SITE_PGID" ] && echo "SITE_PGID=$SITE_PGID"
|
||||
[ -n "$CADDY_MODE" ] && echo "CADDY_MODE=$CADDY_MODE"
|
||||
# Backward-compat alias for services that still read BASE_DOMAIN directly
|
||||
[ -n "$SITE_DOMAIN" ] && echo "BASE_DOMAIN=$SITE_DOMAIN"
|
||||
[ -n "$SITE_DOMAIN" ] && echo "BASE_DOMAIN=$SITE_DOMAIN"
|
||||
} > "$cfg"
|
||||
chmod 600 "$cfg"
|
||||
}
|
||||
@@ -280,12 +284,11 @@ configure_caddy_for_service() {
|
||||
esac
|
||||
|
||||
# ── Determine Caddy mode ──────────────────────────────────────────────────
|
||||
# local: Caddy container running on this machine → write Caddyfile + reload
|
||||
# remote: Caddy on another machine → generate snippet file to copy over
|
||||
# none: no Caddy anywhere → silent return
|
||||
local _CADDY_MODE="none"
|
||||
[ -d "$DOCKER_DIR/caddy" ] && _CADDY_MODE="local"
|
||||
[ -n "$CADDY_REMOTE_HOST" ] && [ "$_CADDY_MODE" != "local" ] && _CADDY_MODE="remote"
|
||||
# Explicit CADDY_MODE (set by site wizard) takes priority.
|
||||
# Fall back to: local if ~/docker/caddy exists, remote if legacy CADDY_REMOTE_HOST set.
|
||||
local _CADDY_MODE="${CADDY_MODE:-none}"
|
||||
[ "$_CADDY_MODE" = "none" ] && [ -d "$DOCKER_DIR/caddy" ] && _CADDY_MODE="local"
|
||||
[ "$_CADDY_MODE" = "none" ] && [ -n "${CADDY_REMOTE_HOST:-}" ] && _CADDY_MODE="remote"
|
||||
[ "$_CADDY_MODE" = "none" ] && return 0
|
||||
|
||||
echo ""
|
||||
@@ -294,11 +297,10 @@ configure_caddy_for_service() {
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
if [ "$_CADDY_MODE" = "remote" ]; then
|
||||
echo " Remote Caddy configured ($CADDY_REMOTE_HOST)."
|
||||
echo " A snippet file will be saved to ~/docker/caddy-snippets/ for you to"
|
||||
echo " copy to your Caddy machine."
|
||||
echo " Caddy is on a remote machine — a snippet file will be saved to"
|
||||
echo " ~/docker/caddy-snippets/ for you to copy to your Caddy machine."
|
||||
else
|
||||
echo "Caddy is installed. You can configure a reverse proxy for $SERVICE_NAME."
|
||||
echo " Caddy is installed on this machine."
|
||||
fi
|
||||
echo ""
|
||||
|
||||
@@ -329,8 +331,15 @@ configure_caddy_for_service() {
|
||||
# Build the site block — upstream differs by mode
|
||||
local _BLOCK_UPSTREAM="$_UPSTREAM"
|
||||
if [ "$_CADDY_MODE" = "remote" ]; then
|
||||
# Remote Caddy can't resolve Docker container names — use host IP + published port
|
||||
_BLOCK_UPSTREAM="${CADDY_REMOTE_HOST}:${_DISPLAY_PORT}"
|
||||
# Remote Caddy can't resolve Docker container names — use this machine's IP + published port.
|
||||
# Prefer legacy CADDY_REMOTE_HOST if set (old installs that stored it explicitly),
|
||||
# otherwise auto-detect the primary non-loopback IP.
|
||||
local _THIS_IP="${CADDY_REMOTE_HOST:-}"
|
||||
if [ -z "$_THIS_IP" ]; then
|
||||
_THIS_IP="$(hostname -I 2>/dev/null | awk '{print $1}')"
|
||||
fi
|
||||
[ -z "$_THIS_IP" ] && _THIS_IP="$(hostname -f 2>/dev/null || echo "127.0.0.1")"
|
||||
_BLOCK_UPSTREAM="${_THIS_IP}:${_DISPLAY_PORT}"
|
||||
fi
|
||||
|
||||
local _SITE_BLOCK
|
||||
|
||||
@@ -122,19 +122,34 @@ run_site_configure() {
|
||||
local _cur_tz="${SITE_TZ:-$_sys_tz}"
|
||||
local _cur_dom="${SITE_DOMAIN:-}"
|
||||
local _cur_net="${SITE_CADDY_NET:-caddy_net}"
|
||||
local _cur_caddy_host="${CADDY_REMOTE_HOST:-}"
|
||||
# Resolve current Caddy mode for display — handle legacy CADDY_REMOTE_HOST
|
||||
local _cur_mode="${CADDY_MODE:-}"
|
||||
[ -z "$_cur_mode" ] && [ -n "${CADDY_REMOTE_HOST:-}" ] && _cur_mode="remote"
|
||||
[ -z "$_cur_mode" ] && _cur_mode="local"
|
||||
|
||||
prompt_text " Timezone [${_cur_tz}]:" "$_cur_tz" SITE_TZ
|
||||
prompt_text " Base domain (e.g., example.com) [${_cur_dom:-<not set>}]:" "$_cur_dom" SITE_DOMAIN
|
||||
prompt_text " Caddy Docker network [${_cur_net}]:" "$_cur_net" SITE_CADDY_NET
|
||||
|
||||
echo ""
|
||||
echo " Caddy location: leave blank if Caddy runs on THIS machine (default)."
|
||||
echo " Set to this machine's LAN IP or hostname if Caddy runs on a DIFFERENT"
|
||||
echo " machine — service installers will generate snippet files to copy over."
|
||||
prompt_text " Caddy remote host (LAN IP/hostname) [${_cur_caddy_host:-<this machine>}]:" "$_cur_caddy_host" CADDY_REMOTE_HOST
|
||||
echo " Where does Caddy run?"
|
||||
echo " [1] This machine — Caddy installed here (default)"
|
||||
echo " [2] Remote machine — different server, VPN node, or Netbird peer"
|
||||
echo " (service installers save snippet files to ~/docker/caddy-snippets/)"
|
||||
echo " [3] None / skip — configure Caddy later"
|
||||
echo ""
|
||||
local _caddy_default="1"
|
||||
case "$_cur_mode" in remote) _caddy_default="2" ;; none) _caddy_default="3" ;; esac
|
||||
local _caddy_choice=""
|
||||
prompt_text " Caddy location [${_caddy_default}]:" "$_caddy_default" _caddy_choice
|
||||
case "${_caddy_choice:-$_caddy_default}" in
|
||||
2) CADDY_MODE="remote" ;;
|
||||
3) CADDY_MODE="none" ;;
|
||||
*) CADDY_MODE="local" ;;
|
||||
esac
|
||||
CADDY_REMOTE_HOST="" # clear legacy value; CADDY_MODE is authoritative now
|
||||
|
||||
export SITE_TZ SITE_DOMAIN SITE_CADDY_NET CADDY_REMOTE_HOST
|
||||
export SITE_TZ SITE_DOMAIN SITE_CADDY_NET CADDY_MODE CADDY_REMOTE_HOST
|
||||
mkdir -p "$DOCKER_DIR"
|
||||
save_site_config
|
||||
log_success "Saved to $DOCKER_DIR/.config"
|
||||
|
||||
Reference in New Issue
Block a user