Files
2026-05-31 21:05:59 +09:00

53 lines
2.6 KiB
Bash

#!/bin/bash
# ============================================================
# 포트폴리오 NAS 백업 스크립트
# 위치: /web/my_profile/backup.sh
# 실행: bash backup.sh 또는 crontab으로 자동화
# Synology Task Scheduler에 등록 권장 (매일 새벽 3시)
# ============================================================
SITE_DIR="/web/my_profile"
BACKUP_BASE="/volume1/backup/portfolio" # 백업 저장 경로 (필요 시 수정)
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="$BACKUP_BASE/$DATE"
KEEP_DAYS=30 # 보관 기간 (일)
# ── 백업 디렉토리 생성 ──────────────────────────────────────
mkdir -p "$BACKUP_DIR"
# ── data/*.json 백업 ───────────────────────────────────────
if [ -d "$SITE_DIR/data" ]; then
cp -r "$SITE_DIR/data" "$BACKUP_DIR/data"
echo "[$(date)] data/ 백업 완료"
else
echo "[$(date)] WARNING: data/ 디렉토리 없음"
fi
# ── uploads/ 백업 (심볼릭 링크 포함) ──────────────────────
if [ -d "$SITE_DIR/uploads" ]; then
cp -rL "$SITE_DIR/uploads" "$BACKUP_DIR/uploads"
echo "[$(date)] uploads/ 백업 완료"
else
echo "[$(date)] WARNING: uploads/ 디렉토리 없음"
fi
# ── HTML/PHP 소스 백업 ────────────────────────────────────
cp "$SITE_DIR"/*.html "$BACKUP_DIR/" 2>/dev/null
cp "$SITE_DIR"/*.css "$BACKUP_DIR/" 2>/dev/null
cp -r "$SITE_DIR/api" "$BACKUP_DIR/api" 2>/dev/null
echo "[$(date)] 소스 파일 백업 완료"
# ── 압축 ──────────────────────────────────────────────────
tar -czf "$BACKUP_BASE/portfolio_$DATE.tar.gz" -C "$BACKUP_BASE" "$DATE"
rm -rf "$BACKUP_DIR"
echo "[$(date)] 압축 완료: portfolio_$DATE.tar.gz"
# ── 오래된 백업 삭제 ──────────────────────────────────────
find "$BACKUP_BASE" -name "portfolio_*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "[$(date)] ${KEEP_DAYS}일 이상 된 백업 삭제 완료"
# ── 용량 확인 ─────────────────────────────────────────────
TOTAL=$(du -sh "$BACKUP_BASE" 2>/dev/null | cut -f1)
COUNT=$(ls "$BACKUP_BASE"/portfolio_*.tar.gz 2>/dev/null | wc -l)
echo "[$(date)] 백업 완료 | 총 ${COUNT}개 | 용량: ${TOTAL}"