Skip to content
0

容器项目&相册类

相册

说起相册,大家肯定都是熟悉群辉的 Synology Photo s这样的品牌 NAS 的相册。当然,免费的飞牛 NAS 的相册也是不错的,而且有 AI 相册。容器类得相册项目,现在主要有两个项目,国产收费的 MT Photos 和国外免费项目 immich。

我先把我的 docker 树目录再放出来,方便你修改路径,如果和我一样的路径就不需要修改。

bash
root(根目录)
├── docker(分支节点:docker目录)
 ├── apps(叶子节点:docker app目录)
 ├── mt-photos路径
 └── immich路径
 └── docker-compose(叶子节点:docker-compose.yaml目录)
 ├── mt-photos
 └── docker-compsoe.yaml
 ├── immich
 └──── docker-compsoe.yaml
 ├── photos
 ├── mt-photos
 └── immich-photos
...

1 MT Photos

1.1 什么是MT Photos

MT Photos 是什么? MT Photos 是一款为NAS用户量身打造的照片管理系统。通过 AI 技术,自动将您的照片整理、分类,包括但不限于时间、地点、人物、照片类型。先不看项目地址,我们先来看一下 MT Photos 在线 dome 地址体验一下。

MT Photos dome地址

MT Photos 项目地址

账号:demo,密码:mtphotos

/imgURL/blog/10.docker/1002-容器项目&相册类-02-mtphotos-01.webp


1.2 部署项目 MT Photos

如果不需要同时部署 MT Photos AI,那么只需要下面的代码就行。

yaml
# 官方文档
# https://mtmt.tech/

# 体验demo,账号demo,密码demo
# https://d.mtmt.tech/login

# GPS API 配置
# https://mtmt.tech/docs/start/gps_api/

# 生成激活码
# https://auth.mtmt.tech/iKey

# ---

name: mt-photos
# 最后编辑时间:2025-02-28
services:
  mt-photos:
    # 镜像地址
    image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest
    # 容器名
    container_name: mt-photos
    # 主机名
    hostname: mt-photos
    environment:
      # 用户和用户组权限,ssh中使用“id 用户名”查看,用户组一般为100(users)
      # 第一个用户而言,群晖为1026,新绿联为1001,linux类系统为1000,后续用户均+1
      # 如果出现无法下载的情况,改为0
      - PUID=1000
      - PGID=100
      # 默认创建新文件的权限,一般写022  
      - UMASK=022
      # 时区
      - TZ=Asia/Shanghai
    # 驱动  
    devices:
      # 添加硬件加速转码
      - /dev/dri:/dev/dri
    # dns  
    dns: 
      - 114.114.114.114  
    # 路径
    volumes:
      # 配置文件目录 
      # mt-photos配置文件路径
      - /docker/apps/mt-photos/config:/config
      # mt-photos手机相册上传路径
      - /docker/apps/mt_photos/upload:/upload
      # 其他相册路径
      - /photos/mt-photos:/photos
    # 网络模式:桥接模式
    network_mode: bridge
    # 端口
    ports:
      # webUI端口
      - 8063:8063
    # 重启策略,总是重启
    restart: always

但是如果需要同时部署 MT Photos AI,那么需要下面的代码才可以。

yaml
# 官方文档
# https://mtmt.tech/

# 体验demo,账号demo,密码demo
# https://d.mtmt.tech/login

# 添加智能识别
# https://mtmt.tech/docs/advanced/ocr_api/

# 添加人脸识别API
# https://mtmt.tech/docs/advanced/facial_api/

# GPS API 配置
# https://mtmt.tech/docs/start/gps_api/

# 生成激活码
# https://auth.mtmt.tech/iKey

# ---

