想从 Google Photos 搬家的人都知道,难的不是导出,而是导出之后:一个 200 GB 的文件夹,里面全是 IMG_20190714_133201.jpg,没有搜索、没有人脸、没有地图,手机也不会自动备份了。Immich 就是补这个缺口的项目,而 v3.1.0(2026 年 7 月 29 日发布) 之后,它基本上是目前 Linux 上最完整的自建相册方案。

这篇按真实部署走一遍:Docker Compose 安装、首次配置、把已有的照片目录接进来,以及硬件转码、备份、升级这些决定你的实例能不能活过两个月的运维细节。

Immich 官方站点的自建相册管理概览图

Immich 是什么

Immich 是一个自建的照片和视频管理服务,有网页端,也有 Android 和 iOS 原生 App。手机 App 支持后台自动备份 —— 这是「能不能真的替代 Google Photos」的关键。服务端本地跑机器学习:基于 CLIP 的语义搜索(可以直接搜「海边日落」「红色的车」)、人脸识别聚类、物体标注。数据不出你的机器。

底层是 PostgreSQL(带向量扩展做 embedding 搜索)、Redis 做任务队列、Node/TypeScript 写的 API 服务,外加一个独立的机器学习容器。这些不用你自己拼,官方给了 Compose 文件。

先说两个预期。第一,Immich 是相册管理器,不是归档工具,底下还是得有真正的备份。第二,这个项目历史上迭代很快,也经常提醒用户注意破坏性变更;3.x 系列比当年的 v1.x 稳定得多,但升级前还是应该读一下 release notes,别闭眼拉 :latest

3.1 有什么新东西

3.1.0 是一个体验优化型的版本,而不是堆功能 —— 对一个走到这个阶段的项目来说是好事:

  • 上传时保持屏幕唤醒(网页端):网页上传时会自动申请 wakelock,屏幕不会休眠打断大批量上传。需要 HTTPS。
  • 归档撤销(网页端):归档之后的提示框里多了「撤销」按钮,选错了不用一个个找回来。
  • 按服务器路径过滤资源(工作流):文件过滤器新增了「使用路径」选项,自动化规则可以按服务器上的真实路径匹配,而不只是原始文件名。整理导入的老库时这个很实用。
  • 用 Authentik / Keycloak 的人会关心的 OIDC 角色声明同步 改进,以及 admin CLI 里 改密码后使会话失效

配置要求

机器不用太好。两核 4 GB 内存能跑小库;想让机器学习任务跑得舒服一点,给到 6–8 GB。真正的瓶颈是存储 —— 按你的照片总量再加 20%–30% 预留给缩略图和转码视频。

需要 Docker Engine 和 Compose 插件。Debian / Ubuntu 上:

Bash
sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"   # 之后重新登录

用 Docker Compose 安装

建目录,拉官方的 Compose 文件和环境变量模板:

Bash
mkdir -p ~/immich && cd ~/immich
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,最重要的是这两行:

Bash
# Immich 存放上传文件、缩略图、转码结果的位置
UPLOAD_LOCATION=/srv/photos/immich-data

# Postgres 数据目录 —— 一定放在快速的本地盘上
DB_DATA_LOCATION=/srv/photos/immich-db

顺手把 DB_PASSWORD 设成一个强密码。然后启动:

Bash
docker compose up -d
docker compose ps

首次启动等一会儿,ML 容器要下载模型。然后打开 http://<服务器IP>:2283,注册的第一个账号就是管理员。

DB_DATA_LOCATION 千万不要放 NFS 或 SMB 挂载点。 PostgreSQL 跑在网络存储上,是「我的 Immich 数据库坏了」这类帖子最常见的原因。只用本地盘或本地直连的阵列。

把已有的照片目录接进来

这一步很多教程会跳过,但如果你是迁移而不是从零开始,这才是关键。Immich 区分 上传(它自己管理、放在 UPLOAD_LOCATION 里的文件)和 外部库(文件原地不动,保持你原有的目录结构,只读)。

如果你已经有十年的照片整理在 /srv/photos/family/2019/... 这样的结构里,那就该用外部库。先在 docker-compose.yml 里把路径挂进服务容器:

Yaml
services:
  immich-server:
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /srv/photos/family:/mnt/media/family:ro

然后在网页端 管理 → 外部库 里添加一个库,导入路径填 /mnt/media/family —— 是容器的路径,不是宿主机路径。填错这个,是扫描出来 0 个文件的头号原因。

Immich 网页界面中的文件夹视图,浏览外部照片库

扫描完之后,文件夹视图可以按原来的目录结构浏览,验证迁移结果的时候心里有底。文件本身不会被移动或修改。

外部库会按计划重新扫描,扫描周期可以按库单独设置,不用忍受默认值:

Immich 管理后台中为外部库设置自定义扫描周期

如果某个库只在你手动放文件时才变,把间隔调长、或者干脆只手动扫描,能省下大量无意义的磁盘 I/O。

盯紧任务(Jobs)页面

Immich 里所有耗资源的活都是后台任务:生成缩略图、视频转码、提取元数据、人脸检测、以及给智能搜索算 CLIP 向量。管理 → 任务 页面能看到跑到哪了,改完设置也在这里重跑。

Immich 管理后台的任务(Jobs)页面,列出缩略图与机器学习等后台任务

第一次导入大库之后,这些队列跑几个小时是正常的。如果智能搜索搜不出东西,九成是「智能搜索」任务还没跑完 —— 先来这里看一眼再去提 issue。

硬件转码

视频多、CPU 又是带 Quick Sync 的 Intel,那开硬件加速能把一整晚的转码压缩到一杯咖啡的时间。用官方提供的硬件加速 Compose override,并把渲染设备透传进去:

Yaml
services:
  immich-server:
    devices:
      - /dev/dri:/dev/dri

然后在 管理 → 设置 → 视频转码 → 加速方式 里选 qsv(Intel)、nvenc(NVIDIA)或 vaapi(AMD / 通用)。跑一个转码任务、看 CPU 占用是不是明显下来了,就知道有没有生效。

备份 —— 最容易被跳过的部分

只备份 Immich 的数据目录不够,你需要两样东西:

  1. 数据库,定期用 pg_dumpall 导出:
    Bash
    docker compose exec -T database pg_dumpall -c -U postgres 
      | gzip > /srv/backups/immich-$(date +%F).sql.gz
  2. 上传目录(UPLOAD_LOCATION),里面是通过 App 上传的原图。外部库的文件本来就在你日常备份的照片存储里。

Restic、Borg、Kopia 都可以;我们之前写过 Kopia 在 Linux 上的用法,可以直接照搬。缩略图和转码结果都能重新生成,备份空间紧张的话可以排除掉,恢复后重跑任务即可。

升级

固定版本号,不要跟 :latest;读完 release notes 再动手:

Bash
cd ~/immich
docker compose pull
docker compose up -d

数据库迁移在启动时自动执行。跨小版本升级前先导一份数据库 —— 花几秒钟,救过很多人的相册。

能替代 Google Photos 吗

对大多数人来说可以,但有前提。搜索质量确实好,人脸识别靠谱,手机自动备份稳定到可以当天唯一的一份副本来用。你放弃的是 Google 那种无限规模的可靠性,换来的是自己的备份纪律。这个交易要说实话:自建是把风险从「Google 改政策」换成了「我到底测过恢复没有」。

如果这个交易你接受,那 Immich 3.1 在 2026 年是一个很舒服的落脚点。

官方网站与文档:https://immich.app

最后修改: 2026年9月10日

作者

评论

发表评论

您的邮箱地址不会被公开。