「Dropbox Uploader」でDropboxに自動でバックアップを取ってみた

dropbox

ファイル同期が非常に便利な「Dropbox(ドロップボックス)」。クラウドストレージとしても
非常に信頼感がありますし、年払いで¥12,000(月々¥1,000)1TB(テラバイト)が利用可能、
削除したファイルの履歴閲覧や復帰も可能ですので、今回はサーバのバックアップ先として設定
する事で自動バックアップの環境を構築したいと思います。




バックアップの仕様

対象サーバは1台、それぞれデータベースを利用するWEBシステムが運用されているという
想定で、データベースのダンプファイルと、WEBサイトのデータ一式をzip化したもの
Dropboxに転送する、という所まで設定します。

設定項目 内容
対象サーバ server1.memento-mori.jp
バックアップ元 ・データベースのダンプファイル
・WEBサイトのデータ一式(zipファイル)
バックアップ先 Dropbox
バックアップ頻度 1日1回(6:00 a.m.)
Dropboxの設定(アプリの作成とアクセストークンの生成)

まずはDropboxのアカウントを作成します(作成方法については省略)。アカウント作成後、
以下のURLからアプリを作成します。作成は「Create app」のボタンをクリックします。

■Dropbox開発者ページ
https://www.dropbox.com/developers/apps

「Create app」をクリックすると、次の画面で幾つかの選択が必要ですので、以下のように
選択して進んでください。
dropbox_app_step1

設定項目 内容
1. Choose an API Dropbox API
2. Choose the type of access you need App folder
3. Name your app memento-mori(好きなアプリ名、任意)

画面を進むと画面中ほどに「Generated access token」がありますので「Generate」ボタンを
クリックします。
dropbox_app_step2

「Generate」ボタンをクリックするとアクセストークン(文字列)が生成されますので、
こちらをメモしておきましょう。尚、下部の注意文にある通り、重要なデータですので、
他の人とシェアしたり公開したりしないよう注意してください。
dropbox_app_step3

「Dropbox Uploader」の導入

続いて「Dropbox Uploader」というシェルスクリプトを導入します。通常Dropboxはアプリを
介してファイルを同期しますが、「Dropbox Uploader」を利用するとAPI経由でDropbox内の
ファイルを操作できてめちゃめちゃ便利
です。公式サイトにある通り、curlでshファイルを
ダウンロードしてきて、実行権限を与えるだけで簡単に利用できます。実行するとアクセス
トークンを聞いてきますので、先ほど発行したものをコピーして登録してください。

※登録するとアクセストークンが記載された「.dropbox_uploader」というファイルが作成されます。(該当ファイルの権限に注意してください

# cd
# curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
# chmod +x dropbox_uploader.sh
# ./dropbox_uploader.sh
バックアップの設定(cron利用)

今回はシェルスクリプトを作ってcronで1日に1回、朝6時に実行するような設定にします。
「SERVER_NAME」はDropbox内で識別できるようサーバ名を定義しました。
ローテーションするために古いファイル(7日前)は削除します。

#!/bin/sh

## config
SERVER_NAME=server1
TODAY=`TZ=JST-9 date +%Y%m%d`
DELETE_DAY=`date -d '7 days ago' +%Y%m%d`

## db backup
mysqldump --all-databases -u root --password=password > ./alldb_$TODAY.dump
# backup to dropbox
./dropbox_uploader.sh upload ./alldb_$TODAY.dump /$SERVER_NAME/databases/
# delete old file and localfile
./dropbox_uploader.sh delete /$SERVER_NAME/databases/alldb_$DELETE_DAY.dump
rm ./alldb_$TODAY.dump

## web backup
zip -r memento-mori.jp_$TODAY.zip /var/www/vhosts/memento-mori.jp
# backup to dropbox
./dropbox_uploader.sh upload ./memento-mori.jp_$TODAY.zip /$SERVER_NAME/web/
# delete old file and localfile
./dropbox_uploader.sh delete /$SERVER_NAME/web/memento-mori.jp_$DELETE_DAY.zip
rm ./memento-mori.jp_$TODAY.zip

作成したシェルスクリプトに実行権限を与えておくのを忘れないように。

# chmod 0700 backup_dropbox.sh

最後に今回作ったバックアップ用シェルスクリプトをcronに登録して全ての作業が完了です。

# crontab -e
SHELL=/bin/sh
0 6 * * * /root/backup_dropbox.sh