fix: add systemd path and service for automatic Caddy reload on route changes

This commit is contained in:
Jakub Dorfman 2026-04-28 20:42:12 +02:00
parent e9045690d5
commit d71e12b3dd
2 changed files with 34 additions and 21 deletions

View file

@ -31,4 +31,17 @@
reverse_proxy 127.0.0.1:9911 reverse_proxy 127.0.0.1:9911
''; '';
}; };
systemd.path."caddy-routes-reload" = {
wantedBy = [ "multi-user.target" ];
pathConfig = {
PathChanged = "/var/lib/containers/routes/routes.caddy";
};
};
systemd.service."caddy-routes-reload" = {
script = ''
systemctl reload caddy
'';
};
} }

View file

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