Immich 인스턴스를 대중에게 노출시키지 않고 Immich 사진과 앨범을 안전한 방법으로 공유하세요.
설정은 1분도 채 걸리지 않으며 모든 공유가 Immich 내에서 관리되므로 다시 건드릴 필요가 없습니다.
이 프로젝트에 대하여
도커로 설치
사용방법
작동 원리
추가 구성
문제 해결
기능 요청
Immich는 훌륭한 소프트웨어이지만 모든 개인 사진을 보관하고 있으므로 완전히 잠가 두는 것이 가장 좋습니다. 이는 사진이나 갤러리를 누군가와 공유하려고 할 때 문제가 됩니다.
Immich Public Proxy는 대중과 Immich 사이에 보안 장벽을 제공하며 공개적으로 공유한 요청을 통해서만 허용합니다.
이는 상태 비저장이며 Immich 인스턴스에 대해 아무것도 모릅니다. 공격 표면을 더욱 줄이는 API 키가 필요하지 않습니다. 프록시가 액세스할 수 있는 유일한 항목은 Immich에서 공개적으로 제공한 사진입니다.
내 Immich 인스턴스에서 직접 제공되는 라이브 데모 갤러리를 확인하세요.
사진 및 비디오 공유를 지원합니다.
비밀번호로 보호된 공유를 지원합니다.
단일 이미지를 공유하는 경우 기본적으로 링크는 이미지 파일을 직접 열므로 일반 이미지가 있는 곳에 삽입할 수 있습니다. (이것은 구성 가능합니다.)
모든 사용은 Immich를 통해 이루어집니다. 초기 구성 후에는 이 앱을 터치할 필요가 없습니다.
/share/
경로만 대중에게 노출시키는 것은 어떨까요? Immich에서 공유 앨범을 보려면 /api/
경로에 액세스해야 합니다. 갤러리를 대중과 공유하는 경우 해당 경로를 공개해야 합니다. 기존 또는 미래의 취약점으로 인해 Immich 인스턴스가 손상될 가능성이 있습니다.
나에게 이상적인 설정은 Immich를 mTLS 또는 VPN 뒤에서 비공개로 보호하고 Immich Public Proxy에 대한 공개 액세스만 허용하는 것입니다. 다음은 Caddy를 사용하여 mTLS 뒤에서 Immich를 보호하기 위한 설정 예입니다.
docker-compose.yml 파일을 다운로드합니다.
Immich의 로컬 URL을 가리키도록 docker-compose 파일의 IMMICH_URL
값을 업데이트하세요. 공개 URL이 아니어야 합니다.
도커 컨테이너를 시작합니다. https://your-proxy-url.com/healthcheck
방문하여 작동하는지 테스트할 수 있습니다. 오류 메시지가 있는지 컨테이너 콘솔 출력을 확인하세요.
도커-작성 -d
Immich 서버 설정 에서 "외부 도메인"을 Immich 공용 프록시를 공개적으로 제공하는 데 사용하는 도메인으로 설정하세요.
이제 Immich를 통해 이미지나 갤러리를 공유할 때마다 자동으로 올바른 공개 경로가 생성됩니다.
중요 : Cloudflare를 사용하는 경우 /share/video/*
경로를 캐시 우회로 설정했는지 확인하세요. 그렇지 않으면 비디오 재생 문제가 발생할 수 있습니다. 자세한 내용은 문제 해결을 참조하세요.
모든 IPP 경로는 /share/...
아래에 있으므로 Immich Public Proxy와 Immich를 동일한 도메인에서 실행할 수 있습니다.
단일 도메인에서 실행에 대한 지침을 참조하세요.
위의 초기 구성 외에 다른 모든 것은 Immich를 통해 관리됩니다.
Immich를 통해 평소와 같이 사진/비디오를 공유합니다. Immich 설정에서 외부 도메인을 프록시 앱의 URL로 설정했기 때문에 Immich가 생성하는 링크는 자동으로 올바른 URL을 갖게 됩니다.
프록시가 요청을 받으면 다음과 같은 링크로 제공됩니다.
https://your-proxy-url.com/share/ffSw63qnIYMtpmg0RNvOui0Dpio7BbxsObjvH8YZaobIjIAzl5n7zTX5d6EDHdOYEvo
/share/
다음 부분은 Immich의 공유 링크 공개 ID(문서에서는 key
라고 함)입니다.
Immich Public Proxy는 해당 키를 가져와 로컬 네트워크를 통해 Immich 인스턴스에 API 호출을 수행하여 해당 공유 URL에서 어떤 사진이나 비디오가 공유되는지 묻습니다.
유효한 공유 URL인 경우 프록시는 로컬 API를 통해 해당 자산만 가져와 방문자에게 개별 이미지 또는 갤러리로 반환합니다.
공유 링크가 만료되었거나 자산 중 하나가 Immich 휴지통에 들어간 경우 해당 자산을 반환하지 않습니다.
들어오는 모든 데이터는 검증 및 삭제되며 예상치 못한 데이터는 모두 404를 통해 삭제됩니다.
예를 들어 갤러리 설정 방식과 같이 변경할 수 있는 몇 가지 추가 구성 옵션이 있습니다.
docker-compose.yml
과 동일한 폴더에 config.json의 복사본을 만듭니다.
다음과 같은 볼륨을 추가하여 구성을 Docker 컨테이너에 전달합니다.
볼륨: - ./config.json:/app/config.json:ro
컨테이너를 다시 시작하면 사용자 지정 구성이 활성화됩니다.
옵션 | 설명 |
---|---|
responseHeaders | 웹 응답과 함께 전송된 헤더를 변경하세요. 기본적으로 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 키나 권한 있는 액세스가 필요한 경우 새로운 기능으로 간주되지 않습니다.
사진 업로드(위 참조)