こんにちは、新しい Discourse フォーラム(Digital Ocean の Droplet にセットアップ済み)の自動バックアップを、自宅ネットワーク上の NAS デバイスに行う方法を探しています。どのように実現できますか?
私はプログラマーではなく、この目的のためのプラグインを作成する際にどこから手をつければよいかわかりません。
こんにちは、新しい Discourse フォーラム(Digital Ocean の Droplet にセットアップ済み)の自動バックアップを、自宅ネットワーク上の NAS デバイスに行う方法を探しています。どのように実現できますか?
私はプログラマーではなく、この目的のためのプラグインを作成する際にどこから手をつければよいかわかりません。
最も簡単な方法は、何らかの自動化ジョブ(cron ジョブ)を実行することです。お持ちの NAS によっては、rsync などの基本的な Linux コマンドを実行できます。
NAS と Droplet を接続する方法が必要です。その方法が分かれば、例えばプラグインを使うのは過剰だと考えられます。以下のようなコードを、NAS の cron ジョブで実行するだけで十分です。
rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas
このような処理を実行できるかどうかは、前述の通り、お持ちの NAS の種類によります。
ありがとう、マリオ。OS6 を実行している古い Netgear ReadyNAS ultra 6 を持っていますが、このアプローチに対応しているかもしれません(確認します)。
私の場合の問題の一部は、どのファイルやフォルダをバックアップすべきか特定することだと思います。データベースだけをバックアップすればよいのでしょうか?(投稿された画像や添付ファイルなどもすべてその中に埋め込まれていると推測します)
データベースを見つけるにはどのパスを使用すればよいですか?データベースは Discourse ディレクトリ内にファイルとして保存されているのでしょうか?/var/discourse を探しましたが、素人の目にはデータベースのように見えるファイルは特に見つかりませんでした。
日次バックアップを有効化し、次のパスを取得します
/var/discourse/shared/standalone/backups/default
ジェイ、ありがとう!それが解決策のようですね。
「バックアップにアップロードを含める」を設定している場合、他のサーバーで最初からやり直す必要がある場合でも、他にバックアップしておくべきものは実質的にない、と想定してよいでしょうか?
(私が使用しているサードパーティのプラグインが、突然ダウンロードできなくなることはないという前提で)
また、毎日作成されるバックアップディレクトリを自動的に整理して、例えば過去7日分の日次バックアップのみをサーバーに保持するように設定する方法はありますか?
はい、管理ダッシュボードに設定があります。現在のところ、その名前は覚えていませんが、以前お送りしたスクリプトは、バックアップが保存されるデフォルトのパスを使用しています。
ただし、NAS にある rsync とそのコマンドを使えば、NAS から古いバックアップも削除するように調整できます。これで準備完了です。
Mariano さん、ありがとうございます。
ReadyNAS フォーラムでは、ReadyNAS で chron を使用することは可能だが最適ではなく、内蔵の「systemd タイマー」の方が良いという提案がありました。ただし、それがリモートディレクトリのクリーンアップのような高度な機能に対応できるかどうかはわかりません。
現在、ReadyNAS から Discourse サーバーに接続しようとするたびに「Permission denied (publickey)」というエラーが発生して困っています。Digital Ocean の SSH ユーザーリストに ReadyNAS の公開鍵を追加したにもかかわらずです。
もし進展があれば、同じように試している方のために、ここで報告します。
クリーンアップは Droplet 内の Discourse によって直接行われますが、rsync には無数のオプションがあるため、バックアップのコピープロセスを好みに合わせてカスタマイズできます。
SSH サーバーを再起動してください。場合によっては、公開鍵の問題が解決することがあります。
Mariano さん、ありがとうございます。
サーバーを再起動しましたが、依然として以下のエラーが発生しています:
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.3]
おそらく私の側の問題で、間違ったユーザーでログインしようとしているか何かだと思われます。Digital Ocean に公開鍵を追加する際に指定したユーザー名、および ‘root’ で ReadyNAS からログインを試みましたが、どちらも機能しません。
サーバーに鍵でログインしましたか?Discourse のインストール時やアプリケーションの再構築時などにログインしたことがありますか?
(本来はそうあってはならないですが)サーバー上の SSH で公開鍵認証が無効になっているか、NAS がログインに間違った鍵を使用している可能性があります。
コマンドのこの部分 "ssh -i ~/.ssh/id-rsa" で、正しい鍵名とパスに変更することを忘れないでください。
*** 編集 ***
マリアーノさん、ありがとうございます。最終的に動作するようになりました。
要点をまとめますと、同様に試そうとしている方のために:
ReadyNAS で SSH を有効にします。ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support
PuTTY を使って Digital Ocean サーバーにアクセスし、以下を入力します。
nano /root/.ssh/authorized_keys
エディタで、ReadyNAS が使用する公開鍵テキストをコピー&ペーストし、/root/.ssh/authorized_keys ファイルの末尾に追加します(既存のキーを上書きしないように注意してください)。
ReadyNAS のバックアップダイアログの設定では、以下を使用しました:
名前:Backup via Rsync over remote SSH(ドロップダウン選択)
ホスト:mydomain.com(またはサーバーの IP アドレス)
ポート:22
パス:/var/discourse/shared/standalone/backups/default
ログイン:root
(ReadyNAS の SSH アクセス設定手順を正しく実行した場合、公開鍵/秘密鍵のキーペアに関連する SSH パスフレーズは設定されません。これは非常に重要です。なぜなら、ReadyNAS のバックアップダイアログではパスフレーズを指定できないからです)
当初、このプロセスは完全に動作しませんでした。これらの設定で ReadyNAS のバックアップダイアログにある「テスト」ボタンを使用すると、接続は成功しましたが、バックアップを開始すると「Disk quota exceeded (122)」というエラーが発生しました。
しかし、数時間後、私が特に追加の操作を行っていないにもかかわらず、自動設定された時刻にバックアッププロセスが再度自動的に開始されたところ、今度は期待通りに動作しました。
おそらく、異なる設定で接続を試したりテストしたりした以前の作業が何らかの残留効果をもたらして妨げていたか、あるいは PC から root として PuTTY でサーバーにログインしているのと同時に、FileZilla でも root として(どちらも root のデフォルト鍵を使用)ログインしており、さらに ReadyNAS デバイスのバックアップユーティリティで root としてログインしようとした(ここで ReadyNAS の公開鍵を使用)ことが問題だった可能性があります。