Files
k3s/apps/codimd/backup.sh

36 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
set -o pipefail
APP_NAME="codimd"
BACKUP_DIR="./backup"
TIMESTAMP=$(date +%Y%m%d-%H%M)
DB_BACKUP_FILE="${BACKUP_DIR}/${APP_NAME}-db-${TIMESTAMP}.sql.gz"
UPLOADS_BACKUP_FILE="${BACKUP_DIR}/${APP_NAME}-uploads-${TIMESTAMP}.tar.gz"
# 1. 取得 Pod 名稱
DB_POD=$(kubectl get pod -l app=codimd-db -o jsonpath="{.items[0].metadata.name}" 2>/dev/null)
APP_POD=$(kubectl get pod -l app=codimd -o jsonpath="{.items[0].metadata.name}" 2>/dev/null)
mkdir -p $BACKUP_DIR
# --- A. 備份資料庫 ---
echo "--- 正在備份資料庫... ---"
if kubectl exec $DB_POD -- pg_dump -U codimd codimd | gzip > $DB_BACKUP_FILE; then
echo "✅ 資料庫備份成功: $(basename $DB_BACKUP_FILE) ($(stat -c%s $DB_BACKUP_FILE) bytes)"
else
echo "❌ 資料庫備份失敗!"
exit 1
fi
# --- B. 備份上傳檔案 (Uploads) ---
echo "--- 正在備份上傳圖片 (Uploads)... ---"
# 使用 tar 打包 Pod 內的 uploads 資料夾,並傳回本機
if kubectl exec $APP_POD -- tar zcf - -C /home/hackmd/app/public uploads > $UPLOADS_BACKUP_FILE; then
echo "✅ 圖片備份成功: $(basename $UPLOADS_BACKUP_FILE) ($(stat -c%s $UPLOADS_BACKUP_FILE) bytes)"
else
echo "❌ 圖片備份失敗!"
exit 1
fi
echo "--- ✨ 備份任務完成! ---"