Files
k3s/apps/codimd/restore.sh

68 lines
2.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ==========================================
# CodiMD 一鍵完整還原腳本 (DB + Uploads)
# ==========================================
# 1. 自動偵測最新的備份檔案
LATEST_DB=$(ls -t ./backup/codimd-db-*.sql.gz 2>/dev/null | head -1)
LATEST_IMG=$(ls -t ./backup/codimd-uploads-*.tar.gz 2>/dev/null | head -1)
if [ -z "$LATEST_DB" ] || [ -z "$LATEST_IMG" ]; then
echo "❌ 錯誤: 在 ./backup 找不到完整的備份檔 (需要 .sql.gz 和 .tar.gz)"
exit 1
fi
echo "--- 📋 準備還原以下備份 ---"
echo "📅 資料庫: $LATEST_DB"
echo "🖼️ 圖片檔: $LATEST_IMG"
echo "------------------------------------------"
read -p "⚠️ 警告:這將會覆蓋目前容器內的所有資料!確定要執行嗎?(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "操作已取消。"
exit 1
fi
# 2. 取得 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)
if [ -z "$DB_POD" ] || [ -z "$APP_POD" ]; then
echo "❌ 錯誤: 找不到運作中的 CodiMD Pod請確認 K8s 資源狀態。"
exit 1
fi
# --- A. 還原資料庫 (含清空邏輯) ---
echo "--- 🗄️ 正在還原資料庫結構與內容... ---"
# 先清空 Schema 以避免重複匯入導致的鍵值衝突
kubectl exec -i $DB_POD -- psql -U codimd -d codimd -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" > /dev/null
zcat "$LATEST_DB" | kubectl exec -i $DB_POD -- psql -U codimd -d codimd > /dev/null
if [ $? -eq 0 ]; then
echo "✅ 資料庫還原成功。"
else
echo "❌ 資料庫還原發生錯誤。"
exit 1
fi
# --- B. 還原圖片檔案 ---
echo "--- 🖼️ 正在同步圖片檔案 (Uploads)... ---"
# 清空目前目錄避免新舊檔案混雜
kubectl exec $APP_POD -- sh -c "rm -rf /home/hackmd/app/public/uploads/*"
# 解壓縮並傳入 Pod
cat "$LATEST_IMG" | kubectl exec -i $APP_POD -- tar zxf - -C /home/hackmd/app/public/
# 修正權限確保 CodiMD 服務 (UID 1500) 擁有存取權
kubectl exec $APP_POD -- chown -R 1500:1500 /home/hackmd/app/public/uploads
echo "✅ 圖片還原與權限修正完成。"
# 3. 重啟服務以套用變更
echo "--- 🔄 正在重啟應用程式容器... ---"
kubectl rollout restart deployment codimd-app
kubectl rollout status deployment codimd-app
echo "------------------------------------------"
echo "✨ 還原程序已執行完畢。"
echo "目前資料已同步至備份檔日期:$(echo $LATEST_DB | grep -oE '[0-9]{8}-[0-9]{4}')"