notebookvb
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
# ==============================================================================
|
||||
# KanboardBackup — záloha Docker appdata kontejneru Kanboard
|
||||
# ==============================================================================
|
||||
#
|
||||
# CO DĚLÁ:
|
||||
# Zastaví kontejner Kanboard, zazálohuje celý jeho appdata adresář jako tar.gz,
|
||||
# pak kontejner znovu nastartuje. Záloha obsahuje konfiguraci, pluginy,
|
||||
# uploadované soubory a lokální data Kanboard.
|
||||
#
|
||||
# POZNÁMKA K DATABÁZI:
|
||||
# Kanboard používá MySQL — ta je zálohována samostatně skriptem
|
||||
# 3_MYSQL_BACKUP_WITH_GZIP (databáze "kanboard"). Tento skript zálohuje
|
||||
# pouze appdata (souborová část aplikace), nikoli databázi.
|
||||
#
|
||||
# PROČ STOP/START:
|
||||
# Kanboard může zapisovat do souborů (session, cache, uploady) za běhu.
|
||||
# Stop zaručí konzistentní snapshot bez rizika poškozených souborů v archivu.
|
||||
#
|
||||
# SCHEDULE:
|
||||
# Spouštěn jako Unraid User Script "KanboardBackup" — daily (4:40 ráno).
|
||||
#
|
||||
# STRUKTURA ZÁLOHY:
|
||||
# /mnt/user/Backup/Critical/KanboardBackup/tower/kanboard_YYYYMMDD_HHMMSS.tar.gz
|
||||
#
|
||||
# ROTACE:
|
||||
# Zálohy starší než KEEP_DAYS dní jsou automaticky mazány.
|
||||
#
|
||||
# RESTORE:
|
||||
# tar -xzf kanboard_DATUM.tar.gz -C /mnt/user/appdata
|
||||
# (pak docker start kanboard)
|
||||
# Databázi obnovit zvlášť z MySQL zálohy.
|
||||
# ==============================================================================
|
||||
|
||||
CONTAINER="kanboard" # název kontejneru v Unraid
|
||||
APPDATA_DIR="/mnt/user/appdata/kanboard" # zdrojový adresář dat Kanboard
|
||||
BACKUP_DIR="/mnt/user/Backup/Critical/KanboardBackup/tower" # kam se zálohy ukládají
|
||||
DATE=$(date +%Y%m%d_%H%M%S) # timestamp pro unikátní název souboru
|
||||
BACKUP_FILE="${BACKUP_DIR}/kanboard_${DATE}.tar.gz" # výsledný archiv
|
||||
KEEP_DAYS=7 # počet dní po které se zálohy uchovávají
|
||||
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting Kanboard backup"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# STOP KONTEJNERU
|
||||
# Zastavíme Kanboard před zálohou — souborový systém appdata (uploady, cache,
|
||||
# sessions) musí být v klidovém stavu pro konzistentní archiv.
|
||||
# Pokud stop selže, skript okamžitě skončí — nechceme zálohovat za běhu.
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Stopping container: ${CONTAINER}"
|
||||
docker stop "${CONTAINER}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Failed to stop container"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# VYTVOŘENÍ ARCHIVU
|
||||
# tar -czf: gzip-komprimovaný archiv
|
||||
# -C /mnt/user/appdata: pracovní adresář pro tar (cesta v archivu bude relativní)
|
||||
# kanboard: zazálohuje podadresář "kanboard"
|
||||
# BACKUP_STATUS se kontroluje až po startu kontejneru — Kanboard nesmí zůstat
|
||||
# offline kvůli chybě archivace.
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Creating backup: ${BACKUP_FILE}"
|
||||
tar -czf "${BACKUP_FILE}" -C /mnt/user/appdata kanboard
|
||||
BACKUP_STATUS=$?
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# START KONTEJNERU — vždy, bez ohledu na výsledek zálohy
|
||||
# Záměrně před kontrolou BACKUP_STATUS: downtime Kanboard musí být minimální.
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting container: ${CONTAINER}"
|
||||
docker start "${CONTAINER}"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# KONTROLA VÝSLEDKU ZÁLOHY
|
||||
# Neúplný archiv (tar selhal) smažeme — je k ničemu a zabírá místo.
|
||||
# ------------------------------------------------------------------------------
|
||||
if [ ${BACKUP_STATUS} -ne 0 ]; then
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: tar failed with exit code ${BACKUP_STATUS}"
|
||||
rm -f "${BACKUP_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKUP_SIZE=$(du -sh "${BACKUP_FILE}" | cut -f1)
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup complete: ${BACKUP_FILE} (${BACKUP_SIZE})"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# ROTACE STARÝCH ZÁLOH
|
||||
# -mtime +N: soubory starší než N dní (počítáno dle mtime = last modification)
|
||||
# -delete: atomické mazání bez mezikroku
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Removing backups older than ${KEEP_DAYS} days"
|
||||
find "${BACKUP_DIR}" -name "kanboard_*.tar.gz" -mtime +${KEEP_DAYS} -delete
|
||||
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Done"
|
||||
Reference in New Issue
Block a user