Chapter 10

部署:从 dev server 到全球边缘

Mastra 编译产物就是一个 Node / Cloudflare / Vercel 可跑的 HTTP 服务。三种目标配三种 deployer,再挑好数据库,就能上线。

部署形态

目标deployer适合冷启动数据库
Node Server内置 dev server → 自行打包自托管、企业内网Postgres/MySQL
Cloudflare Workers@mastra/deployer-cloudflare全球边缘、高并发低成本~30msD1 / Turso / Upstash
Vercel@mastra/deployer-vercel已在 Vercel 的 Next.js 项目~200msSupabase / Upstash
Netlify@mastra/deployer-netlifyNetlify 生态~300msSupabase / Upstash

自托管 Node

# 打包
pnpm build          # 产出 .mastra/output/

# 跑
node .mastra/output/index.mjs
# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
EXPOSE 4111
CMD ["node", ".mastra/output/index.mjs"]

Cloudflare Workers

// src/mastra/index.ts
import { Mastra } from '@mastra/core';
import { CloudflareDeployer } from '@mastra/deployer-cloudflare';

export const mastra = new Mastra({
  agents: { ... },
  deployer: new CloudflareDeployer({
    scope: 'my-account-id',
    projectName: 'gufa-agent',
    routes: [{ pattern: 'agent.example.com/*', zone_name: 'example.com' }],
    workerNamespace: 'prod',
    auth: { apiToken: process.env.CF_API_TOKEN! },
  }),
});
# 部署
pnpm mastra deploy

# 或手动用 wrangler
pnpm build
cd .mastra/output && wrangler deploy
Cloudflare Workers 的限制
CPU 时间单请求默认 50ms,paid plan 最多 30s。长链 Workflow 要考虑 Durable Objects 或 Queues。原生 pg 客户端不支持 TCP,用 Hyperdrive 或 libsql/Turso。

Vercel

import { VercelDeployer } from '@mastra/deployer-vercel';

deployer: new VercelDeployer({
  teamSlug: 'my-team',
  projectName: 'gufa-agent',
  token: process.env.VERCEL_TOKEN!,
}),

产出是一组 Vercel Function,可以直接合并到现有 Next.js 项目的 /api/mastra/*

数据库选型

自托管 Postgres
事务、触发器、pgvector,企业首选。延迟稳定,backup/HA 成熟。
Supabase
托管 Postgres + pgvector + 行级权限 + 文件存储。一站式,适合中小团队。
Turso(libsql)
SQLite 兼容、全球边缘副本,延迟低。向量/检索功能完备。Cloudflare Workers 搭档。
Cloudflare D1 + Vectorize
纯 CF 生态。D1 目前写入偏慢,Vectorize 便宜。小规模 RAG 可用。
Upstash Redis + Vector
HTTP 协议,Serverless 友好,按请求计费。Memory 热数据层常用。
专用向量库
Pinecone / Qdrant / Weaviate。规模 > 500 万 chunks 时分离出去。

成本速算(每月)

小项目(万级请求)中等(百万级)
LLM(GPT-4o-mini)$10-30$500-2000
Embedding$1-5$30-100
Cloudflare Workers$0(免费额度)$5-20
Turso/Supabase$0-25$50-200
向量库并入主库Pinecone $70+
LangfuseHobby 免费Team $50+

可靠性清单

监控基线

灰度与 A/B

// 按 userId 分桶 10% 走新 prompt
const variant = (hash(userId) % 10 === 0) ? 'v2' : 'v1';
const agent = mastra.getAgent(variant === 'v2' ? 'qa-v2' : 'qa-v1');
const { text, evals } = await agent.generate(input);
track({ variant, score: evals.relevancy.score, userId });

variant 打到 Langfuse tag,看两组的满意度/成本/延迟分布差异。

生产部署 checklist

全书终章

愿你的 Agent 少产幻觉,多产价值。