feat: add comprehensive management scripts for CodiMD

Add 9 management scripts to simplify CodiMD operations:
- start.sh: Start services with automatic .env setup
- stop.sh: Stop all services gracefully
- restart.sh: Restart all services
- logs.sh: View real-time logs for any service
- status.sh: Check service status and resource usage
- backup.sh: Backup database, uploads, and environment
- restore.sh: Restore from backups with interactive selection
- update.sh: Update Docker images with automatic backup
- cleanup.sh: Clean unused Docker resources

Add SCRIPTS.md with comprehensive usage documentation and examples.

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 17:41:10 +08:00
parent cbe76b1f96
commit 9ea9eb4b61
10 changed files with 548 additions and 0 deletions

78
backup.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/bin/bash
# CodiMD 備份腳本
set -e
# 備份目錄
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 "✅ 清理完成"