Installation Ollama + WebSearch + OPEN WEBUI avec Docker
On va installer sur notre serveur Ubuntu 22.04 LTS avec les drivers NVIDIA installés le stack OLLAMA avec une interface WEB et l’activation de la recherche sur Internet depuis le WEBUI. On va deployer le tout grâce à docker et je vais vous fournir un fichier docker compose.
Afin que le fichier soit le plus générique possible, je vais utiliser des variables et vous aurez aussi un fichier .env qui va vous permettre de configurer à votre guise votre stack.
Pour la partie recherche sur internet, j ai choisi de passer par SEARXNG. Pour faire simple, c est un méta moteur open source et qui va pas laisser trainer plein de trace de vous sur le net. Alors on va pas s en priver surtout qu il peut chercher sur plusieurs moteurs de recherche en même temps.
Enfin vous trouverez un petit script bash qui initialisera votre stack et la lancera.
Installation
Le stack avec Docker-compose
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "${OLLAMA_PORT:-11434}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
# Configuration de base
- OLLAMA_HOST=${OLLAMA_HOST:-0.0.0.0}
- OLLAMA_ORIGINS=${OLLAMA_ORIGINS:-*}
# Optimisation GPU NVIDIA RTX 5070 Ti
- NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES:-all}
- NVIDIA_DRIVER_CAPABILITIES=${NVIDIA_DRIVER_CAPABILITIES:-compute,utility}
- CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}
# Optimisation mémoire GPU (512MB overhead pour RTX 5070 Ti 16GB)
- OLLAMA_GPU_OVERHEAD=${OLLAMA_GPU_OVERHEAD:-536870912}
# Optimisation performances (config optimale trouvée)
- OLLAMA_NUM_PARALLEL=${OLLAMA_NUM_PARALLEL:-1}
- OLLAMA_MAX_LOADED_MODELS=${OLLAMA_MAX_LOADED_MODELS:-1}
- OLLAMA_KEEP_ALIVE=${OLLAMA_KEEP_ALIVE:-5m}
- OLLAMA_FLASH_ATTENTION=${OLLAMA_FLASH_ATTENTION:-1}
# Configuration réseau et stockage
- OLLAMA_MODELS=${OLLAMA_MODELS:-/root/.ollama/models}
- OLLAMA_MAX_QUEUE=${OLLAMA_MAX_QUEUE:-512}
- OLLAMA_NUM_CTX=${OLLAMA_NUM_CTX:-4096}
- OLLAMA_NUM_BATCH=${OLLAMA_NUM_BATCH:-512}
# Debug (optionnel)
- OLLAMA_DEBUG=${OLLAMA_DEBUG:-false}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: ${GPU_COUNT:-1}
capabilities: [gpu]
restart: unless-stopped
networks:
- ollama-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "${WEBUI_PORT:-3000}:8080"
volumes:
- open_webui_data:/app/backend/data
environment:
# Configuration Ollama
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://ollama:11434}
# Configuration WebUI
- WEBUI_NAME=${WEBUI_NAME:-Ollama RTX 5070 Ti WebUI}
- WEBUI_AUTH=${WEBUI_AUTH:-true}
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
# Configuration CORS
- CORS_ALLOW_ORIGIN=${CORS_ALLOW_ORIGIN:-*}
# Configuration RAG (Retrieval-Augmented Generation)
- RAG_EMBEDDING_ENGINE=${RAG_EMBEDDING_ENGINE:-ollama}
- RAG_EMBEDDING_MODEL=${RAG_EMBEDDING_MODEL:-nomic-embed-text}
# Configuration performance
- AIOHTTP_CLIENT_TIMEOUT=${AIOHTTP_CLIENT_TIMEOUT:-600}
- AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=${AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST:-30}
# Configuration utilisateur
- ENABLE_SIGNUP=${ENABLE_SIGNUP:-true}
- DEFAULT_USER_ROLE=${DEFAULT_USER_ROLE:-pending}
# Stockage
- DATA_DIR=${DATA_DIR:-/app/backend/data}
depends_on:
- ollama
- searxng
restart: unless-stopped
networks:
- ollama-network
extra_hosts:
- "host.docker.internal:host-gateway"
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "${SEARXNG_PORT:-8080}:8080"
volumes:
- searxng_data:/etc/searxng
- ./searxng-settings.yml:/etc/searxng/settings.yml:ro
environment:
- SEARXNG_BASE_URL=${SEARXNG_BASE_URL:-http://localhost:8080/}
- SEARXNG_SECRET=${SEARXNG_SECRET}
restart: unless-stopped
networks:
- ollama-network
volumes:
ollama_data:
name: ollama_data
open_webui_data:
name: open_webui_data
searxng_data:
name: searxng_data
networks:
ollama-network:
name: ollama-network
driver: bridge
Configuration de SEARCNG
Voici maintenant le fichier searxng-settings.yml a mettre au même niveau que votre docker-compose.yml
use_default_settings: true
server:
secret_key: "SERA_REMPLACE_PAR_VARIABLE_ENV"
limiter: false
image_proxy: true
method: "GET"
search:
safe_search: 0
autocomplete: "google"
default_lang: "fr"
formats:
- html
- json
engines:
# Désactiver DuckDuckGo qui pose problème avec CAPTCHA
- name: duckduckgo
disabled: true
# Activer des moteurs plus fiables
- name: google
disabled: false
weight: 1.0
- name: qwant
disabled: false
weight: 1.0
- name: brave
disabled: false
weight: 1.0
- name: wikipedia
disabled: false
weight: 1.0
- name: wikidata
disabled: false
weight: 0.5
- name: stackoverflow
disabled: false
weight: 0.5
- name: github
disabled: false
weight: 0.5
# Configuration pour éviter les CAPTCHA
outgoing:
request_timeout: 3.0
max_request_timeout: 10.0
pool_connections: 100
pool_maxsize: 10
enable_http2: trueScript BASH de lancement
Ce script est la pour vous aider à avoir tous les pré-requis pour que tout fonctionne correctement.
#!/bin/bash
# Script pour installer le modèle d'embedding nécessaire à la recherche web
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warning() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
clear
echo -e "${BLUE}══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} AI STACK COMPLÈTE - Ollama + Open WebUI + SEARCH ${NC}"
echo -e "${BLUE}══════════════════════════════════════════════════════════${NC}"
echo ""
# Vérifications
info "Vérification des prérequis..."
command -v docker >/dev/null 2>&1 || { error "Docker requis"; exit 1; }
command -v nvidia-smi >/dev/null 2>&1 || { error "NVIDIA drivers requis"; exit 1; }
docker compose version >/dev/null 2>&1 || { error "Docker Compose requis"; exit 1; }
info "✓ Prérequis OK"
# Générer les clés si nécessaire
if grep -q "CHANGEZ_MOI" .env 2>/dev/null; then
warning "Génération des clés secrètes..."
WEBUI_SECRET=$(openssl rand -hex 32)
SEARXNG_SECRET=$(openssl rand -hex 32)
sed -i "s/WEBUI_SECRET_KEY=.*/WEBUI_SECRET_KEY=$WEBUI_SECRET/" .env
sed -i "s/SEARXNG_SECRET=.*/SEARXNG_SECRET=$SEARXNG_SECRET/" .env
info "✓ Clés générées"
fi
# Démarrage
info "Démarrage de la stack..."
docker compose up -d
sleep 15
clear
echo -e "${BLUE}════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} INSTALLATION MODÈLE D'EMBEDDING POUR RECHERCHE WEB ${NC}"
echo -e "${BLUE}════════════════════════════════════════════════════════════${NC}"
echo ""
# Vérifier qu'Ollama tourne
if ! docker ps | grep -q "ollama"; then
error "Ollama n'est pas en cours d'exécution"
echo "Démarrez-le avec: docker compose up -d ollama"
exit 1
fi
info "Vérification des modèles installés..."
echo ""
# Lister les modèles actuels
echo "Modèles actuellement installés :"
docker exec ollama ollama list
echo ""
# Vérifier si nomic-embed-text existe
if docker exec ollama ollama list 2>/dev/null | grep -q "nomic-embed-text"; then
info "✓ Le modèle nomic-embed-text est déjà installé"
echo ""
echo "Pour l'utiliser dans Open WebUI :"
echo " 1. Ouvrez http://localhost:3000"
echo " 2. Admin Panel → Settings → Documents"
echo " 3. Embedding Model : sélectionnez 'nomic-embed-text'"
echo " 4. Save"
echo ""
exit 0
fi
warning "Le modèle d'embedding n'est pas installé"
echo ""
echo "Sans ce modèle, la recherche web ne fonctionnera pas correctement."
echo ""
echo "Informations sur nomic-embed-text :"
echo " - Taille : ~275 MB"
echo " - Nécessaire pour : Recherche web, RAG, embeddings"
echo " - Performance : Rapide et efficace"
echo ""
read -p "Voulez-vous télécharger nomic-embed-text maintenant ? (O/n) " -n 1 -r
echo
echo ""
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
info "Téléchargement de nomic-embed-text..."
echo "Cela peut prendre quelques minutes selon votre connexion..."
echo ""
docker exec ollama ollama pull nomic-embed-text
if [ $? -eq 0 ]; then
echo ""
info "✓ Modèle téléchargé avec succès !"
echo ""
info "Configuration dans Open WebUI :"
echo " 1. Ouvrez http://localhost:3000"
echo " 2. Allez dans Admin Panel → Settings → Documents"
echo " 3. Section 'Embedding Model'"
echo " 4. Sélectionnez 'nomic-embed-text'"
echo " 5. Cliquez sur 'Save'"
echo ""
info "Ensuite, pour la recherche web :"
echo " 1. Admin Panel → Settings → Web Search"
echo " 2. Enable Web Search : ON"
echo " 3. Search Engine : SearXNG"
echo " 4. Query URL : http://searxng:8080/search?q=<query>"
echo " 5. Save"
echo ""
info "Testez dans une conversation :"
echo " 'Cherche sur le web : actualités IA'"
echo ""
else
error "Échec du téléchargement"
echo ""
echo "Vous pouvez réessayer plus tard avec :"
echo " docker exec ollama ollama pull nomic-embed-text"
exit 1
fi
else
warning "Installation annulée"
echo ""
echo "Pour installer plus tard, exécutez :"
echo " docker exec ollama ollama pull nomic-embed-text"
echo ""
echo "Ou relancez ce script :"
echo " ./install-embedding-model.sh"
echo ""
fi
info "✓ Terminé"Configuration de votre Stack Docker avec le .env
créer un fichier .env au même niveau que votre docker-compose.yml
# ═══════════════════════════════════════════════════════════════════════════
# FICHIER DE CONFIGURATION OLLAMA + OPEN WEBUI + SEARXNG
# RTX 5070 Ti 16GB - Configuration Optimale
# ═══════════════════════════════════════════════════════════════════════════
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION OLLAMA
# ═══════════════════════════════════════════════════════════════════════════
# Port d'exposition d'Ollama (défaut: 11434)
OLLAMA_PORT=11434
# Hôte Ollama - 0.0.0.0 permet l'accès depuis le réseau local
OLLAMA_HOST=0.0.0.0
# Origines autorisées pour CORS (* = toutes)
OLLAMA_ORIGINS=*
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION GPU NVIDIA RTX 5070 Ti
# ═══════════════════════════════════════════════════════════════════════════
# Périphériques GPU visibles (all = tous les GPU disponibles)
NVIDIA_VISIBLE_DEVICES=all
# Capacités du driver NVIDIA requises
NVIDIA_DRIVER_CAPABILITIES=compute,utility
# Sélection GPU CUDA (0 = premier GPU, 1 = deuxième, etc.)
CUDA_VISIBLE_DEVICES=0
# Nombre de GPU à utiliser (1 pour une seule carte)
GPU_COUNT=1
# ═══════════════════════════════════════════════════════════════════════════
# OPTIMISATION MÉMOIRE GPU
# ═══════════════════════════════════════════════════════════════════════════
# Overhead GPU - Mémoire réservée pour éviter les erreurs OOM
# 536870912 = 512MB (recommandé pour RTX 5070 Ti 16GB)
# Autres valeurs possibles:
# 268435456 = 256MB (minimal)
# 1073741824 = 1GB (standard)
# 2147483648 = 2GB (conservateur, non recommandé)
OLLAMA_GPU_OVERHEAD=536870912
# ═══════════════════════════════════════════════════════════════════════════
# OPTIMISATION PERFORMANCES OLLAMA
# ═══════════════════════════════════════════════════════════════════════════
# Nombre de requêtes traitées en parallèle
# 1 = Une seule requête à la fois (RECOMMANDÉ pour fluidité maximale)
# 2-4 = Plusieurs requêtes (peut fragmenter la VRAM)
OLLAMA_NUM_PARALLEL=1
# Nombre maximum de modèles chargés simultanément en mémoire
# 1 = Un seul modèle (RECOMMANDÉ pour utiliser toute la VRAM disponible)
# 2-3 = Plusieurs modèles (fragmente la VRAM)
OLLAMA_MAX_LOADED_MODELS=1
# Nombre maximum de modèles chargés simultanément en mémoire
# 1 = Un seul modèle (RECOMMANDÉ pour utiliser toute la VRAM disponible)
# 2-3 = Plusieurs modèles (fragmente la VRAM)
OLLAMA_MAX_LOADED_MODELS=1
# Durée de maintien des modèles en mémoire après utilisation
# Format: 5m (5 minutes), 10m, 1h, etc.
# 5m = Libère la mémoire rapidement (RECOMMANDÉ)
# 10m = Standard
# -1 = Garde toujours en mémoire
OLLAMA_KEEP_ALIVE=5m
# Activer Flash Attention pour améliorer les performances
# 1 = Activé (RECOMMANDÉ)
# 0 = Désactivé
OLLAMA_FLASH_ATTENTION=1
# Chemin de stockage des modèles téléchargés
OLLAMA_MODELS=/root/.ollama/models
# Taille maximale de la file d'attente des requêtes
OLLAMA_MAX_QUEUE=512
# Taille du contexte (fenêtre de tokens)
# 2048 = Court (économise VRAM)
# 4096 = Standard (RECOMMANDÉ)
# 8192 = Long (utilise plus de VRAM)
OLLAMA_NUM_CTX=4096
# Taille des batches pour le traitement
# 512 = Standard (RECOMMANDÉ)
OLLAMA_NUM_BATCH=512
# Mode debug pour diagnostic des problèmes
# false = Désactivé (RECOMMANDÉ)
# true = Activé (pour débugger)
OLLAMA_DEBUG=false
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION OPEN WEBUI
# ═══════════════════════════════════════════════════════════════════════════
# Port d'exposition de l'interface Web
# Par défaut 3000, accessible via http://localhost:3000
WEBUI_PORT=3000
# URL de base d'Ollama (NE PAS MODIFIER si vous utilisez docker compose)
OLLAMA_BASE_URL=http://ollama:11434
# Nom de l'interface affiché dans le navigateur
WEBUI_NAME=Ollama RTX 5070 Ti WebUI
# Activer l'authentification
# true = Les utilisateurs doivent se connecter (RECOMMANDÉ)
# false = Pas d'authentification (mode mono-utilisateur)
WEBUI_AUTH=true
# Clé secrète pour sécuriser les tokens JWT
# IMPORTANT: Générez une clé unique avec: openssl rand -hex 32
# NE JAMAIS utiliser la valeur par défaut en production!
WEBUI_SECRET_KEY=CHANGEZ_MOI
# Configuration CORS - Origines autorisées
# * = Toutes les origines (pratique pour développement)
# En production: listez les domaines autorisés séparés par des virgules
CORS_ALLOW_ORIGIN=*
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION RAG (Retrieval-Augmented Generation)
# ═══════════════════════════════════════════════════════════════════════════
# Moteur d'embedding pour le RAG
# ollama = Utilise un modèle Ollama local (RECOMMANDÉ)
RAG_EMBEDDING_ENGINE=ollama
# Modèle d'embedding à utiliser pour le RAG
# Téléchargez d'abord: docker exec ollama ollama pull nomic-embed-text
# Autres options: mxbai-embed-large, all-minilm
RAG_EMBEDDING_MODEL=nomic-embed-text
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION SEARXNG
# ═══════════════════════════════════════════════════════════════════════════
# Port d'exposition de SearXNG
# Par défaut 8080, accessible via http://localhost:8080
SEARXNG_PORT=8080
# URL de base pour SearXNG
SEARXNG_BASE_URL=http://localhost:8080/
# Clé secrète SearXNG pour sécuriser l'instance
# IMPORTANT: Générez une clé unique avec: openssl rand -hex 32
# NE JAMAIS utiliser la valeur par défaut!
SEARXNG_SECRET=CHANGEZ_MOI
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION TIMEOUTS
# ═══════════════════════════════════════════════════════════════════════════
# Timeout général pour les requêtes HTTP (en secondes)
# 300 = 5 minutes (défaut)
# 600 = 10 minutes (RECOMMANDÉ pour modèles lents ou longs contextes)
# 1200 = 20 minutes (pour très longs contextes)
AIOHTTP_CLIENT_TIMEOUT=600
# Timeout pour récupérer la liste des modèles (en secondes)
# 10 = Défaut
# 30 = Si vous avez beaucoup de modèles ou réseau lent (RECOMMANDÉ)
AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=30
# ═══════════════════════════════════════════════════════════════════════════
# CONFIGURATION UTILISATEURS
# ═══════════════════════════════════════════════════════════════════════════
# Autoriser les nouvelles inscriptions
# true = Les utilisateurs peuvent créer un compte (RECOMMANDÉ pour débuter)
# false = Seul l'admin peut créer des comptes
ENABLE_SIGNUP=true
# Rôle par défaut attribué aux nouveaux utilisateurs
# pending = Doit être approuvé par un admin (RECOMMANDÉ)
# user = Accès immédiat
# admin = Accès admin (DANGEREUX, ne pas utiliser)
DEFAULT_USER_ROLE=pending
# Répertoire de stockage des données utilisateurs
DATA_DIR=/app/backend/data
# ═══════════════════════════════════════════════════════════════════════════
# NOTES ET CONSEILS
# ═══════════════════════════════════════════════════════════════════════════
#
# Configuration actuelle: OPTIMALE pour RTX 5070 Ti 16GB
#
# Modèles recommandés à installer:
# docker exec ollama ollama pull deepseek-r1:14b # Raisonnement
# docker exec ollama ollama pull qwen2.5-coder:14b # Code
# docker exec ollama ollama pull llama3.1:8b # Chat général
# docker exec ollama ollama pull gemma2:9b # Rapide
# docker exec ollama ollama pull nomic-embed-text # Pour RAG
#
#
# Accès aux interfaces:
# - Open WebUI: http://localhost:3000
# - SearXNG: http://localhost:8080
# - API Ollama: http://localhost:11434
#
# Commandes utiles:
# - Démarrer: docker compose up -d
# - Arrêter: docker compose down
# - Voir logs: docker compose logs -f
# - Lister modèles: docker exec ollama ollama list
# - Monitoring GPU: ./monitor.sh
# - Diagnostic: ./diagnostic.sh
#
# Support et documentation:
# - Ollama: https://ollama.com
# - Open WebUI: https://docs.openwebui.com
# - SearXNG: https://docs.searxng.org
#
# ═══════════════════════════════════════════════════════════════════════════Quand tous les fichiers sont en place, vous pouvez lancer le script de démarrage
chmod a+x start.sh
./start.shConfiguration du webSearch dans OpenWEBUI
Il reste une dernière étape afin de configurer correctement le Open WEBUI.
- Cliquez en bas a gauche sur votre login, puis panneau de configuration.
- cliquez sur réglage
- allez dans recheche web
- Activer la recherche et selectionner searxng
- dans l url mettez : http://searxng:8080/search?q=<query>
- nombre de résultat de recherche a 10
- demandes concurrentes a 5
Dans la gestion de vos modèles vous pourrez aussi activer par défaut le websearch.
Conclusion
il vous reste plus qu a charger les modèles qui conviennent a vos besoins et aussi à votre configuration.
Vous trouverez la liste des modèles ici

Laisser un commentaire