#!/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}"