{"id":66,"date":"2026-08-10T22:23:04","date_gmt":"2026-08-10T20:23:04","guid":{"rendered":"https:\/\/homelab.nvsd.ch\/?p=66"},"modified":"2026-08-15T16:40:19","modified_gmt":"2026-08-15T14:40:19","slug":"installer-une-ia-locale-avec-docker-ollama-et-open-webui-sur-fedora","status":"publish","type":"post","link":"https:\/\/homelab.nvsd.ch\/?p=66","title":{"rendered":"Installer une IA locale avec Docker, Ollama et Open WebUI sur Fedora"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Retour d\u2019exp\u00e9rience : acc\u00e9l\u00e9ration NVIDIA, volumes SELinux, conflit du port 11434 et int\u00e9gration dans mon Homelab NVSD.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"images\/ia-locale-fedora-01-couverture.png\" alt=\"Une intelligence artificielle locale prenant vie au c\u0153ur d\u2019un Homelab Docker sur Fedora\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">En bref<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai install\u00e9 sur mon Acer Predator une stack d\u2019intelligence artificielle enti\u00e8rement locale compos\u00e9e de <strong>Docker<\/strong>, <strong>Ollama<\/strong> et <strong>Open WebUI<\/strong>. L\u2019inf\u00e9rence est acc\u00e9l\u00e9r\u00e9e par une <strong>NVIDIA GeForce GTX 1650 de 4 Go<\/strong>, tandis que les mod\u00e8les, les conversations et la configuration sont conserv\u00e9s sous <code>\/srv\/homelab<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette installation m\u2019a permis de valider un assistant priv\u00e9 pour le code, Docker et le d\u00e9pannage technique. Elle m\u2019a aussi confront\u00e9 \u00e0 deux difficult\u00e9s tr\u00e8s concr\u00e8tes : les permissions <strong>SELinux<\/strong> sur Fedora et un conflit entre Ollama install\u00e9 sur l\u2019h\u00f4te et Ollama ex\u00e9cut\u00e9 dans Docker.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u00c9l\u00e9ment<\/th><th>Configuration retenue<\/th><\/tr><\/thead><tbody><tr><td>Machine<\/td><td>Acer Predator<\/td><\/tr><tr><td>Syst\u00e8me<\/td><td>Fedora Silverblue 44 avec KDE Plasma<\/td><\/tr><tr><td>GPU<\/td><td>NVIDIA GeForce GTX 1650 &#8211; 4 Go de VRAM<\/td><\/tr><tr><td>M\u00e9moire<\/td><td>Environ 15 Go de RAM<\/td><\/tr><tr><td>Conteneurs<\/td><td><code>ollama<\/code> et <code>open-webui<\/code><\/td><\/tr><tr><td>Interface<\/td><td><code>http:\/\/localhost:3000<\/code><\/td><\/tr><tr><td>API Ollama<\/td><td><code>http:\/\/localhost:11434<\/code><\/td><\/tr><tr><td>Mod\u00e8les utilis\u00e9s<\/td><td><code>gemma3:4b<\/code> et <code>qwen2.5-coder:7b<\/code><\/td><\/tr><tr><td>Donn\u00e9es locales<\/td><td><code>\/srv\/homelab\/stacks\/ai\/ollama\/data<\/code> et <code>\/srv\/homelab\/stacks\/open-webui\/data<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Note de contexte<\/strong> &#8211; Cet article documente l\u2019\u00e9tat r\u00e9ellement valid\u00e9 sur ma machine en ao\u00fbt 2026. Les commandes restent \u00e0 adapter si les pilotes NVIDIA, Docker ou les chemins du Homelab sont diff\u00e9rents.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi int\u00e9grer une IA locale au Homelab ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mon projet NVSD Homelab s\u2019est construit autour d\u2019une s\u00e9paration simple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>le <strong>poste Fedora<\/strong> sert au d\u00e9veloppement, aux essais et \u00e0 la validation locale ;<\/li>\n\n\n\n<li>le <strong>VPS Ubuntu chez Infomaniak<\/strong> h\u00e9berge les services publics et le site WordPress ;<\/li>\n\n\n\n<li>Docker fournit un format commun pour organiser, d\u00e9placer et maintenir les services.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019IA locale trouve naturellement sa place sur le poste Fedora. C\u2019est l\u00e0 que se trouve la carte graphique, et c\u2019est aussi l\u00e0 que je travaille sur mes fichiers Compose, mes applications web et le contenu du Homelab.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mes objectifs \u00e9taient pr\u00e9cis :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>conserver les conversations et les requ\u00eates techniques sur ma machine ;<\/li>\n\n\n\n<li>disposer d\u2019un assistant m\u00eame sans service cloud ;<\/li>\n\n\n\n<li>utiliser la m\u00eame logique Docker que pour mes autres stacks ;<\/li>\n\n\n\n<li>exp\u00e9rimenter plusieurs mod\u00e8les sans modifier directement le syst\u00e8me ;<\/li>\n\n\n\n<li>connecter ensuite l\u2019IA \u00e0 mon environnement de d\u00e9veloppement.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019objectif n\u2019\u00e9tait pas de reproduire un grand service d\u2019IA en ligne. Avec 4 Go de VRAM, il fallait plut\u00f4t construire un syst\u00e8me <strong>raisonnable, sp\u00e9cialis\u00e9 et stable<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Architecture finale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai choisi deux conteneurs s\u00e9par\u00e9s :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ollama<\/strong> charge les mod\u00e8les et expose l\u2019API d\u2019inf\u00e9rence sur le port <code>11434<\/code>.<\/li>\n\n\n\n<li><strong>Open WebUI<\/strong> fournit l\u2019interface web sur le port <code>3000<\/code> et communique avec Ollama par le r\u00e9seau Docker <code>ai<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9seau <code>proxy<\/code> permet d\u2019int\u00e9grer Open WebUI \u00e0 Nginx Proxy Manager si je souhaite lui attribuer plus tard un nom local. L\u2019API Ollama n\u2019a pas besoin d\u2019\u00eatre expos\u00e9e publiquement.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker-1024x576.png\" alt=\"\" class=\"wp-image-69\" srcset=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker-1024x576.png 1024w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker-300x169.png 300w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker-768x432.png 768w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker-1536x864.png 1536w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-02-architecture-docker.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Deux services isol\u00e9s, un r\u00e9seau priv\u00e9 et des donn\u00e9es persistantes : la m\u00eame logique que pour les autres stacks du Homelab.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Composant<\/th><th>R\u00f4le<\/th><th>Persistance<\/th><\/tr><\/thead><tbody><tr><td>Ollama<\/td><td>T\u00e9l\u00e9chargement et ex\u00e9cution des mod\u00e8les<\/td><td><code>\/root\/.ollama<\/code> dans le conteneur<\/td><\/tr><tr><td>Open WebUI<\/td><td>Interface, comptes, conversations, fichiers et base locale<\/td><td><code>\/app\/backend\/data<\/code> dans le conteneur<\/td><\/tr><tr><td>R\u00e9seau <code>ai<\/code><\/td><td>Communication interne entre les deux services<\/td><td>R\u00e9seau Docker externe<\/td><\/tr><tr><td>R\u00e9seau <code>proxy<\/code><\/td><td>Acc\u00e8s \u00e9ventuel par Nginx Proxy Manager<\/td><td>R\u00e9seau Docker externe<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cette s\u00e9paration rend les mises \u00e0 jour plus simples : je peux remplacer l\u2019image d\u2019Open WebUI sans toucher aux mod\u00e8les, ou red\u00e9marrer Ollama sans perdre mes conversations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. V\u00e9rifier Docker et la carte NVIDIA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de cr\u00e9er la stack, j\u2019ai v\u00e9rifi\u00e9 le fonctionnement du pilote sur l\u2019h\u00f4te :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dans mon cas, la GTX 1650 \u00e9tait d\u00e9tect\u00e9e avec le pilote NVIDIA <code>610.43.03<\/code>. J\u2019ai ensuite contr\u00f4l\u00e9 Docker et Compose :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker version\ndocker compose version\ndocker info | sed -n '\/Runtimes\/p'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ollama a besoin du <strong>NVIDIA Container Toolkit<\/strong> pour acc\u00e9der au GPU depuis Docker. Apr\u00e8s installation du paquet, la configuration du runtime se fait ainsi :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nvidia-ctk runtime configure --runtime=docker\nsudo systemctl restart docker<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le test le plus utile consiste \u00e0 lancer <code>nvidia-smi<\/code> dans un conteneur CUDA :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm --gpus all \\\n  nvidia\/cuda:12.8.0-base-ubuntu22.04 \\\n  nvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si la carte appara\u00eet ici, la base est saine. Si ce test \u00e9choue, il est inutile de chercher le probl\u00e8me dans Ollama : il faut d\u2019abord corriger le runtime NVIDIA.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1024x576.png\" alt=\"\" class=\"wp-image-68\" srcset=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1024x576.png 1024w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-300x169.png 300w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-768x432.png 768w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1536x864.png 1536w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>La GTX 1650 n\u2019est pas une carte d\u00e9di\u00e9e \u00e0 l\u2019IA, mais elle suffit pour exp\u00e9rimenter avec des mod\u00e8les compacts.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Pr\u00e9parer l\u2019arborescence et les r\u00e9seaux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019avais d\u00e9j\u00e0 d\u00e9plac\u00e9 les services du Homelab hors de mon dossier personnel, sous <code>\/srv\/homelab<\/code>. Ce choix \u00e9vite de disperser les donn\u00e9es techniques dans <code>\/home<\/code> et pr\u00e9pare l\u2019ajout de nouvelles stacks.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/srv\/homelab\/stacks\/ai\/ollama\/data\nsudo mkdir -p \/srv\/homelab\/stacks\/open-webui\/data\n\nsudo chown -R \"$(id -u):$(id -g)\" \\\n  \/srv\/homelab\/stacks\/ai\/ollama \\\n  \/srv\/homelab\/stacks\/open-webui<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux projets utilisent un r\u00e9seau commun nomm\u00e9 <code>ai<\/code>. Open WebUI rejoint \u00e9galement le r\u00e9seau <code>proxy<\/code>, d\u00e9j\u00e0 utilis\u00e9 par Nginx Proxy Manager.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker network inspect ai &gt;\/dev\/null 2&gt;&amp;1 || docker network create ai\ndocker network inspect proxy &gt;\/dev\/null 2&gt;&amp;1 || docker network create proxy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019arborescence utile devient alors :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/srv\/homelab\/stacks\/\n\u251c\u2500\u2500 ai\/\n\u2502   \u2514\u2500\u2500 ollama\/\n\u2502       \u251c\u2500\u2500 compose.yaml\n\u2502       \u2514\u2500\u2500 data\/\n\u2514\u2500\u2500 open-webui\/\n    \u251c\u2500\u2500 compose.yaml\n    \u2514\u2500\u2500 data\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3. D\u00e9ployer Ollama avec le GPU<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>\/srv\/homelab\/stacks\/ai\/ollama\/compose.yaml<\/code> contient le moteur d\u2019inf\u00e9rence :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  ollama:\n    image: ollama\/ollama:latest\n    container_name: ollama\n    restart: unless-stopped\n\n    ports:\n      - \"11434:11434\"\n\n    volumes:\n      - .\/data:\/root\/.ollama:Z\n\n    environment:\n      OLLAMA_KEEP_ALIVE: 24h\n      OLLAMA_MAX_LOADED_MODELS: 1\n      OLLAMA_MAX_QUEUE: 512\n      OLLAMA_NUM_PARALLEL: 1\n      OLLAMA_ORIGINS: \"*\"\n\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: 1\n              capabilities: &#91;gpu]\n\n    healthcheck:\n      test: &#91;\"CMD-SHELL\", \"ollama list &gt;\/dev\/null 2&gt;&amp;1 || exit 1\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 30s\n\n    networks:\n      - ai\n\nnetworks:\n  ai:\n    external: true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Les param\u00e8tres correspondent aux limites de ma machine :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Param\u00e8tre<\/th><th class=\"has-text-align-right\" data-align=\"right\">Valeur<\/th><th>Pourquoi<\/th><\/tr><\/thead><tbody><tr><td><code>OLLAMA_KEEP_ALIVE<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\"><code>24h<\/code><\/td><td>\u00c9vite de recharger constamment le mod\u00e8le pendant une session de travail<\/td><\/tr><tr><td><code>OLLAMA_MAX_LOADED_MODELS<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\"><code>1<\/code><\/td><td>Emp\u00eache plusieurs mod\u00e8les de saturer les 4 Go de VRAM<\/td><\/tr><tr><td><code>OLLAMA_NUM_PARALLEL<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\"><code>1<\/code><\/td><td>\u00c9vite plusieurs inf\u00e9rences simultan\u00e9es sur un GPU limit\u00e9<\/td><\/tr><tr><td><code>count<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\"><code>1<\/code><\/td><td>R\u00e9serve une seule carte NVIDIA au conteneur<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je lance ensuite la stack depuis Dockge ou directement en ligne de commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/homelab\/stacks\/ai\/ollama\ndocker compose up -d\ndocker compose ps\ndocker compose logs --tail=100 ollama<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Puis je v\u00e9rifie que le conteneur voit r\u00e9ellement le GPU :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec ollama nvidia-smi<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. D\u00e9ployer Open WebUI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>\/srv\/homelab\/stacks\/open-webui\/compose.yaml<\/code> contient l\u2019interface :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  open-webui:\n    image: ghcr.io\/open-webui\/open-webui:main\n    container_name: open-webui\n    restart: unless-stopped\n\n    ports:\n      - \"3000:8080\"\n\n    volumes:\n      - .\/data:\/app\/backend\/data:Z\n\n    environment:\n      OLLAMA_BASE_URL: http:\/\/ollama:11434\n      WEBUI_AUTH: \"True\"\n      REQUEST_TIMEOUT: \"120\"\n      ENABLE_UPDATES: \"False\"\n\n    networks:\n      - ai\n      - proxy\n\nnetworks:\n  ai:\n    external: true\n  proxy:\n    external: true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le nom <code>ollama<\/code> est r\u00e9solu automatiquement sur le r\u00e9seau Docker <code>ai<\/code>. Open WebUI ne doit donc pas utiliser <code>localhost:11434<\/code> : depuis son conteneur, <code>localhost<\/code> d\u00e9signerait Open WebUI lui-m\u00eame.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/homelab\/stacks\/open-webui\ndocker compose up -d\ndocker compose ps\ndocker compose logs --tail=100 open-webui<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019interface est ensuite disponible \u00e0 l\u2019adresse :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;localhost:3000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le premier compte cr\u00e9\u00e9 devient administrateur. Toutes les donn\u00e9es de l\u2019interface restent dans le dossier <code>data<\/code>, notamment la base <code>webui.db<\/code>, les fichiers t\u00e9l\u00e9vers\u00e9s et les donn\u00e9es utilis\u00e9es par les fonctions de recherche documentaire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Le premier incident : deux Ollama pour un seul port<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La difficult\u00e9 la plus importante n\u2019est pas venue du GPU. Une ancienne installation d\u2019Ollama fonctionnait encore comme service <code>systemd<\/code> sur Fedora, alors que je venais de d\u00e9marrer la version Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les sympt\u00f4mes \u00e9taient trompeurs :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>le port <code>11434<\/code> \u00e9tait d\u00e9j\u00e0 occup\u00e9 ;<\/li>\n\n\n\n<li>Open WebUI ne voyait pas les mod\u00e8les attendus ;<\/li>\n\n\n\n<li>les commandes lanc\u00e9es sur l\u2019h\u00f4te et dans le conteneur ne retournaient pas la m\u00eame liste ;<\/li>\n\n\n\n<li>un red\u00e9marrage du conteneur ne corrigeait pas le probl\u00e8me.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1024x576.png\" alt=\"\" class=\"wp-image-68\" srcset=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1024x576.png 1024w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-300x169.png 300w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-768x432.png 768w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu-1536x864.png 1536w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-03-acceleration-gpu.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Un seul port, deux instances : le conflit entre le service h\u00f4te et le conteneur expliquait les incoh\u00e9rences.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai commenc\u00e9 par identifier pr\u00e9cis\u00e9ment le processus \u00e0 l\u2019\u00e9coute :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ss -tlnp | grep ':11434'\nsystemctl status ollama --no-pager\ndocker ps --filter name=ollama<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Comme j\u2019avais d\u00e9cid\u00e9 de conserver uniquement la version Docker, j\u2019ai arr\u00eat\u00e9 et d\u00e9sactiv\u00e9 le service de l\u2019h\u00f4te :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl disable --now ollama<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai ensuite v\u00e9rifi\u00e9 que le port \u00e9tait libre, puis red\u00e9marr\u00e9 la stack :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ss -tlnp | grep ':11434' || true\n\ncd \/srv\/homelab\/stacks\/ai\/ollama\ndocker compose up -d\n\ncurl -s http:\/\/localhost:11434\/api\/tags | jq -r '.models&#91;].name'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cette r\u00e9solution a \u00e9galement clarifi\u00e9 l\u2019architecture : <strong>Ollama est d\u00e9sormais g\u00e9r\u00e9 par Docker, ses mod\u00e8les sont persist\u00e9s dans la stack et le service h\u00f4te ne doit plus red\u00e9marrer en parall\u00e8le.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Le second incident : les volumes et SELinux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fedora active SELinux, ce qui prot\u00e8ge l\u2019h\u00f4te mais peut bloquer un conteneur qui tente d\u2019\u00e9crire dans un bind mount. Les sympt\u00f4mes prennent souvent la forme d\u2019un dossier illisible, d\u2019un fichier impossible \u00e0 cr\u00e9er ou d\u2019une erreur <code>permission denied<\/code> malgr\u00e9 des permissions Unix qui semblent correctes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La correction retenue est visible dans les deux fichiers Compose :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>volumes:\n  - .\/data:\/root\/.ollama:Z<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">et :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>volumes:\n  - .\/data:\/app\/backend\/data:Z<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le suffixe <code>:Z<\/code> demande un \u00e9tiquetage SELinux priv\u00e9 pour le conteneur. Il convient aux donn\u00e9es propres \u00e0 un service. Le suffixe <code>:z<\/code> sert plut\u00f4t lorsqu\u2019un m\u00eame dossier doit \u00eatre partag\u00e9 entre plusieurs conteneurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour contr\u00f4ler les labels :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -Zd \/srv\/homelab\/stacks\/ai\/ollama\/data\nls -Zd \/srv\/homelab\/stacks\/open-webui\/data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je limite volontairement le relabeling aux dossiers de donn\u00e9es de la stack. Il ne faut jamais appliquer <code>:Z<\/code> \u00e0 un dossier syst\u00e8me large comme <code>\/usr<\/code>, <code>\/home<\/code> ou <code>\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. T\u00e9l\u00e9charger des mod\u00e8les adapt\u00e9s \u00e0 4 Go de VRAM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La GTX 1650 impose de rester r\u00e9aliste. Un mod\u00e8le peut \u00eatre stock\u00e9 sur disque sans tenir enti\u00e8rement dans la VRAM, mais l\u2019ex\u00e9cution devient plus lente si une partie du calcul est d\u00e9port\u00e9e vers la RAM et le processeur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai conserv\u00e9 deux mod\u00e8les compl\u00e9mentaires :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it ollama ollama pull gemma3:4b\ndocker exec -it ollama ollama pull qwen2.5-coder:7b\ndocker exec ollama ollama list<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Mod\u00e8le<\/th><th class=\"has-text-align-right\" data-align=\"right\">Taille observ\u00e9e<\/th><th>Usage principal<\/th><th>Comportement sur la GTX 1650<\/th><\/tr><\/thead><tbody><tr><td><code>gemma3:4b<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\">Environ 3,3 Go<\/td><td>Questions g\u00e9n\u00e9rales et explications<\/td><td>Le plus confortable pour 4 Go de VRAM<\/td><\/tr><tr><td><code>qwen2.5-coder:7b<\/code><\/td><td class=\"has-text-align-right\" data-align=\"right\">Environ 4,7 Go<\/td><td>Docker, Python, HTML et assistance au code<\/td><td>Plus lourd, avec d\u00e9port partiel possible vers la RAM\/CPU<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le point important n\u2019est pas de collectionner les mod\u00e8les, mais d\u2019en choisir un ou deux adapt\u00e9s aux t\u00e2ches r\u00e9elles. <code>OLLAMA_MAX_LOADED_MODELS=1<\/code> \u00e9vite qu\u2019ils restent charg\u00e9s simultan\u00e9ment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Cr\u00e9er des profils sp\u00e9cialis\u00e9s dans Open WebUI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019utilise Open WebUI comme une interface commune, puis j\u2019adapte le message syst\u00e8me au type de travail :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Profil<\/th><th>Usage<\/th><\/tr><\/thead><tbody><tr><td>Docker Expert<\/td><td>Compose, Dockerfile, healthchecks et r\u00e9seaux<\/td><\/tr><tr><td>Stack Architect<\/td><td>Architecture multi-conteneurs et persistance<\/td><\/tr><tr><td>Frontend Specialist<\/td><td>HTML, CSS et JavaScript<\/td><\/tr><tr><td>Troubleshooting<\/td><td>Analyse progressive d\u2019erreurs et de journaux<\/td><\/tr><tr><td>Teacher Mode<\/td><td>Explications p\u00e9dagogiques et \u00e9tapes v\u00e9rifiables<\/td><\/tr><tr><td>Universal<\/td><td>Questions techniques g\u00e9n\u00e9rales<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de message syst\u00e8me pour les t\u00e2ches Docker :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tu es un assistant sp\u00e9cialis\u00e9 dans Docker et les homelabs Linux.\n\nQuand tu proposes une solution :\n- commence par expliquer le diagnostic ;\n- fournis des commandes v\u00e9rifiables ;\n- pr\u00e9serve les volumes et les donn\u00e9es existantes ;\n- distingue les r\u00e9seaux internes des services expos\u00e9s ;\n- ajoute un healthcheck lorsque l\u2019image le permet ;\n- indique toujours comment v\u00e9rifier le r\u00e9sultat et revenir en arri\u00e8re.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cette sp\u00e9cialisation est plus utile qu\u2019un prompt tr\u00e8s long : elle fixe quelques r\u00e8gles coh\u00e9rentes avec la mani\u00e8re dont je maintiens le Homelab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Connecter l\u2019IA locale \u00e0 Continue dans VS Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Une fois l\u2019API Ollama stabilis\u00e9e, j\u2019ai reli\u00e9 les mod\u00e8les locaux \u00e0 l\u2019extension Continue dans VS Code. <code>qwen2.5-coder:7b<\/code> est utilis\u00e9 pour le code et l\u2019autocompl\u00e9tion, tandis que <code>gemma3:4b<\/code> sert au dialogue technique plus g\u00e9n\u00e9ral.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de configuration <code>config.yaml<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name: NVSD Local AI\nversion: 1.0.0\nschema: v1\n\nmodels:\n  - name: Gemma 3 4B - Local\n    provider: ollama\n    model: gemma3:4b\n    apiBase: http:\/\/localhost:11434\n    roles:\n      - chat\n      - edit\n    defaultCompletionOptions:\n      contextLength: 4096\n\n  - name: Qwen 2.5 Coder 7B - Local\n    provider: ollama\n    model: qwen2.5-coder:7b\n    apiBase: http:\/\/localhost:11434\n    roles:\n      - autocomplete\n    defaultCompletionOptions:\n      contextLength: 2048<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le contexte volontairement limit\u00e9 r\u00e9duit la consommation m\u00e9moire et am\u00e9liore la r\u00e9activit\u00e9 sur cette carte graphique. La valeur optimale d\u00e9pend toutefois de la taille des fichiers et du type de t\u00e2che.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp-1024x576.png\" alt=\"\" class=\"wp-image-73\" srcset=\"https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp-1024x576.png 1024w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp-300x169.png 300w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp-768x432.png 768w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp-1536x864.png 1536w, https:\/\/homelab.nvsd.ch\/wp-content\/uploads\/2026\/08\/ia-locale-fedora-05-developpement-monitoring_comp.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>L\u2019IA locale devient un outil du flux de d\u00e9veloppement, pas un service isol\u00e9 de plus.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. V\u00e9rifier et surveiller la stack<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tat des conteneurs<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je dois retrouver au minimum :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ollama        Up ...        0.0.0.0:11434-&gt;11434\/tcp\nopen-webui    Up ...        0.0.0.0:3000-&gt;8080\/tcp<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Mod\u00e8les disponibles par l\u2019API<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s http:\/\/localhost:11434\/api\/tags \\\n  | jq -r '.models&#91;].name'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Utilisation du GPU<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>watch -n 2 \\\n  'nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Consommation des conteneurs<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker stats ollama open-webui<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Journaux<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs --tail=100 -f ollama\ndocker logs --tail=100 -f open-webui<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pendant mes essais, un mod\u00e8le charg\u00e9 utilisait presque toute la VRAM disponible, g\u00e9n\u00e9ralement autour de <strong>3,8 \u00e0 4,0 Go<\/strong> selon le mod\u00e8le et le contexte. Le suivi avec <code>nvidia-smi<\/code> permet de distinguer un vrai calcul GPU d\u2019une ex\u00e9cution presque enti\u00e8rement d\u00e9port\u00e9e sur le processeur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9sultats obtenus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s correction des conflits et stabilisation des volumes :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>V\u00e9rification<\/th><th>R\u00e9sultat observ\u00e9<\/th><\/tr><\/thead><tbody><tr><td>GPU visible dans Docker<\/td><td>Oui, via <code>docker exec ollama nvidia-smi<\/code><\/td><\/tr><tr><td>Interface Open WebUI<\/td><td>Accessible sur <code>http:\/\/localhost:3000<\/code><\/td><\/tr><tr><td>API Ollama<\/td><td>Accessible sur <code>http:\/\/localhost:11434<\/code><\/td><\/tr><tr><td>Persistance<\/td><td>Mod\u00e8les et conversations conserv\u00e9s apr\u00e8s recr\u00e9ation des conteneurs<\/td><\/tr><tr><td>D\u00e9bit indicatif<\/td><td>Environ 5 \u00e0 8 tokens\/s selon le mod\u00e8le, le contexte et le d\u00e9port CPU<\/td><\/tr><tr><td>Latence \u00e0 chaud<\/td><td>Environ 0,5 \u00e0 2 secondes avant le d\u00e9but d\u2019une r\u00e9ponse simple<\/td><\/tr><tr><td>Stabilit\u00e9<\/td><td>Aucun crash observ\u00e9 pendant la session de validation finale<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ces chiffres d\u00e9crivent mon mat\u00e9riel et mes tests. Ils ne constituent pas un benchmark universel : la quantification du mod\u00e8le, la longueur du contexte, le pilote et le partage GPU\/CPU changent fortement les performances.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sauvegarder ce qui compte r\u00e9ellement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les mod\u00e8les Ollama sont volumineux, mais ils peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s de nouveau. Les donn\u00e9es les plus importantes se trouvent dans Open WebUI : comptes, conversations, r\u00e9glages, fichiers et base locale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une sauvegarde minimale peut cibler le dossier Open WebUI :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tar -czf \\\n  \"\/srv\/homelab\/backups\/open-webui-$(date +%F).tar.gz\" \\\n  -C \/srv\/homelab\/stacks\/open-webui \\\n  data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un arr\u00eat coh\u00e9rent avant une sauvegarde compl\u00e8te :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/homelab\/stacks\/open-webui\ndocker compose stop\n\nsudo tar -czf \\\n  \"\/srv\/homelab\/backups\/ai-local-complete-$(date +%F).tar.gz\" \\\n  -C \/srv\/homelab\/stacks \\\n  ai\/ollama open-webui\n\ndocker compose start<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019archive compl\u00e8te inclut les mod\u00e8les et peut donc devenir tr\u00e8s volumineuse. Pour une sauvegarde distante fr\u00e9quente, je privil\u00e9gie Open WebUI et je conserve s\u00e9par\u00e9ment la liste des mod\u00e8les \u00e0 ret\u00e9l\u00e9charger.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que cette installation m\u2019a appris<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Un petit GPU impose de choisir<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La GTX 1650 suffit pour apprendre, coder et tester, mais elle oblige \u00e0 limiter la taille du mod\u00e8le, le contexte et le parall\u00e9lisme. Cette contrainte a finalement am\u00e9lior\u00e9 la lisibilit\u00e9 de la stack.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Docker ne supprime pas les conflits avec l\u2019h\u00f4te<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un conteneur peut \u00eatre parfaitement configur\u00e9 et rester inaccessible si un service local occupe d\u00e9j\u00e0 son port. Le diagnostic doit toujours commencer par l\u2019h\u00f4te : processus actifs, ports, volumes et permissions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SELinux fait partie de l\u2019architecture Fedora<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le d\u00e9sactiver aurait masqu\u00e9 le probl\u00e8me. L\u2019ajout cibl\u00e9 de <code>:Z<\/code> aux bind mounts conserve la protection du syst\u00e8me tout en autorisant les conteneurs \u00e0 travailler dans leurs propres dossiers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">L\u2019IA locale compl\u00e8te le VPS au lieu de le remplacer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le poste Fedora fournit le GPU et l\u2019environnement de d\u00e9veloppement. Le VPS reste consacr\u00e9 aux services publics, au reverse proxy et au site WordPress. Cette s\u00e9paration \u00e9vite d\u2019exposer inutilement l\u2019API d\u2019inf\u00e9rence sur Internet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perspectives<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette premi\u00e8re stack constitue une base pour plusieurs \u00e9volutions d\u00e9j\u00e0 envisag\u00e9es dans le Homelab :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sauvegarder automatiquement les conversations importantes ;<\/li>\n\n\n\n<li>affiner les profils Open WebUI pour Docker, WordPress et le d\u00e9veloppement web ;<\/li>\n\n\n\n<li>tester des mod\u00e8les plus petits pour une autocompl\u00e9tion plus rapide ;<\/li>\n\n\n\n<li>relier l\u2019interface \u00e0 un nom local derri\u00e8re Nginx Proxy Manager ;<\/li>\n\n\n\n<li>r\u00e9utiliser Ollama dans un futur assistant vocal priv\u00e9, avec transcription et synth\u00e8se vocale ;<\/li>\n\n\n\n<li>documenter les performances de plusieurs mod\u00e8les sur la m\u00eame GTX 1650.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette installation a transform\u00e9 l\u2019Acer Predator en v\u00e9ritable n\u0153ud IA du Homelab. Ollama fournit une API locale simple, Open WebUI rend les mod\u00e8les agr\u00e9ables \u00e0 utiliser et Docker maintient l\u2019ensemble coh\u00e9rent avec mes autres services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9sultat le plus int\u00e9ressant n\u2019est pas seulement d\u2019ex\u00e9cuter un LLM sans cloud. C\u2019est d\u2019avoir int\u00e9gr\u00e9 l\u2019IA \u00e0 une architecture que je comprends, que je peux sauvegarder et que je suis capable de d\u00e9panner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avec une GTX 1650 de 4 Go, il faut accepter les limites. Mais pour g\u00e9n\u00e9rer du code, analyser une erreur Docker, pr\u00e9parer un fichier Compose ou expliquer un concept technique, cette stack locale remplit d\u00e9j\u00e0 son r\u00f4le.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Questions fr\u00e9quentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Peut-on utiliser cette stack sans GPU ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui. Ollama peut fonctionner sur CPU, mais les r\u00e9ponses seront nettement plus lentes. Il suffit de retirer la r\u00e9servation NVIDIA du fichier Compose.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Peut-on installer plusieurs mod\u00e8les avec seulement 4 Go de VRAM ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui. Le stockage des mod\u00e8les d\u00e9pend du disque, pas de la VRAM. En revanche, je ne charge qu\u2019un seul mod\u00e8le \u00e0 la fois gr\u00e2ce \u00e0 <code>OLLAMA_MAX_LOADED_MODELS=1<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi Open WebUI utilise-t-il <code>http:\/\/ollama:11434<\/code> ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Parce que les deux conteneurs partagent le r\u00e9seau Docker <code>ai<\/code>. Le nom du conteneur devient un nom DNS interne. <code>localhost<\/code> ne fonctionnerait pas depuis Open WebUI pour joindre Ollama.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O\u00f9 sont enregistr\u00e9es les conversations ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Elles sont persist\u00e9es dans <code>\/srv\/homelab\/stacks\/open-webui\/data<\/code>, avec la base <code>webui.db<\/code> et les autres donn\u00e9es de l\u2019interface.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi ne pas installer Ollama directement sur Fedora ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est possible, mais j\u2019ai choisi Docker pour conserver la m\u00eame m\u00e9thode de gestion que pour le reste du Homelab. Le point essentiel est de ne pas laisser l\u2019instance h\u00f4te et l\u2019instance Docker actives simultan\u00e9ment sur le port <code>11434<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources officielles<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.docker.com\/engine\/install\/fedora\/\">Installer Docker Engine sur Fedora<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/compose\/how-tos\/gpu-support\/\">Acc\u00e8s GPU avec Docker Compose<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.nvidia.com\/datacenter\/cloud-native\/container-toolkit\/install-guide.html\">Installer NVIDIA Container Toolkit<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.ollama.com\/docker\">Ex\u00e9cuter Ollama avec Docker<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openwebui.com\/getting-started\/quick-start\/\">Guide de d\u00e9marrage Open WebUI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/engine\/storage\/bind-mounts\/\">Bind mounts Docker et labels SELinux<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.continue.dev\/customize\/model-providers\/top-level\/ollama\">Configurer Ollama dans Continue<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Article r\u00e9dig\u00e9 \u00e0 la premi\u00e8re personne \u00e0 partir de l\u2019installation et des tests r\u00e9alis\u00e9s dans le Homelab NVSD.<\/strong><br><em>Derni\u00e8re mise \u00e0 jour : 10 ao\u00fbt 2026.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Retour d\u2019exp\u00e9rience : acc\u00e9l\u00e9ration NVIDIA, volumes SELinux, conflit du port 11434 et int\u00e9gration dans mon Homelab NVSD. En bref J\u2019ai install\u00e9 sur mon Acer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":70,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[34,8,35],"class_list":["post-66","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","tag-ia","tag-ollama","tag-openai"],"_links":{"self":[{"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/posts\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":2,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions"}],"predecessor-version":[{"id":74,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions\/74"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=\/wp\/v2\/media\/70"}],"wp:attachment":[{"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/homelab.nvsd.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}