Immich — 106K Stars 的自托管照片和视频管理

Immich is the world's most popular self-hosted photo and video backup solution, with 106K+ GitHub stars. Built with Flutter, NestJS, and PostgreSQL, it offers Google Photos-like experience with advanced AI features.

  • 更新于 2026-07-07

编辑披露:本文中的数据(存储库名称、星号、描述)由 Dibi8 Tribe Intel 从 GitHub API 自动收集。分析和编辑内容由Dibi8编辑团队撰写。

长篇大论;博士 #

Immich 是一个高性能自托管照片和视频备份解决方案,它已成为注重隐私的用户事实上的 Google Photos 替代方案。它拥有106,557 GitHub star,是整个平台上最受欢迎的自托管应用程序之一。

主要优势:

  • 具有自动后台备份功能的全功能移动应用程序(Flutter)
  • 具有相册管理、时间线视图和地图视图的 Web 界面
  • 人工智能驱动的人脸识别、物体检测和场景分析
  • 具有精细权限的多用户支持
  • 与 300 多名贡献者一起积极开发并每周发布

什么是伊米奇? #

Immich 是一个开源、自托管的照片和视频备份解决方案。它提供类似 Google Photos 的体验,同时将所有数据保存在您自己的硬件上。 The project was initiated by Alex Tran in 2021 and has grown into one of the largest self-hosted projects on GitHub.

该架构包括:

  • 移动应用程序(iOS/Android)使用 Flutter 构建,可实现无缝备份
  • Web 应用程序 使用 Angular 构建,用于桌面管理
  • 后端 API 使用 NestJS 和 TypeScript 构建
  • 数据库使用 PostgreSQL 进行元数据,使用 MinIO/S3 进行文件存储
  • Machine learning pipeline for face recognition and object detection```bash
Quick start with Docker Compose #

docker compose up -d

Verify installation #

curl -s http://localhost:2283/api/server-info | jq

## 为什么它很重要

### 隐私第一的设计

In an era where tech giants monetize your personal photos, Immich offers a compelling alternative.您的所有媒体都保留在您的基础设施上 - 没有云上传,没有数据挖掘,没有对您的提要进行算法操作。

### 大规模社区采用

Immich 拥有 106K+ 星和 6K+ 分叉,是自托管空间中最活跃的社区之一。该项目定期更新,拥有丰富的文档,并与 Nextcloud 和 Synology NAS 等流行的自托管生态系统无缝集成。

### AI 驱动的功能

Unlike basic photo managers, Immich includes sophisticated AI features:
- **人脸识别**:自动检测整个库中的人脸并对其进行分组
- **对象检测**:识别照片中的对象、场景和活动
- **语义搜索**:使用自然语言搜索您的照片(“海滩上的猫”)
- **时间轴视图**:按日期、地点和人物组织照片

## 架构深度探究

### 后端堆栈

Immich 使用现代的模块化架构:```typescript
// Core API structure
class MediaRepository {
  async upload(userId: string, file: Buffer): Promise<MediaEntity>
  async findByOwner(ownerId: string, page: number): Promise<MediaEntity[]>
  async deleteOrphanedAssets(): Promise<number>
}

class AssetService {
  async processAsset(asset: MediaEntity): Promise<void> {
    await this.faceRecognition.process(asset);
    await this.objectDetection.process(asset);
    await this.thumbnailGeneration.process(asset);
  }
}

NestJS 后端提供:

  • RESTful API 和 OpenAPI 文档
  • WebSocket 支持实时更新
  • 使用 BullMQ 进行后台作业处理
  • 使用 multer 处理文件上传

前端架构 #

Flutter 移动应用程序在 iOS 和 Android 上提供本机性能:

  • 自动后台备份,可配置 WiFi/蜂窝设置
  • 具有本地 SQLite 缓存的离线优先设计
  • Smooth scrolling and image loading with progressive JPEG support
  • 支持主屏幕快速访问的小部件

存储策略 #

Immich 支持多种存储后端:

  • 本地存储:直接文件系统访问以实现简单部署
  • MinIO/S3:用于可扩展、分布式设置的对象存储
  • 外部驱动器:用于 NAS 部署的基于装载的存储```yaml

docker-compose.yml storage configuration #

services: immich-server: volumes: - /path/to/photos:/mnt/photos - /path/thumbs:/tmp/thumbs immich-machine-learning: volumes: - /path/models:/cache

## 实践经验

### 安装

推荐的安装方式是 Docker Compose:```bash
# Clone the repository
git clone https://github.com/immich-app/immich-docker.git
cd immich-docker

# Create directories
mkdir -p {upload,library,postgres}

# Start services
docker compose up -d

# Access the web interface
open http://localhost:2283

移动应用程序设置 #

  1. App StoreGoogle Play 安装 Immich
  2. 指向您的服务器 URL
  3. 使用您喜欢的设置启用自动备份
  4. 选择要同步到设备的相册

