🖼️ Immich 相册程序完全指南

IT 技术 52 阅读 更新于 2026-09-05 09:16

📐 系统架构设计

架构概述 — 整体设计理念

Immich 采用容器化、微服务架构的设计理念,是一个典型的客户端-服务端(Client-Server)模型,并配备了专用数据库用于数据持久化。

┌─────────────────────────────────────────────────────────┐ │ 客户端层 (Clients) │ ├──────────────┬──────────────┬────────────────────────────┤ │ 📱 Mobile │ 🌐 Web │ 💻 CLI │ │ (Flutter) │ (SvelteKit) │ (npm) │ └──────────────┴──────────────┴────────────────────────────┘ │ REST API ▼ ┌─────────────────────────────────────────────────────────┐ │ 服务端层 (Server) │ ├─────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌──────────────┐ │ │ │ immich- │ │ immich- │ │ │ │ server │◄──►│ machine- │ │ │ │ (NestJS) │ │ learning │ │ │ │ (API + Jobs)│ │ (FastAPI) │ │ │ └─────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ ┌───────────────┐ ┌──────────────┐ ┌──────────────────┐ │ PostgreSQL │ │ Redis │ │ 文件系统 (Storage) │ │ (数据库) │ │ (消息队列) │ │ (照片/视频存储) │ └───────────────┘ └──────────────┘ └──────────────────┘

核心设计原则

  • 关注点分离:每个服务承担单一职责
  • 六边形架构:将技术实现与核心业务逻辑分离
  • 水平可扩展:各服务可独立扩展实例
  • 完全自托管:所有数据和计算都在用户自己的设备上

💡 设计亮点:

服务端被拆分为两个独立容器 —

immich-server

负责 API 请求,

immich-microservices

负责处理来自 Redis 的后台任务请求。

客户端架构详解

Immich 提供三种客户端接入方式,全部使用 OpenAPI 自动生成 REST 客户端以确保一致性。

1. 移动端应用 (Mobile App)

Flutter

Dart

Android

iOS

  • 框架:Flutter (Dart 语言)
  • 本地数据库:Isar Database(高性能本地存储)
  • 状态管理:Riverpod (基于 Provider 的响应式状态管理)
  • 数据类:分为 Entities(持久化到设备数据库)和 Models(仅存在于内存中的临时数据)
  • Repositories 层:唯一可以使用 OpenAPI DTO 等外部数据类的地方

2. Web 应用

SvelteKit

TypeScript

TailwindCSS

  • 框架:SvelteKit(基于 Svelte 的全栈框架)
  • 语言:TypeScript
  • 样式:TailwindCSS 实现响应式 UI
  • 特性:SSR + 客户端渲染,首屏加载快

3. CLI 工具

Node.js

npm

  • 包管理:npm 全局安装
  • 用途:批量上传资源、命令行管理
  • 优势:适合脚本化操作和自动化

服务端架构详解

immich-server (主服务)

属性详情
语言TypeScript
运行时Node.js
框架NestJS + Express
查询构建器Kysely
架构模式六边形架构(Hexagonal Architecture)

职责分工

  • 接收并响应所有 REST API 请求
  • 验证用户身份与授权
  • 调度后台任务到 Redis 队列
  • 执行定时任务(Cron Jobs)

immich-microservices (微服务)

  • 专门处理来自 Redis 的后台任务请求
  • 不直接处理 API 请求
  • 负责任务密集型的处理工作

immich-machine-learning (机器学习服务)

属性详情
语言Python
框架FastAPI
语义搜索模型CLIP(用于向量嵌入)
人脸识别模型buffalo_l(InsightFace)
聚类算法DBScan

⚡ 性能优化:

机器学习服务作为独立容器运行,可以部署在不同的物理机器上,也可以根据需要完全禁用。支持硬件加速器(GPU)提升推理速度。

数据层设计 — 数据库与消息队列

PostgreSQL 数据库

Immich 使用 PostgreSQL 作为核心数据存储引擎:

  • 用户数据:账户信息、认证令牌、权限设置
  • 资源元数据:照片/视频的文件信息、EXIF 数据、标签
  • 相册管理:相册创建、资源关联、共享设置
  • 向量嵌入:通过 pgvector 扩展存储 ML 生成的向量数据,支持语义搜索

🔍 语义搜索原理:

CLIP 模型将图片转换为高维向量,存储在 PostgreSQL 的 pgvector 字段中。用户搜索时,文本同样被编码为向量,然后通过向量相似度搜索找到匹配的图片。

