SOY CMSのサイトのバックアップをDropboxで行う

VPSで運営しているサイトのバックアップをDropboxで行う様に設定してみた。


前回は記事を全公開しているブログサイトのデータベースだったので特に意識しなくて良かったが、

SOY Shopの様な個人情報込みのデータベースをバックアップする際、

前回の様に指定のフォルダをzipに圧縮だけするというのは色々と不安だ。


ということで、

zipのオプションにある暗号化を使ってサーバに配置してみることにする。




シェルで指定のディレクトリを暗号化して圧縮する際、

zip -r -e ファイル名.zip ディレクトリ名

このようにzipコマンドに-eオプションを付与すればできるけど、


crontabでこのコマンドを実行する時、一つ問題がある。

それは暗号化のオプション(-e)は対話式であるということ。


対話式というのは、zip -eを実行した際、

Entry password: の様にパスワードの入力を求められることで、

自動化する際、対話式のパスワード入力も自動化しなければならない。


それを踏まえた上でショップサイトのバックアップを書いてみると、


$ sudo apt-get install expect
$ emacs zip.sh

#!/usr/bin/expect

#解凍の際に必要となるパスワードを決める
set PW "password"
set timeout 5

#zipのオプションの順番は重要。zip -e -rでは変なファイルが生成される
spawn zip -r -e "/home/*****/Dropbox/shop.zip" "/var/www/html/shop"
expect {
    "Enter password: " {
        send "${PW}\n"
    }
}
expect {
    "Verify password: " {
        send "${PW}\n"
    }
}
expect {
    "\\\$" {
        exit 0
    }
}

こうなる。

シェルスクリプトにあるspawnは対話式のコマンドを実行するという意味があり、

expectでコマンドラインに表示された質問に対して返答する内容を決めることができる。


expect {
    "Enter password: " {
        send "${PW}\n"
    }
}

これが返答の一セットで、

二行目はコマンドラインに表示されるテキストで、

三行目のsendより後は表示されたテキストに対しての返答となる。


最後のexit 0は終了の時に必要っぽくて、

ないと正常に動作しなかった。




それでは実行してみる。


ブラウザでDropboxを開いてみると、



ファイルは共有されているし、

このzipファイルをダウンロードしてきて解凍してみると、



パスワードを要求してきた。


あとは圧縮時のパスワードを強力なものにしたり、

都度パスワード生成といった仕組みを盛り込む必要があるけど、

とりあえずバックアップに関する不安は幾分解消された。


あとはこのスクリプトをcrontabに登録しておけば良いね。


次の記事

Ubuntuサーバのメモリ開放



関連記事

当サイトをHTTP/2対応して表示の爆速化してみた

SOY CMSのサイトでPageSpeed Insightsのスコアが99になりました