×

Installation Ollama + WebSearch + OPEN WEBUI avec Docker

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: true

Script 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.sh

Configuration 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