Docker
도커로 실행중인 깃랩 자동 백업 스크립트
앤탐.
2024. 11. 27. 14:06
#!/bin/bash
# 설정
CONTAINER_NAME="gitlab" # GitLab 컨테이너 이름
BACKUP_DIR="/backup" # 백업위치
RETENTION_DAYS=30 # 보관 기간 (일) , 필요시 사용
# 함수: 로그 출력
log() {
echo "[$(date)] $1"
}
# 1. 백업 생성
log "백업 생성 중..."
docker exec -t "$CONTAINER_NAME" gitlab-backup create
# 2. 컨테이너에서 최신 백업 파일 찾기
log "최신 백업 파일 검색 중..."
LATEST_BACKUP=$(docker exec -t "$CONTAINER_NAME" ls /var/opt/gitlab/backups | grep '.tar' | tail -n 1 | tr -d '\r' | tr -d '\n')
if [ -z "$LATEST_BACKUP" ]; then
log "최신 백업 파일을 찾지 못했습니다. 백업 파일이 생성되었는지 확인하세요."
exit 1
fi
log "최신 백업 파일: $LATEST_BACKUP"
# 3. 최신 백업 파일 복사
log "최신 백업 파일 복사 중..."
docker cp "$CONTAINER_NAME:/var/opt/gitlab/backups/$LATEST_BACKUP" "$BACKUP_DIR"
if [ $? -eq 0 ]; then
log "백업 파일 복사 완료: $BACKUP_DIR/$LATEST_BACKUP"
# 4. 컨테이너 내부 백업 파일 삭제
log "컨테이너 내부 백업 파일 삭제 중..."
docker exec -t "$CONTAINER_NAME" rm -f "/var/opt/gitlab/backups/$LATEST_BACKUP"
if [ $? -eq 0 ]; then
log "컨테이너 내부 백업 파일 삭제 완료: $LATEST_BACKUP"
else
log "컨테이너 내부 백업 파일 삭제 실패! 수동으로 확인하세요."
fi
else
log "백업 파일 복사 실패! 파일을 삭제하지 않습니다."
exit 1
fi
# 5. 오래된 백업 파일 삭제
log "$RETENTION_DAYS일 이상 지난 백업 파일 삭제 중..."
find "$BACKUP_DIR" -type f -name '*.tar' -mtime +$RETENTION_DAYS -exec rm -f {} \;
if [ $? -eq 0 ]; then
log "$RETENTION_DAYS일 이상 지난 백업 파일 삭제 완료."
else
log "오래된 백업 파일 삭제 실패! 수동으로 확인하세요."
fi
# 6. 완료 메시지 출력
log "자동화 작업 완료."
컨테이너 내부의 var/opt/gitlab/backups 경로를 수정할 경우에는 따로 변수로 빼서 사용하면 될 것 같다.