手把手教你在群晖NAS上搭建Immich私人相册:安装、外网访问与照片导入全记录

写于 2026-10-09

写于 2026-10-09。本文以一台群晖 DS920+(系统 DSM 7.2.2)为例,完整记录 Immich 3.3.1 版本的部署、外网访问配置、NAS 既有照片导入和手机自动备份的全过程。文中不涉及任何个人账号密码、真实 IP 和域名,凡是需要替换的地方都用「你的XX」标注,照着做即可。

一、先搞清楚:Immich 是什么?能解决什么问题?

1.1 它是什么

Immich 是一个开源自托管的照片与视频备份解决方案。简单说,它就是你自己家的"私有 Google 相册 / iCloud 照片":

  • 程序跑在你自己的 NAS(网络存储服务器)上,照片数据完全在你自己手里;
  • 手机装一个 App,连上家里的 WiFi(或在外面用移动网络),新拍的照片自动备份到 NAS;
  • 网页浏览器打开一个网址,就能像用 Google 相册一样按时间线浏览所有照片;
  • 支持人脸自动识别、智能搜索(比如搜"猫""海边")、地图视图、相册、收藏、重复照片检测等高级功能;
  • 免费、开源、无广告、无容量订阅费(只要你硬盘够大)。

1.2 和群晖自带的 Synology Photos 有什么不同

群晖 NAS 自带一个相册软件 Synology Photos,也能用。选择再装 Immich 的常见理由:

对比项 Synology Photos Immich
手机备份 支持 支持,且备份策略更灵活
人脸/智能搜索 较基础 功能强,模型本地运行
界面体验 中规中矩 接近 Google 相册,体验现代
数据归属 在群晖生态内 标准文件 + 开源数据库,不锁定
多平台客户端 主要群晖生态 iOS / 安卓 / 网页,更新活跃

两者并不冲突,可以先并存试用,满意后再决定是否停用自带相册。

1.3 动手前你需要准备什么

  1. 一台支持 Docker 的群晖 NAS(Intel 或 AMD 处理器的型号基本都支持,如 DS920+、DS220+、DS720+ 等;纯 ARM 的入门型号兼容性需先查官方列表)。
  2. DSM 7.2 以上系统,并已在"套件中心"安装 Container Manager(这是群晖官方的 Docker 管理工具;旧系统里叫 Docker)。
  3. 一个能放照片的共享文件夹,记下它在系统里的真实路径(例如 /volume1/photo,后文会教你怎么确认)。
  4. (可选,用于外网访问)一个自己的域名和一台有公网 IP 的云服务器。如果只在家里用,可以完全跳过这部分。
  5. 大约 30 分钟时间,以及按本文顺序操作的耐心。

名词小科普:本文会出现 Docker 和 容器(Container)。你可以把容器理解成"一个个打包好、互不干扰的小软件盒子"。我们不用手动装数据库、配环境,只需让 NAS 按一张"配方"自动下载几个盒子并运行起来。这张配方文件叫 docker-compose.yml。


二、整体结构:装完后是什么样子

先看一眼最终的结构,心里有个地图:

手机 / 电脑浏览器
       │
       ▼
(在家)直接访问 NAS 的内网地址与端口
(在外)通过"你的域名"经云服务器安全转发回家里的 NAS
       │
       ▼
 NAS 上运行的 Immich(共 4 个容器协同工作)
   ├─ immich-server ………… 主程序,提供网页和 App 接口
   ├─ immich-machine-learning  人脸识别/智能搜索(用 CPU 计算)
   ├─ valkey ………………… 缓存(加速用)
   └─ postgres …………… 数据库(记录照片信息、相册、标签等)
       │
       ▼
 两类照片存放位置
   ├─ 自有库:今后手机自动备份的新照片,Immich 全权管理
   └─ 外部库:NAS 里多年积累的老照片,Immich 只读取、建立索引,绝不动原文件

