「docker」タグアーカイブ

UGREEN NASync クラウドバックアップ

はじめに

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を使うことにしました。

インストール

  1. 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
  1. コンテナが立ち上がってきたら、WEBUIにアクセス(Dockerアプリのコンテナでbackrestを選んで→マークからクイックアクセスが楽)して、初期設定
 Instance ID: なんでもいいですが(dxp2800とか)
 User: なんでもいいけど(hogeadminとか)
 Password: 強いの付けてね
  1. 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も入れてる
その他の設定は変える必要なし
  1. 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に送られていても問題なくできるようです。

UGREEN NASync DXP2800省エネチューン

チューンって程のことはないのですが、パフォーマンスが上がる確かめるためにNVMe SSDをキャッシュとして追加してみたのですが、安物のgen3 x2レーンではHDDと大差なかったので、dockerのバックエンドストレージとして分離しようと思います。

【プール分け】

  1. HDD コールドプール(Volume1) – 基本的にはユーザーホームなのでユーザーが使わなければアクセスされない
  2. SSD ホットプール(Volume2) – dockerなど常にアクセスするもののバックエンドとして利用。基本アプリはこちらに入れることにする

インストール済みのアプリや、dockerコンテナを移動するには基本入れ直しが必要です。写真アプリなんかはインデックスが消えそうで嫌だったのと、そもそも写真はHDDに入ってるので移動しませんでした。DockerとHome Assistant以下の通り。それ以外はアンインストールとインストールの繰り返しでOK。

【Dockerの移動】

  1. コンテナを全部止める
  2. docker内のファイルを全て適当な場所にへコピーする
  3. docker-composeの内容をメモっておく(まぁ、同じフォルダをしていると出てきますけど念のため)
  4. dockerアプリ削除(HomeAssistantアプリも同時に削除される)
  5. dockerフォルダーを削除する(これをしないとVolume1に再度作られてしまうようだ)
  6. Volume2を指定してdockerアプリインストール
  7. 退避したdockerディレクトリのファイルを新たに作成されたdockerフォルダ内にコピーする
  8. 管理 – データ移行(コンテナインスタンスは移行されない)
  9. HomeAssitantアプリをVolume2/docker/homeassistantのフォルダを指定してインストールする(これでHomeAssitantは元通りに動くはず)
  10. その他のコンテナもdocker-composeで再生成

余談ですが、dockerは共有フォルダーに出てくるdockerフォルダーと@dockerというシステムが勝手に作るdocker動作に必要なフォルダがあります。dockerをアンインストールすると、@dockerは削除されますが、特にコピーしておく必要はなさそうです。もしかしたらローカルリポジトリに自前のコンテナを置いてる場合はコピーしておいた方がいいかも。

結果

常時28W程度食っていたものがHDDがアイドル停止するようになって12Wまで下がりました。静かだし。 🙂

たった16W削減ですが、1か月に換算すると 11.5kWhも減るんですよね。今、kWhあたり35円程度なので、403円/月の削減ですね(^_^)

実はそれ以外にも、RTX810からRTX1210に変更したのを機に、SWX2200-8Gと2.5GのHUBの電源も普段落としています。私の用途では2.5Gbps必要なことなんて滅多にないので。その結果、常時稼働しているものが48W程度ほどに下がり、全体で25W減、月額にして630円/月の削減となりました。

ポート開放が要らないVPN

背景

自宅回線をMoneyForwd 光に変更した結果、v6Plus接続になりダイナミックDNS等でのVPN接続は難しくなったしまったので、別の方法を探していました。

やりたいこと

  • 自宅のHEMSなどにiPhoneからアクセスしたい
  • UGREEN NASyncのdockerコンテナで実現したい

TailScale

探した結果、TailScaleというサービスがあることを知りました。イメージとしてはクラウド上にあるルーターにVPN接続したい機器がVPNを張りに行ってそこでルーティングしてもらう感じですね。なので、OUT方向が通れば固定IPやポート開放ができなくてもOKです。

TailScaleはPersonalプランという無償プランがあります。 3 Users 100 Devicesまで無料というなんとも太っ腹なサービス! 素晴らしい(笑)

早速やってみる

  1. iPhoneでTailScalアプリをダウンロード
  2. 新規にアカウント作成してVPN接続!
  3. PCからTailScalの管理ページに入りSettings -> Keysで Auth KeysをGenerate Auth keyをポチっとと押してキーを払い出しコピーしておく
  4. UGREEN NASyncでdockerアプリからプロジェクト作成で適当なプロジェクト名(vpnなど)と保存パス(docker様にアサインした共有フォルダがいいでしょう)を指定して、以下の内容をCompose設定に記載して今すぐデプロイ!
version: "3.8"

services:
  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    hostname: nasync
    network_mode: "host"
    privileged: true
    volumes:
      - /var/lib:/var/lib
      - /dev/net/tun:/dev/net/tun
    environment:
      # Tailscale 管理画面で作成した AuthKey を入れる
      - TS_AUTHKEY=tskey-auth-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      # LAN 全体 (192.168.1.0/24) を iPhone に広告
      - TS_EXTRA_ARGS=--advertise-routes=192.168.1.0/24
    restart: unless-stopped
  1. TailScaleの管理ページからMachinesを見ると、iPhoneとnasyncが繋がってるはず!nasyncの…からEdit route settingsを選んで目的のサブネットにチェックを入れて保存すればそのサブネットに行けるようになります。

