Dropboxにcrontabとdropboxdでバックアップをアップロード

Dropbox には利点があります。システムに新しいバックアップが現れると、すぐに同期します。取引内容は、新しいバックアップをローカルの Dropbox フォルダに配置することです(提供された cron スクリプトを使用)。

進める前に、以下の点を知っておく必要があります:

  1. プランで許可されている範囲内で、Dropbox にファイルを保存できます。
  2. 無料プランでは最大 3 台のデバイスを Dropbox に接続できます(Android デバイスの場合、この制限は回避可能です)。
  3. Linux サーバーで Dropbox を実行する場合、1 つのフォルダのみを同期する必要があります。または、Dropbox は双方向ソリューションであるため、クラウド上のすべてのデータでサーバーを埋め尽くす可能性があります。これはサーバーの容量を消費します。
  4. Discourse のバックアップフォルダとローカルの Dropbox バックアップフォルダ間で同期するための追加の rsync スクリプトを作成する必要があります。これにはバックアップ用の容量が 2 倍必要になります。以前は Dropbox がシンボリックリンクを許可していましたが、現在はこの機能は利用できません。
  5. バックアップにアクセスするために root 権限は不要ですが、このガイドでは dropbox デーモンを root として実行しています(おそらく安全ではありません。改善への提案を歓迎します)。

まず、Discourse で /admin/site_settings/category/backups にてバックアップを設定する必要があります(私のカスタム値は括弧内)。

最大バックアップ数 (3) - Dropbox に保持されるファイル数を管理します
バックアップ頻度 (1) - 毎日
バックアップ時刻 (3:30 UTC) - デフォルト
バックアップ gzip 圧縮レベル (6) - 圧縮速度 (1) かサイズ削減 (9) のどちらかを選択しますが、VPS の場合、長時間の CPU 高負荷によりホストプロバイダがサーバーを再起動する可能性があります

次に、シェルコマンドでサーバーを Dropbox に接続します(重要: サービスを root として実行しているため、このステップでは root としてログイン しています。通常のユーザーで試してみてください):

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# .dropbox-dist ディレクトリが作成されます
# dropbox デーモンを実行
sh ~/.dropbox-dist/dropboxd

サーバーで初めて Dropbox を使用すると、一意のウェブリンクが表示されます。これをコピーしてウェブブラウザに貼り付け、指示に従ってください。その後、ホームフォルダに Dropbox ディレクトリが作成されます。公式の Dropbox は、デーモンを管理するための Python スクリプト のダウンロードを推奨していますが、私は使用していません。

デーモンを管理するコマンド:

dropbox status
dropbox start
dropbox stop
自動起動スクリプトが作成されたか確認してください(クリックして隠されたテキストを展開):
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Dropbox Service
After=network.target

[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Discourse はバックアップファイルを提供し、その数と頻度を管理します。
Crontab の rsync タスクが新しいバックアップをローカルの Dropbox フォルダにコピーします。
その後、Dropbox が新しいファイルをクラウドにアップロードします。
次の夜に Discourse が古いバックアップファイルを削除すると、rsync も Dropbox からそれを削除します。

3 番目、バックアップ用コピーの Dropbox フォルダを作成します:

mkdir ~/Dropbox/backups

4 番目、逆同期用のフォルダを準備します(不要なフォルダの同期を解除)
例えば、Dropbox フォルダに以下のサブフォルダとファイルがある場合:

backups
books
stuff
logo.png

backups 以外を除外する必要があります。実際には、このコマンドは除外リストに項目を追加します:

dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"

もし誤って backups を除外リストに追加してしまった場合は、リストから項目を削除することで同期に戻すことができます:

dropbox exclude remove "Dropbox/backups/"

特定のバックアップの現在のステータスは、以下のコマンドで確認できます:

dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz

5 番目、ローカル同期とキャッシュのクリア用のスクリプト /root/rsync.dropbox を準備します:

#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/

6 番目、ローカル時間の午前 8 時に crontab にコマンドを追加します:crontab -e

0 8 * * * /bin/bash /root/rsync.dropbox

UTC 午前 3 時から私のローカル時間午前 8 時までの時間的余裕があります。これにより、Dropbox との同期開始前にバックアップが完了するのに十分な時間があります。

追伸
この設定は半年以上確認していませんでした。現在、dropbox status コマンドが以下のメッセージを返していることに気づきました:

You're using an old version of Dropbox. Please update to the latest version to continue using Dropbox.

同期は依然として機能しているため、アップグレードは行いません。最後にシンボリックリンクのサポートが失われました。

「いいね!」 7