Authentification MongoDB
Configurer l'authentification sur votre mongodb Docker avec le fichier docker-compose.override.yml
Ce guide démontrera comment utiliser le fichier docker-compose.override.yml pour nous permettre d'activer une authentification explicite pour MongoDB.
Pour plus d'informations sur le fichier de remplacement, veuillez consulter : Docker Compose Override
Notes :
- La configuration par défaut est sécurisée en bloquant l'accès aux ports externes, mais nous pouvons aller encore plus loin avec des identifiants d'accès.
- Comme noté par les développeurs de MongoDB eux-mêmes, l'authentification dans MongoDB est assez complexe. Nous adopterons une approche simple qui sera suffisante pour la plupart des cas, en particulier pour les configurations existantes de LibreChat. Pour en savoir plus sur le fonctionnement de l'authentification mongodb avec Docker, consultez ceci : https://hub.docker.com/_/mongo/
- Ce guide se concentre exclusivement sur les procédures de configuration basées sur le terminal.
- Bien que les étapes décrites puissent également être applicables aux environnements Docker Desktop, ou avec des configurations locales sans Docker, MongoDB, ou d'autres configurations de conteneurs, les détails spécifiques à ces scénarios ne sont pas fournis.
Il y a 3 étapes fondamentales :
- Créez un utilisateur administrateur dans votre conteneur mongodb
- Activez l'authentification et créez un utilisateur « readWrite » pour « LibreChat »
- Configurez le MONGO_URI avec l'utilisateur nouvellement créé
TL;DR
Voici toutes les commandes nécessaires si vous souhaitez les parcourir rapidement ou pour référence :
Exemple
Exemple de fichier docker-compose.override.yml utilisant le fichier de configuration librechat.yaml, l'authentification MongoDB et mongo-express pour gérer votre base de données MongoDB :
Création d'un utilisateur administrateur
Tout d'abord, nous devons arrêter les conteneurs par défaut et ne faire fonctionner que le conteneur mongodb.
Remarque : Le flag
-ddétache l'instance de terminal actuelle pendant que le conteneur s'exécute en arrière-plan. Si vous souhaitez voir les sorties de journal de mongodb, omettez-le et continuez dans un terminal séparé.
Une fois en cours d'exécution, nous entrerons dans le terminal du conteneur et exécuterons mongosh :
Vous devriez voir la sortie suivante :
Optionnel : Tant que nous y sommes, nous pouvons désactiver la télémétrie pour mongodb si vous le souhaitez, il s'agit de données d'utilisation anonymes collectées et envoyées périodiquement à MongoDB :
Exécutez la commande ci-dessous.
Notes :
- Toutes les commandes suivantes doivent être exécutées dans la session de terminal actuelle, quel que soit l'environnement (Docker, Linux,
mongosh, etc.)- Je représenterai la vue réelle du terminal avec # exemple d'entrée/sortie ou simplement en affichant la sortie dans certains cas
Commande :
Exemple d'entrée/sortie :
Maintenant, nous devons accéder à la base de données admin, que mongodb crée par défaut pour créer notre utilisateur administrateur :
passé en mode db admin
Remplacez les identifiants comme vous le souhaitez et conservez-les dans vos dossiers sécurisés pour le reste du guide.
Exécutez la commande pour créer l'utilisateur administrateur :
Vous devriez voir une sortie "ok".
Vous pouvez également confirmer que l'administrateur a été créé en exécutant show users :
:warning: Important : si vous utilisez mongo-express pour gérer votre base de données (guide ici), vous avez besoin d'autorisations supplémentaires pour que le service mongo-express s'exécute correctement :
Quittez le terminal Mongosh/Container en exécutant exit :
Et arrêtez le conteneur en cours d'exécution :
Activation de l'authentification et création d'un utilisateur avec accès readWrite
Nous devons maintenant créer/modifier le fichier docker-compose.override.yml pour activer l'authentification pour notre conteneur mongodb. Vous pouvez utiliser cette configuration pour démarrer ou comme référence :
Après avoir configuré le fichier de remplacement comme ci-dessus, exécutez à nouveau le conteneur mongodb :
Et accédez à mongosh en tant qu'utilisateur administrateur :
Confirmez que vous êtes authentifié :
Passez à la base de données "LibreChat"
Remarque : Il s'agit de la base de données par défaut, sauf si vous l'avez modifiée via la MONGO_URI ; URI par défaut :
MONGO_URI=mongodb://mongodb:27017/LibreChat
Nous allons maintenant créer les identifiants réels qui seront utilisés par notre chaîne de connexion Mongo, lesquels seront limités à un accès en lecture/écriture à la base de données "LibreChat". Comme précédemment, remplacez l'exemple par les identifiants de votre choix :
db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
Vous devriez voir à nouveau une sortie "ok".
Vous pouvez vérifier la création de l'utilisateur avec la commande show users.
Quittez à nouveau le terminal Mongosh/Container avec exit, et arrêtez le conteneur :
J'ai rencontré un problème où l'utilisateur nouvellement créé ne persistait pas après sa création. Pour résoudre ce problème, j'ai simplement répété les étapes pour m'assurer qu'il était bien créé. Les voici pour votre commodité :
Si cela ne persiste toujours pas, vous pouvez essayer d'exécuter les commandes avec tous les conteneurs en cours d'exécution, mais notez que le conteneur LibreChat sera dans un état d'erreur/de nouvelle tentative.
Mettre à jour MONGO_URI pour utiliser les nouveaux identifiants
Enfin, nous ajoutons la nouvelle chaîne de connexion avec nos identifiants nouvellement créés à notre fichier docker-compose.override.yml sous le service api :
Notre fichier de remplacement ressemble donc maintenant à ceci :
Vous devriez maintenant exécuter docker compose up avec une authentification réussie et un accès en lecture/écriture à la base de données LibreChat
Exemple de connexion réussie :
Si vous rencontrez des erreurs d'authentification, exécutez à nouveau la dernière partie de l'étape 2. Je ne sais pas pourquoi c'est capricieux, mais cela fonctionnera après quelques essais.
Que pensez-vous de ce guide ?