这里有一个贯穿全文的核心概念,一定要先理解:

  • 自有库(Immich Upload Library):手机 App 备份、网页拖进去的新照片放在这里。Immich 可以读写、删除文件。
  • 外部库(External Library):把 NAS 上已经存在的照片文件夹以"只读"方式借给 Immich 看。Immich 只扫描、建立索引,不会搬动、修改或删除你的原始照片。

结论:多年积累的老照片走"外部库";今后新拍的照片走手机 App 自动备份进"自有库"。这样最安全。


三、第一步:安装 Immich

3.1 建立部署目录

在群晖里打开 File Station,在你想放置的存储空间(例如 /volume1/docker/)下新建一个文件夹,命名为 immich。最终路径类似:

/volume1/docker/immich

小提示:群晖里第一个存储空间叫 volume1,第二个叫 volume2。本文示例统一用 volume1,请按你自己的实际情况替换。不确定路径时,在 File Station 里右键文件夹 → 属性,可以看到完整位置。

3.2 准备两个文件

在这个 immich 文件夹里,需要新建两个纯文本文件:

  • docker-compose.yml(运行"配方")
  • .env(个性化设置,注意文件名前面有个点)

可以在电脑上用记事本(建议用免费的 VS Code 或 Notepad++,能避免编码问题)建好,再通过 File Station 上传;也可以直接在 File Station 里新建文档。

文件 1:.env

内容如下,只需要改两行路径和一个密码:

# 新照片(自有库)存放位置,指向一个群晖本地文件夹
UPLOAD_LOCATION=/volume1/docker/immich/library

# 数据库文件存放位置(必须在群晖本地磁盘,不能放在网络共享上)
DB_DATA_LOCATION=/volume1/docker/immich/postgres

# 时区,中国大陆固定用这个
TZ=Asia/Shanghai

# 使用最新稳定版
IMMICH_VERSION=release

# 数据库密码:自己随意编一个,只能用英文字母和数字,不要有空格和特殊符号
DB_PASSWORD=YourPasswordHere123456

# 以下两项一般不用改
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

安全提醒:DB_PASSWORD 请自己编一个足够长的字符串(比如 20 位以上随机字母数字),这个密码只在 NAS 内部使用,你自己几乎不会再手动输入,但不能留空或用弱密码。

文件 2:docker-compose.yml

下面这份配置在 2026 年 10 月实测可用(Immich 3.3.1,包含 4 个容器;注意 Immich 现已使用 valkey 替代旧版 redis、使用定制的 vectorchord 数据库镜像,请直接照抄,不要凭记忆写旧镜像名):

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /volume1/photo:/srv/photo:ro      # 外部库:把NAS老照片目录只读挂进来
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:9@sha256:418652cfb58ef879d4978c33553735d7147016032d5aefaa14c828e611eb9dfd
    healthcheck:
      test: redis-cli ping | grep -q PONG || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      DB_STORAGE_TYPE: 'HDD'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    shm_size: 128mb
    restart: always

volumes:
  model-cache:

关于这份配置的几个关键点(看一眼即可,不用改):

  • 2283:2283:把容器的 2283 端口映射到 NAS 的 2283 端口。容器内的 2283 是 Immich 固定的;左边宿主机端口如果你想改也可以(比如 8090:2283),但要记住后面外网配置要跟着改。保持 2283 最简单。
  • /volume1/photo:/srv/photo:ro:这一行是"外部库"的关键。冒号左边填你 NAS 上真实的老照片文件夹路径,冒号右边 /srv/photo 是容器内部的固定名字(不用改),末尾的 :ro 表示只读(read-only),确保 Immich 绝不会改动原文件。
  • DB_STORAGE_TYPE: 'HDD':如果你的 NAS 用的是机械硬盘(绝大多数都是),保留这项可以优化数据库性能。

如果你暂时还不想导入老照片,可以先把 /volume1/photo:/srv/photo:ro 这一行删掉,等做到第五步时再加上。加上后需要重建一次主程序容器,命令后文有。