Machines Edit Route Settings

超簡単で素晴らしい!(^_^)/

QNAP TS-230 to UGREEN DXP2800 コンテナ編

移行編に続き、QNAPでもやっていたMRTGをコンテナで動かしてみようと思います。

Dockerアプリ

DXP2800ではコンテナを動かすためにはDockerアプリをインストールします。コンテナの動かし方はQNAP TS-230とほぼ同じです。ただ、TS-230はARMアーキテクチャなのでsk278/rpi-mrtgを使っていたのですが、今回はfboaventura/dckr-mrtgにしてみました。

ついでに前回は手組でコンテナを作ったのですが、今回はDocker-Composeを使って作ってみました。Docker Hubサイトにdocker-composeの記載があるのでほぼそのまま使えます。

---
services:
  mrtg:
    image: fboaventura/dckr-mrtg:latest
    hostname: mrtg
    restart: always
    ports:
      - "8880:80"
    volumes:
      - "./conf.d:/etc/mrtg/conf.d"
      - "./html:/mrtg/html"
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
    environment:
        TZ: "Asia/Tokyo"
        HOSTS: "コミュニティ名:ルーターIP"
        WEBDIR: "/mrtg/html"
        USERID: 1000
        GROUPID: 1000
        REGENERATEHTML: "yes"
        INDEXMAKEROPTIONS: "--section=descr"
        CFGMAKEROPTIONS: ""
        MRTG_COLUMNS: 2
    tmpfs:
      - "/run"

こんな感じで、プロジェクトからcomposeを張り付けて今すぐデプロイ!

これで、http://DXP2800のIP:8880/ でMRTGが立ち上がります。

コンフィグはDockerアプリをインストールすると共有フォルダにdockerフォルダができるのでその中のmrtg/conf.d/にルータIP.cfgができています。これを使うもよし自分でいじったcfgを使うもよし。*.cfgファイルを読んでくれるので、ここに自分で作ったhoge.cfgを置けばOKです。ただし、ルーターIP.cfgはないと勝手に作られちゃうのでダミーでも置いとく必要があります。データはmrtg/htmlに吐き出されます。

はい。動きました。簡単ですね(笑)

こんな感じです。

蛇足

原因がいまいちはっきりしないのですが、どうやっても403 Forbidnになってしまう現象が発生しました。やったことを書くともともと一般ユーザーだったユーザーを管理者に格上げしてそのユーザーでdockerを操作したらなぜか、MRTGのグラフが表示されず、403 Forbidnになってしまいました。ファイルパーミションは実は全部、777で作られるようで、実際の権限管理は別途やってるみたいですね。ただ、ユーザーは確かにUNIX的に別のユーザーなので何等か想定しない操作をしてしまったんだと思います。結局、コンテナを作り直したら戻りました。ファイルは元のコンテナからコピーすればOKでした。

QNAP TS-230でMRTGを動かす

今までTS-269 Proを使っていたが老朽化したのでTS-230に買い替えたのだが、他にも買い替えたい理由があり、その一つがコンテナステーションが使えることだった。

という訳で、さっそくMRTGをQNAPで動かしてみた。びっくりするくらい簡単に動いた(笑)

使ったコンテナは以下の2つ

※TS-230はARMアーキテクチャなのでx86用のコンテナは使えないので注意

ほんとは、docker-compose(コンテナステーションでもCreate Applicationから作れる)でコンテナ連携して上げるのがかっこいいと思うけど今回は手動で。コンテナ内に設定残しちゃってるのであんまりいいやり方ではないです。

とりあえずちゃっちゃっと上げる手順を。

コンテナステーションを立ち上げてCreate選んで検索ウインドウでrpi-mrtgとかnginxとか書いてDocker Hubを検索すると目的のコンテナが出てくるので選んで「Install」!

ちなみに、mrtgで検索を掛けると出てこない。また、アーキテクチャがARMでないものも出てしまうので、コンテナイメージ探しはdocker hubでアーキテクチャを指定して探した方がいいかも。

例) https://hub.docker.com/search?q=mrtg&type=image&architecture=arm%2Carm64

その時に、色々聞かれるけど、ほとんど弄る必要はない。

MRTGのデータを保存するところをShered FolderでQNAP内のフォルダを共有しておく。そうしないとnginxコンテナとコンテンツフォルダを共有できないので。QNAP内のフォルダ共有以外のも色々方法はあるけど。まぁ、これが一番楽でしょう。

あとは、Create押せば立ち上がります。

次にnginxコンテナも作る。MRTGをWEBアクセスすることを考えると、Network ModeはBridgeでIP付けといた方がいいと思う。

nginx側でもフォルダ共有かけときます。MRTGでデータ保管で指定したフォルダを/usr/share/nginx/html(デフォルトでここを見る設定になってます)にマウントしておく。

これで、コンテナを立ち上げればhttp://192.168.1.10/でMRTGが見えるはず。

MRTGのcfg書きとかは、コンテナに入って書く。(ほんとは、ファイルリンクしてQNAP側のファイルを書き換えれば反映さるる方が美しいけど、面倒だったので、コンテナ内を編集しちゃいました。。。)

コンテナに入るには、例えばOverviewからコンテナの「>_」をクリックして/bin/shを起動すればWEBから入れます。

以上!