Google Photoの代替Immichをセルフホストで試す

写真管理にあまりこだわりがなかったので後回しにしていたが、なんとなく思い立ってセルフホストのフォト管理アプリImmichをインストールした。Google Photoの代替としても有名。これで子供とのお風呂写真をあげても絶対に垢BANされないね。独身だけど。

使い始めたばかりなので、肌感はこれからになるけれど、とりあえず楽だった(小並感)。docker compose一発でとてもよかった。

目次

こんな感じ

インストールするとこんな感じ。

完全にGoogle Photoで笑った。なのでまぁそのまんま操作できるかと思われる。ストレージ容量がなんかバグってる。鍵付きフォルダー設定できる。外部公開用のドメインも設定から別途設定できる。

アップロードしたファイルの実体は、.envで設定するUPLOAD_LOCATIONにあるのだが(初期設定は ./library)ランダムっぽい数字で深い階層になる。なのでDB_DATA_LOCATIONも合わせてバックアップする必要がある。

インストール

ドキュメントにあるとおりでまったくハマるところがなかったため、書くことがないのだが、とりあえずドキュメント「Quick start | Immich

.envを編集するだけだね。強いて言えば、macOSで外部ストレージをマウント先にするとエラー出た。まぁそうか。

バックアップとリストア

インストールはすぐできるが、問題はバックアップとリストア手順のほうかと思う。これのドキュメントは「Backup and Restore | Immich」にある。3-2-1戦略については汎用知識なのでAIに書かせた「バックアップ戦略 3-2-1ルール」を参照。

バックアップ

バックアップすべきものは大きく分けて

  • docker-compose.yml.env
  • データの実体 (UPLOAD_LOCATION)
  • データベース(自動)

となる。このうち、データベースは初期設定で自動的に吐き出されるようになっているはずだ。管理設定から確認することができる。

で、これの行先は UPLOAD_LOCATION/backupsなので、結果的には UPLOAD_LOCATIONのフォルダをそのまんまコピーすればよい設計だ。

リストア

リストアについては、まっさらな状態を最初につくる。新しいマシンなら何もしなくていいし、既に残滓があるならば一度 docker compose down -vでボリュームを削除する。以下手順をAIにまとめさせた。

バックアップファイルが /path/to/backup/dump.sql.gz にあると仮定した手順です。

事前準備: コンテナの設定ファイルとファイル(写真データ)を戻す

docker-compose.yml.envを配置します。

バックアップしておいた UPLOAD_LOCATION のフォルダを、docker-compose.yml で指定しているパスに配置し直しておきます。

ステップ1:既存のコンテナ環境をクリーンにする

まず、既存のコンテナとDBボリュームを完全に削除します。

docker compose down -v

ステップ2:コンテナを準備してDBだけ起動する

サーバー(app)が動き出す前にDBにデータを流し込む必要があるため、個別に操作します。

docker compose pull              # 最新イメージを取得
docker compose create            # コンテナを作成起動はしない
docker start immich_postgres     # DBコンテナだけを起動
sleep 10                         # DBが完全に立ち上がるまで10秒ほど待機

ステップ3:バックアップデータを流し込む(重要)

ここが一番複雑なコマンドです。解凍しながら、DBのパス設定を書き換えつつ、コンテナ内のPostgreSQLに流し込みます。

gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --dbname=postgres --username=postgres
  • --username=postgres の部分は、.envで変更している場合はその名前に変えてください。
  • sed を挟んでいるのは、Immichのリストア時に発生しやすい検索パスの不整合(テーブルが見つからないエラー)を防ぐためです。

ステップ4:すべてのサービスを起動する

DBのリストアが終わったら、残りのコンテナをすべて起動します。

docker compose up -d

所感

割と重めのセルフホストなので、基本的にはLAN内にあるPCでの公開になるのではなかろうか。http接続前提だったし、実際そういう人向けなのだと思う。インターネット使っちゃうと通信費用も馬鹿にならないしね。とはいえ外部公開用URL設定などもあるし、本当にGoogle Photoみたいな使い方もまぁできるだろう。

個人的には基本的にはLAN内でよく、まぁせいぜい帰省とかで人に見せたいと思った時に、一時的にCloudflare Tunnelなりなんなりで公開する、くらいかなぁ(このCloudflaret Tunnel依存しているのも、できるだけ早くやめたいところだ)。

現在ディレクトリで管理していた写真画像を、Immich管理にしていいかどうかは悩ましい。ディレクトリはディレクトリで検索のしやすさがあるのも事実なんよね。

とはいえ雑に撮影した写真とかにいちいち名前つけるのもなんだかなぁ、というのも事実なので、やはり用途でわけるのがいいのかもしれない。

この記事をいいなと思っていただけた方、よければ高評価・チャンネル登録……はないので、コメント・SNSでシェア・ブックマーク、RSSフィード登録を、よろしくお願い致します。

コメント

コメントする

目次