本文档全面概述了 Immich 的系统架构,解释了各个组件如何交互以构成一个完整的自托管照片和视频管理解决方案。它涵盖了高层系统设计、组件关系以及应用程序内的数据流。
有关特定组件的详细信息,请参阅
Immich 被设计为一个遵循现代开发实践的微服务架构。该系统由多个独立的组件组成,它们协同工作以提供完整的照片和视频管理解决方案。
来源
Immich 由四个主要组件组成
来源
服务器组件是 Immich 的核心,采用渐进式 Node.js 框架 NestJS 构建。它为客户端应用程序提供 API 并处理主要的业务逻辑。
来源
服务器实现了几个关键组件
作业系统是 Immich 的关键组成部分,负责异步处理资源密集型任务。
来源
Web 界面采用 SvelteKit 构建,提供了响应式且功能丰富的用户体验。
来源
移动应用程序采用 Flutter 构建,可在 iOS 和 Android 平台上实现原生性能。
来源
机器学习组件是一个使用 Python 和 FastAPI 构建的独立服务,提供各种由 ML 驱动的功能。
来源
Immich 使用多种存储系统来管理不同类型的数据
来源
PostgreSQL 用于持久化数据存储,并通过 pgvecto.rs 扩展支持向量搜索。
| 数据库实体 | 目的 |
|---|---|
| 用户 | 用户账户和身份验证数据 |
| 资源 | 照片和视频的元数据 |
| 相册 | 包含共享选项的资产集合 |
| 人物/面部 | 面部识别数据 |
| 库 | 外部库定义 |
| 标签 | 资产标签和分类 |
| 向量嵌入 | 用于语义搜索的 CLIP 嵌入 |
来源
下图说明了资产处理期间的数据流
来源
Immich 设计为使用 Docker Compose 进行部署,并提供各种环境配置。
来源
来源
Immich 使用 GitHub Actions 进行持续集成和部署。
来源
Immich 在组件之间使用了几种通信机制
客户端和服务器之间的主要通信方式是通过 REST API。API 使用 OpenAPI 规范进行文档化。
通过 WebSocket 连接提供实时更新,允许客户端接收有关更改的即时通知。
后台处理通过 BullMQ 作业队列进行,该队列使用 Redis 作为消息代理。
来源
Immich 的架构遵循微服务方法,不同组件之间具有明确的关注点分离。这种设计实现了可扩展性、可维护性以及独立演进各个组件的能力。使用 NestJS、SvelteKit 和 Flutter 等现代框架,为构建强大的照片管理应用程序奠定了坚实的基础。
该系统通过其作业处理系统和机器学习功能,旨在高效处理大量照片和视频。基于 Docker 的部署使其易于在各种环境中进行安装和操作。
来源