読者です 読者をやめる 読者になる 読者になる

MANA-DOT

PIXEL ART, PROGRAMING, ETC.

Dropbox-api-commandで簡単サーババックアップ

僕のmanaten.netはさくらのVPSで運用しています。有料サービスなのでデータがなんの前触れもなしに吹っ飛んでしまうことはそうそうないとは思うのですが、それでももしものことを考えるとバックアップをしておくに越したことはありません。

今回、サーバからコマンドラインDropbox-APIにアクセスし、サーバのwebデータをDropboxに保存してみるということをやってみたので、覚書も兼ねて書こうと思います。

バックアップというと、個人用途ならDropboxに置いてしまうのが一番楽で堅実な方法であると考えています。理由は、

  • まず、オリジナルとDropboxサーバとの二箇所でバックアップされる。さらに、Dropboxを使用している他の自分のマシンにもバックアップされる。これらが全て同時にデータが消えてしまうことはまずないと考えていい。
  • Dropboxのバージョン管理も利用できる。
  • 無料である。

といったところです。

ということで、サーバからDropboxにファイルを置きたい。簡単なのはサーバにもDropboxクライアントをインストールし、Dropbox中のフォルダをシンボリックリンク等でサーバのドキュメントルートにしてしまうことです。ですが、いくつか問題が考えられます。

  • サーバでもDropboxのポーリングが走ってしまう。負荷は少ないとはいえなんかやだ。
  • Dropboxのユーザを正しくしておかないと、パーミッション関係でめんどくさそう。
  • ぶっちゃけ毎日定時にバックアップしてくれればいい

といった具合です。もっとも、この方法もクライアントからサーバ上のファイルをシームレスに編集できたりすることを考えると、それはそれで魅力的ではあります。

そこでいろいろ探したところ、dropbox-api-command というものを見つけました。 DropboxAPIのコマンドラインラッパのようです。こいつをcronから毎日0時に叩いてあげればサーバファイルのDropboxへのバックアップが達成できそうです。

導入はリンク先に詳しく書いてありますが、Ubuntuではcpanmが最初から使えなかったため、そこだけメモ。とある事情でまっさらなUbuntuに入れ直したら、思いの外詰まったのでもうちょっと詳しくメモ。

sudo apt-get install make gcc libssl-dev
sudo cpan App::cpanminus

# https://github.com/s-aska/dropbox-api-command#install
cpanm JSON Path::Class WebService::Dropbox DateTime::Format::Strptime Encode::Locale
wget https://github.com/s-aska/dropbox-api-command/raw/master/dropbox-api
cp dropbox-api ~/bin/dropbox-api
chmod +x ~/bin/dropbox-api

cpanの実行にgccやmakeが必要だったり、cpanmで入れることになるNet-SSLeayにibssl-devが必要だったりするので、本当にまっさらなUbuntuにインストールする場合、なにも考えないでやってるとハマります。 あとはdropbox-api-command#installに書いてあるとおりに必要な物を入れるだけ。 これでコマンドラインからDropboxにファイルをアップロードしたり、ダウンロードしたりできます。

今回バックアップのために作成したシェルスクリプトはこんな感じ。

mysqldump -u xxxx -pxxxx wordpress > /home/www/wp.sql
7z a /tmp/www-backup.7z /home/www
/home/www/bin/dropbox-api put /tmp/www-backup.7z dropbox:/

今回はWebサーバのドキュメントルートのバックアップを行いました。僕の環境ではWebサーバのドキュメントルートは/home/wwwのサブフォルダになってます。内容はwordpressのDBを/home/wwwにダンプしておき、それごとフォルダを7zでかため、dropbox上にputするだけです。あとはこいつをcronで毎日回してあげれば完了です。

0 0 * * * /home/www/bin/dropbox-backup.sh > /dev/null 2> /dev/null

今回apacheユーザの権限のファイルをアップロードする必要があったため、apacheユーザのcrontabに追加してあげました。 注意としては、dropbox-api-commandはホームフォルダの.dropbox-api-configを見て認証情報を得ているので、今回の僕のようにユーザを変更して実行する場合はそのユーザのホームフォルダに.dropbox-api-configを置いてあげる事を忘れないことです。

これで毎日0時に自動でサーバのデータをDropboxにバックアップできます。やったね!

最後に、Dropboxをまだ使っていない方、今回紹介したような変則的な使い方もできて非常に便利です。よろしければ僕の紹介リンクから登録どうぞ!普通に登録するよりも少し多めに容量がもらえます!(ステマ)