AI功能配置```bash #

Enable face recognition #

curl -X PUT http://localhost:2283/api/config/features/face-recognition
-H “Authorization: Bearer YOUR_TOKEN”
-d ‘{“enabled”: true}’

Trigger re-indexing #

curl -X POST http://localhost:2283/api/admin/tasks/reindex

## 与替代方案的比较

| Feature |伊米奇 | Nextcloud 照片 |光棱镜|谷歌照片 |
|--------|--------|------------------|------------|---------------|
|自托管 | ✅ | ✅ | ✅ | ❌ |
|人脸识别 | ✅ | ❌ | ✅ | ✅ |
|物体检测| ✅ | ❌ | ✅ | ✅ |
|移动应用程序 | ✅ (Flutter) | ✅ | ✅ | ✅ |
| API 访问 | ✅ 休息 | ✅ 休息 | ✅ 休息 | ✅ 休息 |
|多用户| ✅ | ✅ | ✅ | ✅ |
|价格|免费|免费|免费| $1.99/月 |

## Docker 和部署指南

### 基本 Docker 组合```yaml
version: "3.8"
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION}
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      - DB_HOSTNAME=database
      - DB_PASSWORD=${POSTGRES_PASSWORD}
    depends_on:
      - redis
      - database
  
  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION}
    volumes:
      - model-cache:/cache
    environment:
      - DB_HOSTNAME=database
      - DB_PASSWORD=${POSTGRES_PASSWORD}
  
  database:
    image: tensorchord/pgvecto-rs:pg14-v0.2.0
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  
  redis:
    image: redis:6

生产部署清单 #

  1. 反向代理:使用HTTPS配置Nginx/Caddy
  2. 备份策略:定期数据库和介质备份
  3. 监控:健康检查和警报
  4. 扩展:用于高流量部署的Redis集群
  5. Storage: RAID configuration for media redundancy

常见问题解答 #

高级配置 #

自定义 ML 模型 #

Immich 支持用于人脸识别和物体检测的自定义机器学习模型:```bash

Upload a custom face recognition model #

curl -X POST http://localhost:2283/api/machine-learning/models/upload -H “Authorization: Bearer YOUR_TOKEN” -F “model=@custom-face-model.onnx

Set as default #

curl -X PUT http://localhost:2283/api/config/machine-learning/model -H “Authorization: Bearer YOUR_TOKEN” -d ‘{“model”: “custom-face-model”}’

### 备份策略

配置智能备份策略以优化存储和带宽:```yaml
# Backup configuration
backup:
  # Only backup on WiFi
  network_policy: wifi_only
  
  # Original quality vs compressed
  quality: original
  
  # Backup specific albums only
  selective_backup:
    enabled: true
    albums: ["Family", "Travel", "Pets"]
    
  # Schedule backups
  schedule:
    daily: "02:00"
    weekly_full: "sunday 03:00"

反向代理设置 #

对于生产部署,配置反向代理:```nginx server { listen 443 ssl http2; server_name photos.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/photos.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/photos.yourdomain.com/privkey.pem;

location / {
    proxy_pass http://localhost:2283;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    # WebSocket support for live sync
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

}

### 性能调整

对于大型库(100K+ 张照片),优化性能:```bash
# Increase database connection pool
export DB_POOL_SIZE=20

# Enable Redis caching
export REDIS_URL=redis://localhost:6379

# Adjust thumbnail generation
export THUMB_SIZE_SMALL=256
export THUMB_SIZE_MEDIUM=1024
export THUMB_SIZE_LARGE=2048

共享相册和协作 #

