欢迎光临
我们一直在努力

使用 Docker 搭建 Immich:自建照片与视频备份平台

在日常使用手机时,照片和视频通常会不断增加。

如果完全依赖第三方云相册,可能会遇到存储空间不足、会员费用、上传速度以及隐私管理等问题。

Immich 是一款自托管照片与视频管理平台,可以部署到自己的 Linux 云服务器中,通过网页和手机 App 管理照片,并支持手机相册自动备份。

对于家庭用户、摄影爱好者、多人共享相册以及希望自行保存照片数据的用户来说,Immich 是一个功能比较完整的方案。

1. 项目介绍

Immich 可以理解为一套运行在自己服务器上的照片与视频备份平台。

部署完成以后,可以通过网页和手机 App 使用,主要功能包括:

  • 手机照片和视频自动备份
  • 时间线浏览
  • 相册管理
  • 多用户账户
  • 共享相册
  • 公开链接分享
  • 人脸识别与人物整理
  • 照片搜索
  • 重复照片辅助整理
  • 视频转码与缩略图生成

Immich 支持多个用户,每个用户拥有自己的照片库。管理员可以创建家庭成员或其他用户,并根据实际需要设置存储配额。

与普通文件管理器不同,Immich 会保存照片元数据、相册关系、人物识别信息以及用户配置,因此不能只把它理解成一个简单的文件夹浏览器。

文章开头/项目介绍

2. 相关地址

Immich GitHub: https://github.com/immich-app/immich

Immich 官方文档: https://docs.immich.app

Immich 官方网站: https://immich.app

手机端下载入口: https://get.immich.app

3. 搭建环境

Immich 对服务器资源的要求高于普通 Docker 小工具。

本次建议使用以下配置:

  • CPU:最低 2 核,建议 4 核及以上
  • 内存:最低 6GB,建议 8GB及以上
  • 磁盘:根据照片与视频数量准备
  • 系统:Debian 12 或 Ubuntu
  • Docker:需要安装 Docker Engine
  • Compose:需要使用 Docker Compose V2
  • 默认端口:2283
  • 数据库磁盘:建议使用本地 SSD

Immich 会生成缩略图、人物识别数据以及转码后的视频文件,因此实际磁盘占用通常会高于原始照片和视频的总大小。

本次教程推荐使用莱卡云 Linux 云服务器进行搭建。

如果只进行个人测试,可以先准备较小的媒体库;如果计划长期备份手机中的全部照片与视频,应提前规划足够的磁盘空间。

查看官网购买链接: https://www.lcayun.com

9折优惠码:bloglcayun

搭建环境

4. 搭建视频

本教程视频建议使用莱卡云 Linux 云服务器进行实机演示。

视频内容包括:

  • 服务器环境确认
  • Docker 环境检查
  • Immich 正式部署
  • 管理员账户初始化
  • 网页上传照片
  • 手机 App 连接
  • 手机相册自动备份
  • 多用户创建
  • 域名和 HTTPS
  • 更新与数据备份

视频教程制作中,完成后在这里补充哔哩哔哩视频链接。

5. 正式搭建

5.1 安装 Docker 和 Docker Compose

Immich 官方部署需要使用 Docker Compose V2,也就是:

docker compose

而不是旧版:

docker-compose

如果服务器尚未安装 Docker,可以参考本站之前整理的教程:

安装教程: 服务器上安装docker和docker-compose教程

安装完成后检查 Docker:

docker --version

检查 Docker Compose:

docker compose version

两个命令都能正常显示版本信息以后再继续。

Docker 环境

5.2 创建 Immich 项目目录

创建项目目录:

mkdir -p /opt/immich
cd /opt/immich

后续 Immich 的 Compose 文件、环境变量、照片视频和数据库数据都可以统一从这个目录开始管理。

查看当前目录:

pwd

正常应该显示:

/opt/immich

5.3 下载官方 Docker Compose 文件

下载 Immich 当前正式版本的 Compose 文件:

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

检查文件:

ls -lah

正常情况下可以看到:

docker-compose.yml
.env

建议使用官方正式版本提供的配置文件,不要随意复制较早教程中的旧版 Compose 内容。

