Retour

Déploiement

Une instance Sarutobi réunit l'application Next.js, l'ingestion et le dashboard dans un même service. Elle s'appuie sur PostgreSQL et sur quelques tâches planifiées. Aucun Redis ni worker séparé n'est nécessaire pour commencer.

  1. Navigateurs et SDKenvoient les événements et ouvrent le dashboard
  2. Domaine HTTPStransmet les requêtes à l’application
  3. Application Next.jsingestion, dashboard, API et serveur MCP dans un même serviceOrdonnanceurappelle les routes /api/cron/* avec un jeton Bearer
  4. PostgreSQL 16 ou supérieurévénements, sessions, personnes et agrégats, avec sauvegardes automatiquesStockage des replaysfacultatif : un volume monté ou S3, jamais le disque du conteneur

1. Préparer les services

  • PostgreSQL 16 ou supérieur, avec sauvegardes automatiques.
  • Un domaine HTTPS qui transmet les requêtes vers l'application.
  • Un ordonnanceur capable d'appeler les routes cron avec un jeton Bearer.
  • Un serveur SMTP uniquement si vous activez les emails de compte ou le formulaire de contact.

2. Configurer l'instance

.env
DATABASE_URL=postgresql://sarutobi:mot-de-passe@postgres:5432/sarutobi
AUTH_SECRET=une-valeur-aleatoire-longue
AUTH_URL=https://analytics.example.com
NEXT_PUBLIC_APP_URL=https://analytics.example.com
CRON_SECRET=un-jeton-distinct

SIGNUP_MODE=closed
ALLOWED_SIGNUP_EMAILS=

Générez AUTH_SECRET et CRON_SECRET séparément. Changer AUTH_SECRET déconnecte toutes les sessions ouvertes.

3. Construire et migrer

terminal
bun install --frozen-lockfile
bun run test
bun run typecheck
bun run build:packages
bun run --cwd apps/web db:migrate
bun run --cwd apps/web build

Jouez les migrations avant de basculer l'application, puis démarrez le résultat Next.js avec NODE_ENV=production. Une migration importante doit rester compatible avec la version précédente afin de permettre un retour arrière du code.

4. Planifier les agrégations

crontab
*/10 * * * *  POST /api/cron/rollup
0 3 * * *      POST /api/cron/purge
0 4 25 * *     POST /api/cron/partitions

Chaque appel fournit Authorization: Bearer <CRON_SECRET>. Les courbes historiques lisent les agrégats : sans le cron de rollup, le temps réel continue de bouger mais les rapports prennent du retard.

5. Vérifier avant d'ouvrir

terminal
curl --fail https://analytics.example.com/api/health
curl --fail https://analytics.example.com/statut

Contrôlez ensuite la création d'un site, l'ingestion d'un event synthétique et l'apparition de ses agrégats. La page /statut reste publique, mais ne révèle ni secret ni structure interne.

Le runbook de production détaille le proxy, les conteneurs, les contrôles de santé et le retour arrière utilisés par l'instance officielle.