
2025/11/30 18:11
Self-hosting my photos with Immich
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
記事では、著者が低電力Ryzen 7ミニPC(ASRock DeskMini X600)に64 GB RAM、1 TBディスクを搭載し、アイドル時の消費電力が10 W未満である環境にImmichをセットアップした手順を説明しています。Proxmox上に「photos」という名前のVMを作成し、500 GBのストレージ、4つのCPUコア、4 GB RAMを割り当てました。NixOS設定ファイルで
services.immich.enable = true を有効化してImmichサービスを起動します。このサービスは tailscale serve --bg http://localhost:2283 コマンドと MagicDNS/TLS によりTailscale経由で公開され、https://photos.example.ts.net からアクセス可能です。
公式の
immich‑cli を使用した初期写真インポートでは、バックグラウンドジョブがタイムアウトし、Google Takeout のJSONメタデータが無視されるという問題が発生しました。第三者ツール immich-go が両方の問題を解決します。immich-go upload from-google-photos … を実行することでバックグラウンドタスクを一時停止し、Google Takeout アーカイブを正しく処理できます。その後、iPhoneアプリはTailscale URL経由でログインし、自動アップロードが有効化され、通知は無効にしてアップロードアラートを防止します。
バックアップについては、著者はsystemdタイマーを使用して
/var/lib/immich(UPLOAD_LOCATION)ディレクトリ全体を rsync で3‑2‑1戦略で同期する予定です。これはImmichの公式ドキュメントに従った方法です。記事では、Immichには組み込みの写真編集機能がないため、ユーザーはGIMPなど外部ツールを使用しなければならず、共有もまだGoogle Photos経由で行われると指摘しています。Enteと比較して、著者は既存のTailscale VPNとLUKSディスク暗号化が十分なセキュリティを提供するため、エンドツーエンド暗号化を必要としないImmichを好んでいます。
総じて、このセットアップは小型かつ省電力マシン上で高速で信頼性の高いセルフホスト写真保存ソリューションを実現しており、外部編集ワークフローを受け入れられる趣味家や小規模ビジネスに適しています。
本文
目次
- ステップ 1 – ハードウェア
- ステップ 2 – Immich のインストール
- ステップ 3 – 初期写真のインポート
- ステップ 4 – Immich iPhone アプリの導入
- ステップ 5 – バックアップ
- 何が足りないか?
- なぜ Immich を選ぶのか…?
- 結論
私はクラウドサービスを利用するたびに、データのローカルコピーをバックアップと自立性のために保持したいと考えています。gphotos‑sync が 2025 年 3 月に Google によって OAuth スコープが制限されたことで動作しなくなったため、既存の Google Photos 環境に代わるツールを探す必要がありました。本記事では Immich(セルフホスティング型フォトマネージャー)のセットアップ手順をご紹介します。
ここで最終的に得られた結果:NixCon 2025 のライブ写真数枚
ステップ 1 – ハードウェア
Immich は Ryzen 7 Mini PC(ASRock DeskMini X600)上で稼働させています。アイドル時は 10 W 未満で、VM 用に十分なリソース(64 GB RAM, 1 TB ストレージ)を備えています。
詳細は 2024 年 7 月のブログ記事をご覧ください。
このミニサーバーを仮想マシンへ分割するために、オープンソースの仮想化プラットフォーム Proxmox を導入しました。Immich は任意のサーバー上にも直接インストールできます。
ステップ 2 – Immich のインストール
「photos」という名前で 500 GB のディスク、4 コア CPU、4 GB RAM を割り当てた VM を作成しました。
初期インポート時は CPU/RAM を多めに設定しても構いませんが、通常の運用ではこれで十分です。
-
このブログ記事で説明したように、VM に NixOS を宣言的にインストールします。
-
その後 Immich を有効化:
services.immich = { enable = true; };
この時点では Immich は
localhost 上で利用可能ですが、NixOS のデフォルト設定ではファイアウォールが有効になっているためネットワークからはアクセスできません。ファイアウォールを開ける代わりに Tailscale を使い公開します。
photos# tailscale serve --bg http://localhost:2283
Tailscale の MagicDNS と TLS 証明書自動発行が有効になっているので、
https://photos.example.ts.net を任意の PC・ノートPC・スマホからブラウザで開くことができます。
ステップ 3 – 初期写真のインポート
最初は公式 Immich CLI でインポートを試みました:
% nix run nixpkgs#immich-cli -- login https://photos.example.ts.net secret % nix run nixpkgs#immich-cli -- upload --recursive /home/michael/lib/photo/gphotos-takeout
アップロードは安定せず、タイムアウトすることが頻繁に起きました。
サーバー側のバックグラウンドジョブ(サムネイル生成・メタデータ抽出・顔検出)が処理を遅延させ、失敗につながったと考えられます。
また Google Takeout のアーカイブには画像ファイルと同じディレクトリに JSON 形式のメタデータが置かれており、
immich-cli はそれを無視します。
より良いツールは immich-go です。
アップロード前にバックグラウンドタスクを一時停止し、終了後に再開します。また Google Takeout アーカイブを理解しています:
% immich-go \ upload \ from-google-photos \ --server=https://photos.example.ts.net \ --api-key=secret \ ~/Downloads/takeout-*.zip
これでスムーズにインポートが完了しました。
ステップ 4 – Immich iPhone アプリの導入
新しい写真の主な撮影場所はスマホですので、iPhone に Immich アプリをインストールし、Tailscale URL でサーバーへログイン。右上のアイコンから自動バックアップを有効にしました。
設定が正しいかどうか完全には確信できません。カメラ撮影は通常 Live Photos に入るようですが、「Recent」で他のファイルも含まれると考えています。ご存知の方がいらっしゃれば、説明またはリンクをいただければこの記事を更新します。
また Immich の通知をオフにすることを強く推奨します。バックグラウンドで画像がアップロードされるたびに通知が届きますが、これは必須ではありません。
設定 → アプリ → Immich → 通知 へ行き、許可チェックボックスのチェックを外してください。
ステップ 5 – バックアップ
Immich の公式ドキュメントでは、
UPLOAD_LOCATION(NixOS では /var/lib/immich)全体をバックアップすることが推奨されています。backups サブディレクトリには SQL ダンプが、upload, library, profile ディレクトリにはユーザーがアップロードしたすべてのデータが格納されています。
私は systemd タイマーを設定し、rsync で
/var/lib/immich を自宅 PC にコピーするようにしました。これにより 3‑2‑1 バックアップ方針(3つのコピー、2種類のメディア、1か所のロケーション)を実現しています。
何が足りないか?
- Immich は現在写真編集機能を持っていません。画像を回転・トリミングしたい場合はダウンロードして GIMP 等で編集します。
- 共有機能については、まだ Google Photos にアップロードして共有しています(相手に応じて)。
なぜ Immich を選ぶのか…?
セルフホスティング型画像管理ツールとして最も注目されるのは Immich と Ente の2つです。
私の環境では Immich がより人気で、Ente は必要以上に大きなプラットフォームのように感じました。
Ente は完全オープンソースかつエンドツーエンド暗号化されたクラウドストレージを提供し、信頼できるプロバイダー不要です。この上で Ente Photos(Apple/Google Photos の代替)と Ente Auth(2FA 代替)の2つのアプリを構築しています。
私はエンドツーエンド暗号化が必要ないため、トランジット層(Tailscale)とディスク層(LUKS)で既に保護されています。追加の複雑さは不要です。
結論
Immich は使い勝手の良いアプリです!
高速でほぼ問題なく動作しますが、初期インポートは正しいツールを選べばスムーズです。公式
immich-cli の改善や、immich-go を標準にすることが望まれます。iPhone での自動バックアップ設定は少し手間ですが、改善の余地があります。
その他初期のハードル以外には不満はありません。
この記事がお役に立ったら?
ブログの RSS フィードを購読して新着記事をお見逃しなく!
2005 年からブログを書き続けて 20 年以上、知識と経験を広めています。 :)
ご支援いただける場合はコーヒーをご購入ください。ありがとうございます! ❤️