Deployer
Deployer 通过打包代码、管理环境文件以及使用 Hono 框架提供应用,处理独立 Mastra 应用的部署。具体实现必须为特定部署目标定义 deploy 方法。
使用示例使用示例的直接链接
要创建自定义 deployer,可以扩展抽象 Deployer 类,并使用你的特定部署逻辑实现 deploy 方法。示例如下:
import { Deployer } from '@mastra/deployer'
class CustomDeployer extends Deployer {
constructor() {
super({ name: 'custom-deployer' })
}
async deploy(outputDirectory: string): Promise<void> {
// Prepare the output directory
await this.prepare(outputDirectory)
// Bundle the application
await this._bundle('server.ts', 'mastra.ts', outputDirectory)
// Custom deployment logic
}
}
参数参数的直接链接
构造函数参数构造函数参数的直接链接
args:
object
Deployer 的配置选项。
args.name:
string
deployer 实例的唯一名称。
deploy 参数deploy 参数的直接链接
outputDirectory:
string
输出已打包且可部署应用的目录。
方法方法的直接链接
getEnvFiles:
() => Promise<string[]>
返回部署期间使用的环境文件列表。默认查找 '.env.production' 和 '.env' 文件。
deploy:
(outputDirectory: string) => Promise<void>
必须由子类实现的抽象方法。处理到指定输出目录的部署过程。
从 bundler 继承的方法从 bundler 继承的方法的直接链接
Deployer 类从 Bundler 类继承以下关键方法:
prepare:
(outputDirectory: string) => Promise<void>
通过清理输出目录并创建必要的子目录来准备输出目录。
writePackageJson:
(outputDirectory: string, dependencies: Map<string, string>) => Promise<void>
使用指定依赖在输出目录中生成 package.json 文件。
_bundle:
(serverFile: string, mastraEntryFile: string, outputDirectory: string, bundleLocation?: string) => Promise<void>
使用指定的服务器文件和 Mastra 入口文件打包应用。
核心概念核心概念的直接链接
部署生命周期部署生命周期的直接链接
Deployer 抽象类实现了结构化的部署生命周期:
- 初始化:使用名称初始化 deployer,并创建用于依赖管理的 Deps 实例。
- 环境设置:
getEnvFiles方法识别部署期间要使用的环境文件(.env.production、.env)。 - 准备:
prepare方法(继承自 Bundler)清理输出目录并创建必要的子目录。 - 打包:
_bundle方法(继承自 Bundler)打包应用代码及其依赖。 - 部署:由子类实现抽象
deploy方法,以处理实际部署过程。
环境文件管理环境文件管理的直接链接
Deployer 类通过 getEnvFiles 方法内置了环境文件管理支持。该方法:
- 按预定义顺序查找环境文件(.env.production、.env)
- 使用 FileService 查找第一个存在的文件
- 返回找到的环境文件数组
- 如果未找到环境文件,则返回空数组
getEnvFiles(): Promise<string[]> {
const possibleFiles = ['.env.production', '.env.local', '.env'];
try {
const fileService = new FileService();
const envFile = fileService.getFirstExistingFile(possibleFiles);
return Promise.resolve([envFile]);
} catch {}
return Promise.resolve([]);
}
打包与部署的关系打包与部署的关系的直接链接
Deployer 类扩展了 Bundler 类,在打包与部署之间建立了明确的关系:
- 打包是前置条件:打包是部署的前置步骤,会将应用代码封装为可部署格式。
- 共享基础设施:打包与部署共享依赖管理和文件系统操作等通用基础设施。
- 专用部署逻辑:打包侧重于封装代码,而部署会添加面向具体环境的逻辑来部署已打包的代码。
- 可扩展性:抽象
deploy方法支持为不同目标环境创建专用 deployer。