Installation de Open WebUI et d'Ollama

👋 Présentation d'Openwebui et d'Ollama
Open WebUI est une interface web auto-hébergée, extensible et riche en fonctionnalités, conçue pour fonctionner entièrement hors ligne. Elle prend en charge divers moteurs de modèles de langage (LLM) en utilisant Ollama.
Ollama est un outil open-source qui permet d'exécuter localement des modèles de langage de grande taille (LLM) tels que Llama 3.3, DeepSeek-R1, Phi-4, Mistral et Gemma 3.
Prérequis
Pour une bonne expérience utilisateur, il est conseillé d'utiliser une machine avec une carte graphique Nvidia. Pour mar part, j'ai utilisé un PC portable Asus Tuf Gaming de 2019 ayant comme spec. :
- Processeur : Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 12 coeurs
- RAM : 32 Go
- Disque dur : Nvme 256 Go
- Carte graphique : NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile]
Installation des drivers Nvidia
Avant tout il faut configurer les dépôts pour pouvoir installer par la suite les paquets Nvidia.
Le dépôt Linux nvidia-container-toolkit permet d'installer les outils nécessaires pour exécuter des conteneurs Docker avec l'accélération GPU fournie par les cartes graphiques NVIDIA.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# vim /etc/apt/sources.list :
deb http://debian.univ-tlse2.fr/debian/ bookworm main non-free-firmware non-free contrib
deb http://security.debian.org/debian-security bookworm-security main non-free-firmware non-free contrib
deb http://debian.univ-tlse2.fr/debian/ bookworm-updates main non-free-firmware non-free contrib
apt update
apt install -y nvidia-driver firmware-misc-nonfree
# Je ne sais pas si la ligne ci-dessous est réellement nécessaire.
apt install -y nvidia-cuda-dev nvidia-cuda-toolkit
# Cette ligne ci-dessous est indispensable car le paquet nvidia-container-toolkit
# permet d’exécuter des conteneurs Docker avec l’accélération GPU de NVIDIA.
apt-get install -y nvidia-container-toolkit
Rédémarrez le système.
Configuration Docker
mkdir -p /srv/docker/openwebui/{config/{dyn_traefik,secrets},logs,ollama-local,open-webui-local,}
touch config/acme.json
chmod 600 config/acme.json
chown -R <VOTRE_USER>: /srv/docker
Les fichiers contenant les secrets "ovh_*" seront contenus dans le répertoire /srv/docker/openwebui/config/secrets
. Ils seront utilisés pour l'authentification sur l'API d'OVH dans le cadre de la génération du certificat TLS avec Let's Encrypt et le challenge DNS.
---
secrets:
ovh_endpoint:
file: "./config/secrets/ovh_endpoint.secret"
ovh_application_key:
file: "./config/secrets/ovh_application_key.secret"
ovh_application_secret:
file: "./config/secrets/ovh_application_secret.secret"
ovh_consumer_key:
file: "./config/secrets/ovh_consumer_key.secret"
services:
traefik:
image: "traefik:v3"
container_name: traefik
networks:
- traefik
secrets:
- "ovh_endpoint"
- "ovh_application_key"
- "ovh_application_secret"
- "ovh_consumer_key"
environment:
- "TZ=Europe/Paris"
- "OVH_ENDPOINT_FILE=/run/secrets/ovh_endpoint"
- "OVH_APPLICATION_KEY_FILE=/run/secrets/ovh_application_key"
- "OVH_APPLICATION_SECRET_FILE=/run/secrets/ovh_application_secret"
- "OVH_CONSUMER_KEY_FILE=/run/secrets/ovh_consumer_key"
volumes:
# Mapping sur le socket interne de Docker
- '/var/run/docker.sock:/var/run/docker.sock:ro'
# Mapping du fichier de configuration statique
- './config/traefik.yml:/traefik.yml'
# Mapping du dossier contenant la configuration dynamique
- './config/dyn_traefik/:/dyn_traefik/'
# Mapping du fichier de stockage des certificats
- './config/acme.json:/acme.json'
- "./logs:/var/log"
ports:
- "80:80"
- "443:443"
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.domaine.fr`)"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik-dashboard.middlewares=traefik-dashboard-ipallowlist"
- "traefik.http.middlewares.traefik-dashboard-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.0/24"
- "traefik.http.services.traefik-dashboard-service.loadbalancer.server.port=8080"
openWebUI:
image: ghcr.io/open-webui/open-webui:cuda
container_name: openwebui
hostname: openwebui
networks:
- ollama-net
- traefik
restart: unless-stopped
volumes:
- ./open-webui-local:/app/backend/data
environment:
WEBUI_NAME: Quercy Libre IA
OLLAMA_BASE_URLS: http://ollama:11434
WEBUI_URL: https://ia.domaine.fr
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.openwebui.rule=Host(`ia.domaine.fr`)"
- "traefik.http.routers.openwebui.tls=true"
- "traefik.http.routers.openwebui.tls.certresolver=letsencrypt"
- "traefik.http.services.openwebui.loadbalancer.server.port=8080"
- "traefik.http.routers.openwebui.service=openwebui"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
logging:
driver: json-file
options:
max-size: "5m"
max-file: "2"
ollama:
image: ollama/ollama:latest
container_name: ollama
hostname: ollama
networks:
- ollama-net
volumes:
- ./ollaima-local:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
logging:
driver: json-file
options:
max-size: "5m"
max-file: "2"
networks:
ollama-net:
traefik:
external: true
---
api:
dashboard: true
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
directory: /dyn_traefik/
watch: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
caServer: "https://acme-v02.api.letsencrypt.org/directory"
email: "<EMAIL>"
storage: "/acme.json"
keyType: EC384
dnsChallenge:
provider: ovh
delayBeforeCheck: 10
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
log:
filePath: "/var/log/traefik.log"
format: json
level: INFO
maxSize: 5
maxBackups: 50
maxAge: 10
compress: true
accessLog:
filePath: "/var/log/access.log"
format: json
fields:
defaultMode: keep
names:
StartUTC: drop
Lancez la commande docker compose pull
suivie de la commande docker compose up -d
.
Patientez un peu puis rendez-vous sur l'URL d'Open WebUI (https://ia.domaine.fr dans cet exemple)
Lors de la première connexion, il vous sera demandé de vous enregistrer. Par défaut vous serez administrateur de l'application.

Importation d'un premier modèle
Aucun modèle n'est fourni par défaut. Nous allons donc commencer par le premier modèle Llama3 qui le modèle open source de Meta AI.
Une fois authentifié, cliquez sur "Sélectionnez un modèle", saisissez "llam3.1:8b" "dans la case "Rechercher un modèle" puis cliquez sur "Récupérer llama3.1:8b depuis Ollama.com".

Le modèle sera alors téléchargé et intégré automatiquement. Voici ce que cela donne (en vitesse normale et c'est clairement moi le plus lent 😂) quand je l'interroge :

J'en ai profité pour tester d'autres modèles que vous pouvez retrouver ici Modèles pour Ollama.
Les notations 8b, 12b, 70b font référence au nombre de paramètres d’un modèle de langage (LLM). Le "b" signifie billion en anglais, soit milliard en français.
Plus un modèle a de paramètres, plus il peut être complexe, nuancé et précis, mais aussi plus il nécessite de ressources pour fonctionner (puissance de calcul, mémoire, etc.). Le paramètre 8b est un bon compromis sur des petites machines. La vitesse de réponse de Gemma3:12b à la même question posée ci-dessus est 3 à 5 fois moins rapide. Pour un modèle 70b il faut selon toute vraisemblance au moins 128 Go de RAM.
Conclusion
Open WeUI offre beaucoup de possibilités quant à son usage. Je ne suis pas un expert IA mais j'ai pu commencer à m'amuser dessus très facilement. Le plus dur finalement c'est de trouver la bonne machine pour démarrer.
Non content de pouvoir avoir mon chatgpt personnel, je me suis lancé dans l'apprentissage de l'IA en lui fournissant des données afin qu'elle me les restitue. En effet Open WebUI permet d'entrainer son propre modèle basé sur un modèle LLM existant. C'est là que ça devient réellement plus difficile mais tellement plus intéressant. Je commence même à obtenir des resultats concluants. Cela fera l'objet d'une prochaine documentation selon mes avancées.