Edited at

さくらVPSのデータのバックアップに Dropbox を使ってみる

More than 3 years have passed since last update.


Dropbox の API Key を取得

https://www.dropbox.com/developers/apps にアクセスし,右上にある Create app を押す.

Dropbox API app を選択



Files and datastores を選択



Yes を選択



App name を入力(ここでは SakuraVPS_rnitame にした.)

すると,以下のような状態になる.

Screen Shot 2014-06-27 at 20.16.53.png

リンクをクリックすると先ほど作った App の詳細が出てくるので,App Key と App secret をメモしておく.

Screen_Shot_2014-06-27_at_20_17_09.png


さくらVPS に Dropbox Uploader API をインストールする

https://github.com/andreafabrizi/Dropbox-Uploader に書いてあるとおり,git clone するか,curl するか,GitHub から直接ダウンロードするなりして dropbox_uploader.sh を手に入れる.

ダウンロードしたら,以下の方法でインストール.


chmod +x dropbox_uploader.sh // 実行権限付加

./dropbox_uploader.sh


インストールが成功したら,好きなエディタを使って以下の 2 行を追加する.


LOGIN_EMAIL="user@domain.com"

LOGIN_PASSWD="**********"


先ほどの App (ここでは SakuraVPS_rnitame )を作ったアカウントの Email とパスワードを入力すること.


API Key と VPS を連携させる


./dropbox_uploader.sh


を実行する.

すると,以下のように聞かれるので該当するものを入力していく.

# App key: メモしておいたものを入力

# App secret: メモしておいたものを入力

# Permission type, App folder or Full Dropbox [a/f]: a

> App key is **, App secret is ** and and Access level is App Folder. Looks ok? [y/n]: y

> Token request... OK

Please open the following URL in your browser, and allow Dropbox Uploader to access your DropBox folder:

-> https://www2.dropbox.com/1/oauth/authorize?oauth_token=***

Press enter when done...

> Access Token request... OK

Setup completed!

ざざっと出てきた文章の中に URL があると思うので,それをブラウザで開いてみると,認証しますか?と聞かれるので OK する.

これで無事に Dropbox とさくらVPSの連携ができた.


データのアップロード方法と,アップロード先


./dropbox_uploader.sh upload アップロードしたいファイル アップロード先


/Dropbox/Apps/SakuraVPS_rnitame/

の下にアップロードされる.なので,アップロード先を /backup/test.txt とすると /Dropbox/Apps/SakuraVPS_rnitame/backup/test.txt

にアップロードされることになる.

詳しくはここを参照.


いざ,バックアップ!

ここまで来たら,Dropbox にデータをバックアップする.

条件を以下の通りとした.


  • VPS 上にバックアップは残さない

  • Dropbox には 10 日間残す(古いのは自動削除)

  • /var/www/ 以下のファイルをすべてバックアップ

  • (一応)データベースとテーブルもすべてバックアップ

  • cron で自動的にやってもらう

自動的にバックアップを取るので,cron で動かすための Shell を作成する.

ファイルの置き場所は適当に.


/var/shell/backup.sh


にしました.

ソースコードは以下の通り.


backup.sh

#!/bin/sh

#Today
TODAY=`TZ=JST-9 date +%Y%m%d`

mkdir -m 777 /var/backuptmp
mkdir -m 777 /var/backuptmp/$TODAY

#MySQL をバックアップとして取得
mysqldump -u root -x --all-databases > /var/backuptmp/$TODAY/dump.sql

#サイトのファイルすべてをバックアップとして取得
zip -r /var/backuptmp/$TODAY/sitedata.zip ls /var/www

#Dropbox にアップロード (絶対パスで指定。でないとcronで動かない)
/home/ユーザー名/dropbox_uploader.sh upload /var/backuptmp/$TODAY/ /backup/$TODAY/

#Dropbox とローカルの古いファイルを削除(絶対パスで指定。でないと cron で動かない)
DELETE_DAY=`date -d '10 days ago' +%Y%m%d`
/home/ユーザー名/dropbox_uploader.sh delete /backup/$DELETE_DAY/

#VPSにある backup_temp を削除
rm -rf /var/backuptmp/$TODAY


試しに Shell を実行して,正常に動けばOK.

zip コマンドが command not found. とか言われたときは,yum install zip をしてインストール.


cron で自動化

cron からもアクセスできるようにしたら…


chmod 777 /var/shell/backup.sh


crontab を編集して時間等を設定する.

crontab -e して,


MAILTO=user@domain.com

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

00 18 * * * /var/shell/backup.sh


を入力.

これで 18 時にバックアップが自動的に開始され,動作結果が MAILTO に記述されたメールアドレスに通知される.

通知いらないよって人は root にしておけば OK.

※ crontab の時間の設定

今回は毎日 18 時になったらバックアップ,という風にしたが,もっと間隔をあけて処理をさせることもできる.

分 時 日 月 曜日 コマンド

という風になっているため,月や日を指定することも可能.

以上!


追記

Dropbox 関係ありませんが(笑),忘れがちな yum のアップデートを cron で一緒に自動化しましょう.

crontab -e で,以下の内容を追記します.

00 10 * * * /usr/bin/yum -y update

これで yum update が自動化します.