3.3 启动

方式 A(纯鼠标,推荐新手):

  1. 打开 Container Manager → 左侧选「项目」→ 点「新增」。
  2. 项目名填 immich,路径选择刚才的 /volume1/docker/immich 文件夹。
  3. 它会自动识别文件夹里的 docker-compose.yml,一路下一步,点「完成」。
  4. NAS 开始自动下载镜像(第一次需要下载约 1~2 GB,请耐心等待,取决于网速)。

方式 B(用命令行,熟悉 SSH 的用户可选):

通过 SSH 登录 NAS 后执行:

cd /volume1/docker/immich
sudo docker compose up -d

3.4 确认启动成功并创建管理员

  1. 在 Container Manager 的「容器」页,等四个容器(immich_server、immich_machine_learning、immich_redis、immich_postgres)状态都变成「运行中」。
  2. 刚启动的一两分钟内,数据库容器可能显示 health: starting、主程序短暂显示 unhealthy,这是数据库在做初始化,属于正常现象,通常几分钟后自动变绿。若超过 10 分钟仍未恢复,再去查看日志(容器 → 日志)。
  3. 在同一局域网的电脑浏览器中打开:

http://你的NAS内网IP:2283

例如 http://192.168.1.10:2283(NAS 的内网 IP 可在 DSM「控制面板 → 信息中心」或路由器后台查看)。

  1. 看到 Immich 欢迎页后,点「注册」,第一个注册的账号自动成为管理员。请牢记这个邮箱和密码。
  2. 登录成功,安装部分就完成了!

四、第二步:配置手机自动备份(最常用,必做)

这一步让你今后新拍的照片自动进 NAS,也是 Immich 最核心的用途。

  1. 在手机应用商店搜索并安装 Immich: - iPhone:App Store 搜索「Immich」。 - 安卓:Google Play,或 F-Droid / 项目 GitHub Releases 页面下载安装包。
  2. 打开 App,在「服务器地址 / Server Endpoint」一栏填:

http://你的NAS内网IP:2283

(在家用内网地址最快;如果你已经配置好下一节的外网访问,也可以直接填域名,内外网通用。) 3. 用刚才注册的账号登录。 4. 进入 App 的「备份」设置: - 打开自动备份开关; - 选择要备份的相册/目录(建议选整个相机胶卷,视频也一并选上); - 可设置「仅在充电时备份」「仅 WiFi 下备份」等,按喜好调整。 5. 保持 App 在前台或按提示允许后台运行,等待首次备份进度到 100%。手机里照片多时首次会比较久,建议连着家里 WiFi、充着电让它慢慢传。 6. Immich 会自动跳过已经备份过的文件,不会重复上传。

完成后,你在外面新拍的照片,只要手机一连上家里 WiFi 就会自动存进 NAS,再也不用担心手机丢失或存储空间不够。


五、第三步(可选):配置外网访问,出门也能用

如果你只想在家里 WiFi 环境下使用,可以跳过本节。要在外面用手机流量也能打开相册、自动备份,就需要"外网访问"。

方式不止一种(还可以用群晖 QuickConnect、Tailscale、Cloudflare Tunnel 等)。本文记录的是「自有域名 + 云服务器 + frp 内网穿透 + HTTPS」方案,稳定、安全、无第三方账号依赖。新手也可以先用更简单的 Tailscale(在手机和 NAS 各装一个客户端、登录同一账号即可互访,几乎零配置),本节供希望用独立域名的朋友参考。

5.1 方案原理

家里的宽带通常没有固定公网 IP(或运营商做了限制),外面的设备无法直接找到你家 NAS。解决思路是:让家里 NAS 主动向外一台有固定公网 IP 的云服务器建立一条加密隧道(frp),外面的访问先到云服务器,再经隧道转发回 NAS。

手机/浏览器
   │  HTTPS 访问 https://photo.你的域名
   ▼
