【TSー216G】Immichを定期的に再起動させる処理を自動化してみて | hikihashiのブログ

hikihashiのブログ

主に購入したガジェット系の感想と、カメラで撮った写真の感想を気ままに書いています。

 QNAPのNAS、TS-216GにImmichを入れたことで、放置しているとスワップメモリが3GB以上溜まってしまうため、たまにコンテナを再起動させているのですが、面倒なのでGeminiに良い方法がないか聞いてみました。
 

 

 最初はPortainerでコンテナのスケジュール管理が可能か聞いてみましたが、残念ながらPortainerでのスケジュール管理はできないとのこと。

 

 代わりに「Ofelia」というコンテナを作ることで、設定した時間に指定したコンテナを再起動させたり、停止させてから指定した時間に再び起動するような設定も可能とのこと。

 

 

 何度か失敗はあったものの、下記のDocker ComposeをPortainerのAdd stackで追加したところ、無事に使えるようになりました。

 

 

version: '3'

 

services:

  ofelia:

    image: mcuadros/ofelia:latest

    container_name: ofelia

    restart: always

    volumes:

      - /var/run/docker.sock:/var/run/docker.sock:ro

    environment:

      - TZ=Asia/Tokyo

    entrypoint:

      - /bin/sh

      - -c

      - |

        # ▼ 設定ファイルを強制生成(network = host を削除)

        echo "[job-run \"immich-restart\"]" > /etc/ofelia.conf

        echo "schedule = 0 0 23 * * *" >> /etc/ofelia.conf

        echo "image = docker:cli" >> /etc/ofelia.conf

        # ネットワーク指定行を削除

        echo "volume = /var/run/docker.sock:/var/run/docker.sock" >> /etc/ofelia.conf

        echo "command = docker restart immich" >> /etc/ofelia.conf

 

        echo "[job-run \"immich-stop-sunday\"]" >> /etc/ofelia.conf

        echo "schedule = 0 0 0 * * 0" >> /etc/ofelia.conf

        echo "image = docker:cli" >> /etc/ofelia.conf

        # ネットワーク指定行を削除

        echo "volume = /var/run/docker.sock:/var/run/docker.sock" >> /etc/ofelia.conf

        echo "command = docker stop immich" >> /etc/ofelia.conf

 

        echo "[job-run \"immich-start-sunday\"]" >> /etc/ofelia.conf

        echo "schedule = 0 0 6 * * 0" >> /etc/ofelia.conf

        echo "image = docker:cli" >> /etc/ofelia.conf

        # ネットワーク指定行を削除

        echo "volume = /var/run/docker.sock:/var/run/docker.sock" >> /etc/ofelia.conf

        echo "command = docker start immich" >> /etc/ofelia.conf

 

        # ▼ 起動

        /usr/bin/ofelia daemon --config=/etc/ofelia.conf

       

 

 Immichのコンテナを毎日23時に再起動するようにし、日曜日の0時に停止させ、6時に再起動するように設定しました。

 

 日曜日の0時から6時まで停止させる理由ですが、この時間帯はバックアップを行う予定で、この前バックアップ中に管理画面を開いたのですが、重すぎてまともに操作できなくなりました。

 

 CPUの使用率は問題ないのですが、ハードディスクへの読み書きの負荷がネットワークカメラの録画の負荷もあり、重くなってしまったみたいです。

 

 Immichは設定をしていると深夜帯にデータベースのバックアップを取るため、停止させておかないと負荷が多すぎて固まる可能性があるため、停止させることにしました。

 

 

 DH2300があれから再びネットワークエラーを起こしたので、あくまでもQNAPはきっかけの一つかもしれないと言うだけで、やっぱり別に原因があるみたいです。

 

 Geminiに聞くと、Obsidianの同期に使用している「CouchDB」が使っているうちにキャッシュが溜まり、メモリ不足になっている可能性があるとのこと。

 

 なので、DH2300用にもGeminiを使ってOfeliaのコードを作ってもらいました。

 

 

version: '3'

 

services:

  ofelia:

    image: mcuadros/ofelia:latest

    container_name: ofelia_dh2300 # ※名前は環境に合わせてください

    restart: always

    volumes:

      # UGREEN NASもDockerソケットの位置は同じです

      - /var/run/docker.sock:/var/run/docker.sock:ro

    environment:

      - TZ=Asia/Tokyo

    entrypoint:

      - /bin/sh

      - -c

      - |

        # ▼ 設定ファイルを強制生成

        echo "[job-run \"couchdb-restart\"]" > /etc/ofelia.conf

        echo "schedule = 0 0 0 * * *" >> /etc/ofelia.conf

        echo "image = docker:cli" >> /etc/ofelia.conf

        

        # 【削除】network = host の行を消しました

        

        echo "volume = /var/run/docker.sock:/var/run/docker.sock" >> /etc/ofelia.conf

        # ターゲットのコンテナ名を指定

        echo "command = docker restart couchdb" >> /etc/ofelia.conf

 

        # ▼ 生成した設定ファイルを読み込んで起動

        /usr/bin/ofelia daemon --config=/etc/ofelia.conf

 

 

 こちらは0時にCouchDBのコンテナを再起動するように設定しました。

 

 それ以外にも、XikeStoreの10GbEのLANアダプターをデフォルトゲートウェイにしていたのも原因の一つかもしれないと思い、別のLANアダプターをデフォルトゲートウェイにすることにしました。

 

 ここまでやっても多分まだエラーは起こるとは思っていますが、だいぶ改善されないかと期待を持ちたいと思います。

 

 普通にNASに本来付いているLANポートを使えば、ネットワークエラーで悩まされることは多分なかったと思うので、エラーに関しては自業自得ではあるのですが、せっかく10GbEのLANアダプターを認識してくれるので、できれば使いたいと思います。

 

 

 TS-216Gは8ヶ月以上、DH2300は3ヶ月以上使っていますが、AIのおかげで自分がNASをほとんど使っていないことを知りました。

 

 今後もNASで何かできないか模索しつつ、ネットワークエラーを改善できるように頑張ることにし、今回は終わろうと思います。

 

 

(Immichを導入してみた感想)