name: mt-photos
# 最后编辑时间:2025-02-28
services:
  mt-photos:
    # 镜像地址
    image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest
    # 容器名
    container_name: mt-photos
    # 主机名
    hostname: mt-photos
    environment:
      # 用户和用户组权限,ssh中使用“id 用户名”查看,用户组一般为100(users)
      # 第一个用户而言,群晖为1026,新绿联为1001,linux类系统为1000,后续用户均+1
      # 如果出现无法下载的情况,改为0
      - PUID=1000
      - PGID=100
      # 默认创建新文件的权限,一般写022  
      - UMASK=022
      # 时区
      - TZ=Asia/Shanghai
    # 驱动  
    devices:
      # 添加硬件加速转码
      - /dev/dri:/dev/dri
    # dns  
    dns: 
      - 114.114.114.114
    # 依赖     
    depends_on:
      # 连接AI相册
      - mtphotos_ai
      # 连接AI人脸识别
      - mtphotos_face_api
    # 路径
    volumes:
      # 配置文件目录 
      # mt-photos配置文件路径
      - /docker/apps/mt-photos/config:/config
      # mt-photos手机相册上传路径
      - /docker/apps/mt_photos/upload:/upload
      # 其他相册路径
      - /photos/mt-photos:/photos
    # 网络模式:桥接模式
    network_mode: bridge
    # 端口
    ports:
      # webUI端口
      - 8063:8063
    # 重启策略,总是重启
    restart: always

  mtphotos_ai:
    # 镜像地址
    image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest
    # 容器名
    container_name: mtphotos_ai
    # 主机名
    hostname: mtphotos_ai
    environment:
      # mtphotos_ai密码,可以自定义,不改也行
      - API_AUTH_KEY=mt_photos_ai_extra	
    ports:
      # AI相册连接端口
      - 8060:8060
    # 重启策略,总是重启
    restart: always

  mtphotos_face_api:
    # 镜像地址
    # 如果下载不到,前面加上加速地址
    # crpi-gcuyquw9co62xzjn.cn-guangzhou.personal.cr.aliyuncs.com
    image: devfox101/mt-photos-insightface-unofficial:latest
    # 容器名
    container_name: mtphotos_face_api
    # 主机名
    hostname: mtphotos_face_api
    environment:
      # mtphotos_face_ai密码,可以自定义,不改也行
      - API_AUTH_KEY=mt_photos_ai_extra
    ports:
      # AI人脸识别连接端口
      - 8066:8066
    # 重启策略,总是重启
    restart: always
  • mt-photos ai,识别需要填写接口地址 http://ip:8060,API_AUTH_KEY填写 mt\_photos\_ai\_extra(或者你自定义密码)。
  • 添加人脸识别 API,需要填写接口地址 http://ip:8066,API_AUTH_KEY填写 mt\_photos\_ai\_extra(或者你自定义密码)。
  • 最后一个需要 GPS 信息识别地址的话,那就看教程 wiki 地址,注册高德地图,获取 api 填写就行。为什么我不用内置的识别模型,首先内置识别识别率低,其次自己跟着搭建各种API有参与感。
  • 总结,mt-photos 是付费的国产相册软件,体验也不错,安装免费试用一个月,好用就买,不好用就看下面我介绍得 immich。

2 immich

2.1 什么是 immich

immich 是作者仿照谷歌相册写的一款相册软件,非常得外国化,以前不支持中文,现在加入了中文。永久免费的软件,自带 AI 识别,更新快其实有的时候也不是一件好事儿,作者开发积极,更新频繁。当然你不更新其实也没什么事情的,一样的好用。先不看项目地址,我们先来看一下 immich 在线 dome 地址体验一下。

邮箱:demo@immich.app,密码:demo

/imgURL/blog/10.docker/1002-容器项目&相册类-01-immich-01.webp

体验了dome相册,我们再来看看immich项目具体的wiki。

immich 我们需要创建 4 个文件,immich 原本项目的 docker-compose.yaml 文件,但是根据不同硬件我介绍了四个配置,你可以根据自己硬件选择不同的文件。最后就是需要创建硬件加速 hwaccel.ml.yaml,ai大模型 hwaccel.transcoding.yaml 以及 .env 的配置文件。


2.2 创建路径配置文件

首先我们来创建 .env 配置文件。

# immich照片存储路径
UPLOAD_LOCATION=/docker/apps/immich/library

# postgres数据库存储路径,这里建议存储在/docker/apps/immich目录下,方便管理。
DB_DATA_LOCATION=/docker/apps/immich/postgres
TZ=Asia/Shanghai

#要使用的immich版本。您可以将其固定到特定版本,如“v1.71.0”
IMMICH_VERSION=release

#postgres数据库的访问密码
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

2.3 创建硬件加速文件

其次我们来创建 hwaccel.ml.yaml 硬件加速文件。