云服务器(Nginx 负责 HTTPS 证书,frp 服务端负责转发)
   │  加密隧道
   ▼
家里 NAS 上的 frp 客户端
   │  转发到本机 127.0.0.1:2283
   ▼
Immich 主程序容器

5.2 前置条件

  1. 一台有固定公网 IP 的云服务器(阿里云、腾讯云等均可,最低配即可)。
  2. 一个自己的域名,并能在域名服务商处修改 DNS 解析。
  3. 云服务器上已安装运行 frp 服务端(frps) 和 Nginx。
  4. 域名已配置好 HTTPS 证书。省心做法:申请一张通配符证书(例如覆盖 *.你的域名),配合 DNS 接口自动续期(常见组合是 acme.sh + DNSPod/阿里云 DNS),这样以后每加一个子域名都不用再单独申请证书。

说明:frp 的 http 类型隧道原生支持 WebSocket,而 Immich 的实时同步正好依赖 WebSocket,所以不用额外配置。

5.3 配置域名泛解析

在域名服务商的 DNS 管理里,添加一条泛解析记录:

类型:A
主机记录:*
记录值:你的云服务器公网IP

这样 任意名字.你的域名 都会指向云服务器。

5.4 在群晖上安装并配置 frp 客户端

群晖可在「套件中心」或通过社群源安装 frpc 套件;也可用 Docker 运行。安装后,编辑 NAS 上的 frp 客户端配置文件(套件版通常在类似 /volume1/@appdata/frpc/frpc.toml 的位置),追加一段:

# Immich 相册:Immich 官方不支持子目录,必须使用独立子域名
[[proxies]]
name = "immich"
type = "http"
localIp = "127.0.0.1"
localPort = 2283
customDomains = ["photo.你的域名"]

要点解释:

  • customDomains:填你为相册准备的独立子域名,例如 photo.你的域名。
  • localPort = 2283:对应 docker-compose.yml 里端口映射左边的宿主机端口(如果你前面改成了 8090,这里也要写 8090)。
  • 重要坑点:Immich 不支持放在子路径下(例如 你的域名/immich 这种地址会导致登录跳转异常、接口 404、手机 App 连不上)。它必须使用一个独立的(子)域名根路径。

5.5 在云服务器 Nginx 配置 HTTPS 入口

在云服务器 Nginx 中为这个子域名增加一个站点配置(证书用你的通配符证书),并把请求交给本地 frp 的 HTTP 端口。配置思路示例(具体端口以你 frps 的 vhost 设置为准):

