はじめに
QNAPからUGREENに乗り換えてそんなに困ってないというか、結構気に入っているのですが、最大の問題がバックアップの弱さでした。 QNAPではHBS3という強力なツールでNASのデータをAmazon S3などのクラウドストレージにバックアップできたのですが、UGREENにはそういう機能はありません。
という訳で、dockerで実現してみました。 docker最高!
方針
- 利用するツールはbackrest
- 保存先はAmzon S3 Standard
- Amazon S3ではライフサイクルポリシーで7日後にDeepArchiveに移動する
いろいろ検討した結果、resticというツールが良さげです。resticは重複排除や圧縮に対応しているのにOSSという素晴らしさ。resticを使ったdockerコンテナも複数公開されているのですがその中でも、WEBUIで操作できるbackrestを使うことにしました。
インストール
- Dockerアプリのプロジェクトから「作成」を選んでプロジェクト名(backupなど)、保存パス(デフォルトでOK)、Compose設定に以下のYAMLファイルを貼り付けて「今すぐデプロイ」
version: "3.8"
services:
backrest:
image: garethgeorge/backrest:latest
container_name: backrest
hostname: backrest
ports:
- "9898:9898" # 外部アクセス用
volumes:
- ./backrest/data:/data
- ./backrest/config:/config
- ./backrest/cache:/cache
# バックアップ対象フォルダ
- /volume1:/volume1:ro
- /volume2:/volume2:ro
environment:
- BACKREST_DATA=/data
- BACKREST_CONFIG=/config/config.json
- XDG_CACHE_HOME=/cache
- TMPDIR=/tmp
- TZ=Asia/Tokyo
restart: unless-stopped
- コンテナが立ち上がってきたら、WEBUIにアクセス(Dockerアプリのコンテナでbackrestを選んで→マークからクイックアクセスが楽)して、初期設定
Instance ID: なんでもいいですが(dxp2800とか)
User: なんでもいいけど(hogeadminとか)
Password: 強いの付けてね
- Add Repoでリポジトリ設定(前提として先にAWS上にS3バケットを作っておく必要あり。あと、アクセスキーを発行しておく必要あり)
Repo Name: S3とか
Repository URI: s3:s3.us-east-1.amazonaws.com/<バケット名> ※S3 URIではないので注意。私はコストが安いus-east-1を使ってる
Password: Generateで作ればOK
Env Vars: 環境変数をいくつか追加
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYは最低必要。
私はAWS_STORAGE_CLASS=STANDARD_IAも入れてる
その他の設定は変える必要なし
- Add Planでバックアップ対象を追加
Plan Name: nas backupとか
Reposotory: さっき作ったリポジトリ名 S3とか
Paths: ここにバックアップしたいパスを足していく
私は /volume1/@homeとかdockerとか。
Backup Schedule: 私はCron、Local、Every mounth on 1 at 2:00にしてます。差分取れるので毎日とってもいいけど。
これでOK。作ったプランのBackup Nowで試し取りしておくと良いでしょう。
最後に、docker/backup/のファイルは別途どっかにちゃんと保存しておきましょう。設定したパスワードが分らないとデータ復元できません。。。
以上
### 2025/10/3 追記
デフォルトでRepositoriesポリシーで月1回のPrune(削除)とCehckがスケジュールされているのだが、Checkは実際にS3のデータを読みに行くようで、ライフサイクルポリシーでDeep Archiveに送ってしまうと、失敗する。必ずCheckを実施しないといけないのか?というと、まぁ保険なので実施しないことにしました。削除は、Deep Archiveに送られていても問題なくできるようです。