Redis 消息队列

使用 BullMQ(基于 Redis 的队列管理工具)处理后台任务:

  • 任务调度:将耗时操作异步化,保持 API 响应性
  • 任务链:某些任务完成后自动触发后续任务(如缩略图生成 → 语义搜索)
  • 重试机制:失败任务自动重试,确保数据一致性

后台任务类型

🖼️ 缩略图生成

为每张照片生成多种尺寸的预览图

📋 元数据提取

提取 EXIF、GPS、拍摄时间等信息

🎬 视频转码

视频格式标准化和预览生成

🧠 智能搜索

生成 CLIP 向量嵌入

👤 人脸识别

检测并聚类人脸信息

📁 存储迁移

文件模板迁移和清理

🔧 核心技术栈

后端技术栈详细说明

技术用途说明
NestJS后端框架企业级 Node.js 框架,提供模块化架构
TypeScript开发语言类型安全的 JavaScript 超集
ExpressHTTP 服务器轻量级 Web 框架
FastAPIML 服务 API高性能 Python Web 框架
CLIP语义搜索OpenAI 的多模态模型
InsightFace人脸识别buffalo_l 模型用于人脸检测和识别
PostgreSQL主数据库支持 pgvector 向量搜索
Redis任务队列通过 BullMQ 管理异步任务
Docker容器化统一部署环境

前端技术栈详细说明

Web 应用

  • SvelteKit — 基于 Svelte 的全栈框架,编译时优化,体积小、速度快
  • TypeScript — 类型安全,提高代码质量
  • TailwindCSS — 原子化 CSS,快速构建响应式 UI
  • OpenAPI Client — 自动生成的 REST 客户端,确保 API 一致性

移动应用

  • Flutter — Google 的跨平台 UI 框架,一套代码运行 Android 和 iOS
  • Dart — Flutter 的编程语言
  • Isar Database — 高性能的本地 NoSQL 数据库
  • Riverpod — 声明式状态管理库

CLI 工具

  • Node.js — npm 全局包,跨平台命令行工具
  • 支持批量上传、资源管理、自动化脚本

Docker 容器编排设计

Immich 使用 Docker Compose 进行服务编排,以下为默认容器配置:

🖥️ immich-server

主 API 服务容器

Node.js + NestJS

🤖 immich-machine-learning

ML 推理服务

Python + FastAPI

🗄️ immich-postgres

数据库服务

PostgreSQL + pgvector

📨 immich-redis

消息队列服务

Redis 7.x

容器间通信

  • 所有容器通过 Docker 内部网络进行通信
  • 服务发现基于容器名称(Docker DNS)
  • 外部仅暴露 immich-server 的 HTTP 端口
  • PostgreSQL 和 Redis 不对外暴露端口(安全设计)

数据持久化

  • upload/ — 照片和视频文件存储
  • library/ — 外部库挂载
  • PostgreSQL data — 数据库持久卷
  • Redis data — 队列持久化(可选)

🚀 部署教程

系统要求与准备工作

最低硬件要求

资源最低要求推荐配置
CPU2 核4 核及以上
内存4 GB8 GB 及以上
存储空间50 GB根据照片量扩展
操作系统Linux / macOS / WindowsUbuntu 22.04 LTS

⚠️ 注意:

机器学习功能(语义搜索、人脸识别)会消耗额外的 CPU/GPU 资源。如果使用 GPU 加速,建议至少配备 NVIDIA GPU + 8GB 显存。

软件依赖

  • Docker 20.10+(或 Docker Desktop)
  • Docker Compose v2.0+
  • Git(用于获取配置文件)

安装 Docker(Ubuntu 示例)

# 更新包索引
sudo apt-get update

# 安装依赖
sudo apt-get install -y ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
docker --version
docker compose version

使用 Docker Compose 部署(完整步骤)

步骤 1:创建项目目录

# 创建并进入项目目录
mkdir -p ~/immich && cd ~/immich

# 下载 docker-compose 文件和环境变量文件
wget 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
wget -O hwaccel.ml.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.ml.yml
wget -O hwaccel.transcoding.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml

步骤 2:编辑环境变量

编辑 .env 文件,配置关键参数:

# .env 文件关键配置

# 数据库配置
DB_PASSWORD=your_secure_password_here
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

# 上传存储路径
UPLOAD_LOCATION=./library

# 端口映射(默认 2283)
IMMICH_PORT=2283

