# Installation de LoreMindMJ Guide pas-a-pas pour deployer LoreMindMJ chez toi. Compte 5 a 10 minutes selon ta connexion. ## 1. Prerequis - **Docker Desktop** ([Windows](https://www.docker.com/products/docker-desktop/) / [Mac](https://www.docker.com/products/docker-desktop/)) ou **Docker Engine + Compose v2** (Linux). Verifie avec : ``` docker --version docker compose version ``` Compose v2 est requis (la commande est `docker compose`, pas `docker-compose`). - **Un fournisseur de LLM**, au choix : - **[Ollama](https://ollama.com/)** installe sur ta machine hote (gratuit, local, necessite ~6 Go de RAM libre pour les modeles recommandes). - **Une cle API [1min.ai](https://1min.ai)** (cloud, facture a l'usage, aucune installation supplementaire requise). - Environ **2 Go d'espace disque** pour les images Docker (base, Java, Python, nginx, MinIO) + la taille de tes modeles Ollama si tu choisis le local. ## 2. Recuperer les fichiers Telecharge les deux fichiers suivants depuis la [derniere release](https://git.igmlcreation.fr/ietm64/LoreMindMJ/releases) dans un dossier dedie (par exemple `~/loremind/`) : - `docker-compose.yml` - `.env.example` Tu n'as pas besoin du code source — les images sont pre-construites et publiees sur le registry Gitea `git.igmlcreation.fr` (pas Docker Hub). Le premier `docker compose pull` les telechargera automatiquement. ## 3. Configurer `.env` Renomme `.env.example` en `.env` et ouvre-le dans un editeur texte. **Trois variables sont obligatoires** — sans elles, `docker compose up` refusera de demarrer (c'est volontaire pour eviter un deploiement non-securise par defaut) : ### `POSTGRES_PASSWORD` Mot de passe de la base de donnees. Choisis-en un fort, tu n'auras pas besoin de le retenir (seuls les conteneurs l'utilisent). ### `ADMIN_PASSWORD` Protege l'ecran **Parametres** de l'application via HTTP Basic. Tu le taperas dans une popup du navigateur quand tu voudras changer de modele LLM ou de cle API. Le nom d'utilisateur par defaut est `admin` (modifiable via `ADMIN_USERNAME`). ### `BRAIN_INTERNAL_SECRET` Secret partage entre le service Java (`core`) et le service Python (`brain`) qui empeche toute requete externe d'atteindre directement le Brain. Genere une valeur aleatoire de 64 caracteres hex : ``` openssl rand -hex 32 ``` Sous Windows sans openssl : utilise un generateur en ligne type "random hex string 64 chars" ou PowerShell : ```powershell -join ((48..57) + (97..102) | Get-Random -Count 64 | % {[char]$_}) ``` ### Variables optionnelles utiles - `WEB_PORT` (defaut `8081`) — port d'ecoute de l'UI. - `ADMIN_USERNAME` (defaut `admin`) — nom d'utilisateur de la popup Parametres. - `LLM_PROVIDER` (defaut `ollama`) — choix du provider (voir section 5). Les autres variables (`MINIO_USER`/`PASSWORD`, `POSTGRES_DB`/`USER`) ont des valeurs par defaut raisonnables pour un deploiement personnel — tu peux les laisser telles quelles. ## 4. Lancer la stack Depuis le dossier contenant `docker-compose.yml` et `.env` : ``` docker compose up -d ``` Le premier demarrage telecharge les images (~1 a 2 Go au total) et initialise la base. Compte 2 a 5 minutes selon ta connexion. Tu peux suivre la progression : ``` docker compose logs -f ``` (`Ctrl+C` pour quitter l'affichage, les services continuent de tourner en arriere-plan.) Une fois les services marques `healthy`, ouvre **http://localhost:8081** dans ton navigateur. Bon jeu ! ### Verifier que tout tourne ``` docker compose ps ``` Tu devrais voir 5 conteneurs en etat `Up` / `healthy` : `loremind-postgres`, `loremind-minio`, `loremind-core`, `loremind-brain`, `loremind-web`. Le conteneur `loremind-minio-init` s'arrete tout seul apres avoir cree le bucket d'images — c'est normal. ## 5. LLM : Ollama ou 1min.ai ? ### Ollama (local, gratuit) Installe Ollama sur ta machine hote (pas dans Docker), puis telecharge un modele : ``` ollama pull gemma4:26b ``` Dans `.env` : ``` LLM_PROVIDER=ollama LLM_MODEL=gemma4:26b OLLAMA_BASE_URL=http://host.docker.internal:11434 ``` `host.docker.internal` permet au conteneur `brain` d'atteindre Ollama qui tourne sur ton hote. Ca marche nativement sur Docker Desktop (Mac / Windows) ; sur Linux, le `docker-compose.yml` ajoute un `extra_hosts` qui fait la meme chose. ### 1min.ai (cloud, paye) Dans `.env` : ``` LLM_PROVIDER=onemin ONEMIN_API_KEY=sk-... ONEMIN_MODEL=gpt-4o-mini ``` ### Changer a chaud Tu peux aussi changer le provider, le modele et la cle API a chaud depuis l'ecran **Parametres** de l'appli — tes modifications sont persistees dans un volume Docker et survivent aux redemarrages. Les variables d'env du `.env` servent uniquement de valeurs initiales au premier demarrage. ## 6. Mise a jour ``` docker compose pull docker compose up -d ``` Les donnees (base Postgres, images MinIO, settings Brain) sont dans des volumes Docker et survivent aux mises a jour. ## 7. Sauvegarde Les donnees sont dans trois volumes Docker : - `loremindmj_postgres-data` — tout le contenu applicatif (lores, campagnes, pages, templates, branches, etc.) - `loremindmj_minio-data` — les images uploadees - `loremindmj_brain-data` — les settings IA (provider courant, cle API 1min.ai) ### Dump SQL de la base ``` docker compose exec postgres pg_dump -U loremind loremind > backup.sql ``` ### Sauvegarde complete des volumes Arrete d'abord la stack pour garantir la coherence : ``` docker compose stop docker run --rm -v loremindmj_postgres-data:/data -v $(pwd):/backup alpine tar czf /backup/postgres-data.tar.gz -C /data . docker run --rm -v loremindmj_minio-data:/data -v $(pwd):/backup alpine tar czf /backup/minio-data.tar.gz -C /data . docker compose start ``` (Sous Windows PowerShell, remplace `$(pwd)` par `${PWD}`.) ## 8. Problemes frequents - **Port 8081 deja pris** — change `WEB_PORT=8082` (ou autre libre) dans `.env`, puis `docker compose up -d`. - **`docker compose up` echoue avec "set POSTGRES_PASSWORD in .env" / "set ADMIN_PASSWORD in .env" / "set BRAIN_INTERNAL_SECRET in .env"** — tu as oublie une des 3 variables obligatoires de l'etape 3. - **Popup "Ce site vous demande de vous connecter" sur l'ecran Parametres** — c'est normal. Utilise `admin` (ou ce que tu as mis dans `ADMIN_USERNAME`) et ton `ADMIN_PASSWORD`. - **"502 Bad Gateway" ou erreur IA dans l'UI quand tu cliques sur Assistant IA** — le Brain n'arrive pas a joindre le provider LLM. Verifie : - Ollama : `ollama serve` tourne-t-il ? Le modele est-il telecharge (`ollama list`) ? Le nom dans `LLM_MODEL` correspond-il exactement a un modele liste ? - 1min.ai : la cle API est-elle valide ? Le modele existe-t-il ? - Regarde les logs du Brain : `docker compose logs brain`. - **Un service ne demarre pas / reste `unhealthy`** — regarde ses logs : ``` docker compose logs ``` Services disponibles : `postgres`, `minio`, `core`, `brain`, `web`. - **Redemarrer un seul service** (ex : apres un changement de `.env`) : ``` docker compose up -d ``` Ou tout redemarrer : `docker compose restart`. - **Tout casser et repartir de zero (PERTE DE DONNEES)** : ``` docker compose down -v ``` Le `-v` supprime les volumes — tes lores, campagnes, images et settings sont perdus definitivement. - **"No such image" ou "pull access denied" au premier lancement** — le registry Gitea requiert peut-etre une authentification selon la visibilite des images. Verifie avec l'editeur du projet. ## 9. Ou sont les donnees ? - **Application** : http://localhost:8081 - **Base Postgres** : uniquement accessible via le reseau Docker interne (pas expose vers l'hote). - **MinIO** : uniquement accessible via le reseau Docker interne (les images transitent par le reverse-proxy Java sur `/api/images/{id}/content`). Le binding MinIO sur `127.0.0.1:9000/9001` du `docker-compose.override.yml` n'est utilise qu'en developpement. - **Brain Python** : uniquement accessible via le reseau Docker interne. Toute requete doit porter l'entete `X-Internal-Secret` ; elle est ajoutee automatiquement par le Core Java et n'est pas exposee au navigateur. ## 10. Desinstaller completement ``` docker compose down -v docker image rm git.igmlcreation.fr/ietm64/core git.igmlcreation.fr/ietm64/brain git.igmlcreation.fr/ietm64/web ``` Puis supprime le dossier contenant `docker-compose.yml` et `.env`.