File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22.env *
33! .env.example
44
5- .DS_Store
5+ .DS_Store
6+
7+ backup /
Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+
3+ # Docker 備份腳本
4+ # 使用方法: ./backup.sh
5+
6+ set -e
7+
8+ # 設定變數
9+ BACKUP_DIR=" ./backup"
10+ DATE=$( date +%Y%m%d-%H%M%S)
11+ PROJECT_NAME=" pastexam"
12+
13+ # 創建備份目錄
14+ mkdir -p $BACKUP_DIR
15+
16+ echo " 開始備份 Docker 容器資料..."
17+ echo " 備份時間: $DATE "
18+
19+ # 備份 Volume 資料
20+ echo " 備份 Docker Volumes..."
21+
22+ # PostgreSQL Volume 備份
23+ if docker volume ls --format " {{.Name}}" | grep -q " pastexam-postgres-data" ; then
24+ echo " 備份 PostgreSQL volume..."
25+ docker run --rm -v pastexam-postgres-data:/data -v $( pwd) /$BACKUP_DIR :/backup alpine tar czf /backup/postgres-volume-$DATE .tar.gz -C /data .
26+ echo " PostgreSQL volume 備份完成"
27+ fi
28+
29+ # MinIO Volume 備份
30+ if docker volume ls --format " {{.Name}}" | grep -q " pastexam-minio-data" ; then
31+ echo " 備份 MinIO volume..."
32+ docker run --rm -v pastexam-minio-data:/data -v $( pwd) /$BACKUP_DIR :/backup alpine tar czf /backup/minio-volume-$DATE .tar.gz -C /data .
33+ echo " MinIO volume 備份完成"
34+ fi
35+
36+ echo " 所有備份已完成!備份檔案位於: $BACKUP_DIR "
37+ echo " 備份檔案列表:"
38+ ls -la $BACKUP_DIR /* $DATE *
39+
40+ # 保留最近 4 週的備份,刪除舊的 (每週備份,保留 4 份)
41+ echo " 清理 4 週前的備份檔案..."
42+ find $BACKUP_DIR -name " *.tar.gz" -mtime +28 -delete
43+ echo " 備份腳本執行完成!"
Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+
3+ # Docker 還原腳本
4+ # 使用方法: ./restore.sh [backup_date]
5+ # 例如: ./restore.sh 20241225-143022
6+
7+ set -e
8+
9+ BACKUP_DIR=" ./backup"
10+ BACKUP_DATE=$1
11+
12+ if [ -z " $BACKUP_DATE " ]; then
13+ echo " 使用方法: $0 [backup_date]"
14+ echo " 可用的備份:"
15+ ls -la $BACKUP_DIR / | grep -E " \.(sql|tar\.gz)$" | head -10
16+ exit 1
17+ fi
18+
19+ echo " 開始還原 Docker 容器資料..."
20+ echo " 還原日期: $BACKUP_DATE "
21+
22+ # 確保容器停止
23+ echo " 停止容器..."
24+ docker compose down
25+
26+ # 還原 Volume 資料
27+ echo " 還原 Docker Volumes..."
28+
29+ # 還原 PostgreSQL Volume
30+ if [ -f " $BACKUP_DIR /postgres-volume-$BACKUP_DATE .tar.gz" ]; then
31+ echo " 還原 PostgreSQL volume..."
32+ docker volume rm pastexam-postgres-data 2> /dev/null || true
33+ docker volume create pastexam-postgres-data
34+ docker run --rm -v pastexam-postgres-data:/data -v $( pwd) /$BACKUP_DIR :/backup alpine tar xzf /backup/postgres-volume-$BACKUP_DATE .tar.gz -C /data
35+ echo " PostgreSQL volume 還原完成"
36+ fi
37+
38+ # 還原 MinIO Volume
39+ if [ -f " $BACKUP_DIR /minio-volume-$BACKUP_DATE .tar.gz" ]; then
40+ echo " 還原 MinIO volume..."
41+ docker volume rm pastexam-minio-data 2> /dev/null || true
42+ docker volume create pastexam-minio-data
43+ docker run --rm -v pastexam-minio-data:/data -v $( pwd) /$BACKUP_DIR :/backup alpine tar xzf /backup/minio-volume-$BACKUP_DATE .tar.gz -C /data
44+ echo " MinIO volume 還原完成"
45+ fi
46+
47+
48+
49+ echo " 還原完成!現在可以啟動服務:"
50+ echo " docker compose up -d"
You can’t perform that action at this time.
0 commit comments