下载官方文件

6. 修改 Immich 环境变量

编辑:

nano .env

官方环境变量中比较重要的内容包括:

UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
# TZ=Etc/UTC
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

可以根据本文目录改成:

UPLOAD_LOCATION=/opt/immich/library
DB_DATA_LOCATION=/opt/immich/postgres
TZ=Asia/Shanghai
DB_PASSWORD=ChangeThisPassword2026
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

其中:

UPLOAD_LOCATION

用于保存上传的照片、视频、缩略图、转码文件和数据库备份等内容。

DB_DATA_LOCATION

用于保存 PostgreSQL 数据库文件。

TZ

设置时区,本教程使用:

Asia/Shanghai

DB_PASSWORD

为 PostgreSQL 数据库连接密码。

示例中的:

ChangeThisPassword2026

仅用于演示,正式搭建时必须替换成自己的随机密码。

为了避免 Docker 解析问题,数据库密码建议只使用英文字母和数字,不要使用空格或特殊字符。

不要随意修改 .env 中不理解的其他变量。

修改环境变量

7. 创建数据目录

根据前面设置的路径创建目录:

mkdir -p /opt/immich/library
mkdir -p /opt/immich/postgres

查看:

ls -ld /opt/immich/library /opt/immich/postgres

Immich 的数据库数据建议放在本地 SSD 上。

不要把 PostgreSQL 数据目录放在 SMB、NFS、对象存储挂载或其他网络共享中。

照片和视频目录可以根据实际存储规划放到容量更大的数据盘,但数据库仍然建议放在低延迟的本地磁盘。

8. 验证 Compose 配置

正式启动之前执行:

docker compose config

如果没有明显报错,说明 Compose 文件和环境变量能够正常解析。

如果提示:

permission denied
验证配置

需要检查 .env 和项目目录权限。

如果提示命令不支持或者出现 Compose 格式异常,则需要确认当前使用的是:

docker compose

而不是旧版:

docker-compose

9. 启动 Immich

在 /opt/immich 目录执行:

docker compose up -d

第一次启动需要下载 Immich、PostgreSQL、Redis 和机器学习等相关镜像,等待时间取决于服务器网络速度。

查看容器:

docker compose ps

也可以执行:

docker ps

正常情况下应该能够看到 Immich 相关容器处于运行状态。

启动 Immich

10. 查看 Immich 日志

如果容器没有正常启动,可以查看全部日志:

docker compose logs --tail 100

持续查看:

docker compose logs -f

退出实时日志:

Ctrl + C

只查看 Immich Server:

docker compose logs --tail 100 immich-server

只查看数据库:

docker compose logs --tail 100 database

具体服务名称以当前官方 Compose 文件为准。

11. 访问 Immich 管理页面

浏览器访问:

http://服务器IP:2283

例如:

http://192.0.2.10:2283

如果页面能够正常打开,就可以开始管理员账户初始化。

如果外部无法访问,可以先在服务器内部测试:

curl -I http://127.0.0.1:2283

检查端口:

ss -lntp | grep 2283

如果本机正常而公网打不开,应继续检查云服务器安全组和 Linux 防火墙。

12. 创建第一个管理员账户

Immich 第一个注册的用户会成为管理员。

进入页面以后,点击初始化或开始使用按钮,根据提示填写:

  • 管理员名称
  • 邮箱
  • 密码

完成后登录后台。

建议使用独立的高强度密码,不要和服务器 SSH 密码或数据库密码完全相同。

管理员账户可以继续创建其他用户、配置服务器功能、查看任务队列和管理存储配额。

管理员初始化

13. 使用网页上传照片

登录以后,可以先通过网页上传少量测试照片。

建议最开始只上传几张测试图片和一个短视频,用于确认:

  • 上传功能正常
  • 时间线显示正常
  • 缩略图能够生成
  • 视频可以正常播放
  • 服务器存储目录有数据写入

查看媒体目录:

du -sh /opt/immich/library

刚上传完成以后,缩略图、人脸识别和视频转码等后台任务可能还需要一段时间处理。

可以在管理页面的任务队列中查看处理进度。