server {
    listen 443 ssl;
    server_name photo.你的域名;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    client_max_body_size 0;   # 照片视频可能很大,不限制上传体积

    location / {
        proxy_pass http://127.0.0.1:frp的vhost端口;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $https;

        # WebSocket 支持(Immich 实时同步需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

重载 Nginx 使其生效。

5.6 校验并重启 frp 客户端

在 NAS 上先校验配置语法,再重启 frpc(命令行示例,路径按实际安装位置调整):

frpc verify -c /volume1/@appdata/frpc/frpc.toml   # 显示 syntax is ok
sudo synopkg restart frpc

5.7 验证外网访问

在浏览器(可以用手机流量,确保不在家里的 WiFi 里)打开:

https://photo.你的域名

能看到 Immich 登录页即成功。还可以访问下面两个地址做技术性确认(能看到返回内容即可):

https://photo.你的域名/api/server/ping       返回 {"res":"pong"}
https://photo.你的域名/api/server/version     返回版本号信息

然后把手机 App 里的服务器地址改成这个域名,这样无论在家还是出门都能随时备份和浏览。


六、第四步:把 NAS 上多年积累的老照片导入 Immich(外部库)

这是本文的另一重点。目标:让 Immich 时间线里出现你存了多年的老照片,但原文件一个都不动。

6.1 第一步:确认照片文件夹的真实路径

在 File Station 中找到你存放老照片的共享文件夹(常见名字是 photo、照片、Photos 等),右键 → 属性,记下它的完整路径,例如:

/volume1/photo

在电脑上,这个文件夹通常通过 SMB 网络共享访问,形如 \\你的NAS名\photo。

6.2 第二步:把照片目录"只读"挂进 Immich 主程序

如果你在安装时已经在 docker-compose.yml 里加过下面这行,可跳过本步:

      - /volume1/photo:/srv/photo:ro

若之前没加,现在编辑 docker-compose.yml,在 immich-server 的 volumes: 下补一行(左边换成你的真实路径):

    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /volume1/photo:/srv/photo:ro        # 新增:外部照片库,只读

保存后,需要只重建主程序这一个容器(数据库等不受影响)。命令行:

cd /volume1/docker/immich
sudo docker compose up -d immich-server

用 Container Manager 的用户:在「项目」里对 immich 项目执行「重新部署 / 构建」即可。

验证挂载是否成功(可选),让容器列出该目录内容:

sudo docker exec immich_server ls /srv/photo

能看到你那些年份文件夹的名字,就说明挂载成功。

6.3 第三步:在网页里创建"外部库"并扫描

  1. 用管理员账号登录 Immich 网页。
  2. 左上角菜单 → 管理(Administration)→ 库(Libraries)→ 创建外部库(Create External Library)。
  3. 选择这个库归属于哪个用户(一个外部库只能归属一个用户,一般选你自己的管理员账号),给它起个名字,例如「家庭老照片」。
  4. 进入这个外部库的设置,找到导入路径(Import Paths),逐条添加容器内部的路径(注意:这里填的是 /srv/photo/...,不是 NAS 路径,也用正斜杠 /)。例如:

/srv/photo/手机照片备份 /srv/photo/生活照片视频

  • 导入路径会递归扫描所有子文件夹;
  • 多个路径下若有完全相同的文件,Immich 会自动去重;
  • 如果路径不存在或读不到,对话框会直接给出警告。 5. 设置排除规则(Exclusion Pattern)。群晖会在每个照片目录里自动生成一个叫 @eaDir 的缩略图文件夹,一定要排除,否则会扫进大量无用小图。常用排除项:

**/@eaDir/** **/._* **/#recycle/** **/*.DS_Store

还可以按需排除某些格式或目录,例如 **/*.tif。 6. 点 扫描全部(Scan All)。

文件很多时,首次扫描会比较久——Immich 要用 CPU 逐张生成缩略图、给视频转码、做人脸和智能搜索索引,DS920+ 这类无独立显卡的设备属正常现象,可以让它在后台慢慢跑。完成后,老照片就会出现在主时间线上。

6.4 日常如何保持同步

  • 外部文件夹里新增或修改了照片后,需要在外部库页面再点一次「扫描」,Immich 才会发现;也可以在设置里开启定时扫描。
  • 想让"今后新拍的照片"自动进 Immich,请用手机 App 的自动备份(进自有库),不要依赖外部库扫描。
  • 浏览器缓存有时比较顽固,扫描后暂时看不到变化,可以按 Ctrl + F5 强制刷新。

七、照片导入后,怎么整理?收藏/相册会不会动原文件?

7.1 先记住最重要的一句话

对"外部库"的照片,你在 Immich 里做收藏、建相册、归档、加描述、改标签等任何操作,都不会影响磁盘上的原始文件——这些信息只记录在 Immich 的数据库里。

Immich 里的操作 对原始文件的影响(外部库)
收藏(点 ♥) 无,仅做一个标记
加入 / 移出相册 无,相册是"虚拟集合",不复制不移动文件,一张照片可属于多个相册
归档(Archive) 无,只是从主时间线暂时隐藏,可随时取消
修改描述、标签、评分、拍摄日期 无,只读挂载不可能写回原文件
堆叠(连拍照片合并显示) 无,仅展示层分组
人脸命名、智能搜索 无,结果存在数据库中
在 Immich 里点"删除"(垃圾桶图标) 不删磁盘文件,只移除索引;下次扫描还会回来

唯一需要留意的是:手机自动备份上传的照片属于"自有库",在 Immich 里删除并清空回收站,会真正删掉自有库目录里的文件(删除前默认在 Immich 回收站保留 30 天)。而外部库的老照片因为是只读挂载,怎么操作都安全。

7.2 推荐的"双层管理"模式

层级 用什么工具 做什么
物理层(真实文件) 群晖 File Station / 电脑 SMB 共享 移动、改名、合并文件夹、去重、删除文件
逻辑层(浏览视图) Immich 网页 / App 建相册、收藏、归档、加描述、人脸与智能搜索
  • 只想在 Immich 里归类欣赏(推荐,零风险):多用相册做主题归集(如"家人""旅行""孩子成长"),用归档收束截图证件类,用收藏标精选。这些完全不碰原文件,随时可改。
  • 确实要动物理文件(移动、改名、合并目录)时要知道:外部库文件一旦被移动或改名,再次扫描会被当作新的照片,原来在 Immich 里加的相册归属、描述等会丢失,旧记录会变成"离线资产"。因此建议遵循「先在文件系统里把物理结构整理好,再扫描导入」;已经精心打过标签的目录,尽量少搬路径。

7.3 几个实用的系统工具

在「管理 → 工具(Tools)」里:

  • 重复检测(Duplicates):自动找出相似或相同的重复照片,逐组对比后保留一张。对外部库照片执行移除,只删 Immich 索引、不动磁盘文件。
  • 离线资产清理(Offline / Missing):当外部文件被移走或删除后,用它清除失效的索引记录(不删磁盘文件)。
  • 存储模板(Storage Template):只对自有库照片有效(例如自动按拍摄日期归档成 年/月 目录),对只读外部库无效。

八、进阶:把照片统一归集,并安全地去除重复

使用一段时间后,很多人会面临两个问题:新老照片分在两处、多个备份目录之间存在大量重复。下面给出稳妥的处理思路。

8.1 新照片和老照片一定要放同一个文件夹吗?

不必须。自有库和外部库的照片在 Immich 时间线里是合并展示的,浏览时没有差别。如果求稳,完全可以保持现状:老照片在原文件夹(只读),新备份在 Immich 自有库。

如果你希望物理上也全部放进同一个照片共享文件夹,可按以下思路调整(操作前建议先备份):

  1. 在照片文件夹里新建一个子目录,例如 _immich_upload。
  2. 停止 Immich 主程序:sudo docker compose stop immich-server。
  3. 通过 SSH 用 mv 命令把现有自有库整体移动到新目录(不要用 SMB 剪切,以保留文件属主和权限),例如:

bash sudo mv /volume1/docker/immich/library /volume1/photo/_immich_upload 4. 修改 .env:UPLOAD_LOCATION=/volume1/photo/_immich_upload。 5. 重新启动:sudo docker compose up -d immich-server,确认照片、缩略图、登录都正常。 6. 外部库的导入路径只指向具体的老照片子文件夹,切勿把整个照片文件夹或 _immich_upload 加进外部库,否则新备份会被重复索引。

8.2 如何安全去除多年积累的重复照片

多个手机备份目录之间常有大量完全相同的照片。强烈建议采用「先判定、再隔离、观察后再删」的安全策略,而不是直接删除。

  1. 判定"真重复":可靠方法是先按文件大小分组,对大小相同的文件再计算 SHA256 指纹,指纹完全一致才认定为内容相同(画面看起来像但文件不同的不算)。扫描时跳过 @eaDir、回收站等系统目录。这类脚本只读取文件、先生成一份报告,不动任何数据。
  2. 每组只保留一份:事先定好"保留优先级"(例如优先保留命名规范的主备份目录,其次其他目录),把多余的副本移动到一个临时隔离文件夹(如 _dup_trash,保留原有的相对路径,方便整体还原),而不是直接删除。
  3. 验证:在 Immich 外部库重新扫描,用「移除离线资产」清掉被移走文件的旧索引;翻看时间线确认没有误删。
  4. 观察 1~2 周,确认一切正常后,再删除隔离文件夹彻底释放空间。在此之前,它就是你的"后悔药"。

注意:内容哈希相同才是严格意义上的重复。画面近似、构图相同但经过编辑或压缩的照片哈希不同,这类"近似重复"可以交给 Immich 的智能重复检测或人工判断,不要用文件比对脚本强行处理。

8.3 从 Synology Photos 迁移的正确顺序

如果你打算用 Immich 取代群晖自带相册,请遵循「先迁移、验证、稳定运行后,最后再卸载」:

  1. 把 Synology Photos 手机备份目录里的照片复制(不要剪切)到你的照片共享文件夹,复制后核对文件数量。
  2. 在 Immich 外部库加入新路径并扫描,用重复检测处理可能的重复。
  3. 处理当年"没备份成功"的遗漏照片:这些文件只存在于手机本地、NAS 上根本没有,唯一的补救办法就是装 Immich App、对整个手机相册做一次完整自动备份,把老照片全部补传上来。
  4. 按年份全面核对照片数量与手机相册是否一致,然后稳定观察 1~2 周。
  5. 确认无误后再在套件中心卸载 Synology Photos。卸载只会移除应用本身,不会删除你的照片共享文件夹和用户主目录里的备份文件,因此是安全的;但务必等前面几步全部完成后再做。

九、常见问题与踩坑清单

  1. 不要凭记忆写镜像名:Immich 已改用 valkey 和定制的 vectorchord 数据库镜像,请直接使用本文(或官网当期)的 compose 模板。
  2. Immich 不支持子路径访问,只能用独立(子)域名,否则登录跳转异常、App 连不上。
  3. 数据库目录必须放在群晖本地磁盘卷,不能放在 SMB / NFS 网络共享上。
  4. 端口映射要分清左右:外网 frp 配置里的端口对应 compose 中 宿主机端口:容器端口 的左边;容器内的 2283 不可更改。
  5. 外部库导入路径填的是容器内路径(/srv/photo/...),不是 NAS 路径;挂载务必加 :ro 只读。
  6. 记得排除 @eaDir 等群晖系统缩略图目录,否则会导入大量无用小图。
  7. 外部库的元数据不写回原文件,移动或改名原文件后重扫会丢失相册、描述等逻辑信息;所以"先整理物理文件、后扫描导入"。
  8. 首次启动几分钟内显示 starting / unhealthy 属正常,是数据库初始化;超过 10 分钟仍不恢复再去查日志。
  9. 照片备份优先用手机 App 自动备份,不要手动往自有库目录里拷文件。
  10. 去重不要直接删:先扫描出报告,再把副本移入隔离目录,观察 1~2 周后再彻底删除。
  11. 外网访问务必启用 HTTPS,妥善保管云服务器和域名账号;不想折腾域名的新手可以先用 Tailscale 这类零配置方案。
  12. 卸载 Synology Photos 前,一定先完成照片复制、外部库扫描和手机全量补备份三件事。

十、写在最后

整个过程看似步骤不少,但核心其实就三件事:

  1. 用 Container Manager 按 compose 配方把 Immich 跑起来;
  2. 手机装 App、开自动备份,让今后的新照片自动进 NAS;
  3. 用"只读外部库"把多年老照片安全地纳入同一个时间线浏览,原文件毫发无损。

当所有照片都安静地躺在自己家里的硬盘上,又能随时随地像使用大厂云相册一样浏览、搜索、自动备份时,那种"数据完全属于自己"的踏实感,正是自建家庭服务器最大的乐趣。希望这篇记录能帮你少走一些弯路。