Make back-up mechanism of self-hosted drive using Rsync and nginx
背景 自宅でfilebrowserというOSSを使ってwebからアクセス可能なドライブを作ったのですよ。 ただね、なんとこの間、5年間動かし続けた自作PCが壊れてしまい、直すまでドライブが使えないという問題が発生した。 Mean Time Between Failureをなるべく短くするために以下の二つの手段でドライブを冗長化する。 (しかも、リージョンが分かれているという。自宅で停電が発生しても、実家のドライブにアクセスするようになります。) filebrowserの下準備 メインのノードとは別にバックアップノードを用意しておき、rsyncで定期的にファイルを同期する filebrowserの前にnginxが動いているが、ここでHCを導入。メインがぶっ壊れた時にはバックアップにLBする。 0. filebrowserの下準備 Details filebrowserの立て方を簡単に教えますね。 バイナリをビルドするかダウンロードする(https://github.com/filebrowser/filebrowser) /usr/local/binに移動する。 パスワードとかゴニョゴニョする。パスワードのハッシュを生成。そして、–passwordの引数で渡す filebrowser hash mypassword ユニットファイルを作る。 例: [Unit] Description=FileBrowser Web UI After=network.target [Service] ExecStart=/usr/local/bin/filebrowser -a 0.0.0.0 -p 10001 -r /home/ray/hdd/filebrowser -d /etc/filebrowser/filebrowser.db --username hogehoge --password hogehoge --log /var/log/filebrowser.log WorkingDirectory=/etc/filebrowser Restart=always User=root Group=root [Install] WantedBy=multi-user.target sudo systemctl daemon-reload する sudo systemctl hogehogeが出力されたら、それを–passwordで渡す。 以上 1. rsyncで定期的にファイルを同期する 以下のコマンドを実行するcronジョブを作っておきましょう。毎時間ファイルを同期してくれます。 rsync -avz -e ssh ray@evn:~/hdd/filebrowser/ /opt/filebrowser_drive/ cronジョブの作り方は簡単 sudo crontab -e これで開いて、以下のジョブを登録する */1 * * * * rsync -avz -e "ssh -i /home/ray/.ssh/id_ed25519" ray@100.64.1.61:~/hdd/filebrowser/ /opt/filebrowser_drive/ cronはrootで実行されるので、鍵を指定しないと/home/root/.ssh の鍵を使いますが、めんどいので自分のを使うようにする。 ...