fix: enhance caddy reload logic to use admin API and improve validation checks

This commit is contained in:
Jakub Dorfman 2026-04-27 12:14:12 +02:00
parent 39e3337b8a
commit a34eac4235

View file

@ -330,25 +330,49 @@ cmd_render_route() {
} }
maybe_reload_caddy() { maybe_reload_caddy() {
# Try Caddy admin API first (no root required)
if curl -sf -X POST http://localhost:2019/config/ >/dev/null 2>&1; then
echo "reloaded caddy via admin API"
return
fi
# Validate config if caddy binary is available
if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then
/run/current-system/sw/bin/caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile || echo "warning: caddy validation failed" >&2 /run/current-system/sw/bin/caddy validate \
--config /etc/caddy/Caddyfile --adapter caddyfile \
|| echo "warning: caddy validation failed" >&2
fi fi
# Fall back to systemctl (sudo if needed)
if [[ "${EUID}" -eq 0 ]]; then if [[ "${EUID}" -eq 0 ]]; then
systemctl reload caddy systemctl reload caddy && echo "reloaded caddy"
echo "reloaded caddy" elif sudo -n /run/current-system/sw/bin/systemctl reload caddy 2>/dev/null; then
return
fi
if command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then
sudo -n /run/current-system/sw/bin/systemctl reload caddy
echo "reloaded caddy via sudo" echo "reloaded caddy via sudo"
return else
echo "caddy reload requires root; run: sudo systemctl reload caddy"
fi fi
echo "caddy reload requires root; run: sudo systemctl reload caddy"
} }
# maybe_reload_caddy() {
# if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then
# /run/current-system/sw/bin/caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile || echo "warning: caddy validation failed" >&2
# fi
# if [[ "${EUID}" -eq 0 ]]; then
# systemctl reload caddy
# echo "reloaded caddy"
# return
# fi
# if command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then
# sudo -n /run/current-system/sw/bin/systemctl reload caddy
# echo "reloaded caddy via sudo"
# return
# fi
# echo "caddy reload requires root; run: sudo systemctl reload caddy"
# }
cmd_deploy() { cmd_deploy() {
local name="$1" local name="$1"
validate_name "${name}" validate_name "${name}"