Dernière mise à jour 2026-07-15
Déploiement et environnement
À qui s’adresse cette page
Cette page s’adresse aux personnes déployant meridian. Les visiteurs quotidiens n’ont pas besoin de ces réglages. Une démo fonctionnelle ne nécessite que OPENWEATHER_API_KEY ; tout le reste est du stretch optionnel.
Environnement requis
OPENWEATHER_API_KEY — requis pour météo et geocode. DATABASE_PATH — fichier SQLite (défaut ./data/meridian.db) ; volume persistant en production pour que cache et abonnements survivent aux redémarrages. NEXT_PUBLIC_SHOW_HOME_STRETCH=0 masque annonce tableau de bord + Journal (activé par défaut). NEXT_PUBLIC_SHOW_DEMO_POPULAR_SEARCHES=0 désactive les villes populaires de démo quand l’API est vide.
Environnement image hero
UNSPLASH_ACCESS_KEY — optionnel ; premier fournisseur photo pour heroes de lieu (serveur uniquement, cache dans hero_image_cache). PEXELS_API_KEY — troisième fournisseur optionnel après Unsplash et Wikimedia Commons. NEXT_PUBLIC_CITY_HERO_OSM — mettre à 0 pour désactiver l’en-tête carte satellite (activé par défaut). NEXT_PUBLIC_CITY_HERO_STREET_VIEW=1 — opt-in Google Street View quand OSM est off. NEXT_PUBLIC_GOOGLE_MAPS_API_KEY — clé Maps Embed API optionnelle pour iframes Street View.
Environnement e-mail
Multi-ESP via connecteur actif dans platform_settings (sélecteur admin) : Resend (RESEND_API_KEY, RESEND_FROM_EMAIL), SendGrid (SENDGRID_API_KEY, SENDGRID_FROM_EMAIL), Amazon SES (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SES_REGION, AWS_SES_FROM_EMAIL) ou SMTP (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM_EMAIL, SMTP_SECURE). NEXT_PUBLIC_APP_URL — URL de base pour liens de désabonnement dans les e-mails (listé dans .env.example ; requis en production).
Cron et admin
CRON_SECRET — Bearer pour /api/cron/* (refusé si unset en production). ADMIN_SECRET — signe le cookie de session admin et chiffre les secrets connecteurs. ADMIN_PASSWORD — connexion root pour ADMIN_EMAIL uniquement. Contournement dev uniquement quand NODE_ENV=development, ALLOW_DEV_ADMIN_BYPASS=1 et ADMIN_SECRET unset. Voir docs/SECURITY.md. Planifier cron en externe : weekly-digests (ex. lundi matin), weather-alerts (ex. toutes les 15–30 minutes).
Environnement AdSense
GOOGLE_ADSENSE_CLIENT_ID (ca-pub-…). GOOGLE_ADSENSE_SLOT_DASHBOARD, SLOT_HERO, SLOT_RECENT, SLOT_CITY_DETAIL, SLOT_DEFAULT — IDs d’unités display. OAuth AdSense Management API : GOOGLE_ADSENSE_OAUTH_CLIENT_ID, GOOGLE_ADSENSE_OAUTH_CLIENT_SECRET, GOOGLE_ADSENSE_OAUTH_REDIRECT_URI optionnel (défaut ${NEXT_PUBLIC_APP_URL}/api/admin/adsense/oauth/callback). Garder l’ID client uniquement dans les secrets hôte. /ads.txt généré à l’exécution depuis l’ID client.
Environnement analytics
NEXT_PUBLIC_GA_MEASUREMENT_ID — chargeur GA4 optionnel quand consent.analytics est activé. NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION — balise meta Search Console.
Scripts npm
dev, build, start — Next.js. lint, test, test:watch, verify — porte qualité (verify = lint + test + build). copy:icons — Meteocons vers public (aussi postinstall). seed:checks — snapshots démo North England. backfill:city-slugs — remplir city_slug sur locations existantes. email — serveur aperçu React Email. audit:deps — npm audit --omit=dev.
Tables SQLite
Météo cœur : weather_snapshots, api_call_log. Lieux et checks : locations, location_weather_checks, weather_observations, weather_forecast_archive. Abonnements : subscriptions, subscription_send_log. Plateforme : platform_settings (singleton). Heroes : hero_image_cache. Monétisation : adsense_report_snapshots. Analytics : site_analytics_events. E-mail/CMS : email_templates, cms_pages. Admin : admin_users, admin_invites, admin_password_resets, admin_audit_log. Schéma dans src/lib/db/index.js. Première ouverture sème platform_settings avec refresh 1h, stale 2h, limite journalière 1000, soft block 950, warning 800, per-minute 60.
Middleware
src/middleware.js réécrit l’hôte docs.localhost vers /docs pour le sous-domaine documentation local. Pas de middleware auth sur les routes app principales.
Clés stockage navigateur
Depuis storage-keys.js : meridian:client-id, meridian:saved-cities, meridian:checked-cities, meridian:user-location, meridian:weather-cache, meridian:theme, meridian:cookie-consent, meridian:subscriptions, meridian:tier (réservé), meridian:consent, meridian:accessibility, meridian:city-detail-accordion, meridian:temperature-unit, meridian:preferred-locale, meridian:weather-refresh-mode. sessionStorage meridian_analytics_sid — ID session analytics first-party. Cookie admin meridian_admin_session (HttpOnly, défini serveur). Événement custom meridian:storage synchronise les hooks après écritures.