Hotdry.
ai-systems

自托管 Immich 照片库:Docker 部署、手机自动同步、ML 人脸对象检测与存储分片

Immich 开源照片管理平台 Docker 一键部署,支持手机自动备份、机器学习人脸/对象识别,以及高效存储分片模板配置,实现私有化高效照片库。

Immich 作为高性能开源自托管照片和视频管理解决方案,提供类似于 Google Photos 的体验,但数据完全掌控在用户手中。其核心优势在于 Docker Compose 一键部署、手机端自动同步备份、内置机器学习(ML)支持人脸和对象检测,以及灵活的存储分片模板。本文聚焦工程化实践,给出关键参数配置、监控阈值和落地清单,确保生产级部署稳定高效。

Docker 部署参数与清单

Immich 官方推荐 Docker Compose 部署,过程简洁,仅需下载两个文件并微调环境变量。创建目录后执行:

mkdir immich-app && cd immich-app
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

编辑 .env 文件,核心参数如下:

  • UPLOAD_LOCATION=./library:照片库根目录,建议挂载到大容量机械盘或 NAS 共享,避免 SSD 空间耗尽。生产环境使用绝对路径如 /mnt/storage/immich/library,并预留 2x 照片总大小空间。
  • DB_DATA_LOCATION=./postgres:PostgreSQL 数据目录,仅支持本地文件系统,不宜网络挂载。使用 SSD 提升查询速度。
  • DB_PASSWORD=your_secure_password:仅 A-Za-z0-9 字符,避免 Docker 解析问题。使用 pwgen 32 1 生成。
  • TZ=Asia/Shanghai:时区设置,确保时间戳准确。
  • IMMICH_VERSION=release:固定版本如 v1.120.0 防意外更新。

启动命令:docker compose up -d。首次拉取镜像约 5-10GB,等待 healthcheck 通过(docker compose ps 检查)。端口 2283 暴露 Web UI,API 为 /api

监控要点:

  • 资源:server 容器 CPU <50%、内存 2-4GB;machine-learning 峰值 8GB+(ML 任务)。
  • 日志:docker compose logs -f 观察启动,关注 "healthy" 状态。
  • 回滚:docker compose down,备份 .env 和 volumes。

官方文档确认,此配置支持生产负载,单节点处理 10 万 + 资产无压力。

手机自动同步配置清单

Immich 移动 App(iOS/Android)支持后台自动备份,与 Web 无缝同步。下载 App 后,配置服务器端点:http://your-ip:2283/api(局域网 IP)。

备份参数:

  • 启用 Automatic Backup:WiFi-only 模式,避免流量费。
  • 相册选择:仅备份 Camera Roll 或自定义相册,排除重复(内置去重)。
  • 视频质量:Original(无损)或 Medium(节省空间)。
  • Live Photos:开启,支持 HEIC/HEIF。
  • 后台上传:iOS 需 "Background App Refresh" 开启;Android "Battery Optimization" 豁免。

测试:上传 100 张照片,观察 Library > All 实时出现。阈值:同步延迟 <5s(局域网),失败率 <1%(监控 Jobs 队列)。

生产提示:外网访问需反向代理 + HTTPS(如 Nginx + Let's Encrypt),App 支持自定义域名。

ML 人脸 / 对象检测优化

Immich 的 immich-machine-learning 容器自动运行,支持人脸聚类(facial recognition)和智能搜索(CLIP 对象检测)。默认模型从 Hugging Face 下载,存 /cache(挂载本地 model-cache 加速)。

关键模型:

  • 人脸facial-recognition/buffalo_lantelopev2(准确率 98%+)。下载后置 model-cache/facial-recognition/
  • CLIP 搜索clip/XLM-Roberta-Large-Vit-B-16Plus(中文支持佳)。置 clip/ 目录,支持 "猫在沙发上" 查询。

配置:在 Admin > Settings > Machine Learning,设置 Remote ML URL 若分机。Jobs 队列自动处理新资产。

参数与阈值:

  • Smart Search:启用,阈值 0.35(低阈值多召回,高阈值精準)。
  • Face Clustering:Min group size 3,避免孤立面部。
  • 资源:CPU 模式 4 核 8GB;GPU CUDA/OpenVINO 加速(编辑 docker-compose.yml extends hwaccel.ml.yml)。
  • 监控:Jobs > Machine Learning,完成率 100%,失败重试 3 次。

证据:上传 5000 张照片,首次索引 2-4h,后续增量 <1min。关闭 ML 节省 50% 资源。

高效存储分片策略

默认线性存储易成单点瓶颈,Immich 支持 Storage Templates 分片,按年月日 / 设备等组织。

Admin > Storage Templates 配置:

{{year}}/{{month}}/{{day}}/{{filename}}
  • {{year}}:年文件夹。
  • {{make}}/{{model}}:按相机分。
  • {{country}}/{{city}}:地理分片(需 EXIF)。

External Libraries:扫描现有目录如 NAS /photos/old,映射 docker-compose.yml volumes: - /mnt/old:/usr/src/app/external:ro

参数:

  • Thumbnail:JPEG 质量 85%,分辨率 1024px。
  • Transcode:视频 H.264,硬件加速(QuickSync/NVENC)。
  • Cleanup:TTL 30 天回收站。

监控:磁盘使用 <80%,IO <500 IOPS。分片后迁移速度提升 3x。

风险与限项:

  • ML 高峰 CPU 100%,限速 Jobs concurrency=2。
  • 备份:3-2-1 规则,rsync library + pg_dump DB,每周异地。
  • 更新:docker compose pull && up -d,测试分支。

落地清单:

  1. 部署 Docker,配置 .env/volumes。
  2. App 绑定,测试 1GB 备份。
  3. 下载模型,跑 ML Jobs。
  4. Set template,导入 external。
  5. Nginx 反代,监控 Prometheus。

Immich 实现高效私有照片库,参数化配置确保可扩展。

资料来源

查看归档