Ce que change la version v1.17.0 pour un usage agence
AnythingLLM supporte le mode multi-utilisateurs depuis plusieurs versions. La v1.17.0 (1er octobre 2026) affine ce système en ajoutant un troisième rôle — Manager — qui peut créer des espaces de travail, inviter des utilisateurs et gérer les documents sans pour autant accéder aux paramètres système comme les clés API ou la configuration LLM. Pour une agence, ce rôle permet de déléguer l'administration d'un client à un chef de projet sans exposer toute l'infrastructure. La diarisation de réunions s'appuie désormais sur Nemotron 3 pour la reconnaissance du locuteur et sur Parakeet Redux pour la transcription — deux modèles exécutables localement sur un VPS équipé d'un GPU, ou délégables à une API Nvidia. Google Vertex AI était déjà disponible depuis la v1.16.2 (22 septembre 2026) en tant que fournisseur LLM configurable directement depuis l'interface, sans patch manuel du fichier de configuration. Ces apports récents font de cette combinaison v1.16.2 + v1.17.0 la configuration la plus complète pour un usage multi-client structuré.
Prérequis avant de démarrer
- VPS 4 Go RAM minimum — 2 vCPU / 4 Go pour les API cloud, 4 vCPU / 8 Go si vous embarquez un modèle d'embedding local ou Parakeet Redux
- 20 Go de disque SSD — les vecteurs LanceDB et le cache de documents grossissent avec le corpus ; prévoir de la marge
- Docker et Docker Compose v2 — vérifiez avec
docker compose version(sans tiret) ; la v1 (tiret) ne supporte pas tous les healthchecks - Un sous-domaine dédié — par exemple
chat.votre-domaine.com; le port 3001 ne doit pas être exposé publiquement en direct - Un reverse proxy actif — Nginx ou Caddy pour le TLS Let's Encrypt et la limite d'upload de documents
- Une clé API LLM — OpenAI, Anthropic, Vertex AI ou un Ollama local déjà en cours d'exécution sur le VPS
- Le port 3001 libre — AnythingLLM l'utilise par défaut ; vérifiez avec
ss -tlnp | grep 3001avant de lancer
Déployer AnythingLLM v1.17.0 avec Docker Compose
Créer l'arborescence et régler les permissions
Connectez-vous en SSH et créez le dossier de travail avec
mkdir -p /opt/anythingllm/storage. AnythingLLM tourne avec l'UID 1000 à l'intérieur du conteneur ; sans correction de permission, le volume refuse l'écriture au premier démarrage. Appliquezchown -R 1000:1000 /opt/anythingllm/storage. Si vous avez préféréchmod -R 777, ça fonctionne mais élargit inutilement l'accès : préférez lechownciblé.Rédiger le fichier docker-compose.yml
Créez
/opt/anythingllm/docker-compose.ymlavec le contenu suivant. Le service s'appelleanythingllm, imagemintplexlabs/anythingllm:latest,restart: unless-stopped. Volumes :./storage:/app/server/storage. Ports :3001:3001(à fermer au pare-feu, seul le reverse proxy y accède). Variables d'environnement dans la sectionenv_file: .env. Réseau : créez un réseauproxypartagé avec votre reverse proxy pour éviter d'exposer le port 3001 sur l'interface publique.Rédiger le fichier .env
Créez
/opt/anythingllm/.envavec au minimum les trois variables suivantes.JWT_SECRET: une chaîne aléatoire d'au moins 32 caractères, générée paropenssl rand -hex 32— ne la changez jamais après le premier démarrage, tous les tokens de session sont invalidés.STORAGE_DIR:/app/server/storage(doit correspondre au chemin cible du volume).SERVER_PORT:3001. Ajoutez ensuite les variables de votre fournisseur LLM, par exempleLLM_PROVIDER=openaietOPEN_AI_KEY=sk-...pour OpenAI, ouLLM_PROVIDER=geminietGEMINI_API_KEY=...pour Vertex AI via l'adaptateur Gemini.Démarrer le conteneur et vérifier les logs
Depuis
/opt/anythingllm, lancezdocker compose up -d. Attendez 30 secondes puis vérifiez que le service écoute avecdocker compose logs --tail=50. Vous devez voir la ligneServer started on port 3001. Si le log afficheEACCES: permission denied, mkdir '/app/server/storage/...', lechownde l'étape 1 n'a pas été appliqué au bon chemin — recommencez l'étape 1 puisdocker compose restart.Configurer le reverse proxy et obtenir le certificat TLS
Avec Nginx, créez un vhost qui proxifie
https://chat.votre-domaine.comvershttp://127.0.0.1:3001. Ajoutezclient_max_body_size 100mdans le blocserverpour autoriser l'upload de gros PDF. Demandez le certificat aveccertbot --nginx -d chat.votre-domaine.com. Avec Caddy, la directivereverse_proxy localhost:3001suffit, le TLS est automatique.Créer le compte administrateur lors du premier accès
Ouvrez
https://chat.votre-domaine.comdans un navigateur. L'interface vous propose de créer le premier compte administrateur — ce compte est le seul à pouvoir modifier les clés API, le fournisseur LLM et les paramètres système. Choisissez un mot de passe fort, AnythingLLM ne propose pas de réinitialisation par e-mail en self-hosted sans configuration SMTP supplémentaire.Activer le mode multi-utilisateurs et inviter un second utilisateur
Dans l'interface Admin, allez dans Settings → Security → activez Multi-user mode. Un bouton Invite User apparaît dans le menu utilisateurs. Renseignez l'adresse e-mail, choisissez le rôle (Default ou Manager), et copiez le lien d'invitation généré. Le rôle Manager peut gérer les workspaces et les documents ; le rôle Default accède uniquement aux workspaces auxquels il est assigné.
Créer un espace de travail isolé et l'assigner à un utilisateur
Depuis le tableau de bord, cliquez sur New Workspace, nommez-le (par exemple
Client Dupont). Glissez vos PDF dans le workspace, cliquez sur Save & Embed pour lancer la vectorisation. Une fois l'embedding terminé, allez dans les paramètres du workspace → Manage Users et ajoutez uniquement les utilisateurs autorisés. Les utilisateurs non assignés ne voient pas ce workspace.Configurer Google Vertex AI comme fournisseur LLM
Dans Settings → LLM Provider, sélectionnez Google Gemini (qui utilise l'API Vertex AI sous le capot via l'adaptateur natif disponible depuis la v1.16.2). Renseignez votre clé API Google (
GEMINI_API_KEY) et choisissez le modèle. Si vous préférez l'authentification par compte de service GCP, exportezGOOGLE_APPLICATION_CREDENTIALSvers le chemin du fichier JSON dans votre.envet redémarrez le conteneur avecdocker compose restart.Mettre à jour sans perte de données
Pour passer à une version supérieure, arrêtez le conteneur avec
docker compose down, modifiez le tag de l'image dansdocker-compose.yml(exemple :mintplexlabs/anythingllm:v1.17.0), puis exécutezdocker compose pull && docker compose up -d. Vos données sont dans./storagemonté en volume : elles survivent à la mise à jour. Vérifiez les logs après redémarrage pour vous assurer qu'aucune migration de schéma n'a échoué.
Épinglez une version précise dans votre docker-compose.yml plutôt que d'utiliser le tag latest. La commande docker image ls mintplexlabs/anythingllm vous donne la version actuellement téléchargée. Ainsi, une mise à jour ne s'applique que quand vous le décidez, et vous pouvez revenir en arrière en changeant uniquement le tag puis en relançant docker compose up -d.
Gérer les espaces de travail et les rôles en pratique
Une fois le mode multi-utilisateurs activé, l'interface Admin expose trois vues distinctes : Users (liste des comptes, rôles, statut actif), Workspaces (liste globale avec le nombre de documents et de conversations) et Invites (liens d'invitation en attente). Pour une agence gérant dix clients, la bonne pratique est de créer un workspace par client, d'y rattacher un utilisateur Manager par client, et de laisser les collaborateurs en rôle Default avec accès limité aux seuls workspaces qui les concernent. Le rôle Manager ne peut pas voir les clés API ni changer le fournisseur LLM : ce cloisonnage évite qu'un client puisse observer la configuration d'un autre. Les conversations restent dans le workspace — elles ne migrent pas si vous déplacez un document entre workspaces. Pensez à nommer vos workspaces de façon explicite dès le départ : renommer un workspace ne modifie pas les chemins de stockage internes, mais peut semer la confusion dans les logs.
Sauvegarder et restaurer l'instance
Tout l'état d'AnythingLLM tient dans le volume ./storage : base vectorielle LanceDB, métadonnées des documents, configuration de l'instance et historique des conversations. Une sauvegarde consiste à archiver ce dossier pendant que le conteneur est arrêté, ou à utiliser rsync vers un stockage distant pendant que le conteneur tourne — LanceDB tolère les lectures concurrentes. Pour une sauvegarde programmatique, ajoutez un service cron dans votre compose qui exécute tar -czf /backup/anythingllm-$(date +%Y%m%d).tar.gz /opt/anythingllm/storage. La restauration suit le chemin inverse : copiez l'archive dans ./storage en respectant les permissions 1000:1000, puis docker compose up -d. Le .env contient le JWT_SECRET : sauvegardez-le séparément, chiffré, car sa perte invalide toutes les sessions actives et les tokens d'API éventuels.
Dépannage : erreurs réelles rencontrées au montage
Voici les cinq erreurs documentées les plus fréquentes lors du déploiement d'AnythingLLM v1.17.0, avec le message exact et la correction appliquée. Première erreur : EACCES: permission denied, mkdir '/app/server/storage/vector-cache' au démarrage. Cause : le dossier storage appartient à root mais le conteneur tourne avec l'UID 1000. Correction : chown -R 1000:1000 /opt/anythingllm/storage puis docker compose restart. Deuxième erreur : address already in use :::3001 dans les logs. Cause : un autre service occupe le port. Correction : ss -tlnp | grep 3001 pour identifier le processus conflictuel, puis le stopper ou changer SERVER_PORT dans .env. Troisième erreur : Invalid JWT secret — all sessions invalidated après un redémarrage. Cause : la variable JWT_SECRET a changé. Correction : restaurez la valeur initiale de JWT_SECRET ou demandez à tous les utilisateurs de se reconnecter. Quatrième erreur : uploads de PDF bloqués à 1 Mo malgré la configuration. Cause : client_max_body_size est défini dans le bloc http de Nginx mais pas dans le bloc server du vhost — le plus local l'emporte. Vérifiez avec nginx -T | grep client_max_body_size. Cinquième erreur : le workspace ne retourne aucune réponse sourcée après l'embedding. Cause : le modèle d'embedding sélectionné à l'ingestion diffère du modèle actif. Les vecteurs sont incompatibles. Correction : supprimez les documents, changez le modèle d'embedding dans les paramètres du workspace, puis réingérez.
AnythingLLM vs alternatives RAG auto-hébergées
Faites défiler le tableau
| Critère | AnythingLLM v1.17.0 | Open WebUI | LibreChat | PrivateGPT |
|---|---|---|---|---|
| RAG documentaire intégré | Oui — PDF, Word, URL, Notion, GitHub | Import basique sans pipeline RAG | Via plugin RAG (config manuelle) | Oui — optimisé documents confidentiels |
| Mode multi-utilisateurs | Admin / Manager / Default — supporté nativement, rôle Manager affiné en v1.17.0 | Gestion basique des utilisateurs | Oui avec rôles par conversation | Non — mono-utilisateur par défaut |
| Espaces de travail isolés par client | Oui — cloisonnement natif par workspace | Non — conversations partagées | Limité — par conversation uniquement | Non |
| Fournisseurs LLM supportés | 20+ (Ollama, OpenAI, Vertex AI, Anthropic…) | Ollama + compatibles OpenAI | OpenAI, Azure, Anthropic, Ollama… | Ollama et compatibles OpenAI |
| Diarisation de réunions | Oui — Nemotron 3 + Parakeet Redux (v1.17.0) | Non | Non | Non |
| RAM minimale (API cloud) | ~512 Mo | ~256 Mo | ~384 Mo | ~512 Mo |
| Interface no-code agents IA | Oui | Non | Non | Non |
| Licence | MIT | MIT | MIT | Apache 2.0 |
Pour aller plus loin sur votre infrastructure IA
AnythingLLM v1.17.0 couvre le cas d'usage RAG multi-client sur un seul VPS. Si votre corpus dépasse plusieurs millions de vecteurs, envisagez de déporter la base vectorielle vers Qdrant dans un conteneur voisin — AnythingLLM le supporte nativement depuis les paramètres de l'instance. Pour les équipes qui veulent comparer les interfaces avant de se décider, l'article sur Open WebUI, LibreChat et Dify détaille les critères de choix selon le profil d'usage. Si vos documents sont soumis à des exigences de confidentialité strictes (RGPD, données médicales, contrats sensibles), l'article sur PrivateGPT explique comment travailler en mode entièrement local sans aucun appel réseau sortant. Ces trois ressources sont complémentaires et couvrent la majorité des architectures IA self-hosted rencontrées en production sur un VPS.