Linux 원격 백업 구현하기 (Dropbox 에 백업하기)

HYEONG HWAN, MUN/ 7월 15, 2017/ 미분류/ 6 comments

최근 나야나(nayana) 서버 해킹 사건으로 인해 서버 백업의 중요성 매우 커졌습니다.

실제로 백업은 매우매우 중요합니다.

 

이 글은 기존에 제가 작성한 https://blog.lael.be/post/1449 글에 이어서 작성하는 글입니다.

이 글의 내용을 구현하려면 먼저 위의 글로 이동하여 로컬 백업을 구현해 두어야 합니다.

 

1. 믿을 수 있는 원격 저장소 찾기

이 글에서는 백업/동기화 부문에서 전세계 1위 업체Dropbox 를 원격 저장소로 사용할 것입니다.

 

https://www.dropbox.com 로 이동하여 무료 회원가입을 실시합니다.

무료 회원은 2GB 의 저장공간을 받습니다. 기타 다양한 기능을 사용할 수 있습니다.

 

추가 저장공간을 원한다면 1TB 저장공간 1년 사용 할 수 있는 Plus 가입을 해보세요! (권장)

 

2. Linux 서버에 Dropbox Uploader  설치

Dropbox Uploader 는 https://github.com/andreafabrizi/Dropbox-Uploader 에서 다운 받을 수 있습니다.

CURL을 사용한 단순한 쉘 스크립트이며 따라서 서버에 추가적으로 설치할 프로그램은 없습니다.

 

본문은 Linux root 계정으로 진행합니다. (웹호스팅 일반 사용자도 사용 가능합니다. 이 경우 경로를 잘 설정하세요.)

 

홈 디렉토리로 이동

# cd ~

 

Dropbox Uploader 폴더 생성

# mkdir uploader
# cd uploader

 

최신 소스 다운로드

# wget https://github.com/andreafabrizi/Dropbox-Uploader/archive/master.zip
# unzip master.zip

 

 

혹시나 서버에 unzip  프로그램이 설치되어 있지 않다면 다음 명령어로 unzip 설치

# apt-get install unzip

 

업로드 프로그램 실행

# cd Dropbox-Uploader-master/
# ./dropbox_uploader.sh

 



 

업로드 키를 등록해주어야 합니다.

영어 문구에 나타난 대로 진행하면 됩니다.

 

1) https://www.dropbox.com/developers/apps 이동
2) Create App

 

3) Dropbox API app

 

4) 앱 이름은 중복되지 않게 작성

위의 예제에서는 ajsdfiasodf-myblog-server 를 사용하였습니다.

 

Create App 후에

 

 

5) 앱 접근키 생성

자신만 사용할 것이기 때문에 개발 상태는 Development 로 그대로 둡니다.

 

Generate access token 을 사용하여 앱에대한 접근키를 얻습니다.

 

6) 서버에 Access Token 입력

Access token 은 본인만 알고 있어야 하며 관리를 잘해야합니다. 이 키가 있는 사람은 해당 앱폴더에 접근할 수 있게 됩니다.

입력 정보는 /root/.dropbox_uploader 에 저장됩니다.

 

7) 원격 백업 테스트
# /root/uploader/Dropbox-Uploader-master/dropbox_uploader.sh upload CHANGELOG.md /

 

8) 웹사이트에서 해당 폴더로 이동하여 백업이 정상적으로 되었는지 확인

 

9) 실제 사용 예제

대부분의 경우 압축백업을 진행하는 것이 좋습니다.

> 압축백업 : 작은 크기의 파일이 많을 경우 진행하세요. 웹사이트 백업. 사진 백업. 등

서버 로컬의 /backup 폴더에 압축 백업을 진행함. 백업 후 dropbox 에 업로드함. 10일이 지난 파일은 삭제함.

#!/bin/bash
CURRENT=$(date +%Y%m%d%H%M%S)
tar -czpf /backup/jingjing.${CURRENT}.tgz /home/jingjing 1>/dev/null 2>/dev/null
mysqldump --extended-insert=FALSE -hlocalhost -uroot -ptest1234 mydbname > /backup/mydbname.${CURRENT}.sql
/root/uploader/Dropbox-Uploader-master/dropbox_uploader.sh upload /backup/jingjing.${CURRENT}.tgz /
/root/uploader/Dropbox-Uploader-master/dropbox_uploader.sh upload /backup/mydbname.${CURRENT}.sql /
find /backup/ -type f -mtime +10 | sort | xargs rm -f

 

