diff --git a/scripts/ddns-cert-sync.sh b/scripts/ddns-cert-sync.sh index 7a30baa..b41aadc 100644 --- a/scripts/ddns-cert-sync.sh +++ b/scripts/ddns-cert-sync.sh @@ -9,8 +9,22 @@ set -euo pipefail LOCK_FILE="/tmp/caddy-ddns-cert-sync.lock" STATE_FILE="/var/lib/caddy/last_ip.txt" LOG_FILE="/var/log/caddy-ddns-cert-sync.log" -CADDY_BIN="/usr/bin/caddy" IP_CHECK_URL="https://api.ipify.org?format=txt" +CRITICAL_DOMAINS=("recept.gynther.se" "jellyfin.gynther.se" "wetty.gynther.se") +DOCKER_CONTAINER_NAME="caddy" + +# Create directory for state file if it doesn't exist +if [ ! -d "/var/lib/caddy" ]; then + sudo mkdir -p /var/lib/caddy + sudo touch "$STATE_FILE" + sudo chown $USER:$USER "$STATE_FILE" +fi + +# Create log file if it doesn't exist +if [ ! -f "$LOG_FILE" ]; then + sudo touch "$LOG_FILE" + sudo chown $USER:$USER "$LOG_FILE" +fi # Logging function log() { @@ -24,12 +38,15 @@ if [ -f "$LOCK_FILE" ]; then fi # Create lock file -trap "rm -f '$LOCK_FILE'; exit" INT TERM EXIT +trap 'rm -f "$LOCK_FILE"; exit' INT TERM EXIT touch "$LOCK_FILE" # Get current public IP get_current_ip() { - curl -s --max-time 10 "$IP_CHECK_URL" || echo "" + curl -s --max-time 10 "$IP_CHECK_URL" || { + log "ERROR: Failed to fetch current IP from $IP_CHECK_URL" + echo "" + } } # Read last known IP from state file @@ -56,6 +73,28 @@ test_https() { fi } +# Reload Caddy in Docker container +reload_caddy_in_docker() { + if docker ps | grep -q "$DOCKER_CONTAINER_NAME"; then + log "Reloading Caddy in Docker container '$DOCKER_CONTAINER_NAME'..." + if docker exec "$DOCKER_CONTAINER_NAME" caddy reload --config /etc/caddy/Caddyfile; then + log "Caddy reloaded successfully in Docker." + return 0 + else + log "ERROR: Failed to reload Caddy in Docker. Attempting container restart." + docker restart "$DOCKER_CONTAINER_NAME" || { + log "ERROR: Failed to restart Caddy container." + return 1 + } + log "Caddy container restarted." + return 0 + fi + else + log "ERROR: Caddy container '$DOCKER_CONTAINER_NAME' is not running." + return 1 + fi +} + # Main execution log "Starting IP check and Caddy sync" @@ -90,24 +129,13 @@ log "IP changed from $LAST_IP to $CURRENT_IP. Triggering Caddy reload and TLS ve # Update state file write_current_ip "$CURRENT_IP" -# Reload Caddy to ensure DNS and TLS are synchronized -if [ -x "$CADDY_BIN" ]; then - log "Reloading Caddy..." - if "$CADDY_BIN" reload --config /etc/caddy/Caddyfile; then - log "Caddy reloaded successfully." - else - log "ERROR: Failed to reload Caddy. Attempting restart." - "$CADDY_BIN" stop || true - sleep 2 - "$CADDY_BIN" start --config /etc/caddy/Caddyfile --adapter caddyfile || log "ERROR: Failed to restart Caddy." - fi -else - log "ERROR: Caddy binary not found at $CADDY_BIN" +# Reload Caddy in Docker +if ! reload_caddy_in_docker; then + log "ERROR: Failed to reload/restart Caddy in Docker." fi # Verify HTTPS for critical domains log "Running HTTPS verification for critical domains..." -CRITICAL_DOMAINS=("recept.gynther.se" "jellyfin.gynther.se" "wetty.gynther.se") for domain in "${CRITICAL_DOMAINS[@]}"; do if test_https "$domain"; then log "HTTPS test PASSED for $domain"