LunetricDocs

Déployer Lunetric

Démarrer une instance locale ou de production.

Connecter un agent

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 dev

Le 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 --prod

Le 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 start

Le 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=false

La 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_ID et GOOGLE_CLIENT_SECRET activent la connexion Google ; configurez aussi l'URL de callback documentée dans votre environnement.
  • MAPBOX_PUBLIC_TOKEN reçoit une clé publique Mapbox restreinte à vos domaines.
  • TRUST_GEO_HEADERS=true exige 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.