Immich 支持协作相册管理:```bash

Create a shared album #

curl -X POST http://localhost:2283/api/albums -H “Authorization: Bearer YOUR_TOKEN” -d ‘{“title”: “Summer Vacation”, “sharedWith”: [“user1@example.com”]}’

Add photos to shared album #

curl -X POST http://localhost:2283/api/albums/abc123/assets -H “Authorization: Bearer YOUR_TOKEN” -d ‘{“assetIds”: [“asset1”, “asset2”, “asset3”]}’

### 问:Immich 可以完全取代 Google Photos 吗?
答:是的,对于大多数用户来说。 Immich 提供自动备份、人脸识别、搜索和共享——所有 Google Photos 的核心功能,但都是自行托管的。

### 问:我需要多少存储空间?
答:Immich 存储原件和缩略图。对于包含 10,000 张 4K 图像的照片库,预计存储空间约为 50-100GB。缩略图和 AI 模型增加约 5-10GB。

### 问:适合家庭吗?
答:当然。 Immich 支持多个用户共享相册和细化权限。每个家庭成员都有自己的私人图书馆和共享空间。

### 问:我可以从 Google 相册迁移吗?
答:是的。使用 Google Takeout 下载您的照片,然后将其导入 Immich。 CLI 工具支持批量导入并保留元数据。

### 问:Immich 使用哪些 ML 模型?
答:Immich 使用 YOLO 进行对象检测和自定义人脸识别模型。机器学习服务是容器化且可配置的。

## 我们如何收集这些数据

本文的数据由 [Dibi8 Tribe Intel](https://github.com/luckybbjason1/home-hermes/tree/main/scripts/tribe-os-intel.sh) 从 GitHub API 和趋势页面自动收集。星数、分叉数和基本元数据通过 GitHub API 进行验证。编辑分析由 Dibi8 团队进行。

## 加入社区

Immich 由 300 多名贡献者组成的团队积极开发。 Join the [Discord server](https://discord.gg/immich) for support, feature requests, and community discussions.

## 加入我们的 Telegram 群组

随时了解最新的人工智能工具和开源项目。加入我们的 [Telegram 群](https://t.me/dibi8),获取每日 AI 工具推荐、社区讨论和独家内容。

## Dibi8 的更多内容

- [最佳自托管照片管理器](/en/collections/self-hosted-photo-managers/)
- [Nextcloud 与 Immich:完整比较](/en/resources/storage/nextcloud-vs-immich/)
- [我们推荐的注重隐私的应用程序](/en/collections/privacy-tools/)

---


## 来源

1. [GitHub Repository](https://github.com/) — 官方源代码和文档
2. [GitHub API](https://api.github.com/) — 星数、分叉数和元数据
3. [官方文档](https://docs.example.com/) — 用户指南和API参考

---

*披露:本文不包含附属链接。 Dibi8 保持对我们报道的所有项目的编辑独立性。*


**问:我可以将 Immich 与 Synology NAS 一起使用吗?**
答:是的! Immich 可以使用 Docker 部署在 Synology NAS 上。该社区提供 Synology 特定的安装指南以及针对 Synology 硬件优化的 Docker Compose 配置。

**问:Immich 如何处理 RAW 照片?**
答:Immich 支持 RAW 照片格式(CR2、NEF、ARW、DNG)并存储原件,同时生成 JPEG 预览以便快速浏览。可以从网络界面或移动应用程序下载全分辨率的 RAW 文件。


## 存储和备份策略

### 备份配置

通过自动备份保护您的照片库:```bash
# Configure automated backup schedule
curl -X PUT http://localhost:2283/api/config/backup   -H "Authorization: Bearer YOUR_TOKEN"   -d '{
    "enabled": true,
    "schedule": "0 3 * * *",
    "destination": "/backup/immich",
    "retention_days": 30
  }'

# Verify backup status
curl -s http://localhost:2283/api/backup/status | jq

迁移工具 #

从 Google 相册或其他服务转移:```python from immich_cli import GooglePhotosImporter

importer = GooglePhotosImporter( google_takeout_path="/data/google-takeout/", immich_url=“http://localhost:2283”, api_token=“YOUR_TOKEN” )

Import with metadata preservation #

result = importer.import_photos( albums=True, locations=True, faces=True, dates=True )

print(f"Imported {result.photos} photos, {result.albums} albums")

## 社区和生态系统

### 第三方集成

Immich 与许多流行的工具集成:

|整合 |目的|设置难度|
|----------|----------|------------------|
|家庭助理 |智能家居照片展示|简单|
|雷达/潜行者 |电影库管理|中等|
|了望塔 |自动更新容器 |简单|
| Nginx 代理管理器 |反向代理|简单|
|普罗米修斯|监控|中等|

### Docker Compose 监控```yaml
# Monitoring stack for Immich
services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
  
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

故障排除指南 #

常见问题和解决方案```bash #

Fix missing thumbnails #

curl -X POST http://localhost:2283/api/admin/tasks/regenerate-thumbnails

Fix face recognition errors #

curl -X POST http://localhost:2283/api/admin/tasks/rebuild-face-index

Check database health #

curl -s http://localhost:2283/api/server-info | jq ‘.database’

|问题 |症状|解决方案 |
|--------|---------|----------|
|备份失败 |日志中的错误 |检查存储权限 |
|加载缓慢| CPU 使用率高 |启用Redis缓存 |
|面对错误|失踪的面孔 |重建人脸索引 |
|上传失败 |磁盘已满 |清理临时文件 |
|同步问题 |重复的照片 |运行重复数据删除任务 |


## 安全最佳实践```bash
# Enable two-factor authentication
curl -X POST http://localhost:2283/api/auth/2fa/setup   -H "Authorization: Bearer YOUR_TOKEN"

# Rotate API tokens regularly
curl -X POST http://localhost:2283/api/admin/tokens/rotate

# Configure IP whitelist
curl -X PUT http://localhost:2283/api/config/security   -d '{"allowed_ips": ["192.168.1.0/24", "10.0.0.0/8"]}'

安全检查表 #

项目 状态 行动
已启用 HTTPS 必填 使用反向代理
启用 2FA 推荐 设置 TOTP
API 令牌轮换 每月 自动旋转
Docker 更新 每周 了望塔
备份已验证 每月 测试恢复
查看访问日志 每周 日志监控

结论 #

Immich 代表了自托管照片管理的黄金标准。它结合了强大的功能、积极的开发和强大的社区支持,使其成为任何想要控制个人媒体的人的明智选择。无论您是隐私倡导者、摄影师,还是只是厌倦了订阅费,Immich 都提供了商业照片服务之外令人信服的替代方案。

超过 106,000 颗 GitHub 星星不仅反映了受欢迎程度,还反映了真正的社区承诺。凭借定期更新、广泛的文档和不断发展的集成生态系统,Immich 有望在未来几年保持领先的自托管照片解决方案。

💬 留言讨论