おうちKubernetesクラスタにImmichを入れてGoogle Photoを代替する

Google Photoは割と便利なのだが,容量無制限で始まったサービスにも関わらずいつの間にか15GBの容量制限ができていた.前はPixel 4aを使っていたので,その容量制限も無効化されていたんだけど,iPhoneに戻ってきたらきっちり容量制限されるし,なにかもっと容量のでかいサービスがほしくなった. でも金はあんまり払いたくない,しかし技術力は惜しまないぞ.

というわけでGoogle Photoの代替となるOSSをおうちKubernetesクラスタ上に構築しようと思う.

候補となるOSS

金を払う気がないのでSaaSサービスは対象外にする.無料で大容量を謳っていても,それはGoogle Photoと同じ道を辿るだけだ.というわけでOSSを探した.

PhotoPrismの見た目はすごく良かったのだが,公式でiOS/Androidアプリが存在しないので,モバイルから使うのに不便そう.特にこの種のアプリの場合,写真はたいていスマホで撮るのでモバイルからのアップロードまわりのUXは非常に重要になる. Webブラウザ経由で,とかは嫌だしね.

PiwigoはPHP自宅サーバで動かす気がなかったので却下.

enteはWebもモバイルアプリもあるし,実装はGoでかなりよかったのだけれど,SaaS版はともかくOSS版をどうやって手元で起動するのかドキュメントがあまり見つからなかった.まぁビジネスとしてやっていて,SaaS版を提供している以上そっちを使ってほしいのだろうけど.

というわけでImmichを入れた.機械学習系のマイクロサービスが付属していたりして,若干不要な機能もあるのだが,求めている要件には合致した.

Hemlで入れる

Immichのhelm chartはちょっとむずかしい.

github.com

普通ならvaluesやREADMEに設定できる値が全部書いてあるだろうところ,あんまり書いてない.

https://github.com/immich-app/immich-charts/blob/main/charts/immich/values.yaml

かといってtemplate側を見に行ってもdeployment等の定義が書いてなかったりするので,何を設定すべきなのかわからない. 実はこいつはライブラリとして別のhelm chartを参照している.それも最新版ではなくちょっと古いやつ.

https://github.com/bjw-s/helm-charts/tree/923ef40a39520979c98f354ea23963ee54f54433/charts/library/common

これをライブラリとして流用しているので,こいつのREADMEにあるvaluesが全てそのまま使えるようになっている.これでannotationの設定とかまでhelmから仕込めるようになる.

というわけで出来上がりがこれ.

github.com

面倒なのはDBで,こいつはPostgreSQLを使うのだけれど,pgvecto.rsを使っている.

github.com

そのため,普通のpsqlのhelm chartでは使えない.まぁbitnamiのpostgresqlのhelm chartにimageとしてtensorchord/pgvecto-rsを渡せば割とそのまま使えるのだが.

    primary:
      initdb:
        scripts:
          create-extensions.sql: |
            CREATE EXTENSION cube;
            CREATE EXTENSION earthdistance;
            CREATE EXTENSION vectors;

一応extensionを作っておく必要はある.

ちなみにstorageは全部longhorn

h3poteto.hatenablog.com

できあがり

スマホアプリは初回起動時にドメイン選択画面が表示される.LAN内であればドメイン指定でTLS接続できるようにしてあるので

h3poteto.hatenablog.com

これでそのままつながる.

Immichの公式ページにも書いてあるが,くれぐれもこれを唯一のストレージにしてはいけない.まだProduction Readyではないので,かならずバックアップを用意しておこう.

期待していたとおりだけれど,Immichのアプリの出来は割と良い.

  • バックアップのON/OFF切り替え
  • WiFi接続時のみ自動バックアップを有効化

あたりは普通にできる.