Files
mates-server-maintenance/scripts/docker-zalohy.sh
T
mates fba29e5171 feat: systemd timery + skripty pro udrzbu serveru
Skripty (4):
- update.sh: apt update + upgrade + restart kdyz nutny + Telegram
- docker-update.sh: docker compose pull + up -d pro vsechny sluzby
- docker-zalohy.sh: tar.zst zaloha data/ adresaru na NAS
- server-report.sh: denni Telegram report (uptime, RAM, disk, Docker)

Systemd (8 - 4x service + 4x timer):
- docker-update: kazdou sobotu 18:00
- docker-zalohy: kazde utery 20:00
- server-report: kazdy den 09:30
- update-rpi: kazdy patek 18:00

Konfigurace:
- conf/telegram.conf.example: sablona pro Telegram credentials
- vsechny skripty ctou z /home/<user>/.telegram.conf (chmod 600)

Poznamka:
- vsechny cesty (/home/mates) a hostname jsou pevne v service souborech
- pro jineho uzivatele uprav User=, WorkingDirectory=, ExecStart=
- zadne IP adresy, tokeny ani PII v gitu
2026-08-01 22:26:40 +02:00

109 lines
2.6 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