以安全的方式共享您的 Immich 照片和相册,而不会将您的 Immich 实例暴露给公众。
设置时间不到一分钟,您无需再次触摸它,因为您的所有共享都在 Immich 内进行管理。
关于这个项目
使用 Docker 安装
如何使用
它是如何运作的
附加配置
故障排除
功能请求
Immich 是一款很棒的软件,但由于它保存了您所有的私人照片,因此最好将其完全锁定。当您想与某人共享照片或图库时,这会出现问题。
Immich 公共代理在公众和 Immich 之间提供了安全屏障,并且仅允许通过您公开共享的请求。
它是无状态的,并且不知道有关您的 Immich 实例的任何信息。它不需要 API 密钥,这进一步减少了攻击面。代理可以访问的唯一内容是您在 Immich 中公开提供的照片。
查看直接从我自己的 Immich 实例中提供的实时演示库。
支持分享照片和视频。
支持受密码保护的共享。
如果共享单个图像,默认情况下该链接将直接打开图像文件,以便您可以将其嵌入普通图像的任何位置。 (这是可配置的。)
所有使用均通过 Immich 进行 - 初始配置后您无需触摸此应用程序。
/share/
路径?要查看 Immich 中的共享相册,您需要访问/api/
路径。如果您要与公众共享画廊,则需要将该路径公开。任何现有或未来的漏洞都有可能危害您的 Immich 实例。
对我来说,理想的设置是让 Immich 在 mTLS 或 VPN 后面进行私密保护,并且只允许公共访问 Immich 公共代理。以下是使用 Caddy 保护 mTLS 后面的 Immich 的示例设置。
下载 docker-compose.yml 文件。
更新 docker-compose 文件中IMMICH_URL
的值以指向 Immich 的本地 URL。这不应该是公共 URL。
启动docker容器。您可以通过访问https://your-proxy-url.com/healthcheck
来测试它是否正常工作。检查容器控制台输出是否有任何错误消息。
docker-compose up -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 公共代理获取该密钥并通过本地网络对您的 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 密钥或特权访问,则不会被视为新功能。
上传照片(见上文)。