Immich インスタンスを公開することなく、安全な方法で Immich の写真やアルバムを共有します。
セットアップには 1 分もかかりません。すべての共有は Immich 内で管理されるため、再度セットアップする必要はありません。
このプロジェクトについて
Docker を使用してインストールする
使い方
仕組み
追加の構成
トラブルシューティング
機能のリクエスト
Immich は素晴らしいソフトウェアですが、プライベートな写真がすべて保存されているため、完全にロックしておくことが最善です。これは、写真やギャラリーを誰かと共有するときに問題になります。
Immich パブリック プロキシは、パブリックと Immich の間にセキュリティの障壁を提供し、パブリックに共有したリクエストのみを許可します。
これはステートレスであり、Immich インスタンスについては何も知りません。 API キーを必要としないため、攻撃対象領域がさらに減少します。プロキシがアクセスできるのは、Immich で公開した写真だけです。
私自身の Immich インスタンスから直接提供されるライブ デモ ギャラリーをご覧ください。
写真やビデオの共有をサポートします。
パスワードで保護された共有をサポートします。
単一の画像を共有する場合、デフォルトではリンクによって画像ファイルが直接開かれるため、通常の画像と同じようにどこにでも埋め込むことができます。 (これは構成可能です。)
すべての使用は Immich を通じて行われます。初期設定後にこのアプリに触れる必要はありません。
/share/
パスのみを一般公開しないのはなぜでしょうか。 Immich で共有アルバムを表示するには、 /api/
パスにアクセスする必要があります。ギャラリーを一般のユーザーと共有している場合は、そのパスを公開する必要があります。既存または将来の脆弱性は、Immich インスタンスを侵害する可能性があります。
私にとって理想的な設定は、mTLS または VPN の背後で Immich をプライベートに保護し、Immich パブリック プロキシへのパブリック アクセスのみを許可することです。以下は、Caddy を使用して mTLS の背後で Immich を保護するためのセットアップ例です。
docker-compose.yml ファイルをダウンロードします。
Immich のローカル URL を指すように、docker-compose ファイル内のIMMICH_URL
の値を更新します。これは公開 URL であってはなりません。
Dockerコンテナを起動します。 https://your-proxy-url.com/healthcheck
にアクセスして、機能していることをテストできます。コンテナーのコンソール出力でエラー メッセージがないか確認してください。
docker-compose up -d
Immichサーバー設定の「外部ドメイン」を、Immich パブリック プロキシをパブリックに提供するために使用するドメインに設定します。
これで、Immich を通じて画像やギャラリーを共有するたびに、正しいパブリック パスが自動的に作成されます。
重要: Cloudflare を使用している場合は、 /share/video/*
パスを必ずバイパス キャッシュに設定してください。そうしないと、ビデオ再生の問題が発生する可能性があります。詳細については、「トラブルシューティング」を参照してください。
すべての IPP パスは/share/...
の下にあるため、Immich パブリック プロキシと Immich を同じドメイン上で実行できます。
ここの手順を参照してください: 単一ドメインでの実行。
上記の初期構成以外はすべて Immich を通じて管理されます。
通常どおり、Immich を通じて写真やビデオを共有します。 Immich 設定で外部ドメインをプロキシ アプリの URL に設定しているため、Immich が生成するリンクには自動的に正しい URL が設定されます。
プロキシがリクエストを受信すると、次のようなリンクとして送信されます。
https://your-proxy-url.com/share/ffSw63qnIYMtpmg0RNvOui0Dpio7BbxsObjvH8YZaobIjIAzl5n7zTX5d6EDHdOYEvo
/share/
の後の部分は、Immich の共有リンクのパブリック ID (ドキュメントではkey
と呼ばれます) です。
Immich パブリック プロキシはそのキーを取得し、ローカル ネットワーク経由で Immich インスタンスに API 呼び出しを行い、その共有 URL でどのような写真やビデオが共有されているかを尋ねます。
有効な共有 URL の場合、プロキシはローカル API 経由でそれらのアセットのみを取得し、個別の画像またはギャラリーとして訪問者に返します。
共有リンクの有効期限が切れているか、アセットが Immich のゴミ箱に置かれている場合、それらは返されません。
すべての受信データは検証およびサニタイズされ、予期しないものはすべて 404 でドロップされます。
ギャラリーの設定方法など、変更できる追加の構成オプションがいくつかあります。
docker-compose.yml
と同じフォルダーに config.json のコピーを作成します。
次のようなボリュームを追加して、構成を Docker コンテナに渡します。
ボリューム: - ./config.json:/app/config.json:ro
コンテナを再起動すると、カスタム構成がアクティブになるはずです。
オプション | 説明 |
---|---|
responseHeaders | Web 応答とともに送信されるヘッダーを変更します。デフォルトでは、 cache-control と CORS が追加されています。 |
downloadOriginalPhoto | オリジナルの写真ではなく、「プレビュー」品質の写真のみをダウンロードできるようにする場合は、 false に設定します。 |
showGalleryTitle | ギャラリーページにタイトルを表示します。 |
allowDownloadAll | 訪問者がすべてのファイルを zip としてダウンロードできるようにします。 |
ギャラリーは、lightGallery を使用して作成されます。 lightGallery のすべての設定はここで見つけることができます: https://www.lightgalleryjs.com/docs/settings/
たとえば、画像のダウンロード ボタンを無効にするには、 lightGallery
セクションを編集し、 download
をfalse
に変更します。
{ "lightGallery": { "controls": true, "download": false, "mobileSettings": { "controls": false, "showCloseIcon": true, "download": false } } }
Cloudflare を使用していて、ビデオがうまく再生されないという問題が発生している場合は、 /share/video/
パスがキャッシュをバイパスするように設定されていることを確認してください。私自身もこの問題に遭遇し、ここで役立つアドバイスを見つけました。
ここに機能リクエストを追加できますが、このプロジェクトの私の目標は、プロジェクトを可能な限りスリムに保つことです。
Immich に含まれるデータは機密性が高いため、コーディングの知識が少しある人なら誰でもこのコードベースを読んで、コードベースが行っていることをすべて完全に理解できるようにしたいと考えています。
このプロジェクトでは考慮されないものは次のとおりです。
Immich またはそのファイルを何らかの方法で変更するもの。 API キーまたは特権アクセスが必要な場合、それは新機能とは見なされません。
写真のアップロード (上記を参照)。