Déployer Lunetric
Démarrer une instance locale ou de production.
Démarrer localement
Depuis le dépôt Lunetric avec une version Node compatible avec les dépendances :
npm ci
cp .env.example .env
npm run devLe frontend est accessible sur http://127.0.0.1:5173, l'API sur le port 3001. La documentation est sous /docs, le MCP sous /mcp. Sans DATABASE_URL, une base PGlite locale est créée dans DATA_DIR.
Vercel + Railway
Le frontend et Fumadocs sont publiés sur Vercel ; l'API, le MCP et le traitement des paiements restent sur Railway avec PostgreSQL. middleware.ts transmet les appels serveur en conservant l'origine publique, les cookies et les signatures Stripe.
Sur Vercel, configurer BACKEND_ORIGIN avec le domaine HTTPS Railway et PROXY_SECRET, uniquement côté serveur. Sur Railway, configurer le même PROXY_SECRET, APP_ORIGIN avec le domaine Vercel, DATABASE_URL avec la référence du service PostgreSQL, une ENCRYPTION_KEY durable, HOST=0.0.0.0, PORT=3001 et SERVE_FRONTEND=false.
Le backend refuse les accès directs sans secret, excepté /health. TRUST_GEO_HEADERS=true permet d'utiliser les données IP approximatives de Vercel, remplacées à l'entrée puis transmises par le proxy authentifié. La collecte et le MCP utilisent le domaine Vercel ; les secrets n'ont pas de préfixe VITE_.
npm run build
npm run build:server
npm run configure:railway
npx @railway/cli up --service lunetric-api --environment production --detach
vercel --prodLe dépôt inclut Dockerfile, scripts/configure-railway.mjs et vercel.json. Prévoir une base dédiée, des sauvegardes et une seule instance API initialement. Pour un nouveau domaine Vercel, mettre à jour APP_ORIGIN, les restrictions Mapbox et l'URL de callback Google.
Serveur unique
npm ci
npm run build
npm startLe serveur Express sert le frontend, la documentation, le tracker, le MCP et les API sur la même origine. Conservez content/docs, public, server, shared et les dépendances runtime dans le déploiement, ainsi que dist.
Configurez au minimum :
APP_ORIGIN=https://analytics.votre-domaine.com
HOST=0.0.0.0
PORT=3001
ENCRYPTION_KEY=UNE_CLE_DURABLE_DE_32_CARACTERES
DATABASE_URL=postgresql://...
ENABLE_DEMO=falseLa clé de chiffrement doit être durable : sa perte empêche de déchiffrer les secrets Stripe. Utilisez un gestionnaire de secrets et HTTPS. Avec PGlite, utilisez un disque persistant et un seul processus ; avec plusieurs instances, utilisez PostgreSQL externe.
Services facultatifs
GOOGLE_CLIENT_IDetGOOGLE_CLIENT_SECRETactivent la connexion Google ; configurez aussi l'URL de callback documentée dans votre environnement.MAPBOX_PUBLIC_TOKENreçoit une clé publique Mapbox restreinte à vos domaines.TRUST_GEO_HEADERS=trueexige un proxy fiable qui contrôle les en-têtes de géolocalisation.
Les secrets Google et Stripe restent côté serveur. Le MCP utilise les clés de lecture créées dans l'interface ; aucun secret global supplémentaire n'est nécessaire.
Contrôles après déploiement
Vérifiez /health, /docs, /llms.txt, puis une collecte consentie sur un site réel. Connectez le MCP et appelez check_installation. Testez le webhook dans la sandbox avant d'activer un endpoint de production. Prévoyez des sauvegardes de la base et de la clé de chiffrement.