yaml
services:
  armnn:
    devices:
      - /dev/mali0:/dev/mali0
    volumes:
      - /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
      - /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)

  cpu: {}

  cuda:
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities:
                - gpu

  openvino:
    device_cgroup_rules:
      - 'c 189:* rmw'
    devices:
      - /dev/dri:/dev/dri
    volumes:
      - /dev/bus/usb:/dev/bus/usb

  openvino-wsl:
    devices:
      - /dev/dri:/dev/dri
      - /dev/dxg:/dev/dxg
    volumes:
      - /dev/bus/usb:/dev/bus/usb
      - /usr/lib/wsl:/usr/lib/wsl

2.4 创建 AI 大模型文件

再次,我们来创建 hwaccel.transcoding.yaml 文件。

yaml
services:
  cpu: {}

  nvenc:
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities:
                - gpu
                - compute
                - video

  quicksync:
    devices:
      - /dev/dri:/dev/dri

  rkmpp:
    security_opt: 
      - systempaths=unconfined
      - apparmor=unconfined
    group_add:
      - video
    devices:
      - /dev/rga:/dev/rga
      - /dev/dri:/dev/dri
      - /dev/dma_heap:/dev/dma_heap
      - /dev/mpp_service:/dev/mpp_service
      #- /dev/mali0:/dev/mali0 # only required to enable OpenCL-accelerated HDR -> SDR tonemapping
    volumes:
      #- /etc/OpenCL:/etc/OpenCL:ro # only required to enable OpenCL-accelerated HDR -> SDR tonemapping
      #- /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro # only required to enable OpenCL-accelerated HDR -> SDR tonemapping

  vaapi:
    devices:
      - /dev/dri:/dev/dri

  vaapi-wsl: # use this for VAAPI if you're running Immich in WSL2
    devices:
      - /dev/dri:/dev/dri
    volumes:
      - /usr/lib/wsl:/usr/lib/wsl
    environment:
      - LIBVA_DRIVER_NAME=d3d12

2.5 创建无核显+cpu 运行大模型文件

众所周知,硬件加速需要硬件支持,假如你的硬件是不支持核显或者图形显卡加速,再或者你不知道怎么选择,直接用本文件肯定没错。根据自己配置,我们来创建 docker-compose.yaml 文件。

yaml
# 基于官方模板制作
# 官方文档
# https://immich.app
# 官方compose教程
# https://immich.app/docs/install/docker-compose
# 官方变量说明
# https://immich.app/docs/install/environment-variables
# 官方CLIP说明
# https://immich.app/docs/features/command-line-interface
# 官方硬件转码说明
# https://immich.app/docs/features/hardware-transcoding
# https://hub.docker.com/r/tensorchord/pgvecto-rs

# 如果官方的镜像不好拉取,可以选择拉取以下两个镜像作为替代,部署参数完全相同,将模板上对应的镜像进行修改即可,tag也是release
# https://hub.docker.com/r/altran1502/immich-server
# https://hub.docker.com/r/altran1502/immich-machine-learning

# ---

name: immich
# 最后编辑时间:2025-02-14
services:
  immich-server:
    # 镜像地址
    image: ghcr.nju.edu.cn/immich-app/immich-server:${IMMICH_VERSION:-release}
    # 容器名
    container_name: immich_server
    # 主机名
    hostname: immich-server
    volumes:
      # 请去.env修改路径
      - ${UPLOAD_LOCATION}:/usr/src/app/upload 
      - /etc/localtime:/etc/localtime:ro
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 调用数据库
    depends_on:
      - redis
      - database
    # 健康检查
    healthcheck:
      disable: false
    # webUI端口  
    ports:
      - 2283:2283
    # 重启策略,总是重启
    restart: always

  immich-machine-learning:
    # 镜像名称
    image: ghcr.nju.edu.cn/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-openvino
    # 容器名
    container_name: immich_machine_learning
    # 主机名
    hostname: immich_machine_learning
    volumes:
      #修改机器学习模型存储路径
      - /docker/apps/immich/model-cache:/cache
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 健康检查
    healthcheck:
      disable: false
    # 重启策略,总是重启
    restart: always

  redis:
    # 镜像名称
    image: docker.io/redis:6.2-alpine
    # 容器名
    container_name: immich_redis
    # 主机名
    hostname: immich_redis
    # 健康检查
    healthcheck:
      test: redis-cli ping || exit 1
    # 重启策略,总是重启
    restart: always

  database:
    # 镜像名称
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    # 容器名
    container_name: immich_postgres
    # 主机名
    hostname: immich_postgres
    # 配置文件
    environment:
      # 数据库用户
      POSTGRES_USER: ${DB_USERNAME}
      # 数据库密码
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      # 数据库名称
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # 请去.env修改路径
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    # 健康检查
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    # 重启策略,总是重启
    restart: always

