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はちょっとむずかしい.
普通ならvaluesやREADMEに設定できる値が全部書いてあるだろうところ,あんまり書いてない.
https://github.com/immich-app/immich-charts/blob/main/charts/immich/values.yaml
かといってtemplate側を見に行ってもdeployment等の定義が書いてなかったりするので,何を設定すべきなのかわからない. 実はこいつはライブラリとして別のhelm chartを参照している.それも最新版ではなくちょっと古いやつ.
これをライブラリとして流用しているので,こいつのREADMEにあるvaluesが全てそのまま使えるようになっている.これでannotationの設定とかまでhelmから仕込めるようになる.
というわけで出来上がりがこれ.
面倒なのはDBで,こいつはPostgreSQLを使うのだけれど,pgvecto.rsを使っている.
そのため,普通の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
できあがり
スマホアプリは初回起動時にドメイン選択画面が表示される.LAN内であればドメイン指定でTLS接続できるようにしてあるので
これでそのままつながる.
Immichの公式ページにも書いてあるが,くれぐれもこれを唯一のストレージにしてはいけない.まだProduction Readyではないので,かならずバックアップを用意しておこう.
期待していたとおりだけれど,Immichのアプリの出来は割と良い.
- バックアップのON/OFF切り替え
- WiFi接続時のみ自動バックアップを有効化
あたりは普通にできる.