Self-Hosting Immich: プライベート写真クラウド

ご自身でホストするAIを活用したバックアップに使用される写真

目次

Immich は、あなたの思い出を完全にコントロールできる、革新的なオープンソースでセルフホスト型の写真および動画管理ソリューションです。Google Photos と競合する機能を備えており、AI による顔認識、スマート検索、自動モバイルバックアップを含みながら、あなたのデータをプライバシーとセキュリティを保ったまま、あなたのサーバー上に保管します。

Personal Knowledge Management があなたの思考や情報を整理・保存するのと同じように、Immich はあなたの視覚的な思い出を整理・保存します。

immich

什么是 Immich?

Immich は、Google Photos や iCloud のようなプロプライエタリクラウド写真サービスのオープンソースでセルフホスト型の代替ソリューションです。TypeScript、PostgreSQL、機械学習を含む現代的な技術で構築されており、写真および動画コレクションのバックアップ、整理、ブラウジングに特化したプラットフォームを提供します。

主な特徴

プライバシーを最優先とした設計: すべての写真はあなたのインフラストラクチャに残ります。第三者のサーバー、データマイニング、プライバシーの懸念はありません。あなたの思い出はあなたに属します。

自動モバイルバックアップ: ネイティブの iOS および Android アプリが、Google Photos と同様の自動バックアップを提供します。写真は撮影した直後にセキュリティで保護されます。

AI による検索: CLIP および顔認識を含む機械学習モデルを活用し、Immich は意味に基づいた検索を可能にします。“ビーチの夕日”、“犬が遊んでいる”、または特定の人物を手動タグ付けなしで検索できます。

顔認識: 写真内の顔を自動検出およびクラスタリングします。Immich はあなたのライブラリ全体にわたって人物を識別し、特定の個人の写真を簡単に見つけることができます。

モダンなウェブインターフェース: どのデバイスでもブラウザからアクセスできる美しい、レスポンシブなウェブインターフェースで、写真の閲覧、整理、共有が可能です。

マルチユーザー対応: 家族のアカウントを作成し、それぞれが独自のプライベートライブラリを持ちます。選択したアルバムを共有しつつ、個人の写真のプライバシーを維持できます。

ライブフォト対応: iOS ライブフォトおよび Android モーションフォトを完全にサポートし、静止画と動画の両方を保存します。

メタデータの保存: 位置、カメラ設定、タイムスタンプを含む EXIF データが保存されます。GPS 座標に基づいて写真を地図上に表示できます。

外部ライブラリのサポート: 外部ストレージから既存の写真ライブラリをインポートし、ファイルのコピーなしでディスクスペースを節約します。Obsidian がテキストベースの知識を管理・整理するのと同じように、Immich は視覚メディアの強力な整理を提供します。

なぜ写真をセルフホストするのか?

完全なプライバシーのコントロール

商用クラウドサービスを使用する場合、あなたの写真はあなたがコントロールできないサーバーに保存されます。広告のための分析、機械学習のトレーニングデータに含まれる、または第三者にアクセスされる可能性があります。Immich を使用する場合、あなたが明示的に共有しない限り、写真はサーバーから離れません。

ストレージの制限なし

クラウドサービスはストレージ階層に基づいて料金を請求します。セルフホストの場合、あなたのハードウェア容量が唯一の制限です。10TB のハードディスクは2年分のプレミアムクラウドストレージよりも安価です。

コスト効率

初期のハードウェア投資後、セルフホストには最小限の継続的なコストがあります。月額サブスクリプションはなく、ストレージ制限を超えた場合の驚きの料金もありません。

データの永続性

クラウドサービスは利用規約を変更し、価格を引き上げたり、完全にシャットダウンしたりすることがあります。セルフホストされたソリューションは、あなたのコントロール下に無期限に残ります。

学習の機会

Immich のセルフホストは、Docker、リバースプロキシ、SSL 証明書、データベース管理、サーバー管理の実践的な経験を提供します。これは、開発者や DevOps 専門家にとって貴重なスキルです。

アーキテクチャ概要

Immich はいくつかのコンポーネントを持つマイクロサービスアーキテクチャに従います:

Immich サーバー: 認証、写真アップロード、データベース操作を処理するメインの API サーバー。Node.js と TypeScript で構築されています。

Immich マシン学習: フェイシャル認識、オブジェクト検出、CLIP 基盤の意味検索のために TensorFlow モデルを実行する別途の Python サービス。

Immich ワーク: ユーザー向けのアプリケーションを提供する React ベースのウェブインターフェース。

