Docker 玩法

飞牛NAS部署Immich:下一代智能相册管理

飞牛NAS(fnOS)自带的相册应用已经足够日常使用,但如果你追求更强大的AI识别、更灵活的元数据管理,或者希望彻底摆脱第三方云盘对照片的“绑架”,那么自托管的Immich绝对是目前最值得折腾的方案。它拥有媲美Google Photos的机器学习能力,而且完全开源。

本文将手把手带你在飞牛NAS的Docker环境中部署Immich,并解决几个关键的配置痛点,让你拥有一套“本地化”的智能相册。

为什么选择 Immich?

Immich 的核心优势在于其“全链路”的本地化处理。它内置了基于TensorFlow的智能搜索,可以识别人脸、物体和场景,且所有计算都在你的NAS本地完成,照片永远不出家门。同时,它的移动端App体验极佳,支持后台自动备份、断点续传,并且能直接通过官方App或Web端管理多用户权限,非常适合家庭共享。

部署前的准备

在飞牛NAS的Docker管理器中,我们强烈建议采用 Docker Compose 方式部署。这比逐个容器点击创建要稳定得多,也方便后续升级。

首先,在飞牛NAS的“文件管理”中,创建一个用于存放Immich数据的目录。建议路径为:/vol1/1000/docker/immich。在这个目录下,我们还需要创建 library(存放原始照片)和 postgres(数据库)两个子文件夹。

编写 docker-compose.yml

打开飞牛NAS的“Docker”应用,进入“Compose”页面。点击“新建项目”,项目名称填写 immich。在代码编辑区,粘贴以下内容:

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    container_name: immich_server
    restart: unless-stopped
    ports:
      - "2283:2283" # 映射端口,宿主机2283
    volumes:
      - /vol1/1000/docker/immich/library:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      - DB_HOSTNAME=immich_postgres
      - DB_USERNAME=postgres
      - DB_PASSWORD=postgres
      - DB_DATABASE_NAME=immich
      - REDIS_HOSTNAME=immich_redis
      - TZ=Asia/Shanghai
    depends_on:
      - immich-redis
      - immich-postgres
    networks:
      - immich_net

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release
    container_name: immich_ml
    restart: unless-stopped
    volumes:
      - /vol1/1000/docker/immich/model-cache:/cache
    environment:
      - TZ=Asia/Shanghai
    networks:
      - immich_net

  immich-postgres:
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    container_name: immich_postgres
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=immich
      - TZ=Asia/Shanghai
    volumes:
      - /vol1/1000/docker/immich/postgres:/var/lib/postgresql/data
    networks:
      - immich_net

  immich-redis:
    image: docker.io/redis:6.2-alpine
    container_name: immich_redis
    restart: unless-stopped
    networks:
      - immich_net

networks:
  immich_net:
    driver: bridge

关键配置说明:

  • ports:这里将宿主机的 2283 端口映射到容器的 2283。你可以在飞牛NAS的防火墙中放行该端口,以便外网访问。
  • volumes/vol1/1000/docker/immich/library 是照片存储路径,请务必替换为你自己的实际路径。model-cache 目录用于存放AI模型,第一次启动时会自动下载,需要耐心等待。
  • environment:数据库密码建议修改为复杂密码,这里为了演示使用 postgres,生产环境请务必修改。
  • depends_on:确保数据库和缓存先于主服务启动。

粘贴完成后,点击“部署”。首次拉取镜像可能需要几分钟,请耐心等待。

初始化与基础设置

部署完成后,在浏览器中访问 http://你的NAS_IP:2283。第一次访问会进入管理员账号创建页面,设置邮箱和密码。创建完成后,系统会引导你进行“服务器设置”。

在“管理” -> “设置”中,建议开启“启用照片缩略图”,并设置“存储模板”为 {{y}}/{{m}}/{{d}},这样可以在NAS文件系统中按年月日自动整理文件夹,方便后续其他工具管理。

移动端备份与客户端使用

Immich 的精华在于移动端。在手机应用商店搜索“Immich”并安装,登录时填写你的服务器地址(例如 http://192.168.1.100:2283)和刚才创建的账号密码。在“备份”设置中,开启“自动备份”,选择需要备份的相册,即可实现后台静默上传。上传速度非常快,且不会压缩原图。

解决常见问题

1. 机器学习无法启动

如果发现人脸识别或智能搜索功能不可用,多半是 model-cache 目录权限不足。请确保该目录归属于 1000:1000(飞牛NAS的默认用户)。可以在SSH终端中执行:

sudo chown -R 1000:1000 /vol1/1000/docker/immich/model-cache

然后重启 immich-machine-learning 容器。

2. 数据库连接失败

如果容器反复重启且日志显示数据库连接错误,请检查 immich-postgres 容器是否健康运行。你可以通过飞牛NAS的“Docker” -> “容器”页面,查看 immich_postgres 的日志,确认是否有权限错误。如果之前部署过旧版,建议彻底删除 postgres 文件夹下的数据后重新创建。

3. 外网访问设置

如果你需要在外网访问,不建议直接映射端口。更安全的做法是使用飞牛NAS自带的“隧道”功能,或者通过反向代理(如Nginx Proxy Manager)配置HTTPS域名。

进阶玩法:挂载已有照片库

如果你已经有一堆照片在NAS的某个目录(比如 /vol1/1000/photo),不想重复上传,可以修改 immich-server 的卷挂载,增加一个只读卷:

    volumes:
      - /vol1/1000/docker/immich/library:/usr/src/app/upload
      - /vol1/1000/photo:/mnt/media:ro # 新增外部照片挂载

然后在Immich的“管理” -> “外部库”中添加 /mnt/media 路径。注意,通过外部库添加的照片,Immich 无法对其进行删除或重命名操作,这正好保护了你的原始文件。

总结

Immich 是一个功能强大且不断迭代的项目,通过飞牛NAS的Docker Compose功能,你可以一次性部署完毕,并获得一个完全自主可控的智能相册。它解决了数据隐私的痛点,同时提供了不输于商业软件的AI体验。部署完成后,建议定期关注官方GitHub Release页面,及时更新容器镜像,以享受最新的功能修复和模型优化。现在,你可以放心地把手机里的几万张照片交给它了。

💬 评论区
发表评论

暂无评论,来说两句吧