Gitea 백업 (rclone + Google Drive)Infra2026. 3. 14. 09:01
Table of Contents
구성
- rclone -> Google Drive 업로드
- 로컬 7일 보관 / 원격 최신 7개 유지
- cron 자동 백업
1. rclone 설치
rclone version
# 없으면:
curl https://rclone.org/install.sh | sudo bash
2. Google Drive 인증
라즈베리파이에는 브라우저가 없으므로 Windows PC에서 토큰 생성 후 복사해야 함
Windows에서 토큰 생성
- rclone 다운로드 (Windows 64bit)
- 압축 해제 후 CMD에서:
cd Downloads\rclone-v*-windows-amd64
rclone authorize "drive"
- 브라우저에서 Google 로그인 + 권한 승인
- 출력되는 토큰 복사 (
{~}전체)
라즈베리파이에 설정
nano ~/.config/rclone/rclone.conf
[gdrive]
type = drive
scope = drive
token = {복사한_토큰}
연결 테스트
rclone lsd gdrive:
# Google Drive 폴더 목록 나오면 성공
3. 백업 스크립트
mkdir -p ~/gitea-backup
nano ~/gitea-backup.sh
#!/bin/bash
set -e
# 설정
BACKUP_DIR="$HOME/gitea-backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="gitea-backup-${DATE}.zip"
GDRIVE_PATH="gdrive:gitea-backups"
KEEP_LOCAL_DAYS=7
MAX_REMOTE_BACKUPS=7
echo "========================================="
echo "Gitea 백업 시작: $(date)"
echo "========================================="
cd "$BACKUP_DIR"
# 1. Gitea dump
echo "[1/4] Gitea dump 실행 중..."
docker exec -u git gitea gitea dump -c /data/gitea/conf/app.ini -f "/tmp/${BACKUP_NAME}"
# 2. 파일 복사
echo "[2/4] 백업 파일 복사 중..."
docker cp "gitea:/tmp/${BACKUP_NAME}" "${BACKUP_DIR}/${BACKUP_NAME}"
docker exec gitea rm -f "/tmp/${BACKUP_NAME}"
# 3. Google Drive 업로드 + 원격 정리
echo "[3/4] Google Drive 업로드 중..."
rclone copy "${BACKUP_DIR}/${BACKUP_NAME}" "${GDRIVE_PATH}/" -v --progress
mapfile -t remote_backups < <(rclone lsf "${GDRIVE_PATH}/" --files-only --format p | sort)
remote_count=${#remote_backups[@]}
if (( remote_count > MAX_REMOTE_BACKUPS )); then
delete_count=$(( remote_count - MAX_REMOTE_BACKUPS ))
echo "원격: ${remote_count}개 중 ${delete_count}개 삭제"
for old_backup in "${remote_backups[@]:0:delete_count}"; do
rclone deletefile "${GDRIVE_PATH}/${old_backup}"
done
fi
# 4. 로컬 정리
echo "[4/4] 오래된 백업 정리 중..."
find "$BACKUP_DIR" -name "gitea-backup-*.zip" -type f -mtime +${KEEP_LOCAL_DAYS} -delete
BACKUP_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_NAME}" | cut -f1)
echo "========================================="
echo "완료! ${BACKUP_NAME} (${BACKUP_SIZE})"
echo "========================================="
chmod +x ~/gitea-backup.sh
테스트
~/gitea-backup.sh
4. 자동 백업 (cron)
crontab -e
매일 새벽 2시:
0 2 * * * /home/pi/gitea-backup.sh >> /home/pi/gitea-backup.log 2>&1확인:
crontab -l
5. 관리 명령어
# 로그 확인
tail -f ~/gitea-backup.log
# 로컬 백업 확인
ls -lh ~/gitea-backup/
# 원격 백업 확인
rclone ls gdrive:gitea-backups/
# 수동 백업
~/gitea-backup.sh
6. 복원
# 1. 다운로드
rclone copy gdrive:gitea-backups/gitea-backup-YYYYMMDD_HHMMSS.zip ~/
# 2. 압축 해제
unzip ~/gitea-backup-YYYYMMDD_HHMMSS.zip -d ~/gitea-restore
# 3. 복원
docker stop gitea
mv /home/pi/gitea/gitea /home/pi/gitea/gitea.old
cp -r ~/gitea-restore/data/gitea /home/pi/gitea/
docker start gitea
설정 변경
| 항목 | 위치 | 기본값 |
|---|---|---|
| 로컬 보관 기간 | KEEP_LOCAL_DAYS |
7일 |
| 원격 보관 개수 | MAX_REMOTE_BACKUPS |
7개 |
| 업로드 경로 | GDRIVE_PATH |
gdrive:gitea-backups |
'Infra' 카테고리의 다른 글
| Gitea 구축 (Docker + Google OAuth) (0) | 2026.03.13 |
|---|
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!