PostgreSQL: メタデータ、ユーザー情報、写真、人物、アルバム間の関係を保存するリレーショナルデータベース。

Redis: セッション管理およびジョブキュー調整のためのインメモリキャッシュ。

TypeSense (オプション): 検索機能およびパフォーマンスを向上させる検索エンジン。

すべてのコンポーネントは Docker コンテナとして実行され、Docker Compose でオーケストレートされて、デプロイおよび管理が簡略化されています。

ハードウェア要件

最小仕様

  • CPU: 2コア (x86_64 または ARM64)
  • RAM: 4GB (8GB 推奨)
  • ストレージ: アプリケーション + 写真ライブラリサイズの 10GB
  • ネットワーク: ローカルアクセス用の 100 Mbps

推奨仕様

  • CPU: 単スレッド性能の良い 4コア以上
  • RAM: 8-16GB (ライブラリが大きい場合はさらに多く)
  • ストレージ: データベースおよびアプリケーション用に SSD、写真ストレージ用に HDD
  • GPU: オプションですが、ML タスクを大幅に加速します (NVIDIA および CUDA サポート)

ストレージに関する考慮事項

現在の写真ライブラリサイズの約 1.15 倍のストレージを確保してください。サムネイルおよび複数の解像度を考慮するためです。PostgreSQL データベースには SSD を使用してパフォーマンスを向上させます。

大規模なライブラリ (100,000 枚以上の写真) では以下を検討してください:

  • データ冗長性のために NAS と RAID
  • データベース用に別途 SSD
  • 高頻度でアクセスされる写真用に NVMe キャッシュ層

インストールガイド

事前条件

Immich をインストールする前に、以下のものを準備してください:

  1. Linux サーバー: Ubuntu 22.04 LTS または Debian 12 推奨 (詳細なセットアップ手順については、How to Install Ubuntu 24.04 & useful tools を参照してください)
  2. Docker: 20.10 または更新版
  3. Docker Compose: 2.0 または更新版
  4. ドメイン名: 外部アクセス用にオプションですが推奨されます
  5. リバースプロキシ: Nginx または Caddy による SSL 終端

ステップバイステップインストール

1. Docker と Docker Compose のインストール

# システムパッケージを更新
sudo apt update && sudo apt upgrade -y

# Docker のインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# ユーザーを docker グループに追加
sudo usermod -aG docker $USER

# Docker Compose のインストール
sudo apt install docker-compose-plugin

curl コマンドおよびオプションの詳細については、cURL Cheatsheet を参照してください。Docker に初めて触れる場合は、Docker Cheatsheet が基本的なコマンドと概念を提供します。

2. Immich ディレクトリ構造の作成

# アプリケーションディレクトリの作成
mkdir -p ~/immich/{library,database,machine-learning}
cd ~/immich

# docker-compose.yml のダウンロード
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

# 環境テンプレートのダウンロード
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

bash スクリプトおよびコマンドライン操作に初めて触れる場合は、Bash Cheat Sheet が一般的なコマンドおよびディレクトリ操作の参考になります。

3. 環境変数の設定

.env ファイルを編集して設定してください:

# データベース設定
DB_PASSWORD=your_secure_password_here
DB_DATABASE_NAME=immich
DB_USERNAME=postgres

# アップロード場所
UPLOAD_LOCATION=./library

# マシン学習
MACHINE_LEARNING_ENABLED=true

# 時間帯
TZ=America/New_York

# 公開URL (外部アクセス用)
IMMICH_SERVER_URL=https://photos.yourdomain.com

重要: DB_PASSWORD に強力なランダムパスワードを生成してください:

openssl rand -base64 32

4. Immich の起動

# すべてのサービスを起動
docker compose up -d

# サービスの状態を確認
docker compose ps

# ログを表示
docker compose logs -f

これらは基本的なものだけです。Docker Compose のコマンドおよび操作に関する包括的なリファレンスについては、Docker Compose Cheatsheet を参照してください。

5. ワークインターフェースへのアクセス

http://your-server-ip:2283 にアクセスし、管理者アカウントを作成してください。この最初のアカウントはシステム管理者になります。

外部アクセスの設定

セキュアな外部アクセスのためにリバースプロキシを設定してください:

Nginx 設定例