网页上传

14. 安装 Immich 手机 App

Immich 提供 Android 和 iOS 手机 App。

安装完成后,打开 App,在服务器地址中填写:

http://服务器IP:2283

例如:

http://192.0.2.10:2283

然后输入刚刚创建的 Immich 用户邮箱和密码。

如果后续配置了域名和 HTTPS,则可以改成:

https://photos.example.com

不建议长期通过没有 HTTPS 的公网地址传输私人照片。

手机端安装登录

15. 开启手机照片自动备份

进入 Immich App 后,点击备份或云朵图标。

选择需要备份的手机相册,例如:

  • 相机
  • 截图
  • 微信保存图片
  • 视频
  • 下载目录

确认后启用备份。

Immich 会检查文件内容,已经存在于服务器的相同文件通常会被跳过,避免重复上传。

默认情况下,手机备份通常更倾向于在 Wi-Fi 环境进行,可以根据实际流量套餐修改相关设置。

首次备份如果包含大量照片和视频,可能需要较长时间。

建议先选择少量相册测试,确认上传稳定后再开启完整备份。

手机自动备份

16. Android 后台备份注意事项

部分 Android 手机会严格限制后台应用运行。

如果发现:

打开 Immich App 时可以上传;

退出 App 后长时间不再备份;

可以检查:

  • 电池优化
  • 后台运行权限
  • 自动启动权限
  • 数据流量限制
  • Wi-Fi 后台限制

不同手机品牌设置入口不同。

如果系统持续结束 Immich 后台任务,自动备份频率会受到影响。

17. iPhone 后台备份注意事项

iOS 用户需要确认已经开启:

后台 App 刷新

iOS 会由系统统一调度后台任务,应用本身不能保证在某个固定时间持续运行。

因此首次大量备份时,建议:

  • 保持 Immich App 打开
  • 连接稳定 Wi-Fi
  • 保持手机充电
  • 避免系统进入低电量模式

如果照片存储在 iCloud 中,Immich 在备份时还可能需要先从 iCloud 下载原始文件,因此会消耗额外的手机存储和网络流量。

18. 创建多个用户

Immich 支持多个用户,每个用户拥有独立的照片库。

管理员可以进入:

管理 → 用户

创建家庭成员或其他用户。

可以为不同用户设置:

  • 用户名
  • 邮箱
  • 初始密码
  • 存储配额

例如可以给普通家庭成员设置:

200 GiB

达到配额后,该用户将无法继续上传新文件。

不同用户的相册和媒体库默认相互独立,只有进行共享后才能互相查看相应内容。

多用户账号

19. 共享相册与多人协作

Immich 支持在同一个实例中的用户之间共享相册。

创建相册后,可以把其他用户设置为:

  • 查看者
  • 编辑者

编辑者可以向共享相册中添加自己的照片和视频。

Immich 也支持生成公开分享链接,可以根据需要设置:

  • 链接有效期
  • 密码
  • 是否允许下载
  • 是否允许上传

公开分享链接本身具有访问权限,因此不要随意发布包含私人照片的链接。

20. 合作伙伴共享

Immich 还支持 Partner Sharing,也就是将自己的照片库共享给另一个用户。

这更适合:

  • 夫妻
  • 家庭成员
  • 长期共同管理照片的用户

合作伙伴共享通常会包含大量照片元数据,其中可能包括 GPS 位置信息。

因此只应该向完全信任的用户开启。

21. Immich 存储空间怎么规划?

照片备份项目最重要的资源通常不是 CPU,而是存储空间。

例如手机中原始照片与视频总量为:

500GB

服务器不应该只准备刚好 500GB 空间。

还需要考虑:

  • 缩略图
  • 视频转码文件
  • 人脸识别数据
  • 数据库
  • 数据库备份
  • 后续新增照片
  • 文件系统预留空间

建议至少预留额外空间,并定期检查:

df -h

查看 Immich 数据目录:

du -sh /opt/immich/library

查看数据库:

du -sh /opt/immich/postgres

不要等磁盘达到 100% 后再处理。

22. 照片目录可以放到数据盘吗?

可以。

例如额外数据盘挂载到:

