#!/bin/bash # # docker-update.sh - aktualizace Docker Compose projektu na tomto serveru # (docker compose pull + up -d) + Telegram notifikace. # # Spust jednou rucne: bash docker-update.sh # Spust automaticky: systemd timer docker-update.timer (kazdou sobotu 18:00) # # Konfigurace: /home/mates/.telegram.conf # Log: /home/mates/skripty/update-docker-script/docker-update.log # set -euo pipefail # === KONFIGURACE === USER_NAME="mates" WORK_DIR="/home/$USER_NAME" ZAKLADNI_SLOZKA="$WORK_DIR/docker" LOG="$WORK_DIR/skripty/update-docker-script/docker-update.log" CONFIG_FILE="$WORK_DIR/.telegram.conf" DATUM=$(date '+%Y-%m-%d %H:%M:%S') HOST=$(hostname) # Seznam sluzeb k aktualizaci (uprav podle potreby) AKTUALIZOVAT=( audiobookshelf calibre-web glance homeassistant jswiki plex portainer rustdesk speedtest vaultwarden nginx ) # === TELEGRAM KONFIGURACE === if [[ -f "$CONFIG_FILE" ]]; then # shellcheck disable=SC1090 source "$CONFIG_FILE" fi TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}" TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}" # === TELEGRAM HELPER === send_msg() { local TEXT="$1" if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then echo "$DATUM ️ Telegram neni nakonfigurovan, preskakuji" >> "$LOG" return 0 fi curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -d chat_id="${TELEGRAM_CHAT_ID}" \ -d text="$TEXT" \ -d parse_mode="Markdown" \ --max-time 10 \ --retry 3 > /dev/null || echo "$DATUM ️ Telegram chyba" >> "$LOG" } # === HLAVNI LOGIKA === echo "$DATUM === docker-update.sh spusten ===" >> "$LOG" send_msg " *[$HOST]* Spoustim aktualizaci Docker kontejneru..." # Vytvor log adresar pokud neexistuje mkdir -p "$(dirname "$LOG")" AKTUALIZOVANO=() CHYBY=() for SLUZBA in "${AKTUALIZOVAT[@]}"; do SLUZBA_PATH="$ZAKLADNI_SLOZKA/$SLUZBA" if [[ ! -d "$SLUZBA_PATH" ]]; then echo "$DATUM SKIP: $SLUZBA (slozka neexistuje)" >> "$LOG" continue fi if [[ ! -f "$SLUZBA_PATH/docker-compose.yml" ]]; then echo "$DATUM SKIP: $SLUZBA (docker-compose.yml chybi)" >> "$LOG" continue fi echo "$DATUM === Aktualizuji: $SLUZBA ===" >> "$LOG" cd "$SLUZBA_PATH" # Stahnout nove image if docker compose pull 2>>"$LOG"; then # Restart s novym image if docker compose up -d 2>>"$LOG"; then AKTUALIZOVANO+=("$SLUZBA") echo "$DATUM OK: $SLUZBA aktualizovan" >> "$LOG" else CHYBY+=("$SLUZBA (up)") echo "$DATUM CHYBA: $SLUZBA - up -d selhalo" >> "$LOG" fi else CHYBY+=("$SLUZBA (pull)") echo "$DATUM CHYBA: $SLUZBA - pull selhalo" >> "$LOG" fi done # === SOUHRN === POCET_OK=${#AKTUALIZOVANO[@]} POCET_CHYB=${#CHYBY[@]} if [[ $POCET_CHYB -eq 0 ]]; then send_msg " *[$HOST]* Docker aktualizace dokoncena. Aktualizovano: $POCET_OK sluzeb Seznam: ${AKTUALIZOVANO[*]}" else send_msg "️ *[$HOST]* Docker aktualizace dokoncena s chybami. Aktualizovano: $POCET_OK Chyby: ${CHYBY[*]}" fi echo "$DATUM === docker-update.sh dokoncen ===" >> "$LOG" exit 0