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を使ってみた感想)

