Connecter Open WebUI à Ollama local sans exposer l’API
Open WebUI donne une interface web pratique pour discuter avec des modèles Ollama. Le point sensible n’est pas l’installation, mais l’exposition réseau. Sur une machine de test, publiez l’interface uniquement en local et gardez Ollama sur son port local.
1. Vérifier Ollama côté hôte
Avant Docker, vérifiez que le service local répond :
curl http://127.0.0.1:11434/api/tags
Si cette commande échoue, corrigez Ollama avant d’installer Open WebUI. Ne modifiez pas l’écoute d’Ollama vers 0.0.0.0 juste pour aller plus vite. Cela peut rendre l’API accessible depuis le réseau.
2. Sur Linux : partager le réseau hôte, écouter en local
Un nom host.docker.internal résolu vers la passerelle Docker ne permet pas, à lui seul, d’atteindre un Ollama qui écoute uniquement sur 127.0.0.1. Sur un hôte Linux avec Docker Engine, le réseau hôte évite de changer l’écoute d’Ollama. Il réduit toutefois l’isolation réseau du conteneur ; utilisez-le seulement sur une machine de confiance.
Le script officiel Open WebUI accepte HOST et PORT. La commande suivante force l’interface sur la boucle locale. Créez d’abord un fichier webui.env protégé contenant un WEBUI_SECRET_KEY aléatoire personnel, généré par exemple avec openssl rand -hex 32, et conservez-le hors Git.
docker run -d --name open-webui-local \
--network=host \
-e HOST=127.0.0.1 -e PORT=3000 \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
--env-file ./webui.env \
-v open-webui:/app/backend/data \
--restart unless-stopped \
ghcr.io/open-webui/open-webui:mainIl n’y a pas de publication de port avec -p dans ce mode. Ouvrez http://127.0.0.1:3000 sur l’hôte Linux. Cette recette documentaire n’est pas une procédure Docker Desktop Windows/macOS et n’a pas été exécutée pour l’article. Le tag main évolue : pour un environnement durable, choisissez un tag de version vérifié ou un digest et archivez-le.
3. Premier contrôle
Ouvrez l’interface, créez l’utilisateur local, puis vérifiez que les modèles Ollama apparaissent. Si rien n’apparaît, regardez les logs :
docker logs --tail=100 open-webui-local
curl http://127.0.0.1:11434/api/tags
Si le curl hôte fonctionne mais pas Open WebUI, le problème vient probablement du démarrage du conteneur ou de l’URL Ollama enregistrée dans les connexions de l’interface.
4. Limites de sécurité
Ne publiez pas 11434 sur Internet. Ne remplacez pas le bind local par -p 3000:8080 sur un VPS public sans authentification, reverse proxy et filtrage. Pour un accès distant, utilisez un tunnel privé, un VPN ou une configuration web assumée avec HTTPS.
5. Nettoyage contrôlé
Pour arrêter sans perdre les données :
docker stop open-webui-local
Le volume open-webui conserve la configuration. Ne le supprimez que si vous acceptez de repartir de zéro.
Cas VPS
Sur un VPS, la commande locale reste utile pour tester, mais elle ne suffit pas pour un vrai accès distant. Si vous devez ouvrir l’interface, placez-la derrière un reverse proxy HTTPS, limitez les IP si possible et vérifiez la création du compte administrateur dès le premier lancement. Ne laissez jamais une interface fraîchement installée exposée sans contrôle d’accès.
Diagnostic rapide
Si Open WebUI démarre mais ne voit aucun modèle, vérifiez dans cet ordre : Ollama répond sur l’hôte, le conteneur résout host.docker.internal, la variable OLLAMA_BASE_URL pointe vers le bon port, puis les logs Open WebUI ne signalent pas de connexion refusée.
Pourquoi le bind local compte
La différence entre -p 3000:8080 et -p 127.0.0.1:3000:8080 est importante. La première forme peut écouter sur toutes les interfaces de la machine. La seconde limite l’accès au loopback. Pour un ordinateur personnel, cette prudence suffit souvent. Pour un serveur, elle évite une exposition accidentelle pendant la phase de test.
Sauvegarde
Le volume Docker contient les données applicatives. Avant de tester une mise à jour importante, sauvegardez ce volume ou exportez la configuration utile. Une interface locale reste un outil de travail : perdre les réglages, comptes ou historiques peut faire perdre plus de temps que l’installation initiale.