本文档解释了 Immich 中使用的构建系统,详细说明了各种组件是如何构建和打包以进行部署的。它着重于基于 Docker 的构建过程,该过程创建了在开发和生产环境中使用的容器。有关自动化这些构建的 CI/CD 流水线的信息,请参阅 CI/CD 流水线。
Immich 使用基于 Docker 的多阶段构建系统,为每个组件创建优化的容器。该构建系统旨在
下图展示了作为 Immich 系统一部分构建的主要组件
来源: server/Dockerfile web/Dockerfile machine-learning/Dockerfile cli/Dockerfile
Immich 使用多阶段构建来优化容器大小,并分离构建时依赖项和运行时依赖项。以下是展示通用构建流程的图表
来源: server/Dockerfile machine-learning/Dockerfile
服务器组件构建过程是一个多阶段构建,其中包括编译服务器和 Web 应用程序
服务器 Dockerfile 使用一个基础开发镜像(ghcr.io/immich-app/base-server-dev),其中包含所有必要的构建工具。然后它会
dev 阶段安装依赖项prod 阶段构建服务器代码web 阶段构建 Web 界面ghcr.io/immich-app/base-server-prod 的最终生产镜像机器学习组件的构建过程最为复杂,因为它支持多种硬件加速选项
机器学习 Dockerfile 通过 DEVICE 参数进行参数化,该参数决定了要使用的硬件加速选项。构建过程
DEVICE 参数选择正确的构建器DEVICE 参数选择正确的运行时镜像来源: machine-learning/Dockerfile1-175
Web 组件的构建过程较为简单,主要用于开发
对于生产环境,Web 应用程序作为服务器构建过程的一部分进行构建。
来源: web/Dockerfile1-12 server/Dockerfile28-42
CLI 组件的构建是一个两阶段过程,首先构建 TypeScript SDK,然后构建 CLI 应用程序
Immich 为开发和生产提供了不同的构建配置
开发和生产构建之间的主要区别
来源: server/Dockerfile1-17 server/Dockerfile20-26 server/Dockerfile45-86
构建系统使用多个环境变量来配置构建过程
| 可变 | 描述 | 默认 | 用于 |
|---|---|---|---|
IMMICH_VERSION | 容器的镜像标签 | release | Docker Compose 文件 |
DEVICE | ML 组件的硬件加速 | cpu | 机器学习 Dockerfile |
BUILD_ID | 构建的唯一标识符 | - | 服务器和 ML Dockerfile |
BUILD_IMAGE | 构建的镜像名称 | - | 服务器和 ML Dockerfile |
BUILD_SOURCE_REF | 构建的 Git 引用 | - | 服务器和 ML Dockerfile |
BUILD_SOURCE_COMMIT | 构建的 Git 提交 | - | 服务器和 ML Dockerfile |
这些变量用于标记构建的镜像,并提供可在运行时访问的构建信息。
来源: server/Dockerfile65-78 machine-learning/Dockerfile156-169 docs/docs/install/environment-variables.md18-25
机器学习组件支持各种硬件加速选项
在构建过程中选择合适的硬件加速选项可以显著提高机器学习组件的性能。
来源: machine-learning/Dockerfile1-3 machine-learning/Dockerfile66-125
构建 Immich 项目
docker-compose -f docker-compose.dev.yml builddocker-compose -f docker-compose.prod.yml build构建过程将根据指定的配置创建所需的容器。
其他构建命令可以在项目的脚本或 Makefile 中找到。
来源: server/Dockerfile machine-learning/Dockerfile web/Dockerfile cli/Dockerfile