Configuration et sauvegardes
Configurer les services serveur et restaurer les données de Lunetric.
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
| Variable | Usage et valeur par défaut |
|---|---|
APP_ORIGIN | Origine publique exacte, utilisée par les liens, les cookies et les contrôles d’origine |
HOST, PORT | Interface et port ; 127.0.0.1 et 3001 en local |
DATABASE_URL | PostgreSQL externe ; absent : PGlite dans DATA_DIR |
DATA_DIR | Base embarquée, .data/pg par défaut ; un seul processus |
ENCRYPTION_KEY | Clé durable obligatoire en production, au moins 32 caractères ; préserver la clé d’origine |
SERVE_FRONTEND | false pour backend Railway seul, qui exige PostgreSQL externe |
BACKEND_ORIGIN, PROXY_SECRET | Middleware Vercel ; même secret partagé sur le backend |
ENABLE_DEMO | false désactive la création des données de démo |
EVENT_LIMIT, BOT_EVENT_LIMIT | Quotas mensuels indépendants, 100000 par défaut |
RETENTION_DAYS | Conservation des événements analytics et robots, 1095 jours par défaut |
TRUST_GEO_HEADERS | true seulement derrière un proxy fiable qui remplace les headers |
SEO_ORIGIN | Origine 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
| Variables | Service |
|---|---|
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | OAuth Google ; callback APP_ORIGIN/api/auth/google/callback |
MAPBOX_PUBLIC_TOKEN | Carte Mapbox ; jeton public restreint à vos domaines |
EMAIL_API_KEY, EMAIL_FROM | Resend ; domaine d’envoi vérifié, clé limitée à ce domaine |
DOCS_AI_API_KEY, DOCS_AI_MODEL | Assistant des guides publics via OpenRouter ; les deux sont nécessaires |
ANALYTICS_AI_API_KEY, ANALYTICS_AI_MODEL | Assistant des rapports agrégés via OpenRouter |
REPLAY_ENABLED | true autorise le replay serveur, désactivé par défaut |
REPLAY_S3_BUCKET, REPLAY_S3_REGION | Stockage replay privé requis en production |
REPLAY_S3_ENDPOINT, REPLAY_S3_ACCESS_KEY, REPLAY_S3_SECRET_KEY | Endpoint S3 compatible et identifiants limités au bucket |
INDEXNOW_KEY | Clé 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-restoredLa 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.