2.6 创建 intel 6 代核显 vaapi+cpu 运行大模型文件

众所周知,硬件加速需要硬件支持,假如你的硬件是 intel 6 代以上 hd610 或者 hd630 核显加速,那么你选择本文件。根据自己配置,我们来创建 docker-compose.yaml 文件。

yaml
# 基于官方模板制作
# 官方文档
# https://immich.app
# 官方compose教程
# https://immich.app/docs/install/docker-compose
# 官方变量说明
# https://immich.app/docs/install/environment-variables
# 官方CLIP说明
# https://immich.app/docs/features/command-line-interface
# 官方硬件转码说明
# https://immich.app/docs/features/hardware-transcoding
# https://hub.docker.com/r/tensorchord/pgvecto-rs

# 如果官方的镜像不好拉取,可以选择拉取以下两个镜像作为替代,部署参数完全相同,将模板上对应的镜像进行修改即可,tag也是release
# https://hub.docker.com/r/altran1502/immich-server
# https://hub.docker.com/r/altran1502/immich-machine-learning

# ---

name: immich
# 最后编辑时间:2025-02-14
services:
  immich-server:
    # 镜像地址
    image: ghcr.nju.edu.cn/immich-app/immich-server:${IMMICH_VERSION:-release}
    # 容器名
    container_name: immich_server
    # 主机名
    hostname: immich-server
    # 拓展
    extends:
       # 调用转码文件 
       file: hwaccel.transcoding.yaml
       # 请去设置四个中的一个转码方式 [nvenc 英伟达, quicksync 英特尔核显, rkmpp rk系列的arm, vaapi, vaapi-wsl] 
       service: vaapi 
    volumes:
      # 请去.env修改路径
      - ${UPLOAD_LOCATION}:/usr/src/app/upload 
      - /etc/localtime:/etc/localtime:ro
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 调用数据库
    depends_on:
      - redis
      - database
    # 健康检查
    healthcheck:
      disable: false
    # webUI端口  
    ports:
      - 2283:2283
    # 重启策略,总是重启
    restart: always

  immich-machine-learning:
    # 镜像名称
    image: ghcr.nju.edu.cn/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-openvino
    # 容器名
    container_name: immich_machine_learning
    # 主机名
    hostname: immich_machine_learning
    # [armnn arm图形使用, cuda n卡cuda, openvino intel核显],机器学习调用编码器
    # Example tag: ${IMMICH_VERSION:-release}-cuda 在image的镜像最后面添加相应的图形解码,如果想使用cpu则删除就可以
    # 拓展
    extends: 
      # 调用转码文件 
      file: hwaccel.ml.yaml
      service: openvino # 设置四个图形解码中的一个 [armnn arm图形使用, cuda n卡cuda, openvino 优先使用,intel核显, openvino-wsl intel核显] 
    volumes:
      #修改机器学习模型存储路径
      - /docker/apps/immich/model-cache:/cache
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 健康检查
    healthcheck:
      disable: false
    # 重启策略,总是重启
    restart: always

  redis:
    # 镜像名称
    image: docker.io/redis:6.2-alpine
    # 容器名
    container_name: immich_redis
    # 主机名
    hostname: immich_redis
    # 健康检查
    healthcheck:
      test: redis-cli ping || exit 1
    # 重启策略,总是重启
    restart: always

  database:
    # 镜像名称
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    # 容器名
    container_name: immich_postgres
    # 主机名
    hostname: immich_postgres
    # 配置文件
    environment:
      # 数据库用户
      POSTGRES_USER: ${DB_USERNAME}
      # 数据库密码
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      # 数据库名称
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # 请去.env修改路径
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    # 健康检查
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    # 重启策略,总是重启
    restart: always

