Déployer Mastra sur Vercel
Utilisez @mastra/deployer-vercel pour déployer votre serveur Mastra sous forme de fonctions serverless sur Vercel. Le Deployer regroupe votre code et génère un répertoire .vercel/output conforme à la Build Output API de Vercel, prêt à être déployé sans configuration supplémentaire.
Ce guide traite du déploiement du serveur Mastra. Si vous utilisez un adaptateur de serveur ou un framework web, procédez au déploiement comme vous le feriez habituellement pour ce framework.
Avant de commencerLien direct vers Avant de commencer
Vous aurez besoin d’une application Mastra et d’un compte Vercel.
Les fonctions Vercel utilisent un système de fichiers éphémère. Tout stockage configuré, y compris celui de l’observabilité, doit donc être hébergé en externe. Si vous utilisez LibSQLStore avec une URL de fichier, adoptez une base de données hébergée à distance.
InstallationLien direct vers Installation
Ajoutez le package @mastra/deployer-vercel à votre projet :
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/deployer-vercel@latest
pnpm add @mastra/deployer-vercel@latest
yarn add @mastra/deployer-vercel@latest
bun add @mastra/deployer-vercel@latest
Importez VercelDeployer et définissez-le comme Deployer dans votre configuration Mastra :
import { Mastra } from '@mastra/core'
import { VercelDeployer } from '@mastra/deployer-vercel'
export const mastra = new Mastra({
deployer: new VercelDeployer(),
})
DéployerLien direct vers Déployer
Envoyez votre projet vers un Provider Git distant, par exemple GitHub, puis connectez votre dépôt à Vercel.
Par défaut, Vercel exécute
npm run build, qui déclenchemastra build. Si vous n’avez pas de script de build, ajoutez"build": "mastra build"à votrepackage.json.remarquePensez à définir les variables d’environnement nécessaires à l’exécution de votre application, par exemple la clé d’API de votre Provider de modèle.
Lorsque vous êtes prêt, cliquez sur Deploy et attendez la fin du premier déploiement.
Vérifiez votre déploiement à l’adresse
https://<your-project>.vercel.app/api/agents, qui doit renvoyer une liste JSON de vos Agents.Comme le serveur Mastra préfixe chaque endpoint avec
/api, vous devez l’ajouter à vos URL lorsque vous effectuez des requêtes.Vous pouvez maintenant appeler vos endpoints Mastra via HTTP.
attentionConfigurez l’authentification avant d’exposer publiquement vos endpoints.
StudioLien direct vers Studio
Vous pouvez déployer Studio avec votre API en activant l’option studio. Studio est déployé sous forme de ressources statiques servies depuis l’Edge CDN de Vercel et ne consomme donc aucune invocation de fonction.
import { Mastra } from '@mastra/core'
import { VercelDeployer } from '@mastra/deployer-vercel'
export const mastra = new Mastra({
deployer: new VercelDeployer({
studio: true,
}),
})
Après le déploiement, Studio est disponible à l’URL racine (https://<your-project>.vercel.app/) et l’API reste accessible sous /api/*. Studio se connecte automatiquement à l’API de la même origine ; aucune variable d’environnement supplémentaire n’est donc nécessaire.
Studio sert ses propres pages depuis le CDN, tandis que tous les autres chemins sont dirigés vers votre serveur. Les routes ajoutées avec registerApiRoute() restent ainsi accessibles à leurs propres chemins. Évitez d’attribuer à une route personnalisée un chemin déjà utilisé par Studio, comme /agents ou /workflows, car Studio les réserve en priorité.
Une fois Studio connecté à votre serveur Mastra, il dispose d’un accès complet à vos Agents, Workflows et Tools. Veillez à le sécuriser correctement en production, par exemple derrière une authentification ou un VPN, afin d’empêcher tout accès non autorisé.
Remplacements facultatifsLien direct vers Remplacements facultatifs
Le Deployer Vercel prend en charge des options de configuration écrites dans la configuration de fonction de la Vercel Output API. Consultez la référence de VercelDeployer pour découvrir les options disponibles, telles que maxDuration, memory et regions.
ObservabilitéLien direct vers Observabilité
Les fonctions serverless peuvent s’arrêter immédiatement après avoir renvoyé une réponse. Tout traitement asynchrone en attente, comme l’envoi de télémétrie, peut être interrompu avant son terme. Attendre flush() garantit l’envoi de toutes les traces avant l’arrêt de la fonction.
import type { VercelRequest, VercelResponse } from '@vercel/node'
import { mastra } from '../src/mastra'
export default async function handler(req: VercelRequest, res: VercelResponse) {
const { message } = req.body
const agent = mastra.getAgent('myAgent')
const result = await agent.generate([{ role: 'user', content: message }])
await mastra.observability.flush()
return res.json(result)
}
Le Deployer Vercel n’inclut aucun appel à flush. Si vous en avez besoin, vous devez encapsuler vous-même le Handler afin d’ajouter cette logique avant de renvoyer la réponse. Vous pouvez également déployer l’application sur un serveur de longue durée, tel qu’une machine virtuelle, où ce problème ne se pose pas.