Files
mates e153778f0a refactor: prejmenovat docker-update.sh na docker-update-telegram.sh
V tomto repo docker-update.sh je server-side skript s Telegram
notifikaci, zatimco v mates-install-scripts/docker-update.sh
je jiny (obecny, bez Telegramu). Stejny nazev ve 2 repo matou.

Prejmenovano:
- scripts/docker-update.sh -> scripts/docker-update-telegram.sh
- systemd/docker-update.service: ExecStart spravne

masters-install-scripts/docker-update.sh zustava jak je (je to
jiny nastroj).
2026-08-02 11:52:21 +02:00

123 lines
2.9 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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