2.7 创建 intel 核显 qsv+openvino 文件

众所周知,硬件加速需要硬件支持,假如你的硬件是 intel 11 代以上核显加速,那么你选择本文件。根据自己配置,我们来创建 docker-compose.yaml 文件。

yaml
# 基于官方模板制作
# 官方文档
# https://immich.app
# 官方compose教程
# https://immich.app/docs/install/docker-compose
# 官方变量说明
# https://immich.app/docs/install/environment-variables
# 官方CLIP说明
# https://immich.app/docs/features/command-line-interface
# 官方硬件转码说明
# https://immich.app/docs/features/hardware-transcoding
# https://hub.docker.com/r/tensorchord/pgvecto-rs

# 如果官方的镜像不好拉取,可以选择拉取以下两个镜像作为替代,部署参数完全相同,将模板上对应的镜像进行修改即可,tag也是release
# https://hub.docker.com/r/altran1502/immich-server
# https://hub.docker.com/r/altran1502/immich-machine-learning

# ---

name: immich
# 最后编辑时间:2025-02-14
services:
  immich-server:
    # 镜像地址
    image: ghcr.nju.edu.cn/immich-app/immich-server:${IMMICH_VERSION:-release}
    # 容器名
    container_name: immich_server
    # 主机名
    hostname: immich-server
    # 拓展
    extends:
       # 调用转码文件 
       file: hwaccel.transcoding.yaml
      # 请去设置四个中的一个转码方式 [nvenc 英伟达, quicksync 英特尔核显, rkmpp rk系列的arm, vaapi, vaapi-wsl] 
      service: quicksync 
    volumes:
      # 请去.env修改路径
      - ${UPLOAD_LOCATION}:/usr/src/app/upload 
      - /etc/localtime:/etc/localtime:ro
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 调用数据库
    depends_on:
      - redis
      - database
    # 健康检查
    healthcheck:
      disable: false
    # webUI端口  
    ports:
      - 2283:2283
    # 重启策略,总是重启
    restart: always

  immich-machine-learning:
    # 镜像名称
    image: ghcr.nju.edu.cn/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-openvino
    # 容器名
    container_name: immich_machine_learning
    # 主机名
    hostname: immich_machine_learning
    # [armnn arm图形使用, cuda n卡cuda, openvino intel核显],机器学习调用编码器
    # Example tag: ${IMMICH_VERSION:-release}-cuda 在image的镜像最后面添加相应的图形解码,如果想使用cpu则删除就可以
    # 拓展
    extends: 
      # 调用转码文件 
      file: hwaccel.ml.yaml
      # 设置四个图形解码中的一个 [armnn arm图形使用, cuda n卡cuda, openvino 优先使用,intel核显, openvino-wsl intel核显] 
      service: openvino 
    volumes:
      #修改机器学习模型存储路径
      - /docker/apps/immich/model-cache:/cache
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 健康检查
    healthcheck:
      disable: false
    # 重启策略,总是重启
    restart: always

  redis:
    # 镜像名称
    image: docker.io/redis:6.2-alpine
    # 容器名
    container_name: immich_redis
    # 主机名
    hostname: immich_redis
    # 健康检查
    healthcheck:
      test: redis-cli ping || exit 1
    # 重启策略,总是重启
    restart: always

  database:
    # 镜像名称
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    # 容器名
    container_name: immich_postgres
    # 主机名
    hostname: immich_postgres
    # 配置文件
    environment:
      # 数据库用户
      POSTGRES_USER: ${DB_USERNAME}
      # 数据库密码
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      # 数据库名称
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # 请去.env修改路径
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    # 健康检查
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    # 重启策略,总是重启
    restart: always

2.9 创建 N 卡 nvenc+cuda 文件

众所周知,硬件加速需要硬件支持,假如你的硬件是 N 卡英伟达 cuda 加速,那么你选择本文件。根据自己配置,我们来创建 docker-compose.yaml 文件。

yaml
# 基于官方模板制作
# 官方文档
# https://immich.app
# 官方compose教程
# https://immich.app/docs/install/docker-compose
# 官方变量说明
# https://immich.app/docs/install/environment-variables
# 官方CLIP说明
# https://immich.app/docs/features/command-line-interface
# 官方硬件转码说明
# https://immich.app/docs/features/hardware-transcoding
# https://hub.docker.com/r/tensorchord/pgvecto-rs

