#!/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 "--- ✨ 備份任務完成! ---"