Some checks failed
Tests unitaires / Brain (Python · pytest + couverture) (push) Successful in 21s
Tests unitaires / Web (Angular · vitest + couverture) (push) Successful in 30s
Tests unitaires / Core (Java · mvn test + JaCoCo) (push) Successful in 2m22s
Build & Push Images / build (brain) (push) Successful in 1m16s
E2E Tests / e2e (push) Failing after 5m24s
Build & Push Images / build (core) (push) Successful in 3m5s
Build & Push Images / build-switcher (push) Successful in 50s
Build & Push Images / build (web) (push) Successful in 1m56s
Correction de tests coté java + config Suppression de classes inutilisées coté Angular
138 lines
7.1 KiB
Properties
138 lines
7.1 KiB
Properties
# Configuration du serveur
|
|
server.port=8080
|
|
|
|
# On garde Tomcat (Web MVC) comme serveur primaire, malgré la présence
|
|
# de WebFlux (utilisé uniquement pour WebClient côté adapter SSE vers le Brain).
|
|
spring.main.web-application-type=servlet
|
|
|
|
# Pas de timeout sur les requetes async (StreamingResponseBody, SSE).
|
|
# Le defaut Tomcat coupe a 30s, ce qui interrompt le streaming d'un pull
|
|
# de modele Ollama (peut durer des dizaines de minutes pour un GGUF de 10+ Go).
|
|
# -1 = pas de timeout, on s'appuie sur la fermeture cote client ou cote upstream.
|
|
spring.mvc.async.request-timeout=-1
|
|
|
|
# Configuration de la base de donnees PostgreSQL
|
|
# Valeurs surchargeables via variables d'env (cf. docker-compose.yml).
|
|
# En dev local, creez un fichier .env a la racine de core/ OU definissez les
|
|
# variables dans votre IDE (Run Configuration > Environment variables).
|
|
spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/loremind}
|
|
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:}
|
|
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:}
|
|
spring.datasource.driver-class-name=org.postgresql.Driver
|
|
|
|
# Configuration JPA / Hibernate
|
|
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
|
|
# Le schema est desormais gere par Flyway (migrations versionnees), plus par
|
|
# Hibernate. ddl-auto=validate : Hibernate ne MODIFIE plus le schema, il verifie
|
|
# juste au demarrage que les entites correspondent au schema cree par Flyway
|
|
# (filet de securite contre les derives entites<->migrations).
|
|
spring.jpa.hibernate.ddl-auto=validate
|
|
spring.jpa.show-sql=true
|
|
spring.jpa.properties.hibernate.format_sql=true
|
|
# Fixe explicitement open-in-view (defaut Spring = true) : meme comportement,
|
|
# mais supprime l'avertissement "spring.jpa.open-in-view is enabled by default".
|
|
spring.jpa.open-in-view=true
|
|
|
|
# ============================================================================
|
|
# Flyway : migrations de schema versionnees (src/main/resources/db/migration).
|
|
# ============================================================================
|
|
# baseline-on-migrate : sur une base EXISTANTE (prod deja peuplee, sans table
|
|
# d'historique Flyway), Flyway l'estampille a la version baseline SANS rejouer
|
|
# V1 -> les donnees existantes sont preservees. Sur une base VIDE (install
|
|
# neuve), Flyway joue V1__baseline.sql normalement pour creer le schema.
|
|
spring.flyway.enabled=true
|
|
spring.flyway.baseline-on-migrate=true
|
|
spring.flyway.baseline-version=1
|
|
spring.flyway.baseline-description=Baseline (schema pre-Flyway, gere jusque-la par ddl-auto)
|
|
|
|
# Configuration CORS pour autoriser le Frontend Angular
|
|
spring.web.cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:4200}
|
|
spring.web.cors.allowed-methods=GET,POST,PUT,DELETE,OPTIONS
|
|
spring.web.cors.allowed-headers=*
|
|
spring.web.cors.allow-credentials=true
|
|
|
|
# Configuration du Brain (service IA Python)
|
|
brain.base-url=${BRAIN_BASE_URL:http://localhost:8000}
|
|
brain.timeout-seconds=120
|
|
# Timeout dedie a l'import de PDF (regles/campagne) : map-reduce LLM sur un
|
|
# livre entier => potentiellement plusieurs minutes. Surchargeable via env.
|
|
brain.import-timeout-seconds=${BRAIN_IMPORT_TIMEOUT_SECONDS:600}
|
|
|
|
# Secret partage Core <-> Brain (auth inter-service via entete X-Internal-Secret).
|
|
# OBLIGATOIRE en prod : si non defini, le Brain rejette toutes les requetes (fail-closed).
|
|
brain.internal-secret=${BRAIN_INTERNAL_SECRET:}
|
|
|
|
# Credentials admin pour /api/settings/** (HTTP Basic).
|
|
# Si ADMIN_PASSWORD n'est pas defini, l'application refuse de demarrer.
|
|
admin.username=${ADMIN_USERNAME:admin}
|
|
admin.password=${ADMIN_PASSWORD:}
|
|
|
|
# Repertoire de base de l'instance (donnees locales hors Docker).
|
|
# Utilise par le profil "local" (H2 fichier, stockage images filesystem...).
|
|
loremind.home=${LOREMIND_HOME:${user.home}/.loremind}
|
|
|
|
# Backend de stockage des binaires d'images (port ImageStorage) :
|
|
# - minio : MinIO/S3 (defaut — deploiement Docker/serveur)
|
|
# - filesystem : systeme de fichiers local (mode local-first / jpackage)
|
|
storage.backend=${STORAGE_BACKEND:minio}
|
|
# Racine du stockage filesystem (ignoree si storage.backend=minio).
|
|
storage.filesystem.path=${STORAGE_FS_PATH:${loremind.home}/images}
|
|
|
|
# Configuration MinIO (Shared Kernel images - Object Storage)
|
|
# Le bucket est cree automatiquement par le service minio-init (docker-compose up -d).
|
|
# Defaults OK pour dev local ; overrides en prod via env.
|
|
minio.endpoint=${MINIO_ENDPOINT:http://localhost:9000}
|
|
minio.access-key=${MINIO_ACCESS_KEY:minioadmin}
|
|
minio.secret-key=${MINIO_SECRET_KEY:minioadmin}
|
|
minio.bucket=${MINIO_BUCKET:loremind-images}
|
|
|
|
# Limites d'upload multipart (MB) : images ET PDF de regles. Releve a 64 Mo
|
|
# pour accepter les livres de regles illustres (le Brain plafonne aussi a 60 Mo).
|
|
spring.servlet.multipart.max-file-size=64MB
|
|
spring.servlet.multipart.max-request-size=64MB
|
|
|
|
# Mode demo : masque Settings/Export cote front et bloque les PUT /api/settings
|
|
# cote serveur. Activer via DEMO_MODE=true sur les deploiements publics.
|
|
app.demo-mode=${DEMO_MODE:false}
|
|
|
|
# Detection des mises a jour des conteneurs Docker (registry HTTP API + Watchtower).
|
|
# Feature desactivee si UPDATE_CHECK_WATCHTOWER_TOKEN est vide.
|
|
update-check.registry=${UPDATE_CHECK_REGISTRY:}
|
|
update-check.images=${UPDATE_CHECK_IMAGES:}
|
|
update-check.watchtower-url=${WATCHTOWER_URL:http://watchtower:8080}
|
|
update-check.watchtower-token=${WATCHTOWER_TOKEN:}
|
|
|
|
# ============================================================================
|
|
# Licensing (canal beta gate par Patreon)
|
|
# ============================================================================
|
|
# URL du relais OAuth Patreon (Cloudflare Workers). En prod : valeur par defaut.
|
|
licensing.relay.base-url=${LICENSING_RELAY_BASE_URL:https://loremind-auth.igmlcreation.fr}
|
|
|
|
# Cle publique Ed25519 (PEM SPKI) qui verifie les JWT emis par le relais.
|
|
# En prod : chargee automatiquement depuis classpath:licensing/jwt-public-key.pem
|
|
# (embarquee dans le binaire). Cette propriete sert UNIQUEMENT a la rotation
|
|
# de cle ou aux tests : si LICENSING_JWT_PUBLIC_KEY est defini, il prevaut
|
|
# sur le fichier embarque.
|
|
licensing.jwt.public-key=${LICENSING_JWT_PUBLIC_KEY:}
|
|
licensing.jwt.expected-issuer=loremind-auth
|
|
licensing.jwt.expected-audience=loremind-instance
|
|
|
|
# Periode de tolerance apres expiration du JWT pendant laquelle l'instance
|
|
# garde l'acces beta meme si le relais est indisponible pour le refresh.
|
|
licensing.grace-period-days=14
|
|
# Avant J-N de l'expiration, le daemon tente un refresh.
|
|
licensing.refresh-before-expiry-days=2
|
|
|
|
# Identifiant stable de l'instance (UUID genere a la premiere connexion Patreon
|
|
# et conserve en base). Utilise dans le state OAuth + dans le JWT.
|
|
licensing.instance-id-file=${LICENSING_INSTANCE_ID_FILE:}
|
|
|
|
# Image beta : si la licence est valide ET le toggle canal beta active,
|
|
# UpdateCheckService check ces images en plus du canal stable.
|
|
licensing.beta.images=${LICENSING_BETA_IMAGES:igmlcreation/loremind-beta-core,igmlcreation/loremind-beta-brain,igmlcreation/loremind-beta-web}
|
|
|
|
# Chemin de sortie pour le docker config.json partage avec Watchtower.
|
|
# Volume Docker `docker-config` monte sur ce chemin dans Core, et sur
|
|
# `/shared/docker` dans Watchtower (DOCKER_CONFIG=/shared/docker).
|
|
licensing.docker-config-path=${LICENSING_DOCKER_CONFIG_PATH:/shared/docker/config.json}
|