你是否还在为 某 Photos 卡顿、功能受限而抓狂?
如果你已经在 NAS 上跑了几年 某 Photos,却发现它的闭源、不能自定义、AI 功能弱让你忍不住想换掉它,那么这篇文章可以帮你把所有担心都抹掉:从零基础搬家、Docker 一键部署、GPU 加速配置,到常见坑点的防坑技巧,一步到位让你的照片库变得像 Google Photos 那样顺滑,却又完全掌控在自己手里。

大家都觉得换系统就只要换个 App
- 只要装好 Immich,原来的照片结构会自动保留。
- NAS 只有 2 GB 内存也能跑完整套 AI 功能。
- Docker 部署是 “装了就完事”,后面不需要维护。
实际上,这三点是大多数用户踩的坑。下面我们用实战经验逐一拆解。
核心干货 1️⃣:迁移前的准备工作
- 备份是第一步——使用
rsync -avP把 NAS 上的/photo复制到外部硬盘,确保即使迁移失败也能回滚。 - 导出元数据——用
exiftool批量写入拍摄时间、位置等信息到文件名,免得后期失去排序依据。 - 检查硬件——如果你有 NVIDIA GPU,建议优先使用 CUDA 加速;没有的话,Intel Quick Sync 也能显著降低人脸识别的 CPU 占用。
核心干货 2️⃣:一键 Docker Compose 部署Immich
下面的 docker-compose.yml 是官方推荐的最小化配置,只保留了服务器、数据库、Redis、机器学习四个容器。只要把下面的文件放在空目录下,docker compose up -d 就能自动拉取镜像、创建容器。
# docker-compose.yml
version: '3.8'
services:
immich-server:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
container_name: immich_server
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
env_file:
- .env
ports:
- "2283:2283"
depends_on:
- database
- redis
restart: always
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
container_name: immich_ml
env_file:
- .env
volumes:
- model-cache:/cache
restart: always
redis:
image: valkey/valkey:8-alpine
container_name: immich_redis
restart: always
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
container_name: immich_db
env_file:
- .env
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
model-cache:
关键点就在 .env 里:
# .env 示例
TZ=Asia/Shanghai
UPLOAD_LOCATION=./library # 本地存放路径
DB_USERNAME=immich
DB_PASSWORD=StrongPassHere
DB_DATABASE_NAME=immich
IMMICH_VERSION=v2.4.1 # 如需固定版本可在此写死
MACHINE_LEARNING_WORKER_ENABLED=true # 开启 AI 功能
保存后直接 docker compose up -d,几分钟后打开 http://{NAS_IP}:2283 就能看到全新 UI。
核心干货 3️⃣:把旧照片导入 Immich
- 如果你想保留原有的文件夹结构,Immich 支持外部图库。只需要在
.env中再加一行PHOTOS_LOCATION=/data/pictures并在 compose 中挂载只读路径。 - 在后台「系统管理 → 外部图库」中点「新建」,填入挂载路径,点「扫描」即可。
- 扫描完后,Immich 会自动生成缩略图、读取 EXIF、执行人脸检测。若硬件不够,可以在「机器学习设置」里关闭人脸识别或视频转码。
核心干货 4️⃣:GPU 加速实战(以 NVIDIA 为例)
默认的机器学习容器是 CPU 版,处理 1 万张照片需要数小时。下面是把容器换成 CUDA 版的关键操作:
# 修改 docker-compose.yml 中的 machine‑learning 镜像标签
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
# 添加显卡设备映射
devices:
- /dev/nvidia0:/dev/nvidia0
- /dev/nvidiactl:/dev/nvidiactl
- /dev/nvidia-uvm:/dev/nvidia-uvm
在宿主机装好 nvidia‑container‑toolkit 后,重新 docker compose up -d,日志里会出现 CUDA device found,人脸识别速度可以提升 5‑10 倍。
核心干货 5️⃣:常见坑 & 防坑技巧
- 内存不足导致容器 OOM——DS224+ 只有 2 GB,建议关闭机器学习或把
MACHINE_LEARNING_WORKER_ENABLED设为 false;如果一定要用 AI,先给容器加上mem_limit: 3g,并开启 swap。 - 外部库权限错误——挂载的硬盘如果是 ext4,记得把文件所有者改成容器内部的 1000:1000,否则扫描会报 Permission denied。
- 中文搜索不准——Immich 默认使用 OpenAI 的 ViT‑B‑32 模型,中文支持很差。把「系统管理 → 机器学习设置 → 智慧搜索」里模型换成
nllb-clip-large-siglip__v1,再点「重新索引」即可。 - 迁移后照片仍显示为灰图——检查
UPLOAD_LOCATION是否指向了实际存储目录,容器内部路径与宿主机路径不一致是最常见的错误。
对比图表:Immich vs. Synology Photos vs. Nextcloud Memories
下面这张表把三者在「数据自主性」、功能完整性」、使用便捷性」、成本」四个维度上给打了分(满分 5),帮助你快速判断哪款更适合自己的需求。
| 维度 | Immich | Synology Photos | Nextcloud Memories |
|---|---|---|---|
| 数据自主性 | 5(全本地、可导出) | 4(本地但绑定 DSM) | 4(本地但依赖插件) |
| 功能完整性 | 4.5(人脸、物体、OCR) | 3(基础浏览、共享) | 4(支持插件但需手动配置) |
| 使用便捷性 | 4(官方 App、Web) | 4(DSM UI) | 3(需自行安装 App) |
| 成本 | 2(硬件投入) | 2(NAS 费用) | 3(额外插件维护) |

进阶阅读提示
如果你对 多用户配额、OAuth 登录、以及自定义存储模板 感兴趣,后面的章节里会有更详细的配置示例。写到这儿,你已经掌握了最核心的迁移与调优步骤,接下来只需要动手实验,遇到问题再回到文档或社区搜索。
动手吧,别再为闭源卡顿抓狂
把照片搬到 Immich,最大好处就是全控制、随时升级、AI 能力随硬件提升。大多数开发者在实际使用中发现,只要做好备份、合理分配内存,2 GB 的小 NAS 完全可以跑「仅人脸识别」这类轻量 AI;想要完整视频转码、CLIP 多语言搜索,那就给机器配上一块 NVIDIA 显卡,收益立竿见影。
现在轮到你了——把你的迁移计划写在评论区,或者分享你在使用 Immich 时遇到的奇怪 bug,大家一起讨论解决!
项目源码地址:https://github.com/immich-app/immich

评论 (0)