Initial commit: k8s cluster manifests and scripts

This commit is contained in:
2026-04-01 15:34:02 +08:00
commit 2f04fa4473
49 changed files with 4109 additions and 0 deletions

67
apps/codimd/restore.sh Executable file
View File

@@ -0,0 +1,67 @@
#!/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}')"