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>
83 lines
2.3 KiB
Bash
Executable File
83 lines
2.3 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"
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
# 建立備份目錄
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
echo "💾 開始備份 CodiMD..."
|
|
echo "📅 備份時間: $(date)"
|
|
echo ""
|
|
|
|
# 1. 備份資料庫
|
|
echo "📦 備份 PostgreSQL 資料庫..."
|
|
docker_compose exec -T database pg_dump -U codimd codimd > "$BACKUP_DIR/database_$TIMESTAMP.sql"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
DB_SIZE=$(du -h "$BACKUP_DIR/database_$TIMESTAMP.sql" | cut -f1)
|
|
echo "✅ 資料庫備份完成 ($DB_SIZE)"
|
|
else
|
|
echo "❌ 資料庫備份失敗"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 備份上傳檔案
|
|
echo "📁 備份上傳檔案..."
|
|
UPLOAD_BACKUP="$BACKUP_DIR/uploads_$TIMESTAMP.tar.gz"
|
|
|
|
if [ -d "upload-data" ] && [ "$(ls -A upload-data)" ]; then
|
|
tar -czf "$UPLOAD_BACKUP" upload-data/
|
|
UPLOAD_SIZE=$(du -h "$UPLOAD_BACKUP" | cut -f1)
|
|
echo "✅ 上傳檔案備份完成 ($UPLOAD_SIZE)"
|
|
else
|
|
echo "⚠️ 沒有上傳檔案需要備份"
|
|
fi
|
|
|
|
# 3. 備份環境設定
|
|
echo "📝 備份環境設定..."
|
|
cp .env "$BACKUP_DIR/env_$TIMESTAMP.env"
|
|
echo "✅ 環境設定備份完成"
|
|
|
|
# 4. 建立備份資訊文件
|
|
cat > "$BACKUP_DIR/backup_$TIMESTAMP.txt" << EOF
|
|
CodiMD 備份資訊
|
|
================
|
|
備份時間: $(date)
|
|
備份類型: 完整備份
|
|
|
|
檔案清單:
|
|
- 資料庫: database_$TIMESTAMP.sql
|
|
- 上傳檔案: uploads_$TIMESTAMP.tar.gz
|
|
- 環境設定: env_$TIMESTAMP.env
|
|
|
|
還原方式:
|
|
1. 資料庫: cat database_$TIMESTAMP.sql | docker_compose exec -T database psql -U codimd codimd
|
|
2. 上傳檔案: tar -xzf uploads_$TIMESTAMP.tar.gz
|
|
3. 環境設定: cp env_$TIMESTAMP.env .env
|
|
EOF
|
|
|
|
echo ""
|
|
echo "✅ 備份完成!"
|
|
echo ""
|
|
echo "📂 備份位置: $BACKUP_DIR/"
|
|
ls -lh "$BACKUP_DIR" | grep "$TIMESTAMP"
|
|
echo ""
|
|
echo "💡 還原備份請查看: $BACKUP_DIR/backup_$TIMESTAMP.txt"
|
|
|
|
# 清理超過 30 天的舊備份
|
|
echo ""
|
|
echo "🧹 清理舊備份(超過 30 天)..."
|
|
find "$BACKUP_DIR" -name "database_*.sql" -mtime +30 -delete 2>/dev/null || true
|
|
find "$BACKUP_DIR" -name "uploads_*.tar.gz" -mtime +30 -delete 2>/dev/null || true
|
|
find "$BACKUP_DIR" -name "env_*.env" -mtime +30 -delete 2>/dev/null || true
|
|
echo "✅ 清理完成"
|