LunetricDocs

Configuration et sauvegardes

Configurer les services serveur et restaurer les données de Lunetric.

Connecter un assistant

Les variables ci-dessous concernent le serveur sauf indication contraire. Gardez les secrets hors du frontend et hors de Git. Le runtime du projet est Node.js 24 ou ultérieur. Topologies de déploiement.

Variables principales

VariableUsage et valeur par défaut
APP_ORIGINOrigine publique exacte, utilisée par les liens, les cookies et les contrôles d’origine
HOST, PORTInterface et port ; 127.0.0.1 et 3001 en local
DATABASE_URLPostgreSQL externe ; absent : PGlite dans DATA_DIR
DATA_DIRBase embarquée, .data/pg par défaut ; un seul processus
ENCRYPTION_KEYClé durable obligatoire en production, au moins 32 caractères ; préserver la clé d’origine
SERVE_FRONTENDfalse pour backend Railway seul, qui exige PostgreSQL externe
BACKEND_ORIGIN, PROXY_SECRETMiddleware Vercel ; même secret partagé sur le backend
ENABLE_DEMOfalse désactive la création des données de démo
EVENT_LIMIT, BOT_EVENT_LIMITQuotas mensuels indépendants, 100000 par défaut
RETENTION_DAYSConservation des événements analytics et robots, 1095 jours par défaut
TRUST_GEO_HEADERStrue seulement derrière un proxy fiable qui remplace les headers
SEO_ORIGINOrigine HTTPS canonique au build frontend et côté serveur ; https://lunetric.io par défaut

Changer ENCRYPTION_KEY après avoir enregistré des secrets empêche leur déchiffrement. Pour reprendre la clé locale, utiliser hex: suivi des 64 caractères de .data/encryption.key. Une clé sans préfixe est dérivée par SHA-256.

Services facultatifs

VariablesService
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETOAuth Google ; callback APP_ORIGIN/api/auth/google/callback
MAPBOX_PUBLIC_TOKENCarte Mapbox ; jeton public restreint à vos domaines
EMAIL_API_KEY, EMAIL_FROMResend ; domaine d’envoi vérifié, clé limitée à ce domaine
DOCS_AI_API_KEY, DOCS_AI_MODELAssistant des guides publics via OpenRouter ; les deux sont nécessaires
ANALYTICS_AI_API_KEY, ANALYTICS_AI_MODELAssistant des rapports agrégés via OpenRouter
REPLAY_ENABLEDtrue autorise le replay serveur, désactivé par défaut
REPLAY_S3_BUCKET, REPLAY_S3_REGIONStockage replay privé requis en production
REPLAY_S3_ENDPOINT, REPLAY_S3_ACCESS_KEY, REPLAY_S3_SECRET_KEYEndpoint S3 compatible et identifiants limités au bucket
INDEXNOW_KEYClé facultative de vérification IndexNow publiée au build

Sur Vercel + Railway, les clés IA, email, Google et S3 appartiennent au backend Railway ; elles n’ont pas de préfixe VITE_. Mapbox est un jeton public. Limites de replay.

Sauvegarder PGlite

Arrêtez le serveur avant de sauvegarder la base embarquée. Les outils refusent une base déjà ouverte par un autre processus.

npm run backup -- backups/lunetric.tar.gz
npm run restore -- backups/lunetric.tar.gz .data/pg-restored

La restauration refuse un dossier existant. L’archive contient des données privées et secrets chiffrés, avec permissions 0600. Conservez séparément la clé de chiffrement correspondante. Ensuite configurez DATA_DIR=.data/pg-restored, redémarrez et vérifiez compte, site, rapports et configuration Stripe.

Pour PostgreSQL externe, utilisez les outils du fournisseur ou pg_dump/pg_restore, et testez une restauration dans une base isolée. Les sauvegardes des objets replay et leurs versions sont distinctes de la base SQL.

Contrôles d’exploitation

Vérifiez /health, une collecte consentie, une livraison webhook en sandbox et les files de traitement. Le worker Stripe tourne toutes les deux secondes ; replay et email chaque minute ; les règles d’alerte sont évaluées au plus une fois par heure. Une API permanente est nécessaire.

Le nettoyage horaire purge les événements selon la rétention et les lignes d’envoi email après huit jours. Les paiements n’ont pas de purge automatique. Surveillez les erreurs de worker et l’expiration réelle des objets du bucket, en filtrant les logs sans exposer de secrets.