# ============================================================================ # Profil "local" — mode local-first (application de bureau, sans Docker) # ============================================================================ # Active via : --spring.profiles.active=local (ou SPRING_PROFILES_ACTIVE=local) # # Objectif : faire tourner le Core sur le poste de l'utilisateur SANS aucune # infrastructure externe (ni Postgres, ni MinIO, ni Docker). Toutes les donnees # vivent sous loremind.home (defaut : ~/.loremind). # # Surcharge UNIQUEMENT ce qui differe du profil par defaut (application.properties) : # le reste (timeouts, multipart, licensing...) est herite tel quel. # --- Config utilisateur editable (port + identifiants admin) ---------------- # Charge ~/.loremind/loremind.properties s'il existe (cree au 1er lancement par # DesktopUserConfig). "optional:" = pas d'erreur s'il manque. Les valeurs y # definies (server.port, admin.username, admin.password) SURCHARGENT les defauts # ci-dessous (un import a une priorite superieure au fichier qui l'importe). # NB : le port effectif est de toute facon fixe par DesktopUserConfig au demarrage # (propriete systeme server.port, avec repli si le port est occupe). spring.config.import=optional:file:${user.home}/.loremind/loremind.properties # --- Serveur : ecoute UNIQUEMENT sur la boucle locale ----------------------- # App de bureau mono-utilisateur : jamais exposee au reseau (securite). Et ca # rend coherent le test "port libre" de DesktopUserConfig (qui teste 127.0.0.1) # avec l'adresse de bind reelle de Tomcat -> le repli sur port libre fonctionne # meme si une autre appli occupe le port sur une autre interface. server.address=127.0.0.1 # --- Base de donnees : H2 en mode fichier, compatibilite PostgreSQL --------- # MODE=PostgreSQL : H2 interprete le SQL PostgreSQL -> les MEMES migrations # Flyway (ecrites en SQL Postgres) tournent ici comme sur la prod Postgres. # Aligne aussi la casse des identifiants (minuscules, comme PG). # DB_CLOSE_ON_EXIT=FALSE : Spring/Hikari pilote la fermeture (pas le shutdown # hook H2). AUTO_SERVER volontairement absent (interdit avec DB_CLOSE_ON_EXIT, # et inutile pour un process unique). # NON_KEYWORDS=VALUE : PostgreSQL accepte `value` comme nom de colonne non-quote # (colonne de playthrough_flag), mais H2 le reserve par defaut -> on le relache # pour que le baseline SQL Postgres (non-quote) passe aussi sur H2. Ajouter # d'autres mots ici si une migration future utilise un identifiant reserve H2. spring.datasource.url=jdbc:h2:file:${loremind.home}/db/loremind;MODE=PostgreSQL;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=VALUE spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # Schema gere par Flyway (cf. application.properties) ; Hibernate valide seulement. spring.jpa.hibernate.ddl-auto=validate spring.jpa.show-sql=false # --- Stockage des images : systeme de fichiers ----------------------------- storage.backend=filesystem storage.filesystem.path=${loremind.home}/images # --- Brain : service IA Python lance en sidecar sur le poste --------------- brain.base-url=http://localhost:8000 # Secret partage Core <-> Brain. En local il n'a pas de role securitaire fort # (tout est sur localhost, mono-utilisateur) mais le Brain est fail-closed : # il DOIT etre defini des deux cotes. Le lanceur de sidecar (BrainSidecar) # propage cette meme valeur au process Brain via la variable BRAIN_INTERNAL_SECRET. brain.internal-secret=${BRAIN_INTERNAL_SECRET:loremind-local-secret} # --- Brain en sidecar (lance par le Core) ---------------------------------- # Le Core demarre lui-meme le process Brain (pas de Docker en local). brain.sidecar.enabled=${BRAIN_SIDECAR_ENABLED:true} # Le Brain ecrit son dossier data/ (index vectoriel, settings) sous ce dossier. brain.sidecar.working-dir=${loremind.home}/brain # Commande de lancement. VIDE par defaut : le dev qui lance le Brain a la main # n'est pas perturbe. Le packaging (jpackage) la renseigne vers l'exe PyInstaller. # - Empaquete : chemin de l'exe, ex. C:/Program Files/LoreMind/brain/loremind-brain.exe # - Dev : python,-m,uvicorn,app.main:app,--host,127.0.0.1,--port,8000 # (avec brain.sidecar.working-dir pointant sur le dossier brain/) brain.sidecar.command=${BRAIN_SIDECAR_COMMAND:} # --- Admin (localhost uniquement) ------------------------------------------ # Application mono-utilisateur sur le poste : l'utilisateur EST l'admin. # Defauts admin/admin, SURCHARGEABLES par l'utilisateur dans # ~/.loremind/loremind.properties (cf. spring.config.import ci-dessus). admin.username=${ADMIN_USERNAME:admin} admin.password=${ADMIN_PASSWORD:admin} # --- Front servi par le Core (meme origine) -------------------------------- # Le front Angular est servi en statique par le Core (cf. LocalWebConfig), # donc tout est sur http://localhost:8080 : CORS sans objet, mais on autorise # l'origine locale par securite si un dev lance Angular separement. spring.web.cors.allowed-origins=http://localhost:8080,http://localhost:4200 # Mode demo desactive (instance personnelle complete). app.demo-mode=false # --- Licensing / Patreon : desactive en mode bureau ------------------------ # Le gating par IMAGE Docker (canal beta tire d'un registry prive) n'a aucun # sens hors Docker. On coupe toute la machinerie : daemon de refresh no-op, # /api/license/* renvoie enabled=false, et l'UI masque la section Patreon. # La distribution beta desktop se fait par installeur beta via Patreon, pas # par une connexion in-app. licensing.enabled=false # --- Verification des mises a jour (bureau) -------------------------------- # Interroge l'API GitHub Releases (derniere release STABLE) au demarrage ; si # une version plus recente existe, l'icone systray le signale (bulle + item # « Telecharger »). Pas de mise a jour auto : l'utilisateur telecharge et lance # le nouvel installeur. Mettre a false pour desactiver toute requete sortante. desktop.update.enabled=${DESKTOP_UPDATE_CHECK:true} desktop.update.releases-api-url=https://api.github.com/repos/IGMLcreation/LoreMind/releases/latest