/data

可以创建:

mkdir -p /data/immich/library

然后修改 .env:

UPLOAD_LOCATION=/data/immich/library

但 PostgreSQL 数据库建议继续放在本地 SSD,例如:

DB_DATA_LOCATION=/opt/immich/postgres

修改路径之前应确认:

  • 数据盘已经正确挂载
  • 重启后能够自动挂载
  • 目录权限正确
  • 空间充足

如果数据盘重启后没有挂载,Immich 可能会在空目录中创建新的文件结构,导致数据路径混乱。

23. 不要手工修改 Immich 管理的照片文件

不要进入 UPLOAD_LOCATION 后手工:

  • 重命名照片
  • 移动照片
  • 删除照片
  • 修改 Immich 生成的目录结构

Immich 通过数据库记录文件路径和媒体元数据。

如果绕过网页或 App 直接修改文件,数据库中的记录可能和实际文件不一致,最终出现照片丢失、缩略图异常或文件无法访问。

这些目录可以被备份,但不应该被当成普通文件管理目录随意修改。

24. 配置域名与 HTTPS

临时测试可以直接使用:

http://服务器IP:2283

长期使用建议配置独立域名,例如:

photos.example.com

然后通过 Nginx 反向代理到:

127.0.0.1:2283

Nginx 示例:

