在威联通 QNAP NAS 上安装 iCloudPD 和 Immich 照片服务
软件作用
iCloudPD 本质就是一个“下载工具”,专门把你 iCloud 里的照片和视频同步到本地(比如 NAS)。它不负责管理、不提供界面,就是定时帮你把数据拉下来,变成你自己能掌控的文件,更多是解决备份和数据归属的问题。
Immich 则是一个“照片管理系统”,类似自己搭一个 iCloud 相册。它负责把这些照片整理成时间轴、相册,支持搜索、人脸识别、地图等功能,让你在本地也能有接近 iCloud / Google Photos 的使用体验。简单理解,一个负责“拉数据”,一个负责“用数据”。
Docker 的配置文件(YAML)
docker-compose.yml
注意:2026年的 Docker Compose 规范已不再强制要求写 version 字段
Immich 配置文件
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release # 获取 2026 年 4 月最新的稳定版程序
container_name: immich_server
network_mode: "host" # 开启 Host 模式:容器直接使用 NAS 的 IP。大幅提升局域网照片同步性能。
environment:
- PUID=1000 # 运行用户 ID:建议对应威联通中对 /share/Container 有权限的用户
- PGID=1000 # 运行组 ID
- TZ=Asia/Shanghai # 强制时区,确保照片快照和日志时间显示正确
# --- 数据库与缓存连接 (Host 模式关键逻辑) ---
- DB_HOSTNAME=127.0.0.1 # 因为是 Host 模式,容器间通信必须使用 127.0.0.1(本地回环)
- DB_USERNAME=postgres
- DB_PASSWORD=postgres
- DB_DATABASE_NAME=immich
- DB_PORT=5432 # 占用 NAS 真实的 5432 端口,请确保 App Center 中没开其他 PG 数据库
- REDIS_HOSTNAME=127.0.0.1
- REDIS_PORT=6379 # 占用 NAS 真实的 6379 端口
# --- 机器学习服务 API 地址 ---
# Host 模式下 Server 无法通过容器名找到 ML,必须显式指向本地的 3003 端口
- IMMICH_MACHINE_LEARNING_URL=http://127.0.0.1:3003
- UPLOAD_LOCATION=/usr/src/app/upload # 容器内部逻辑路径(严禁随意修改)
- IMMICH_WATCH_FOLDERS=/mnt/Photos # 外部图库监控入口
volumes:
# 主存储:Immich 手动上传的照片存放在此处。:z 用于处理可能的权限锁
- /share/Container/immich/upload:/usr/src/app/upload:z
# 外部库:挂载 NAS 已有的 iCloud 备份文件夹。:ro 表示只读,Immich 绝不会删除你的原始文件
- /share/iCloud:/mnt/Photos:ro
- /etc/localtime:/etc/localtime:ro
# 地理数据汉化:将离线地图标签和多国语言包注入,解决地图显示和反向地理编码问题
- /share/Container/immich/geodata:/build/geodata
- /share/Container/immich/geodata/i18n-iso-countries/langs:/usr/src/app/node_modules/i18n-iso-countries/langs
# 核显直通:调用 Intel/AMD 核显进行视频转码硬件加速,避免 CPU 飙升至 100%
- /dev/dri:/dev/dri
depends_on:
- redis
- database
restart: unless-stopped
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
container_name: immich_machine_learning
network_mode: "host"
environment:
- DB_HOSTNAME=127.0.0.1
- DB_USERNAME=postgres
- DB_PASSWORD=postgres
- DB_DATABASE_NAME=immich
volumes:
# 模型缓存:存放人脸识别和语义搜索下载的模型(约几百MB到数GB),防止容器重启后重复下载
- /share/Container/immich/model-cache:/cache
restart: unless-stopped
redis:
# 官方代际更替:Immich 已弃用 Redis 转向 Valkey。Valkey 8 在内存管理和速度上更适应 2026 年的高并发扫描
image: docker.io/valkey/valkey:8-alpine
container_name: immich_redis
network_mode: "host"
restart: unless-stopped
database:
# --- 解决 vchord 报错的关键镜像 ---
# 1. 保持 PG14:避免跨大版本(14 升 16)导致的数据目录不可读。
# 2. 包含 vectorchord 0.4.3:Immich v2.7.x 强制要求的最新搜索扩展。
# 3. 包含 pgvectors:兼容旧版索引,实现启动时的全自动平滑数据迁移。
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
container_name: immich_postgres
network_mode: "host"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=immich
volumes:
# 数据库文件持久化:NAS 真实的数据存放位置
- /share/Container/immich/postgres:/var/lib/postgresql/data
restart: unless-stopped