cron
Dropbox
さくらVPS

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

More than 1 year has 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 が自動化します.