server {
    listen 443 ssl http2;
    server_name photos.yourdomain.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    client_max_body_size 50000M;

    location / {
        proxy_pass http://localhost:2283;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

Caddy 設定例 (自動 HTTPS が簡単)

photos.yourdomain.com {
    reverse_proxy localhost:2283
    
    @uploads {
        path /api/upload/*
    }
    request_body @uploads {
        max_size 50GB
    }
}

モバイルアプリの設定

iOS

  1. App Store から Immich をダウンロード
  2. サーバーURL (https://photos.yourdomain.com) を入力
  3. ログイン
  4. 設定で自動バックアップを有効にする
  5. バックアップするアルバムを選択 (またはすべての写真)
  6. バックアップ設定を構成 (WiFi 限定、充電中限定など)

Android

  1. Google Play Store または F-Droid から Immich をダウンロード
  2. サーバーURL と資格情報を入力
  3. 写真/動画アクセスの権限を付与
  4. 自動バックアップ設定を構成
  5. バックグラウンドバックアップのためのフォアグラウンドサービスを有効にする

バックアップ設定のヒント

  • WiFi 限定: 移動データ料金を避けるために有効にする
  • 充電中限定: 大規模なアップロード中にバッテリーを節約する
  • 動画を含める: 動画はストレージと帯域幅を大量に消費する
  • バックグラウンドアプリのリフレッシュ: iOS で信頼性のある同期のために有効にする
  • フォアグラウンドサービス: Android で一貫したバックアップのために有効にする

マシン学習機能

顔認識

Immich の顔認識はライブラリ全体にわたって顔を自動検出およびクラスタリングします:

  1. 初期処理: アップロード後、ML サービスが各写真の顔を分析
  2. 顔のクラスタリング: 類似した顔はグループ化される
  3. 手動割り当て: クラスタを確認し、人物に名前を割り当て
  4. 継続的な学習: タグ付けされた写真が増えるにつれて精度が向上

設定:

# docker-compose.yml の ML サービス環境
MACHINE_LEARNING_MODEL_CACHE=/cache
MACHINE_LEARNING_WORKERS=1  # CPU コア数が多い場合は増やす

オブジェクト検出および CLIP 検索

Immich は CLIP (Contrastive Language-Image Pre-training) を使用して意味検索を提供します:

  • タグなしで概念を検索: “山の風景”, “バースデイケーキ”, “赤い車”
  • 自然言語クエリは文脈と関係を理解
  • 言語にかかわらず動作 (ただし英語が通常最も良い結果をもたらす)

GPU 加速

ML 処理を大幅に高速化するために GPU サポートを有効にします:

NVIDIA GPU と CUDA

# docker-compose.yml の ML サービス
services:
  immich-machine-learning:
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

NVIDIA Container Toolkit をインストールしてください:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker

バックアップ戦略

Immich がモバイルデバイスから写真をバックアップする一方で、Immich 自体もバックアップする必要があります:

バックアップする内容

  1. 写真ライブラリ: UPLOAD_LOCATION ディレクトリに含まれるオリジナル写真
  2. データベース: メタデータおよび関係性を含む PostgreSQL データベース
  3. 設定: .env ファイルおよび docker-compose.yml

データベースバックアップ

自動毎日バックアップスクリプト

#!/bin/bash
# ~/immich/backup.sh として保存

BACKUP_DIR=~/immich-backups
DATE=$(date +%Y%m%d_%H%M%S)

# バックアップディレクトリの作成
mkdir -p $BACKUP_DIR

# PostgreSQL データベースのバックアップ
docker exec -t immich-postgres pg_dumpall -c -U postgres | \
    gzip > $BACKUP_DIR/immich_db_$DATE.sql.gz

# 30日前のバックアップを削除
find $BACKUP_DIR -name "immich_db_*.sql.gz" -mtime +30 -delete

echo "バックアップ完了: $BACKUP_DIR/immich_db_$DATE.sql.gz"

実行可能にし、cron でスケジュールします:

chmod +x ~/immich/backup.sh
crontab -e
# 行を追加: 0 2 * * * ~/immich/backup.sh

bash スクリプト、オートメーション、cron ジョブに関するさらに詳しい情報は、Bash Cheat Sheet を参照してください。

写真ライブラリのバックアップ

写真ライブラリは別の場所に別途バックアップする必要があります:

オプション1: NAS への rsync

rsync -avz --delete ~/immich/library/ nas:/backups/immich-photos/

オプション2: クラウドバックアップ (暗号化済み)

# rclone で暗号化して使用
rclone sync ~/immich/library/ remote:immich-backup-encrypted/ --encrypt

オプション3: ローカル外部ドライブ

rsync -avz --delete ~/immich/library/ /mnt/backup-drive/immich/

維持管理と更新

定期的な維持管理タスク

ディスクスペースの監視

# ディスク使用状況の確認
df -h ~/immich/library
df -h ~/immich/database

# Docker ボリュームの確認
docker system df

パフォーマンスの監視

# リソース使用状況の確認
docker stats

# 特定のサービスログの確認
docker compose logs immich-server --tail=100
docker compose logs immich-machine-learning --tail=100

Immich の更新

Immich は頻繁に新しい機能やバグ修正が行われます。定期的に更新してください:

cd ~/immich

# 更新前にデータベースをバックアップ
docker exec -t immich-postgres pg_dumpall -c -U postgres > backup_pre_update.sql

# 最新のイメージをプル
docker compose pull

# 古いコンテナを停止および削除
docker compose down

# 新しいイメージで起動
docker compose up -d

# 問題がないかログを確認
docker compose logs -f

データベースの維持管理

定期的なデータベースの維持管理は最適なパフォーマンスを保証します:

# データベースの真空化および分析
docker exec -it immich-postgres psql -U postgres -d immich -c "VACUUM ANALYZE;"

# データベースサイズの確認
docker exec -it immich-postgres psql -U postgres -d immich -c \
    "SELECT pg_size_pretty(pg_database_size('immich'));"

パフォーマンス最適化

ストレージ最適化

データベースに SSD を使用: PostgreSQL は SSD ストレージから大幅に恩恵を受けます。以下を検討してください:

volumes:
  pgdata:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /mnt/ssd/immich-db

写真ストレージを分離: 大規模な写真ライブラリは HDD に、データベースは SSD に保持します:

UPLOAD_LOCATION=/mnt/hdd/immich-photos

データベースパフォーマンス調整

50,000 枚以上の写真を持つライブラリでは PostgreSQL を調整してください:

# docker-compose.yml の postgres サービス環境
POSTGRES_SHARED_BUFFERS=256MB
POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
POSTGRES_MAINTENANCE_WORK_MEM=64MB
POSTGRES_CHECKPOINT_COMPLETION_TARGET=0.9
POSTGRES_WAL_BUFFERS=16MB
POSTGRES_DEFAULT_STATISTICS_TARGET=100

マシン学習パフォーマンス

バッチ処理: 複数の写真を同時に処理します:

MACHINE_LEARNING_WORKERS=4  # CPU コア数に合わせて設定

GPU 加速: 以前に述べたように、GPU 加速は ML タスクで 5-10 倍のスピードアップを提供します。

セキュリティのベストプラクティス

認証とアクセス制御

  1. 強力なパスワード: パスワードマネージャーを使用して複雑なパスワードを生成および保存
  2. 2要素認証: 管理者アカウントで 2FA を有効にする (バージョンによってサポートされている場合)
  3. 定期的なアクセスレビュー: ユーザーアカウントを定期的に確認し、使用されていないものを削除

ネットワークセキュリティ

SSL 付きリバースプロキシ: Immich をインターネットに直接公開する際には HTTPS が必須です:

# Let's Encrypt で無料 SSL 証明書を取得
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d photos.yourdomain.com

ファイアウォール設定:

# 必要なポートのみを許可
sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP (HTTPS にリダイレクト)
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable

VPN または Tailscale: 最大限のセキュリティのために、Immich にアクセスする際は VPN を使用してください:

  • サーバーおよびデバイスに Tailscale をインストール
  • Tailscale IP (100.x.x.x) を介してアクセス
  • 公共インターネットにポートを公開しない

コンテナセキュリティ

定期的な更新: セキュリティの脆弱性を修正するために Docker イメージを更新してください

ルートレスモードの実行: さらに分離のために Docker のルートレスモードを設定してください

リソース制限: DoS 攻撃を防ぐためにコンテナリソースを制限してください:

services:
  immich-server:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G

一般的な問題のトラブルシューティング

アップロード失敗

症状: モバイルアプリから写真のアップロードに失敗

解決策:

  • サーバーのディスクスペースを確認: df -h
  • リバースプロキシの client_max_body_size 設定を確認
  • サーバーログを確認: docker compose logs immich-server
  • モバイルアプリが最新バージョンであることを確認

マシン学習が処理しない

症状: 顔認識または検索が動作しない

解決策:

  • ML コンテナの状態を確認: docker compose ps immich-machine-learning
  • ML ログを確認: docker compose logs immich-machine-learning
  • ML サービスを再起動: docker compose restart immich-machine-learning
  • モデルファイルがダウンロードされているか確認: ls ~/immich/machine-learning/cache/

データベース接続エラー

症状: ワークインターフェースにデータベース接続エラーが表示される

解決策:

  • PostgreSQL コンテナが動作しているか確認: docker compose ps immich-postgres
  • データベースログを確認: docker compose logs immich-postgres
  • .env ファイル内の正しいパスワードを確認
  • 接続をテスト: docker exec -it immich-postgres psql -U postgres

遅いパフォーマンス

症状: ワークインターフェースまたは検索が遅い

解決策:

  • システムリソースを確認: CPU、RAM、ディスク I/O
  • データベースの真空化を実行: VACUUM ANALYZE;
  • サービスを再起動: docker compose restart
  • PostgreSQL のパフォーマンス設定を確認
  • ハードウェアのアップグレードを検討 (SSD、より多くの RAM)

モバイルアプリが同期しない

症状: モバイルデバイスから写真がバックアップされない

解決策:

  • バックグラウンドリフレッシュが有効になっているか確認 (iOS)
  • フォアグラウンドサービスを有効にする (Android)
  • 移動データを使用している場合、WiFi 限定設定を確認
  • モバイルネットワークからサーバーURLがアクセスできるか確認
  • 写真アクセスのアプリ権限を確認
  • アプリキャッシュをクリアし、再ログイン

他のサービスからの移行

Google Photos から

データのエクスポート:

  1. Google Takeout (takeout.google.com) にアクセス
  2. Google Photos を選択
  3. エクスポート形式とサイズを選択
  4. アーカイブをダウンロード

Immich へのインポート:

  1. ダウンロードしたアーカイブを展開
  2. Immich CLI ツールまたはウェブアップロードを使用
  3. JSON サイドカーファイルからメタデータが保存されます
# Immich CLI を使用 (リリースからインストール)
immich upload --recursive /path/to/google-photos-export/

iCloud Photos から

エクスポート:

  1. iCloud.com にアクセス
  2. ダウンロードする写真を選択
  3. または iCloud for Windows/Photos アプリのエクスポートを使用

インポート: Google Photos と同様に、ウェブインターフェースまたは CLI ツールでアップロード

ローカルストレージから

外部ライブラリ機能: アップロードではなく、既存の写真ディレクトリを Immich に指す:

  1. 管理 > 外部ライブラリにアクセス
  2. ライブラリパスを追加 (Docker コンテナからアクセス可能でなければなりません)
  3. Immich はコピーせずにスキャンおよびインデックス
  4. ディスクスペースと時間を節約
# docker-compose.yml にボリュームマウントを追加
volumes:
  - /mnt/existing-photos:/mnt/external-library:ro

コミュニティとサポート

公式リソース

寄稿

Immich はオープンソースで、寄稿を歓迎します:

  • バグ報告: GitHub に詳細な問題報告を提出
  • 機能リクエスト: Discord または GitHub Discussions で議論
  • コード寄稿: 寄稿ガイドラインに従ってプルリクエストを提出
  • ドキュメント: ユーザー体験を改善するドキュメントの改善
  • 翻訳: あなたの言語への Immich のローカライズを支援

代替ツール

Immich が要件に合っていない場合は、以下を検討してください:

  • PhotoPrism: より成熟し、機能が豊富で、異なるアーキテクチャ
  • Piwigo: 伝統的なギャラリースタイルのインターフェース
  • Nextcloud Photos: より大きな Nextcloud エコシステムの一部
  • Photoview: よりシンプルで軽量な代替
  • LibrePhotos: Google Photos の代替で、AI 機能を備えている

結論

Immich をセルフホストすることで、商用クラウド写真サービスの強力でプライバシーを保つ代替ソリューションが提供されます。初期の技術的なセットアップと継続的なメンテナンスが必要ですが、完全なプライバシーのコントロール、ストレージの制限なし、サブスクリプション料金からの自由といった利点は多くのユーザーにとって価値があります。

自動モバイルバックアップ、AI による検索、顔認識、モダンなインターフェースの組み合わせは、商用製品と同等の体験を提供しながら、あなたのデータをあなたのコントロール下に保つことができます。プライバシー愛好家、大規模な写真ライブラリを持つコスト意識のあるユーザー、またはインフラストラクチャの実践的な経験を望むテクノロジー専門家にとって、Immich は魅力的なソリューションです。

ホームサーバーまたは VPS から始めて、写真ライブラリのサブセットでテストし、システムに慣れたら段階的に移行してください。活発なコミュニティと頻繁なアップデートにより、Immich は継続的に改善および機能追加が行われます。

あなたの思い出は貴重です - Immich でそれらをコントロールしてください。

有用なリンク