Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
109 lines
2.4 KiB
Bash
109 lines
2.4 KiB
Bash
#!/bin/bash
|
||
#
|
||
# docker-zalohy.sh - zaloha Docker Compose projektu a jejich dat (./data adresaru)
|
||
# na NAS (nebo jiny backup disk) + Telegram notifikace.
|
||
#
|
||
# Spust jednou rucne: bash docker-zalohy.sh
|
||
# Spust automaticky: systemd timer docker-zalohy.timer (kazde utery 20:00)
|
||
#
|
||
# Konfigurace: /home/mates/.telegram.conf
|
||
# Log: /home/mates/zalohy/docker/docker.log
|
||
#
|
||
|
||
set -euo pipefail
|
||
|
||
# === KONFIGURACE ===
|
||
USER_NAME="mates"
|
||
WORK_DIR="/home/$USER_NAME"
|
||
SOURCE_DIR="$WORK_DIR/docker"
|
||
BACKUP_DIR="$WORK_DIR/zalohy/docker"
|
||
LOG_FILE="$BACKUP_DIR/docker.log"
|
||
CONFIG_FILE="$WORK_DIR/.telegram.conf"
|
||
|
||
# Seznam sluzeb k zalohovani (uprav podle potreby)
|
||
APP_DIRS=(
|
||
audiobookshelf
|
||
calibre-web
|
||
flatnotes
|
||
homeassistant
|
||
jswiki
|
||
miniflux
|
||
nginx
|
||
plex
|
||
speedtest
|
||
vaultwarden
|
||
wiki
|
||
glance
|
||
)
|
||
|
||
DATE_DIR=$(date +"%Y%m%d")
|
||
TIMESTAMP=$(date +"%H%M%S")
|
||
HOST=$(hostname)
|
||
|
||
# === 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 "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji" >> "$LOG_FILE"
|
||
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 "[$(date '+%Y-%m-%d %H:%M:%S')] ️ Telegram chyba" >> "$LOG_FILE"
|
||
}
|
||
|
||
# === HLAVNI LOGIKA ===
|
||
mkdir -p "$BACKUP_DIR/$DATE_DIR"
|
||
|
||
START_TIME=$(date +%s)
|
||
ZALOHOVANO=()
|
||
CHYBY=()
|
||
|
||
for APP in "${APP_DIRS[@]}"; do
|
||
APP_PATH="$SOURCE_DIR/$APP"
|
||
if [[ ! -d "$APP_PATH" ]]; then
|
||
continue
|
||
fi
|
||
|
||
cd "$APP_PATH"
|
||
|
||
# Pokud existuje data/ adresar, zalohuj ho
|
||
if [[ -d "./data" ]]; then
|
||
BACKUP_FILE="$BACKUP_DIR/$DATE_DIR/${APP}-${TIMESTAMP}.tar.zst"
|
||
|
||
if tar --zstd -cf "$BACKUP_FILE" -C "$APP_PATH" data 2>>"$LOG_FILE"; then
|
||
ZALOHOVANO+=("$APP ($(du -h "$BACKUP_FILE" | cut -f1))")
|
||
else
|
||
CHYBY+=("$APP")
|
||
fi
|
||
fi
|
||
done
|
||
|
||
END_TIME=$(date +%s)
|
||
DURATION=$((END_TIME - START_TIME))
|
||
|
||
if [[ ${#CHYBY[@]} -eq 0 ]]; then
|
||
send_msg " *[$HOST]* Docker zalohy dokonceny (${DURATION}s).
|
||
Zalohovano: ${#ZALOHOVANO[@]} sluzeb
|
||
Adresar: \`$BACKUP_DIR/$DATE_DIR\`"
|
||
else
|
||
send_msg "️ *[$HOST]* Docker zalohy dokonceny s chybami.
|
||
Zalohovano: ${#ZALOHOVANO[@]}
|
||
Chyby: ${CHYBY[*]}"
|
||
fi
|
||
|
||
exit 0
|