# 时区设置
TZ=Asia/Shanghai

步骤 3:创建存储目录

# 创建照片存储目录
mkdir -p ./library

# 设置正确的权限
sudo chown -R 1000:1000 ./library

步骤 4:启动服务

# 拉取镜像并启动所有服务
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f

✅ 部署完成!

打开浏览器访问

http://你的服务器IP:2283

即可进入 Immich Web 界面,首次访问需要创建管理员账户。

步骤 5:常用管理命令

# 停止服务
docker compose down

# 重启服务
docker compose restart

# 更新到最新版本
docker compose pull
docker compose up -d

# 查看资源占用
docker stats

# 备份数据库
docker exec -t immich_postgres pg_dump -U postgres immich > backup_$(date +%Y%m%d).sql

NAS 系统部署(群晖/威联通/Unraid)

群晖 NAS (Synology) 部署

群晖 NAS 可以通过 Docker 套件或 Docker Compose 部署 Immich:

方法一:使用 Docker 套件(DSM 7+)

  1. 在套件中心安装 Container Manager(原 Docker 套件)
  2. 通过 SSH 登录 NAS,执行 Docker Compose 命令
  3. 确保存储空间映射正确(建议使用 Volume 挂载)
  4. 方法二:使用 Portainer 可视化部署

    # 通过 Portainer 添加 Stack
    # 粘贴 docker-compose.yml 内容
    # 配置环境变量和卷映射
    # 点击 Deploy

    💡 群晖小贴士:

    如果 NAS 性能不足,可以将机器学习服务部署在另一台性能更强的机器上,通过网络连接共享。

    Unraid 部署

    Unraid 用户可以通过 Community Applications (CA) 或自定义 Docker 模板安装:

    1. 在 CA 中搜索 "immich"
    2. 安装推荐版本
    3. 配置共享文件夹作为存储路径
    4. 确保分配足够的内存(建议 8GB+)
    5. TrueNAS Scale 部署

      TrueNAS Scale 支持通过 Apps 界面一键安装:

      1. 进入 Apps → Discover Apps
      2. 搜索 "Immich"
      3. 配置存储池和路径
      4. 应用配置,等待安装完成
      5. GPU 加速配置(硬件转码 & ML推理)

        NVIDIA GPU 加速

        如果您有 NVIDIA GPU,可以加速视频转码和 ML 推理:

        安装 NVIDIA Container Toolkit

        # 添加仓库
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
        curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
        curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/libnvidia-container.list
        
        # 安装
        sudo apt-get update
        sudo apt-get install -y nvidia-container-toolkit
        
        # 配置 Docker
        sudo nvidia-ctk runtime configure --runtime=docker
        sudo systemctl restart docker

        修改 docker-compose.yml

        为 ML 服务添加 GPU 支持:

          immich-machine-learning:
            container_name: immich_machine_learning
            deploy:
              resources:
                reservations:
                  devices:
                    - driver: nvidia
                      count: 1
                      capabilities: [gpu]
            # ... 其他配置

        Intel Quick Sync 加速

        Intel 集成显卡可以加速视频转码:

          immich-server:
            devices:
              - /dev/dri:/dev/dri
            # ... 其他配置

        ⚡ 性能提升:

        GPU 加速可以将 ML 推理速度提升 5-10 倍,视频转码速度提升 3-5 倍。首次索引大量照片时效果尤为明显。

        外网访问配置(反向代理 + HTTPS)

        方案一:Nginx Proxy Manager

        最简单的反向代理管理方案:

        1. 部署 Nginx Proxy Manager (NPM)
        2. 添加代理主机,指向 Immich 的内部地址
        3. 配置域名和 SSL 证书(Let's Encrypt)
        4. 在路由器中转发 80/443 端口
        5. 方案二:Caddy 自动 HTTPS

          # Caddyfile 配置
          photos.example.com {
              reverse_proxy immich-server:2283
          }
          
          # 启动 Caddy
          docker run -d --name caddy \
            -v ./Caddyfile:/etc/caddy/Caddyfile \
            -v caddy_data:/data \
            -p 80:80 -p 443:443 \
            caddy:latest

          方案三:Cloudflare Tunnel(无需公网 IP)

          # 安装 cloudflared
          curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
          sudo dpkg -i cloudflared.deb
          
          # 登录并创建隧道
          cloudflared tunnel login
          cloudflared tunnel create immich
          cloudflared tunnel route dns immich photos.example.com
          
          # 配置文件 config.yml
          tunnel: immich-tunnel
          credentials-file: /root/.cloudflared/tunnel-id.json
          
          ingress:
            - hostname: photos.example.com
              service: http://localhost:2283
            - service: http_status:404
          
          # 运行隧道
          cloudflared tunnel run

          🔒 安全建议:

          外网访问时务必启用 HTTPS,建议配置双因素认证(2FA),并考虑使用 VPN 或 IP 白名单进一步保护。

          移动端 App 配置与自动备份

          下载安装

          • Android:Google Play 或 F-Droid 搜索 "Immich"
          • iOS:App Store 搜索 "Immich"

          连接服务器

          1. 打开 App,输入服务器地址(如 https://photos.example.com
          2. 使用已创建的账户登录
          3. App 会自动检测服务器 API 版本
          4. 配置自动备份

            1. 进入 App 设置 → 备份
            2. 开启 后台备份
            3. 选择备份条件:
              • 仅 WiFi / WiFi + 移动网络
              • 仅充电时 / 始终
              • 备份相册范围
            4. 选择备份目标(可创建专属相册)
            5. iOS 特别设置

              • 进入 iOS 设置 → Immich → 开启后台应用刷新
              • 进入 iOS 设置 → 隐私 → 照片 → Immich → 选择完全访问权限
              • 建议开启位置权限以保留 GPS 信息

              Android 特别设置

              • 关闭电池优化(设置 → 电池 → 应用优化 → Immich → 不优化)
              • 允许自启动(部分国产 ROM 需要单独设置)
              • 锁定后台进程(在最近任务中下拉锁定)

              ✨ 功能特性详解

              🧠 AI 智能搜索 (Semantic Search)

              Immich 的核心特色之一是语义搜索,允许用户使用自然语言描述来查找照片。

              工作原理

              1. 图片编码:CLIP 模型将每张图片转换为 512 维向量
              2. 向量存储:向量嵌入存储在 PostgreSQL 的 pgvector 字段中
              3. 文本编码:搜索文本同样被 CLIP 编码为向量
              4. 相似度匹配:通过余弦相似度计算找到最匹配的图片
              5. 搜索示例

                • 📝 "海边的日落" — 找到所有海边日落照片
                • 📝 "一家人在公园" — 找到家庭户外照
                • 📝 "红色的汽车" — 通过颜色+物体组合搜索
                • 📝 "2023年生日派对" — 时间+事件搜索

                💡 高级技巧:

                在管理面板 → 系统设置 → 机器学习中,可以调整置信度阈值、切换不同的 CLIP 模型(如多语言模型)来优化搜索效果。

                👤 人脸识别与人物相册

                Immich 使用 InsightFacebuffalo_l 模型进行人脸检测和识别,并通过 DBScan 算法进行聚类。

                处理流程

                1. 人脸检测:识别照片中的所有人脸位置
                2. 特征提取:为每张人脸生成特征向量
                3. 聚类:DBScan 算法将相似人脸归为一组
                4. 命名:用户可为聚类结果命名
                5. 管理人物

                  • 在"浏览" → "人物" 中查看所有检测到的人物
                  • 点击人物可查看所有包含该人物的照片
                  • 可以合并错误分类的人脸
                  • 支持为宠物命名

                  优化识别效果

                  • 为常见人物添加多张样本照片
                  • 手动合并同一人物的不同聚类
                  • 将不应被识别人脸标记为"忽略"

                  🗺️ 地图视图与地理定位

                  Immich 可以提取照片的 GPS 信息并在地图上展示拍摄地点。

                  功能特点

                  • 地图展示:在世界地图上查看照片拍摄位置
                  • 热力图:密集区域以热力图形式展示
                  • 时间线:结合时间轴查看旅行路线
                  • 地理围栏:按地区筛选照片

                  隐私设置

                  • 可以选择隐藏精确位置信息
                  • 共享相册时自动剥离位置数据
                  • 管理员可以全局禁用地标信息

                  📤 共享与协作功能

                  相册共享

                  • 创建相册并邀请其他用户加入
                  • 设置权限:查看/上传/管理
                  • 共享相册中的照片对所有成员可见

                  合作伙伴共享

                  • 将其他用户添加为"合作伙伴"
                  • 合作伙伴可以访问你选择共享的所有照片
                  • 适合家庭成员之间共享整个照片库

                  公开分享链接

                  • 为特定照片或相册生成公开链接
                  • 可设置密码保护和过期时间
                  • 无需账户即可访问
                  • 支持下载权限控制

                  📱 多用户与权限管理

                  用户角色

                  角色权限
                  管理员完全控制:用户管理、系统设置、所有资源
                  普通用户管理自己的照片、创建相册、查看共享内容

                  存储配额

                  • 管理员可为每个用户设置存储配额
                  • 超出配额后自动暂停备份
                  • 用户可查看自己的使用情况

                  用户管理功能

                  • 创建/删除/暂停用户账户
                  • 重置用户密码
                  • 查看用户活跃状态
                  • 导出用户数据

                  🔧 高级功能与配置

                  外部库导入

                  可以将已有的照片目录导入 Immich 而无需重新上传:

                  # 在 docker-compose.yml 中挂载外部库
                  volumes:
                    - /path/to/existing/photos:/usr/src/app/external:ro
                  
                  # 在管理面板 → 外部库 → 添加扫描路径

                  XMP Sidecar 支持

                  • 自动读取 XMP 元数据文件
                  • 支持 Lightroom、Capture One 等软件的标签和评分
                  • 修改会回写到 XMP 文件

                  存储模板

                  自定义文件存储路径结构:

                  # 示例模板
                  {{y}}/{{M}}/{{filename}}
                  # 结果:2024/03/IMG_1234.jpg
                  
                  {{y}}/{{MM}}/{{dd}}/{{filename}}
                  # 结果:2024/03/15/IMG_1234.jpg
                  
                  {{album}}/{{filename}}
                  # 按相册名称组织文件

                  视频转码配置

                  • 支持 H.264、H.265/HEVC、VP9、AV1 编解码
                  • 可设置目标分辨率和比特率
                  • 硬件加速可大幅降低 CPU 占用

                  ⚙️ 配置说明

                  环境变量完整配置参考

                  以下为 .env 文件的完整配置参考:

                  # ==================
                  # 通用配置
                  # ==================
                  IMMICH_VERSION=release
                  UPLOAD_LOCATION=./library
                  DB_DATA_LOCATION=./postgres
                  
                  # ==================
                  # 数据库配置
                  # ==================
                  DB_PASSWORD=immich_password_change_me
                  DB_USERNAME=postgres
                  DB_DATABASE_NAME=immich
                  DB_HOSTNAME=database
                  DB_PORT=5432
                  
                  # ==================
                  # Redis 配置
                  # ==================
                  REDIS_HOSTNAME=redis
                  REDIS_PORT=6379
                  REDIS_PASSWORD=
                  
                  # ==================
                  # 机器学习配置
                  # ==================
                  MACHINE_LEARNING_HOST=immich-machine-learning
                  MACHINE_LEARNING_PORT=3003
                  MACHINE_LEARNING_CACHE_FOLDER=/cache
                  
                  # ==================
                  # 服务器配置
                  # ==================
                  IMMICH_API_URL_INTERNAL=http://immich-server:2283/api
                  IMMICH_WEB_URL=http://immich-web:2283
                  
                  # ==================
                  # 时区
                  # ==================
                  TZ=Asia/Shanghai

                  Docker Compose 完整配置

                  version: "3.8"
                  
                  services:
                    immich-server:
                      container_name: immich_server
                      image: ghcr.io/immich-app/immich-server:release
                      volumes:
                        - ${UPLOAD_LOCATION}:/usr/src/app/upload
                        - /etc/localtime:/etc/localtime:ro
                      env_file:
                        - .env
                      ports:
                        - "2283:2283"
                      depends_on:
                        - redis
                        - database
                      restart: always
                  
                    immich-machine-learning:
                      container_name: immich_machine_learning
                      image: ghcr.io/immich-app/immich-machine-learning:release
                      volumes:
                        - model-cache:/cache
                      env_file:
                        - .env
                      restart: always
                  
                    redis:
                      container_name: immich_redis
                      image: redis:6.2-alpine
                      volumes:
                        - redis-data:/data
                      restart: always
                  
                    database:
                      container_name: immich_postgres
                      image: tensorchord/pgvecto-rs:pg14-v0.2.0
                      env_file:
                        - .env
                      environment:
                        POSTGRES_PASSWORD: ${DB_PASSWORD}
                        POSTGRES_USER: ${DB_USERNAME}
                        POSTGRES_DB: ${DB_DATABASE_NAME}
                      volumes:
                        - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
                      restart: always
                  
                  volumes:
                    model-cache:
                    redis-data:

                  备份与恢复策略

                  需要备份的内容

                  • 照片文件UPLOAD_LOCATION 目录
                  • 数据库:PostgreSQL 数据
                  • 配置.envdocker-compose.yml

                  自动备份脚本

                  #!/bin/bash
                  # immich-backup.sh
                  
                  BACKUP_DIR="/backup/immich"
                  DATE=$(date +%Y%m%d_%H%M%S)
                  
                  # 备份数据库
                  docker exec -t immich_postgres pg_dump -U postgres immich | gzip > ${BACKUP_DIR}/db_${DATE}.sql.gz
                  
                  # 备份照片文件
                  rsync -av /path/to/upload ${BACKUP_DIR}/files_${DATE}/
                  
                  # 保留最近 30 天的备份
                  find ${BACKUP_DIR} -name "db_*.sql.gz" -mtime +30 -delete
                  find ${BACKUP_DIR} -name "files_*" -type d -mtime +30 -exec rm -rf {} \;
                  
                  echo "Backup completed: ${DATE}"

                  恢复步骤

                  # 1. 停止服务
                  docker compose down
                  
                  # 2. 恢复数据库
                  gunzip < backup.sql.gz | docker exec -i immich_postgres psql -U postgres -d immich
                  
                  # 3. 恢复照片文件
                  rsync -av /backup/files/upload ./library/
                  
                  # 4. 重启服务
                  docker compose up -d

                  ⚠️ 重要:

                  定期测试备份恢复流程,确保在灾难发生时能成功恢复。建议至少每月进行一次恢复演练。

                  性能优化建议

                  数据库优化

                  # 在 PostgreSQL 中执行优化设置
                  ALTER SYSTEM SET shared_buffers = '2GB';
                  ALTER SYSTEM SET effective_cache_size = '6GB';
                  ALTER SYSTEM SET work_mem = '32MB';
                  ALTER SYSTEM SET maintenance_work_mem = '512MB';
                  ALTER SYSTEM SET max_parallel_workers_per_gather = 4;
                  
                  # 重新加载配置
                  SELECT pg_reload_conf();

                  Docker 资源限制

                  services:
                    immich-server:
                      deploy:
                        resources:
                          limits:
                            memory: 4G
                            cpus: '4.0'
                          reservations:
                            memory: 2G
                            cpus: '2.0'
                  
                    immich-machine-learning:
                      deploy:
                        resources:
                          limits:
                            memory: 8G
                            cpus: '4.0'

                  缓存策略

                  • 使用 CDN 或 Nginx 缓存缩略图和静态资源
                  • 为静态资源配置较长的浏览器缓存时间
                  • 使用 Redis 缓存频繁查询的 API 响应

                  图片处理优化

                  • 适当降低缩略图质量以减少存储和带宽
                  • 使用渐进式 JPEG 提升加载体验
                  • 为大图生成 WebP 格式预览(体积更小)

                  常见问题排查 (FAQ)

                  Q: 照片上传失败怎么办?

                  • 检查服务器磁盘空间是否充足
                  • 检查 Docker 容器的文件权限
                  • 查看 immich-server 日志:docker compose logs immich-server
                  • 确认 Nginx 或反向代理的 client_max_body_size 设置足够大

                  Q: 机器学习服务很慢?

                  • 首次索引需要大量计算,耐心等待完成
                  • 考虑启用 GPU 加速
                  • 可以在管理面板中降低 ML 处理的优先级
                  • 确保系统有足够内存(ML 服务建议 4GB+)

                  Q: 移动端无法连接服务器?

                  • 确认服务器地址正确(包含 http:// 或 https://)
                  • 检查防火墙是否允许端口访问
                  • 如果是外网访问,确认 DNS 解析正常
                  • 尝试使用 IP 地址直连排除 DNS 问题

                  Q: 如何迁移到新的服务器?

                  1. 在旧服务器执行完整备份
                  2. 在新服务器安装 Docker 环境
                  3. 恢复数据库和文件到对应位置
                  4. 使用相同的 .env 配置(注意修改密码等敏感信息)
                  5. 启动服务并验证数据完整性
                  6. Q: 更新后服务无法启动?

                    • 查看日志定位具体错误:docker compose logs
                    • 确认 docker-compose.yml 格式正确
                    • 如果数据库 schema 变更,可能需要执行迁移
                    • 参考 GitHub Release Notes 中的升级说明
← 返回IT 技术 yicool 百科 · 🖼️ Immich 相册程序完全指南

评论 0