飞牛NAS Docker实战:手把手部署Immich智能相册,打造私有Google Photos
为什么选择 Immich?
如果你用过 Google Photos,一定对它的智能分类、人脸识别、地点聚合等功能印象深刻。但云端相册意味着你的照片存储在别人服务器上,隐私和容量都是问题。Immich 是一款开源自部署的智能相册管理系统,功能直逼 Google Photos,而且完全运行在你自己的硬件上——搭配飞牛NAS(fnOS),堪称绝配。
Immich 的核心能力:
- 📸 自动备份:手机端 App 自动同步照片和视频到 NAS
- 🧠 AI 智能识别:人脸聚类、物体识别、文字 OCR 检索
- 🗺️ 地图视图:根据照片 GPS 信息在地图上展示足迹
- 🔍 强大搜索:按人物、地点、物体、日期多维度检索
- 🤝 共享相册:与家人朋友创建共享相册,协同管理
- 🎨 回忆功能:自动生成"那年今日"回忆
环境准备
在飞牛NAS上部署 Immich 之前,请确保:
- fnOS 版本:建议升级到最新稳定版(本文基于 fnOS 0.8.x)
- Docker 环境:fnOS 已内置 Docker,在应用中心确认 Docker 服务已开启
- 存储空间:Immich 数据库和照片会占用大量空间,建议准备至少 100GB 以上的存储卷
- 内存:AI 模型推理需要一定内存,建议 4GB 以上
- SSH 访问:便于执行命令(可选,fnOS 的 Docker 管理界面也可操作)
部署步骤
第一步:创建目录结构
首先通过 SSH 登录飞牛NAS,或使用 fnOS 的文件管理器,在存储池上创建 Immich 的数据目录:
# 在 /vol1/docker/ 下创建 immich 目录(根据你的实际存储路径调整)
mkdir -p /vol1/docker/immich/{library,upload,pgdata,redis}
目录说明:
- library:存放 Immich 生成的缩略图、转码视频、AI 模型等
- upload:存放用户上传的原始照片和视频
- pgdata:PostgreSQL 数据库持久化存储
- redis:Redis 缓存数据
第二步:编写 Docker Compose 配置
在 /vol1/docker/immich/ 目录下创建 docker-compose.yml:
version: "3.8"
services:
immich-server:
image: altairlab/immich-server:release
container_name: immich-server
volumes:
- /vol1/docker/immich/upload:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- "2283:2283"
depends_on:
- redis
- database
restart: unless-stopped
immich-microservices:
image: altairlab/immich-server:release
container_name: immich-microservices
volumes:
- /vol1/docker/immich/upload:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
command: ["start-microservices.sh"]
depends_on:
- redis
- database
restart: unless-stopped
immich-machine-learning:
image: altairlab/immich-machine-learning:release
container_name: immich-machine-learning
volumes:
- /vol1/docker/immich/library:/cache
env_file:
- .env
restart: unless-stopped
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
container_name: immich-postgres
env_file:
- .env
environment:
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- /vol1/docker/immich/pgdata:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:6.2-alpine
container_name: immich-redis
volumes:
- /vol1/docker/immich/redis:/data
restart: unless-stopped
第三步:配置环境变量
在 /vol1/docker/immich/ 目录下创建 .env 文件:
# 数据库配置
DB_USERNAME=postgres
DB_PASSWORD=your_strong_password_here
DB_DATABASE_NAME=immich
# 上传位置
UPLOAD_LOCATION=/usr/src/app/upload
# JWT 密钥(使用 openssl rand -base64 36 生成随机字符串)
JWT_SECRET=随机生成的密钥字符串
# 时区
TZ=Asia/Shanghai
# AI 模型缓存
MACHINE_LEARNING_CACHE_FOLDER=/cache
⚠️ 安全提示:请务必修改
DB_PASSWORD和JWT_SECRET为强随机字符串!
第四步:启动服务
cd /vol1/docker/immich
docker compose pull # 拉取最新镜像
docker compose up -d # 后台启动
初次启动需要拉取镜像,耐心等待几分钟。使用以下命令检查服务状态:
docker compose logs -f # 查看实时日志
docker compose ps # 查看容器状态
当所有容器的 STATUS 都显示 Up 时,部署完成。在浏览器访问 http://你的NAS_IP:2283 即可看到 Immich 的初始化页面。
第五步:初始配置
- 访问 Immich Web 界面,创建管理员账户
- 在手机上下载 Immich App(iOS App Store / Google Play 均可搜索 "Immich")
- 在 App 中填入服务器地址:
http://你的NAS_IP:2283 - 开启自动备份,选择要备份的相册
性能优化建议
1. 启用硬件转码
如果你的飞牛NAS配备了 Intel CPU(支持 Quick Sync Video),可以启用硬件加速转码。在 docker-compose.yml 的 immich-microservices 和 immich-machine-learning 服务中添加:
devices:
- /dev/dri:/dev/dri
2. 调整 AI 模型
在 .env 中可以指定使用的 AI 模型,低配机器建议使用轻量模型:
MACHINE_LEARNING_MODEL_NAME=ViT-B-32__openai
3. 存储优化
Immich 的缩略图和转码视频会占用大量空间。可以在管理后台设置中限制转码视频的质量和分辨率,或定期清理不需要的文件。
常见问题排查
Q: 容器启动后立即退出?
检查 .env 文件是否配置正确,特别注意 DB_PASSWORD 不能包含特殊字符(如 #、&)。
Q: 手机备份很慢? 检查手机和 NAS 是否在同一局域网。如果 NAS 使用机械硬盘,大量小文件写入本身就是瓶颈,建议使用 SSD 作为 upload 目录。
Q: AI 人脸识别不工作?
检查 immich-machine-learning 容器日志,确保模型下载成功。首次启动会自动下载模型文件,耗时较长。
Q: 如何升级 Immich?
cd /vol1/docker/immich
docker compose pull
docker compose up -d
总结
在飞牛NAS上部署 Immich,你获得了一个完全自主可控的智能相册系统——所有照片存储在自己硬盘上,不需要订阅付费,不用担心隐私泄露。配合 Immich 出色的 App 体验,你几乎感受不到和 Google Photos 的差异。对于热爱拍照、重视隐私的 NAS 用户来说,这是一个必装应用。
搭配飞牛NAS的 RAID 冗余保护,你的数字记忆将得到最稳妥的保管。