server {
    listen 80;
    server_name photos.example.com;

    client_max_body_size 50000M;
    proxy_request_buffering off;
    client_body_buffer_size 1024k;

    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    send_timeout 600s;

    location / {
        proxy_pass http://127.0.0.1:2283;

        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 $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

保存以后检查:

nginx -t

重新加载:

systemctl reload nginx

然后配置 HTTPS 证书。

Immich 应部署在独立域名或子域名根路径,不建议放到:

example.com/immich

这种子目录中。

25. 安全建议

Immich 中可能保存大量私人照片和视频,因此安全配置非常重要。

建议至少做到:

  • 使用强管理员密码
  • 使用 HTTPS
  • 不公开数据库密码
  • 不公开 .env
  • 不公开手机照片存储目录
  • 定期更新 Immich
  • 定期备份数据库和媒体文件
  • 限制不必要的服务器端口
  • 不给不可信用户创建账户
  • 为普通用户设置合理配额

如果只需要家庭内部使用,也可以结合 VPN 或其他安全访问方式,而不是直接把管理后台完全暴露到公网。

26. 更新 Immich

进入项目目录:

cd /opt/immich

更新前建议先查看当前容器:

docker compose ps

拉取新镜像:

docker compose pull

重新创建:

docker compose up -d

查看:

docker compose ps

查看日志:

docker compose logs --tail 100

Immich 更新频率可能比较高,重大版本升级前建议先阅读当前版本升级说明,并做好数据库和媒体文件备份。

27. Immich 需要备份哪些数据?

Immich 完整备份至少包含三部分:

Compose 和配置

/opt/immich/docker-compose.yml
/opt/immich/.env

数据库

DB_DATA_LOCATION

或者 Immich 自动生成的数据库备份。

照片和视频

UPLOAD_LOCATION

需要特别注意:

数据库备份中不包含照片和视频原文件。

仅备份数据库,无法恢复完整相册。

仅备份照片文件而没有数据库,同样可能丢失用户、相册、分享、人物和元数据关系。

28. 使用 Immich 内置数据库备份

Immich 可以在管理后台创建数据库备份。

进入:

管理 → 任务队列

创建数据库 Dump。

备份文件通常会保存到:

UPLOAD_LOCATION/backups

内置数据库备份主要保存数据库内容和元数据。

它不会自动替你备份全部照片与视频,因此还需要单独备份整个媒体目录。

29. 备份照片和视频目录

可以先停止 Immich Server,减少备份过程中数据继续变化。

例如:

cd /opt/immich
docker compose stop immich-server

然后打包媒体目录:

tar -czf /root/immich-library-$(date +%F).tar.gz /opt/immich/library

备份项目配置:

tar -czf /root/immich-config-$(date +%F).tar.gz /opt/immich/docker-compose.yml /opt/immich/.env

完成以后重新启动:

docker compose start immich-server

如果媒体库非常大,不建议每次都使用完整 tar.gz。

可以使用 rsync、增量备份或专门的备份工具保存到其他服务器或对象存储。

30. 备份文件不要只放在原服务器

如果备份文件仍然只保存在:

/root/

或者:

/opt/immich/

那么服务器磁盘损坏时,原始数据和备份可能一起丢失。

建议至少另外保存到:

  • 另一台服务器
  • 独立存储
  • 对象存储
  • 本地硬盘
  • NAS

比较稳妥的做法是保留多份副本,并且至少有一份不在当前服务器中。

31. 2283 端口打不开怎么办?

先查看容器:

docker compose ps

查看日志:

docker compose logs --tail 100

检查端口:

ss -lntp | grep 2283

本机测试:

curl -I http://127.0.0.1:2283

如果本机正常,公网无法访问,继续检查:

  • 云服务器安全组
  • UFW
  • firewalld
  • iptables
  • nftables

长期使用建议通过 Nginx 和 HTTPS 访问,而不是直接长期公开 2283。

32. 数据库容器一直重启怎么办?

查看:

docker compose ps

再查看数据库日志:

docker compose logs --tail 100 database

常见方向包括:

  • DB_DATA_LOCATION 权限不正确
  • 数据库目录位于不支持权限的文件系统
  • 数据库目录在网络共享上
  • .env 密码格式异常
  • 磁盘空间不足
  • 内存不足
  • 旧数据库数据与当前版本不兼容

不要看到数据库重启就直接删除数据库目录。

删除数据库目录会丢失 Immich 元数据。

33. 上传照片失败怎么办?

首先检查:

df -h

确认媒体目录所在磁盘还有空间。

查看 Immich 日志:

docker compose logs --tail 100 immich-server

如果配置了 Nginx,还要检查:

client_max_body_size

是否足够。

上传大型视频时,还要确认:

  • Nginx 超时时间
  • 服务器带宽
  • 手机网络
  • App 后台权限
  • 磁盘写入速度

如果小图片可以上传,大视频经常失败,通常应重点检查代理上传限制和超时配置。

34. 机器学习容器占用资源较高怎么办?

Immich 的人脸识别、智能搜索和重复照片识别等功能会使用机器学习服务。

首次上传大量照片时,需要处理:

  • 缩略图
  • 元数据
  • 人脸识别
  • 智能搜索
  • 重复照片检测

因此 CPU、内存和磁盘占用可能暂时升高。

可以执行:

docker stats

查看不同容器资源使用情况。

如果服务器资源较小,可以减少同时导入的照片数量,或者在后台任务完成后再继续大量上传。

不要在后台任务仍然处理大量照片时直接判断服务器性能异常。

35. Immich 适合什么人?

Immich 比较适合:

  • 想自动备份手机照片的个人用户
  • 家庭多人相册
  • 摄影爱好者
  • 希望自行管理照片数据的用户
  • 不想完全依赖第三方云相册的用户
  • 有服务器和存储维护经验的用户

Immich 不等于备份本身。

即使手机照片已经上传到 Immich,仍然建议继续保留其他备份副本。

一台云服务器不应该成为照片和视频的唯一保存位置。

36. 总结

Immich 是一款功能完整的自托管照片与视频备份平台。

本文的核心部署流程是:

mkdir -p /opt/immich
cd /opt/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 中的:

UPLOAD_LOCATION
DB_DATA_LOCATION
TZ
DB_PASSWORD

然后启动:

docker compose up -d

浏览器访问:

http://服务器IP:2283

第一个注册用户会成为管理员。

完成管理员初始化后,可以安装 Immich 手机 App,选择手机相册并开启自动备份。

正式长期使用时,建议重点做好:

  • 存储空间规划
  • HTTPS
  • 多用户配额
  • 数据库备份
  • 照片视频备份
  • 异地备份
  • 定期更新

只有同时保存数据库和媒体目录,才是一份相对完整的 Immich 备份。

赞(0)
未经允许不得转载:莱卡云 » 使用 Docker 搭建 Immich:自建照片与视频备份平台