以前、Raspberry Pi 5 + 自宅NASでImmichを動かそうとして断念した話を書きました。
その後、構成を見直して UGREEN NAS DXP2800 と Oracle Cloud Always Free の組み合わせに移行したところ、かなり快適になった話です✨
前回の記事はこちらをご覧ください。

構成の概要
今回の構成では、Immich 本体は UGREEN NAS DXP2800 上で動かし、機械学習処理だけ Oracle Cloud の Always Free インスタンスに切り出すというアプローチを取りました。
| 項目 | 内容 |
|---|---|
| メインサーバー | UGREEN NAS DXP2800 (Intel N100 4コア / 8GB RAM) |
| ストレージ | DXP2800 内蔵 HDD |
| 機械学習 | Oracle Cloud Always Free × 2台(Ampere A1 / ARM 2ocpu / 12GB RAM) |
| Immich | Docker Compose で構築 |
| Docker 管理 | Portainer(別サーバー)+ Edge エージェント |
| 外部公開 | Cloudflare Tunnel(cloudflared) |
UGREEN NAS DXP2800を選んだ理由
NAS 単体で Immich が動くスペックのものを探していたのですが、一番の決め手はメモリ搭載量(8GB)の割に低価格であることでした。
メモリが高騰している昨今、後から増設するとかなり割が合わないので、最初から十分な量を積んでいるモデルを選びたかったというのがあります。
(増設も可能なので、将来性もある)
CPU については機械学習を OCI に任せることにしたので、Intel N100 で十分という判断です。
UGREEN は NAS メーカーとしては新参で、ソフトウェアの成熟がまだ十分とは言えない部分もあります。とはいえ、価格面では他社と比べてかなり優位なので、コスパを重視するなら十分に選択肢に入ると思います。
前回使っていた ASUSTOR Drivestor AS1102T はメモリが 1GB しかなく Immich が動かせなかったので、DXP2800 への買い替えでその問題も解消されました。
Oracle Cloud Always Free について
機械学習処理は OCI の Always Free 枠の Ampere A1 インスタンスを 2 台使って運用しています。
Always Free 枠では Ampere A1 は合計 4 ocpu / 24GB RAM まで無料で使えるので、2ocpu / 12GB RAM のインスタンスを 2 台構成にしました。
ブートイメージは Canonical-Ubuntu-24.04-Minimal を使用しています。
なお、Always Free 枠では x86 の VM.Standard.E2.1.Micro インスタンスも使えますが、メモリが少なく機械学習には力不足なので今回は採用していません。
さすがに他に仕事が無くて、ほとんどアイドリングしてるだけなのはもったいないので、Immich の機械学習処理がないときは、BOINC でグリッドコンピューティングをさせています。
なぜOCIだけで完結させないのか
OCI のスペックは Immich 全体のワークロードに耐えうるものですが、ストレージが問題です。
Always Free 枠ではブートボリュームの上限が 200GB となっており、数 TB 級の写真ライブラリを置くには足りません。
かといって有料のブロックストレージやオブジェクトストレージを追加すると、ランニングコストがかなり高くつくので断念しました。
ネットワーク構成について
今回の構成で一番特殊な点がネットワーク周りです。
immich-machine-learning には認証機能が組み込まれていないため、インターネットに直接公開するわけにはいきません。
そこで、Tailscale で NAS と OCI インスタンスをプライベートネットワークでつなぎ、機械学習サーバーへの通信は Tailscale 経由に限定しています。
外部公開の構成は前回と同様で、cloudflared によるトンネリング経由です。
compose のネットワーク構成
前回と同じく、プロキシは cloudflared ネットワークに接続して Cloudflare Tunnel からのトラフィックを受け取ります。
ただし今回は tailscale コンテナをネットワークのハブとして使っており、tailscale は network_mode: "service:server" で server コンテナのネットワークに相乗りする形になっています。
services:
tailscale:
image: tailscale/tailscale:latest
cap_add:
- NET_ADMIN
- NET_RAW
devices:
- /dev/net/tun:/dev/net/tun
network_mode: "service:server"
# ...
proxy:
image: ghcr.io/miguelangel-nubla/immich-upload-optimizer:latest
environment:
- IUO_UPSTREAM=http://server:2283
networks:
default:
cloudflared:
aliases:
- immich
# ...
server:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
dns:
- 100.100.100.100
- 1.1.1.1
# machine-learning はコメントアウト(OCI側で稼働)
プロキシからは暗黙のデフォルトネットワークを経由して Immich サーバーに到達できる構成になっています。
また、Immich サーバーから OCI 上の機械学習サーバーへの通信は、tailscale のネットワーク経由で行われます。
実際に使ってみて
サムネイル生成・トランスコードの速度は Pi 5 と比べて大幅に改善しました。
機械学習処理は OCI に任せているため、NAS 側の CPU 使用率は安定しており、Web UI の操作感も快適です。
前回問題になっていたアップロードの遅さも解消されており、まとまった枚数を投入してもストレスなく処理されるようになりました。
まとめ
| 項目 | Pi 5 + NAS(以前) | DXP2800 + OCI(今回) |
|---|---|---|
| アップロード速度 | 詰まる | 快適 |
| UI の快適さ | もっさり | 快適 |
| 機械学習 | CPU に重い | OCI 2台に分離して安定 |
| コスト | 電気代のみ(NAS + Pi5) | 電気代のみ(NAS) |
Immich をちゃんと使いたいなら、それなりのスペックのマシンで動かすのが正解でした。
機械学習を OCI に逃がす構成は少し手間ですが、無料で快適に動くのでおすすめです。
いずれの課題
NAS 自体が火災などで物理的に失われた場合、写真データがすべて消失してしまいます。
オフサイトバックアップの仕組みも検討しなければと思っています。
やっぱりコスパで言うと AWS S3 の Glacier Deep Archive ですかね🤔
余談:Intel Optane メモリを試してみた
DXP2800 は M.2 スロットが 2 つあり、NVMe SSD を増設できます。(低価格なのにすごい!)
数百円で安売りされていた 16GB の Intel Optane メモリを取り付けてみたのですが、認識されたのが 13.4GB にとどまり、最低条件の 16GB を満たせず結局使えませんでした。
安かったのでダメ元ではありましたが、残念でした😭
同じこと考えてる人はいると思いますので、参考にしてください…
ご意見・ご質問はお気軽にどうぞ😊


コメント