> 즉시백업 : 대용량이며 파일 갯수가 적을 경우 이렇게 하세요. 동영상 폴더 백업. 등

서버 로컬 파일을 즉시 dropbox 에 업로드합니다. 압축백업(위의 방식)보다 트래픽이 더 발생하고, 파일 1개를 전송하는 압축백업과 다르게 모든 파일에 대해서 upload 명령을 실행해야 하므로 시간이 훨씬 더 오래 걸립니다.

#!/bin/bash
CURRENT=$(date +%Y%m%d%H%M%S)
/root/uploader/Dropbox-Uploader-master/dropbox_uploader.sh upload /home/myuser1/www /myuser1/${CURRENT}

 

 

10) 확인

< 그림 : 매일 오전 3:30 에 Dropbox 원격 백업이 실행되고 있다 >

 

Dropbox 에 저장된 파일은 모든 변동 내역이 기록되며 요금제에 따라서 최소 30일에서 최대 1년간의 시점 복원이 가능합니다.

즉 의도치 않은 파일 삭제에 대해서 안전해 집니다.

 

안전한 원격 백업 완성!

6 Comments

  1. 구글 g 스위트는 5개 계정 비용 월 50달러면 용량이 무제한인데요. 혹시 여기에 백업도 가능할까요? 지스위트하고 구글드라이브는 다릅니다..

    1. https://github.com/ctberthiaume/gdcp 라는 툴을 쓰면 가능할것 같아요.

  2. 사이트를 어느정도 운영하다보면 백업용량이 10기가는 금방 넘어가는데요.

    이런 클라우드를 이용하려다 보니 용량의 문제 때문에 사용이 어렵더라구요. 비용을 지불하지 않는 방법으로 클라우드 서비스에 웹백업을 백업 할 수 있는 대안이 있을지 궁금합니다.

    지금은 PC에 내려받은 후 -> 외장하드에 저장
    이런 식으로 하고 있는데요..

    클라우드 -> 외장하드
    이런식으로 하고 싶어도 클라우드저장소 용량 때문에 현실적으로 어렵겠더라구요.

    웹서버에서
    백업 -> 클라우드 저장 -> 백업 -> 클라우드 이전 데이터 삭제 -> 신규백업자료 클라우드저장

    이게 가능하다면 20G 정도의 드롭박스 용량을 확보하면 10기가 넘는 웹자료도 클라우드에 할 수 있을 것 같기는 합니다. 물론 신규백업 일정 이전에 드롭박스 자료를 PC나 외장하드에 옮겨 놓아야 최신데이터가 아닌 이전 데이터도 보유 할 수 있겠지만요.

    *웹서버에서 같은 이름으로 반복해서 백업을 하게되면 에러없이 덮어 씌우는 식으로 백업이 될까요?
    *같은 이름으로 반복해서 드롭박스로 보내면 덮어 씌우기로 최신으로 동기화가 되서 최신 데이터로 저장이 될까요?

    1. upload 말고 delete, move 같은 대부분의 리눅스 명령어가 가능합니다. delete 후에 upload 하면 될 것 같아요.
      유료 사용을 고려해보세요. dropbox 가 웹공유등 기능이 많아서 쓸만해요.

  3. 안녕하세요. 라엘님 덕분에 하나하나 배워가는 초보입니다. ^^;

    다름이 아니라 올려주신 스크립트는 자신의 서버에도 백업이 되고, 드롭박스에도 같이 업로드를 하는 것으로 보이는데요.

    혹시 서버에는 백업을 하지 않고 드롭박스에만 백업을 하고 싶은데, 방법이 없을까요?

    1. 안녕하세요? 압축백업 없이 서버에 전송하는 방법에 대해서 블로그 글 하단부에 보강하여 작성하였습니다.
      감사합니다.

Leave a Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*