Immich 的运作原理:服务器、手机 App 与机器学习怎么协作
用 Immich 之前先弄清它内部谁在干什么,后面遇到「上传慢」「缩略图一直转」「搜索没结果」这类问题时,你能立刻判断出该去查哪一层。
三件套各自的角色
服务端(immich-server):系统的核心,通常以 Docker 容器形式运行在你那台常开的机器上。它负责接收上传、保存原始文件、管理用户与权限、提供网页端界面、调度所有后台任务。你在浏览器里访问的 http://服务器IP:2283 就是它。
手机 App:纯粹的「搬运工 + 取景器」。它在后台把新照片推给服务器,并给你一个顺手的浏览界面。App 本身不存任何「真相」——删掉重装,登录同一个服务器,一切照旧。
机器学习容器(immich-machine-learning):独立进程,专门跑模型。你上传的每一张照片都会被它处理两遍:生成向量嵌入供 语义搜索 使用,检测人脸供 人脸识别 聚类。内存紧张的机器可以整体关掉它(代价是搜索和探索页不可用)。
一张照片的完整旅程
- 你按下快门,照片躺在手机相册里;
- App 的备份任务发现它是新文件,计算内容校验和,确认服务器上没有重复后上传;
- 服务端把原始文件写入
UPLOAD_LOCATION指定的目录,并在数据库里登记路径、拍摄时间、EXIF 等元数据; - 机器学习容器排队处理:生成缩略图(模糊预览、Webp 预览、Jpeg 缩略图三种)、提取文字(OCR)、计算语义向量、检测人脸;
- 手机端和网页端的时间线上出现这张照片。
理解第 4 步很重要:照片出现在时间线不代表处理完毕。刚传完的大量照片会让任务队列忙碌一阵,机器配置一般时尤其明显——这正是 任务队列一页 教你怎么看的东西。
数据到底存在哪
- 原始照片和视频:
UPLOAD_LOCATION目录下,按用户和规则分文件夹存放。默认文件名是随机字符串(防止重名冲突),想恢复原文件名要开启存储模板——这是个高级话题,先知道有这回事就行。 - 数据库:Postgres,存所有元数据和文件路径。它很关键但没有照片本体——这就是为什么 数据库备份 和文件备份必须成对做。
- 缩略图和转码视频:可再生内容,丢了能重新生成,只是费时间。
想真正开跑,下一站是 硬件要求。