Files
codimd/backup.sh
Timmy ea11288642 fix: add Docker Compose V2 support for all management scripts
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>
2026-03-17 17:47:49 +08:00

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 "✅ 清理完成"