Add docker-compose-helper.sh to auto-detect and use: - docker-compose (V1 - standalone) - docker compose (V2 - plugin) Update all 9 management scripts to use the helper: - start.sh, stop.sh, restart.sh - logs.sh, status.sh - backup.sh, restore.sh, update.sh, cleanup.sh This fixes "docker-compose: command not found" error on systems with Docker Compose V2 installed. Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
85 lines
2.1 KiB
Bash
Executable File
85 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# CodiMD 還原腳本
|
|
|
|
set -e
|
|
|
|
# 載入 docker compose 輔助函數
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/docker-compose-helper.sh"
|
|
|
|
BACKUP_DIR="./backups"
|
|
|
|
echo "🔄 CodiMD 還原腳本"
|
|
echo ""
|
|
|
|
# 列出可用的備份
|
|
if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A $BACKUP_DIR/*.sql 2>/dev/null)" ]; then
|
|
echo "❌ 找不到備份檔案"
|
|
exit 1
|
|
fi
|
|
|
|
echo "📂 可用的備份:"
|
|
ls -lht "$BACKUP_DIR"/*.sql 2>/dev/null | head -10
|
|
echo ""
|
|
|
|
# 詢問要還原的備份
|
|
read -p "請輸入要還原的備份檔案名稱 (例如: database_20260317_120000.sql): " BACKUP_FILE
|
|
|
|
if [ ! -f "$BACKUP_DIR/$BACKUP_FILE" ]; then
|
|
echo "❌ 找不到檔案: $BACKUP_DIR/$BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# 提取時間戳記
|
|
TIMESTAMP=$(echo "$BACKUP_FILE" | sed 's/database_\(.*\).sql/\1/')
|
|
|
|
echo ""
|
|
echo "⚠️ 警告:還原資料庫會覆蓋現有資料!"
|
|
read -p "確定要還原嗎?(yes/no): " CONFIRM
|
|
|
|
if [ "$CONFIRM" != "yes" ]; then
|
|
echo "❌ 取消還原"
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
echo "🔄 開始還原..."
|
|
|
|
# 1. 還原資料庫
|
|
echo "📦 還原資料庫..."
|
|
docker_compose exec -T database psql -U codimd codimd < "$BACKUP_DIR/$BACKUP_FILE"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "✅ 資料庫還原完成"
|
|
else
|
|
echo "❌ 資料庫還原失敗"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 詢問是否還原上傳檔案
|
|
UPLOAD_FILE="$BACKUP_DIR/uploads_$TIMESTAMP.tar.gz"
|
|
if [ -f "$UPLOAD_FILE" ]; then
|
|
read -p "是否還原上傳檔案?(yes/no): " RESTORE_UPLOAD
|
|
if [ "$RESTORE_UPLOAD" = "yes" ]; then
|
|
echo "📁 還原上傳檔案..."
|
|
rm -rf upload-data/*
|
|
tar -xzf "$UPLOAD_FILE"
|
|
echo "✅ 上傳檔案還原完成"
|
|
fi
|
|
fi
|
|
|
|
# 3. 詢問是否還原環境設定
|
|
ENV_FILE="$BACKUP_DIR/env_$TIMESTAMP.env"
|
|
if [ -f "$ENV_FILE" ]; then
|
|
read -p "是否還原環境設定?(yes/no): " RESTORE_ENV
|
|
if [ "$RESTORE_ENV" = "yes" ]; then
|
|
echo "📝 還原環境設定..."
|
|
cp "$ENV_FILE" .env
|
|
echo "✅ 環境設定還原完成"
|
|
echo "⚠️ 請執行 ./restart.sh 以套用新設定"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ 還原完成!"
|