# 如果官方的镜像不好拉取,可以选择拉取以下两个镜像作为替代,部署参数完全相同,将模板上对应的镜像进行修改即可,tag也是release
# https://hub.docker.com/r/altran1502/immich-server
# https://hub.docker.com/r/altran1502/immich-machine-learning

# ---

name: immich
# 最后编辑时间:2025-02-14
services:
  immich-server:
    # 镜像地址
    image: ghcr.nju.edu.cn/immich-app/immich-server:${IMMICH_VERSION:-release}
    # 容器名
    container_name: immich_server
    # 主机名
    hostname: immich-server
    extends:
       file: hwaccel.transcoding.yml
       # 请去设置四个中的一个转码方式 [nvenc 英伟达, quicksync 英特尔核显, rkmpp rk系列的arm, vaapi, vaapi-wsl] 
       service: nvenc 
    volumes:
      # 请去.env修改路径
      - ${UPLOAD_LOCATION}:/usr/src/app/upload 
      - /etc/localtime:/etc/localtime:ro
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 调用数据库
    depends_on:
      - redis
      - database
    # 健康检查
    healthcheck:
      disable: false
    # webUI端口  
    ports:
      - 2283:2283
    # 重启策略,总是重启
    restart: always

  immich-machine-learning:
    # 镜像名称
    image: ghcr.nju.edu.cn/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-openvino
    # 容器名
    container_name: immich_machine_learning
    # 主机名
    hostname: immich_machine_learning
    # [armnn arm图形使用, cuda n卡cuda, openvino intel核显],机器学习调用编码器
    # Example tag: ${IMMICH_VERSION:-release}-cuda 在image的镜像最后面添加相应的图形解码,如果想使用cpu则删除就可以
    # 拓展
    extends: 
      # 调用转码文件 
       file: hwaccel.ml.yaml
       service: cuda # 设置四个图形解码中的一个 [armnn arm图形使用, cuda n卡cuda, openvino 优先使用,intel核显, openvino-wsl intel核显] 
    volumes:
      #修改机器学习模型存储路径
      - /docker/apps/immich/model-cache:/cache
    # 配置文件,指定版本,指定相册路径,数据库路径
    env_file:
      - .env
    # 健康检查
    healthcheck:
      disable: false
    # 重启策略,总是重启
    restart: always

  redis:
    # 镜像名称
    image: docker.io/redis:6.2-alpine
    # 容器名
    container_name: immich_redis
    # 主机名
    hostname: immich_redis
    # 健康检查
    healthcheck:
      test: redis-cli ping || exit 1
    # 重启策略,总是重启
    restart: always

  database:
    # 镜像名称
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    # 容器名
    container_name: immich_postgres
    # 主机名
    hostname: immich_postgres
    # 配置文件
    environment:
      # 数据库用户
      POSTGRES_USER: ${DB_USERNAME}
      # 数据库密码
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      # 数据库名称
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # 请去.env修改路径
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    # 健康检查
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    # 重启策略,总是重启
    restart: always

2.9 immich 总结

根据自己的配置创建好这 4 个文件,我们直接把 immich 这个文件夹上传到我们对应的目录,然后运行 compose 项目就行。

/imgURL/blog/10.docker/1002-容器项目&相册类-01-immich-02.webp


3 AI 大模型配置

3.1 MT Photos AI 大模型配置

mt photos 的 ai 大模型配置在官方文档都有介绍,想用高德地图也有教程文档,我这里就不多说了。


3.2 immich AI 大模型配置

immich 基本都是英文文档,首先主要是智能搜索中的中文模型。安装好 immich 后,依次打开设置→机器学习设置→智能搜索→CLIP模型修改为以下的代码。

XLM-Roberta-Large-Vit-B-16Plus

其次,就是需要改成中文地图。依次打开设置→地图与GPS设置→地图→浅色模式和深色模式都修改为以下的代码,其他设置根据自己需求修改,以下的 aip 是通过一个地图网站自己编辑的

https://api.maptiler.com/maps/5f203af3-3f1d-4a6d-b1ab-612ec5b58ceb/style.json?key=18pTCzPiaEcdoABeRqDh
最近更新