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
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
移动应用程序设置 #
- 从 App Store 或 Google Play 安装 Immich
- 指向您的服务器 URL
- 使用您喜欢的设置启用自动备份
- 选择要同步到设备的相册
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
生产部署清单 #
- 反向代理:使用HTTPS配置Nginx/Caddy
- 备份策略:定期数据库和介质备份
- 监控:健康检查和警报
- 扩展:用于高流量部署的Redis集群
- 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 有望在未来几年保持领先的自托管照片解决方案。
💬 留言讨论