Immich 部署笔记

替代 Google Photos 的私有照片管理方案。

为什么选 Immich

折腾了一圈开源照片管理方案,最终选定 Immich:

  • 完全开源,GitHub 40k+ stars,社区活跃
  • AI 人脸识别内置,基于 CLIP 模型,识别准确率不错
  • 手机自动备份,iOS/Android 客户端都有,后台静默上传
  • RAW 格式支持,CR3、ARW、DNG 都能处理
  • 时间线浏览、地图视图、相册共享、多用户支持

Docker Compose 部署

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - /data/immich/upload:/usr/src/app/upload
    environment:
      - DB_PASSWORD=your_secure_password
      - DB_HOSTNAME=database
      - REDIS_HOSTNAME=redis
    ports:
      - "2283:2283"
    depends_on:
      - redis
      - database

  redis:
    image: docker.io/redis:7-alpine

  database:
    image: docker.io/tensorchord/pgvecto-rs:pg16-v0.2.0
    environment:
      - POSTGRES_PASSWORD=your_secure_password
      - POSTGRES_DB=immich
    volumes:
      - /data/immich/pgdata:/var/lib/postgresql/data

注意事项: - 数据卷统一放 /data/immich/,方便备份 - PostgreSQL 用的是 Immich 定制的 pgvecto-rs 镜像,别用官方 postgres - ML 模型首次启动自动下载,大概 2-3GB,耐心等 - 建议 8GB 以上内存,低于 8GB 加 swap

反向代理

内网用 Tailscale 直连,公网用 nginx 反代 + SSL:

server {
    listen 443 ssl;
    server_name photos.your-domain.com;

    client_max_body_size 50000M;

    location / {
        proxy_pass http://localhost:2283;
        proxy_set_header Host $host;
        proxy_request_buffering off;
    }
}

大文件上传需要调大 client_max_body_size 和超时时间。

手机端设置

App Store / Google Play 搜索 "Immich",安装后填入服务器地址:

  • 开启后台自动备份,仅 Wi-Fi 时上传
  • 关闭移动数据备份,省流量
  • RAW 和 JPEG 同时备份

实用经验

  1. 备份策略:数据库用 pg_dump 定时导出,上传目录用 rsync,两样都不能丢
  2. 硬件转码:admin 面板开启 VAAPI/QSV 硬件加速,CPU 占用降一半
  3. 存储模板:配置 STORAGE_TEMPLATE 按年/月/日组织文件,方便迁移
  4. 升级流程docker compose pull && docker compose up -d,数据库自动迁移
  5. 机器学习:人脸识别和 CLIP 搜索很吃资源,可以在 admin 面板设并发数