feat(infra) : branche le SDK Sentry (back + front) vers GlitchTip

Error tracking centralisé (ticket INFRA #146) : remontée des erreurs back
(Symfony) et front (Nuxt) vers l'instance GlitchTip auto-hébergée.

Backend :
- sentry/sentry-symfony ^5.10, bundle enregistré prod-only
- config/packages/sentry.yaml : handler Monolog niveau ERROR+, ignore les
  4xx/AccessDenied, pas d'APM, release = %app.version%
- services.yaml importe version.yaml pour exposer app.version au container
- .env : bloc SENTRY_DSN documenté (vide => SDK inerte)

Frontend :
- @sentry/nuxt ^10.61, module chargé uniquement si NUXT_PUBLIC_SENTRY_DSN défini
- runtimeConfig.public.sentry + source maps (hidden) + options d'upload
- sentry.client.config.ts : init côté client gardée par if (dsn)

DSN vides par défaut : aucune erreur n'est envoyée tant que les projets
GlitchTip inventory-api / inventory-front et leurs DSN ne sont pas configurés
en prod. Aucun secret commité.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-29 12:54:55 +02:00
parent 90ad851804
commit 517aefcd9b
11 changed files with 1359 additions and 18 deletions
+23 -2
View File
@@ -41,7 +41,20 @@ export default defineNuxtConfig({
lucide: () => import('@iconify-json/lucide/icons.json').then(i => i.default)
}
}
]
],
// Error tracking → GlitchTip. Module chargé uniquement si un DSN est fourni
// (build prod) ; en dev sans DSN, aucun overhead Sentry. Les options d'upload des
// source maps sont passées en ligne (fournies au build via secrets CI).
...(process.env.NUXT_PUBLIC_SENTRY_DSN
? [['@sentry/nuxt/module', {
sourceMapsUploadOptions: {
url: process.env.SENTRY_URL,
org: process.env.SENTRY_ORG,
project: process.env.SENTRY_PROJECT,
authToken: process.env.SENTRY_AUTH_TOKEN
}
}] as [string, Record<string, unknown>]]
: [])
],
runtimeConfig: {
apiBaseUrl: process.env.NUXT_API_BASE_URL
@@ -57,9 +70,17 @@ export default defineNuxtConfig({
enableDebug: process.env.NUXT_PUBLIC_ENABLE_DEBUG || 'false',
enableAnalytics: process.env.NUXT_PUBLIC_ENABLE_ANALYTICS || 'false',
csrfToken: process.env.NUXT_PUBLIC_CSRF_TOKEN || '',
logLevel: process.env.NUXT_PUBLIC_LOG_LEVEL || 'warn'
logLevel: process.env.NUXT_PUBLIC_LOG_LEVEL || 'warn',
sentry: {
// DSN du projet GlitchTip "inventory-front" (vide => SDK inerte).
dsn: process.env.NUXT_PUBLIC_SENTRY_DSN || '',
environment: process.env.NODE_ENV || 'development'
}
}
},
// Source maps "hidden" : générées et uploadées vers GlitchTip pour des stacktraces
// lisibles, sans exposer les .map au navigateur.
sourcemap: { client: 'hidden' },
vite: {
plugins: [tailwindcss()],
server: {