From a0b67cf30baefd582797821da0347014122d52af Mon Sep 17 00:00:00 2001 From: Carlos Martino Date: Fri, 27 Mar 2026 19:44:00 -0300 Subject: [PATCH] Add HA watchdog --- Docker/Nginx/compose.yml | 39 +++++++++++++++++++++++++++++++++++++++ ha_watchdog.sh | 22 ++++++++++++++++++++++ setup_homelogic.sh | 39 ++++++++++++++++++++++++++++++++++----- 3 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 Docker/Nginx/compose.yml create mode 100644 ha_watchdog.sh diff --git a/Docker/Nginx/compose.yml b/Docker/Nginx/compose.yml new file mode 100644 index 0000000..1fffbd7 --- /dev/null +++ b/Docker/Nginx/compose.yml @@ -0,0 +1,39 @@ +services: + app: + image: 'jc21/nginx-proxy-manager:latest' + restart: unless-stopped + ports: + - '80:80' # Public HTTP Port + - '443:443' # Public HTTPS Port + - '81:81' # Admin Web Port + environment: + TZ: "America/Santiago" + DB_POSTGRES_HOST: 'db' + DB_POSTGRES_PORT: '5432' + DB_POSTGRES_USER: 'npm' + DB_POSTGRES_PASSWORD: '4d621b77253c5e32beba2ea33a57dc3f' + DB_POSTGRES_NAME: 'npm' + DISABLE_IPV6: 'true' + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt + networks: + - homelogic + depends_on: + - db + + db: + image: postgres:17 + environment: + POSTGRES_USER: 'npm' + POSTGRES_PASSWORD: '4d621b77253c5e32beba2ea33a57dc3f' + POSTGRES_DB: 'npm' + volumes: + - ./postgresql:/var/lib/postgresql + networks: + - homelogic + +networks: + homelogic: + name: homelogic + external: true \ No newline at end of file diff --git a/ha_watchdog.sh b/ha_watchdog.sh new file mode 100644 index 0000000..b592f85 --- /dev/null +++ b/ha_watchdog.sh @@ -0,0 +1,22 @@ +#!/bin/bash +HA_URL="http://localhost:8123" +STATE_FILE="/tmp/ha_watchdog_state" + +if curl -s -m 10 "$HA_URL" > /dev/null; then + echo "0" > "$STATE_FILE" +else + STATE="0" + if [ -f "$STATE_FILE" ]; then + STATE=$(cat "$STATE_FILE") + fi + + if [ "$STATE" -eq 1 ]; then + # Already tried restarting once, failed again -> Reboot + echo "0" > "$STATE_FILE" + sudo reboot + else + # Try returning the container to life + docker restart HomeAssistant + echo "1" > "$STATE_FILE" + fi +fi diff --git a/setup_homelogic.sh b/setup_homelogic.sh index 4b14303..22f5259 100755 --- a/setup_homelogic.sh +++ b/setup_homelogic.sh @@ -14,6 +14,7 @@ LINE_DOCKER=5 LINE_ZSH=6 LINE_TAILSCALE=7 LINE_WIFITUI=8 +LINE_HA_WATCHDOG=9 teardown_ui() { local ROWS @@ -32,7 +33,7 @@ setup_ui() { LOG_END=$ROWS LOG_START=$(( LOG_END - MAX_LOG_LINES + 1 )) - local MIN_LOG_START=$(( LINE_WIFITUI + 4 )) + local MIN_LOG_START=$(( LINE_HA_WATCHDOG + 4 )) if [ "$LOG_START" -le "$(( MIN_LOG_START - 1 ))" ]; then LOG_START=$MIN_LOG_START fi @@ -49,6 +50,7 @@ setup_ui() { printf "\033[${LINE_ZSH};1H [ ] ZSH\n" printf "\033[${LINE_TAILSCALE};1H [ ] Tailscale\n" printf "\033[${LINE_WIFITUI};1H [ ] Wifitui\n" + printf "\033[${LINE_HA_WATCHDOG};1H [ ] HA Watchdog\n" printf "\033[${SEP_LINE};1H${YELLOW}--- Verbose Logs ------------------------${NC}\n" @@ -57,6 +59,7 @@ setup_ui() { update_status "$LINE_ZSH" "Pending" update_status "$LINE_TAILSCALE" "Pending" update_status "$LINE_WIFITUI" "Pending" + update_status "$LINE_HA_WATCHDOG" "Pending" printf "\033[${LOG_START};${LOG_END}r" printf "\033[${LOG_END};1H" @@ -70,7 +73,7 @@ update_status() { Pending) color="${NC}" ;; Running) color="${BLUE}" ;; Installed) color="${GREEN}" ;; - Skipped) color="${YELLOW}" ;; + Skipped|Removed) color="${YELLOW}" ;; esac printf "\0337\033[%d;4H${color}%-10s${NC}\0338" "$line" "$status" } @@ -80,7 +83,7 @@ print_step() { } print_info() { - local IL=${INFO_LINE:-$(( LINE_WIFITUI + 2 ))} + local IL=${INFO_LINE:-$(( LINE_HA_WATCHDOG + 2 ))} printf "\0337\033[${IL};1H\033[K${CYAN} ➜ %s${NC}\0338" "$1" printf "${CYAN}➜ %s${NC}\n" "$1" } @@ -109,8 +112,10 @@ setup_server() { print_step "Setting up Server" print_info "Updating packages and configuring firewall..." sudo apt-get update - sudo ufw allow 22/tcp - sudo ufw allow 443/tcp + sudo ufw allow 22/tcp #ssh + sudo ufw allow 80/tcp #nginx + sudo ufw allow 81/tcp #nginx + sudo ufw allow 443/tcp #nginx sudo ufw allow 8123/tcp #homeassistant sudo ufw allow 8123/udp #homeassistant sudo ufw allow 3000/tcp #nextcloud @@ -195,6 +200,27 @@ setup_wifitui() { update_status "$line" "Installed" } +setup_ha_watchdog() { + local line="$1" + local watchdog_path="$(cd "$(dirname "$0")" && pwd)/ha_watchdog.sh" + + print_step "Setting up HA Watchdog" + if [ -f "/etc/cron.d/ha_watchdog" ]; then + print_info "Uninstalling HA Watchdog..." + sudo rm -f "/etc/cron.d/ha_watchdog" + sudo rm -f "/usr/local/bin/ha_watchdog.sh" 2>/dev/null || true + update_status "$line" "Removed" + else + print_info "Configuring HA Watchdog script permissions..." + chmod +x "$watchdog_path" + + print_info "Creating cron job (every 5 minutes)..." + echo "*/5 * * * * root $watchdog_path" | sudo tee /etc/cron.d/ha_watchdog > /dev/null + + update_status "$line" "Installed" + fi +} + main() { clear printf "\n${BLUE}=========================================${NC}\n" @@ -231,10 +257,12 @@ main() { setup_zsh ask_optional_step "$LINE_TAILSCALE" "Tailscale" setup_tailscale ask_optional_step "$LINE_WIFITUI" "Wifitui" setup_wifitui + ask_optional_step "$LINE_HA_WATCHDOG" "HA Watchdog" setup_ha_watchdog ;; 2) update_status "$LINE_TAILSCALE" "Skipped" update_status "$LINE_WIFITUI" "Skipped" + update_status "$LINE_HA_WATCHDOG" "Skipped" setup_server setup_docker setup_zsh @@ -245,6 +273,7 @@ main() { update_status "$LINE_ZSH" "Skipped" ask_optional_step "$LINE_TAILSCALE" "Tailscale" setup_tailscale ask_optional_step "$LINE_WIFITUI" "Wifitui" setup_wifitui + ask_optional_step "$LINE_HA_WATCHDOG" "HA Watchdog" setup_ha_watchdog ;; esac