<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IA &#8211; erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/tag/ia/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sat, 25 Apr 2026 09:22:51 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>IA &#8211; erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apps &#8211; OpenWebUI</title>
		<link>https://erwanguillemard.com/apps-openwebui/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 25 Apr 2026 09:19:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[OPENWEBUI]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3520</guid>

					<description><![CDATA[Ce billet vient en complément et suite de l&#8217;article Apps &#8211; Ollama. Ce dernier (promis juré, craché sera assez rapide) sera un billet court. Pourquoi ? Parce que tout ou une grande partie à déjà été dit dans l&#8217;article traitant d&#8217;Ollama. J&#8217;avais jugé trop indigeste de fondre les deux sujets. Donc ici, la partie théorie...]]></description>
										<content:encoded><![CDATA[
<p>Ce billet vient en complément et suite de l&rsquo;article Apps &#8211; Ollama. Ce dernier (promis juré, craché sera assez rapide) sera un billet court.</p>



<p class="has-text-align-center"><strong>Pourquoi ?</strong></p>



<p>Parce que tout ou une grande partie à déjà été dit dans l&rsquo;article traitant d&rsquo;Ollama. J&rsquo;avais jugé trop indigeste de fondre les deux sujets. Donc ici, la partie théorie sera plutôt courte et en conséquence la partie Pratique un peu plus étoffée concernant l&rsquo;implémentation et la configuration de l&rsquo;application.</p>



<p>Bref, l&rsquo;objectif de cet article sera d&rsquo;implémenter une interface graphique publiée pour faciliter l&rsquo;usage de notre solution Ollama plurimodales (LLM<sup data-fn="9b4b7116-7da7-4c05-943e-ac072573b13f" class="fn"><a href="#9b4b7116-7da7-4c05-943e-ac072573b13f" id="9b4b7116-7da7-4c05-943e-ac072573b13f-link">1</a></sup>) aux utilisateurs. J&rsquo;ai pris le parti d&rsquo;utiliser la solution OpenWebUI.</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Vous l&rsquo;avez bien compris, dans l&rsquo;introduction, je n&rsquo;ai pas l&rsquo;attention de m&rsquo;éterniser 10 000 ans sur le sujet.</p>



<p>Je pars du principe que nous avons déjà déployé et configuré la solution Ollama et quelques modèles de traitement IA<sup data-fn="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4" class="fn"><a href="#f36cb89d-8ac6-4ed0-8df5-7d578d4680c4" id="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4-link">2</a></sup> sur un serveur.</p>



<p>J&rsquo;ai une nouvelle fois pris le parti de déployer l&rsquo;application sous une distribution RHEL<sup data-fn="9e902093-392b-4860-a9f8-d2c28cf28686" class="fn"><a href="#9e902093-392b-4860-a9f8-d2c28cf28686" id="9e902093-392b-4860-a9f8-d2c28cf28686-link">3</a></sup> afin d&rsquo;avoir un niveau de sécurité optimale. Toutefois et vous pourrez le constatez par la suite dans la partie théorie, je ne respecterai pas l&rsquo;architecture par faute de ressource disponible néanmoins, je recommande de suivre l&rsquo;architecture qui sera à venir.</p>



<p>Dans le cadre d&rsquo;une solution d&rsquo;IA hébergée localement se pose la question de mettre en place un tel portail dans une organisation. A cela je répondrai que cela permettra de garder un certain contrôle des requêtes, prompts, effectués par l&rsquo;ensemble des utilisateurs de l&rsquo;organisation et d&rsquo;en faciliter les usages. Dans des domaines sensibles tels que l&rsquo;industrie et production cela peut aux yeux de la direction et de la DSI<sup data-fn="4a15f514-bc25-45dc-8c12-3f5fd10c286d" class="fn"><a href="#4a15f514-bc25-45dc-8c12-3f5fd10c286d" id="4a15f514-bc25-45dc-8c12-3f5fd10c286d-link">4</a></sup> se révéler rassurant.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.x et version ultérieures (pour ma part ça sera du 10.x)</li>



<li>macOS</li>



<li>Windows</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Minimum 4 CPU<sup data-fn="63b8e4f1-84bc-47ad-8afa-7dae59217921" class="fn"><a href="#63b8e4f1-84bc-47ad-8afa-7dae59217921" id="63b8e4f1-84bc-47ad-8afa-7dae59217921-link">5</a></sup></li>



<li>Minimum 4 Gio de RAM<sup data-fn="f958a01e-8b83-4fc9-a592-006e9651956c" class="fn"><a href="#f958a01e-8b83-4fc9-a592-006e9651956c" id="f958a01e-8b83-4fc9-a592-006e9651956c-link">6</a></sup></li>



<li>Stockage rapide (SSD<sup data-fn="8f6e0338-719e-4456-808e-82e0a17b70ea" class="fn"><a href="#8f6e0338-719e-4456-808e-82e0a17b70ea" id="8f6e0338-719e-4456-808e-82e0a17b70ea-link">7</a></sup>&nbsp;ou Nvme)</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<h3 class="wp-block-heading">KesaKo OpenWebUI</h3>



<p>Je pense comme toujours qu&rsquo;il est important de se poser la traditionnelle question. Que fait l&rsquo;application que nous allons utiliser, comment elle fonctionne et qui est derrière.</p>



<h4 class="wp-block-heading">Qu&rsquo;est-ce que c&rsquo;est ?</h4>



<p>OpenWebUI, c&rsquo;est une interface web issue d&rsquo;une projet open-source (<strong>#biscotto</strong>) qui permet d&rsquo;utiliser des modèles d&rsquo;IA depuis un navigateur WEB hébergé localement. </p>



<p>Le projet est né du sud-coréen Tim Jaeryang BAEK qui prône l&rsquo;autonomie numérique face aux grands du monde de la tech. Le projet est développé en Python (version supérieur ou égale à 3.11) pour la partie BackEnd et HTML/CSS, Svelte, JS et TS pour la partie FrontEnd.</p>



<p>Personnellement, je trouve que l&rsquo;interface ressemble fortement à celle de ChatGPT. Mais son mon avis personnel hein 🙂</p>



<h4 class="wp-block-heading">A quoi ça sert ?</h4>



<p>La solution va permettre comme les outils classiques en ligne (pour ne pas dire les géants du Cloud) d&rsquo;effectuer des opérations (énumération en approche) :</p>



<ul class="wp-block-list">
<li><strong>Discuter</strong> avec des modèles d&rsquo;IA (LLM)</li>



<li><strong>Exploiter</strong> des modèles localement (LLM)</li>



<li><strong>S&rsquo;Interfacer</strong> avec des sources locales et clouds (et oui nous pouvons faire de l&rsquo;hybridation).</li>



<li><strong>Téléverser </strong>(waouh, tu n&rsquo;as pas écrit uploader !) des fichiers pour les analyser par l&rsquo;IA</li>
</ul>



<p>Nous retrouvons donc dans l&rsquo;ensemble les mêmes fonctionnalités que les outils en ligne quant à l&rsquo;usage de l&rsquo;IA 🙂 C&rsquo;est cool non ? &lt;3</p>



<h3 class="wp-block-heading">Avantages / Inconvénients</h3>



<p>L&rsquo;utilisation d&rsquo;OpenWebUI n&rsquo;est pas sans conséquences vis à vis des services qu&rsquo;il peut apporter.</p>



<p>Il suffit de regarder le constat déjà porté sur l&rsquo;utilisation d&rsquo;Ollama.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0);color:#3ec632" class="has-inline-color"><strong>Avantages</strong></mark></td><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Inconvénients</mark></td></tr><tr><td class="has-text-align-center" data-align="center">Open Source<br>Respect de la vie privée<br>Cross Compatibilité des modèles<br>Simplicité de l&rsquo;interface</td><td class="has-text-align-center" data-align="center">Installation technique<br>Modèles locaux couteux en ressources (RAM, CPU, GPU<sup data-fn="57be53ba-9128-49e7-ae7a-c337f01cf69e" class="fn"><a href="#57be53ba-9128-49e7-ae7a-c337f01cf69e" id="57be53ba-9128-49e7-ae7a-c337f01cf69e-link">8</a></sup>, Stockage)</td></tr></tbody></table></figure>



<p></p>



<p>Bon, cela je vous dirai l&rsquo;utilisateur il s&rsquo;en tamponne le coquillard. Lui que ce soit technique à mettre en place, il s&rsquo;en lustre l&rsquo;asperge. Par contre, si la réponse est lente, c&rsquo;est le <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong><em><span style="text-decoration: underline;">Game Over</span></em></strong></mark>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="575" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1024x575.jpg" alt="" class="wp-image-3528" style="aspect-ratio:1.7809626179386122;width:616px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1536x863.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died.jpg 1561w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Logique, pourquoi utiliser la solution locale qui met une plombe à répondre alors qu&rsquo;un bon vieux Gémini, Copilot, ChatGPT te donne la réponse en 1/4 de seconde après une petite pression sur la touche Enter du clavier ?</p>



<p>Ce qui nous ramène selon moi à l&rsquo;un des plus grands maux de la société actuelle. Nous ne savons ce que signifie attendre et être patient. Si dans les années 60 la compilation d&rsquo;un programme pouvait prendre la nuit, aujourd&rsquo;hui cela prendra quelques minutes. L&rsquo;essor des nouvelles technologies, nous apportent de par les performances et leurs mobilités l&rsquo;informations et l&rsquo;assurance de pouvoir joindre un individu ou une ressource si quand bien même nous avons du réseau. Toutefois, force est de constaté que si comme cela s&rsquo;est passé plusieurs fois au cours de l&rsquo;année 2025 et 2026 l&rsquo;un des maillons qui assure le fonctionnement tombe et nous coupe de nos ressources, nous nous retrouvons comme une poule qui a trouvé un couteau. Je pense et cela n&rsquo;est qu&rsquo;un point de vue personnel que nous devrions nous remettre en question face à cette forme de dépendance et servitude, <a href="https://www.youtube.com/watch?v=IsvfofcIE1Q&amp;list=RDIsvfofcIE1Q&amp;start_radio=1">Master &amp; Servant</a>, je dis STOP ! <strong><em>#sendkissesagain</em></strong></p>



<h3 class="wp-block-heading">Architecture &amp; Best Pratices</h3>



<p>Lors de la présentation de la solution, j&rsquo;ai introduit la possibilité d&rsquo;utiliser OpenWebUI en mode hybride. Ce qui implique donc une communication des flux sortants via les protocoles HTTP<sup data-fn="f4993b7e-0f63-4b56-886c-b4e26648314b" class="fn"><a href="#f4993b7e-0f63-4b56-886c-b4e26648314b" id="f4993b7e-0f63-4b56-886c-b4e26648314b-link">9</a></sup> et HTTPS<sup data-fn="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1" class="fn"><a href="#1d2044d0-2a6b-4f6c-9865-c8cded2e72e1" id="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1-link">10</a></sup> vers les IAs compatibles dans le cloud et autres repos propres au SE<sup data-fn="688876c0-5948-48bf-baaf-3d493e2e5c01" class="fn"><a href="#688876c0-5948-48bf-baaf-3d493e2e5c01" id="688876c0-5948-48bf-baaf-3d493e2e5c01-link">11</a></sup> et maintien de l&rsquo;application. Afin de ne pas surcharger inutilement le schéma, j&rsquo;ai totalement exclu cette partie. Néanmoins il conviendra de réaliser un filtrage strict en sortie des flux pour des raisons de sécurité. Donc de jouer avec les politiques de votre UTMs<sup data-fn="13f6c481-ca7e-4e73-875d-cf307bad64ec" class="fn"><a href="#13f6c481-ca7e-4e73-875d-cf307bad64ec" id="13f6c481-ca7e-4e73-875d-cf307bad64ec-link">12</a></sup>.</p>



<p>Bien, rentrons concrètement dans l&rsquo;architecture. La solution applicative OpenWebUI vient se placer entre le poste client et l&rsquo;application Ollama.</p>



<p>Il convient dans le respect des bonnes pratiques de dissocier OpenWebUI de Ollama puisque nous allons publier, ouvrir l&rsquo;application en interne et pourquoi pas depuis nos WANs<sup data-fn="ac43ad3e-9b07-4981-8114-d187d3cf6dbf" class="fn"><a href="#ac43ad3e-9b07-4981-8114-d187d3cf6dbf" id="ac43ad3e-9b07-4981-8114-d187d3cf6dbf-link">13</a></sup>. Cela implique de mettre OpenWebUI dans un réseau isolé (DMZ<sup data-fn="103fd0e8-cd60-41ff-b80a-9c51d9c20b76" class="fn"><a href="#103fd0e8-cd60-41ff-b80a-9c51d9c20b76" id="103fd0e8-cd60-41ff-b80a-9c51d9c20b76-link">14</a></sup>) et Ollama dans le réseau <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">T1</mark>, <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">T1&prime;</mark> par exemple.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="861" height="620" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch.jpg" alt="" class="wp-image-3526" style="aspect-ratio:1.3887129819333208;width:600px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch.jpg 861w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch-300x216.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch-768x553.jpg 768w" sizes="(max-width: 861px) 100vw, 861px" /></figure>
</div>


<p>Par défaut, dans un fonctionnement UNIX dans un déploiement hors Docker, le port de communication de l&rsquo;interface Web se fait via le protocole <strong>http </strong>sur le port <strong>8080</strong>. Il est néanmoins possible de forcer les connexions en <strong>https </strong>sur le port <strong>443 </strong>via <strong>nginx</strong> (je reviendrai plus en détail sur ce point).</p>



<p>Si nous regardons d&rsquo;un peu plus près l&rsquo;architecture de la VM<sup data-fn="2f21ddb8-be62-4029-92fc-283d894d896c" class="fn"><a href="#2f21ddb8-be62-4029-92fc-283d894d896c" id="2f21ddb8-be62-4029-92fc-283d894d896c-link">15</a></sup>, nous pouvons constater que j&rsquo;ai dédié un disque. Mais pourquoi ?</p>



<p>OpenWebUI est très très lourd. Son déploiement peut se révéler un poil pénible pour ne pas dire chiant à mourir (je reviendrai là-dessus dans la partie pratique).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="1024" height="576" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1024x576.jpg" alt="" class="wp-image-3527" style="width:612px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1536x864.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-2048x1152.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">https://unsplash.com/fr/photos/un-homme-portant-ses-mains-a-ses-oreilles-gK_ifZrZ0oc</figcaption></figure>
</div>


<p>Bref, pour pallier à ce problème, j&rsquo;ai dédié un disque d&rsquo;une capacité de 100 Gio.</p>



<p>Bien, on se lance dans la pratique ? Après on est bien aussi ici 🙂</p>



<h2 class="wp-block-heading">Pratique</h2>



<p>Oui j&rsquo;ai dit plus haut que je ne respecterai pas cette topologie. Par manque de ressource, je vais tailler à la hussarde et tout mutualiser sur une seule machine. Il faut bien faire avec les moyens que l&rsquo;on a, c&rsquo;est comme ça.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>OpenWebUI propose plusieurs modes de déploiement :</p>



<ul class="wp-block-list">
<li><strong>Docker</strong> : <em>Officiellement supporté et recommandé pour la plupart des utilisateurs </em>(avec plusieurs sous-catégorie alternatives de déploiement)</li>



<li><strong>Python</strong> : <em>Orienté pour les environnements faibles en ressources et pour une installation manuelle</em>
<ul class="wp-block-list">
<li>uv</li>



<li>conda</li>



<li>venv</li>
</ul>
</li>



<li><strong>Kubernetes</strong> : <em>Idéal pour les déploiements en entreprise qui nécessite une adaptabilité et ordonnancement</em>
<ul class="wp-block-list">
<li>Helm</li>
</ul>
</li>



<li><strong>Third Party</strong></li>
</ul>



<p>Pour ma part, la seule chose qui m&rsquo;intéresse et pour laquelle je suis à peu près à l&rsquo;aise c&rsquo;est Python. Je vois déjà les puristes de la containerisation me rétorquer sauvagement « <strong>Pourquoi pas Docker ?</strong>« . Encore une fois et je suis désolé, je ne comprends pas l&rsquo;intérêt de Docker dans mon métier. Tant que je n&rsquo;aurai pas pleinement assimilé ou eu le besoin de l&rsquo;utilisé, je bloque. Attention, je ne dis pas que c&rsquo;est de la me*de hein ? Loin de moi l&rsquo;idée.</p>



<p>Donc je partirai sur Python en environnement virtuel (venv).</p>



<p>Pourquoi ce choix ? Simplement parce que RHEL utilise également Python dans une version différente et qu&rsquo;à ce jour la version 3.12 n&rsquo;est pas encore officiellement supporté par OpenWebUI&#8230; Rien que pour ça je déteste Python autant que Java. Pourquoi faire simple&#8230;</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_9a0c37-e4 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_ff088c-ef"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Création de l&rsquo;environnement virtuel</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Dans mon répertoire ollama, j&rsquo;ai créé un second répertoire openwebui.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-820304956fcaf1b3dcda79afd65d1736"><code><strong>$ sudo mkdir -p /mnt/ollama/openwebui
$ sudo cd /mnt/ollama/openwebui/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="620" height="66" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0.jpg" alt="" class="wp-image-3542" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0.jpg 620w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0-300x32.jpg 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure>
</div>


<p>Une fois déplacé dans le répertoire, nous créons l&rsquo;environnement virtuel <strong>venv</strong>. Original comme nom n&rsquo;est il pas ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-4105a54d743af1aa7d3a48ac73c39678"><code><strong>$ sudo python3 -m venv venv</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="598" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1.jpg" alt="" class="wp-image-3543" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1-300x22.jpg 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_720aaa-b2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Activation de l&rsquo;environnement virtuel</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Etant toujours dans le même répertoire créé précédemment, nous allons activer notre environnement virtuel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-acd4be5844f2b2742c95fd277e79b798"><code><strong>$ sudo source venv/bin/activate</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="640" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2.jpg" alt="" class="wp-image-3544" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2.jpg 640w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2-300x20.jpg 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3520_0e4588-37"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Maintenant que tout est bon, il est toujours dans notre environnement virtuel de démarrer l&rsquo;installation. Cette dernière se déroulera en 3 temps.</p>



<ul class="wp-block-list">
<li>La mise à jour de pip</li>



<li>La création d&rsquo;un répertoire temporaire pour stocker les sources de l&rsquo;installation qui sont plutôt volumineuse</li>



<li>L&rsquo;installation en faisant référence à notre répertoire temporaire</li>
</ul>



<p>Simple comme bonjour, et pourtant sachez que je me suis bien cassé la tête pour trouver l&rsquo;astuce du répertoire temporaire&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-7b583b0aba8d3f3d221aa045c930b786"><code><strong>$ sudo pip install --upgrade pip 
$ sudo mkdir /mnt/ollama/tmp
$ sudo TMPDIR=/mnt/ollama/tmp pip install open-webui</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="928" height="274" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3.jpg" alt="" class="wp-image-3545" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3.jpg 928w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3-300x89.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3-768x227.jpg 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="492" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4.jpg" alt="" class="wp-image-3546" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4-300x157.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4-768x402.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p>Lors de l&rsquo;installation si comme moi vous avez des ressources limitées, aucun respect des préconisations matériels. Je vous recommande de tuer le temps pendant facile une heure et de laisser tranquille votre bécanne. Tiens, je reparle de patience, comme de par hasard 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="556" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-1024x556.jpg" alt="" class="wp-image-3539" style="aspect-ratio:1.8417715344844405;width:497px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-1024x556.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-300x163.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-768x417.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><em>Sans hésitez, la réponse D Jean-Pierre, ça <strong><em>sera mon dernier goulot.</em></strong> </em></strong></p>



<p>Blague mise à part, 291 packages à installer avec des grosses dépendances pour certains d&rsquo;entre eux (Nvidia par exemple&#8230;). Reprenez un peu de la réponse D en attendant.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="992" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5.jpg" alt="" class="wp-image-3548" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5-284x300.jpg 284w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5-768x811.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p>Toujours pas terminé ? Bon ba comme on dit j&rsquo;ai nous <strong><em>« On va pas la mécher [la bouteille naturellement] »</em></strong>, terminez là et allez en chercher une nouvelle pour poursuivre la connaissance de la réponse D.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_08c8ee-de"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Démarrage</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Si vous n&rsquo;êtes pas tombé et que vous n&rsquo;êtes plus très sobre, c&rsquo;est bon signe. 🙂 Normalement, l&rsquo;installation est terminée.</p>



<p class="has-text-align-center has-theme-palette-5-background-color has-background"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><span style="text-decoration: underline;">/!\</span></mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color"></mark><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#000000" class="has-inline-color"><span style="text-decoration: underline;">Attention :</span></mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color"><strong>L&rsquo;abus des bons produits et notamment d&rsquo;alcool est dangereux pour la santé.</strong> (Que l&rsquo;on n&rsquo;aille pas dire que je fasse de la publicité ou l&rsquo;apologie de l&rsquo;alcool </mark><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#000000" class="has-inline-color">#loievin</mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color">)</mark></p>



<p>Vérifions que cela fonctionne avec la première commande.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-2e3528595d69e530cdac0d9a86abca3a"><code><strong>$ sudo open-webui --help</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="362" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1.jpg" alt="" class="wp-image-3554" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1-300x116.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1-768x296.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p>C&rsquo;est rassurant de se dire que cela fonctionne. Pas de message d&rsquo;erreur. Il ne nous reste maintenant plus qu&rsquo;à démarrer notre service sur son interface et son port avec la commande ci-dessous.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8c3c7fab3e36412e32dd5c4d31345adf"><code><strong>$ sudo open-webui serve --host 10.227.250.11 --port 8080</strong></code></pre>



<p>Toutefois, il conviendra d&rsquo;autoriser les flux au niveau de l&rsquo;UTM local à notre serveur en amont. Pour cela, j&rsquo;explique dans la partie suivante Configuration comment ouvrir les flux http sur le port 8080/tcp.</p>



<p>Normalement, l&rsquo;ensemble des composants sont en cours de chargement et une fois l&rsquo;ensemble chargé, vous devriez avoir dans votre CLI<sup data-fn="96e1bb31-3abc-4f7d-9141-265b48fe943e" class="fn"><a href="#96e1bb31-3abc-4f7d-9141-265b48fe943e" id="96e1bb31-3abc-4f7d-9141-265b48fe943e-link">16</a></sup> la chose suivante.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="977" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2.jpg" alt="" class="wp-image-3555" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2-289x300.jpg 289w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2-768x797.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p>Il est à noter que des notes d&rsquo;informations vont vite prendre le relai, ces derniers affichant l&rsquo;ensemble des requêtes HTTP.</p>
</div></div></div>
</div></div></div>



<p></p>



<p>Si nous sommes à ce stade c&rsquo;est que tout est bon 🙂 Avant de rentrer plus en détail de l&rsquo;outil, il est nécessaire de regarder la partie Configuration. </p>



<h3 class="wp-block-heading">Configuration</h3>



<p>Cette partie pourrait je pense être amélioré. L&rsquo;un des points les plus complexes et de mettre en place le mode service (j&rsquo;y ai passé un temps certain&#8230;). </p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_d18aa8-fa kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_2d9a52-19"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Utilisateur dédié</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Pour des raisons de sécurité, il convient de créer un utilisateur dédié pour notre application. Nous partons sur un compte de service et non un compte utilisateur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-bf4decc473bfbe2d3dea8e1f34b337e0"><code><strong>$ sudo useradd -r -s /bin/false openwebui
$ sudo chown -R openwebui:openwebui /mnt/ollama/openwebui</strong></code></pre>



<p>Un petit changement de propriétaire et le tour est joué.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="842" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied.jpg" alt="" class="wp-image-3565" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied.jpg 842w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied-300x15.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied-768x39.jpg 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_82136e-4c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>ParFeu</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Par défaut, le port qui sera utilisé pour accéder à l&rsquo;interface web d&rsquo;OpenWebUI est 8080/tcp en http.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-421e427ebffce88e0b68e3d9942078e1"><code><strong>$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="779" height="111" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl.jpg" alt="" class="wp-image-3551" style="aspect-ratio:7.018908698001081;width:512px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl.jpg 779w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl-300x43.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl-768x109.jpg 768w" sizes="auto, (max-width: 779px) 100vw, 779px" /></figure>
</div>


<p>On est d’accord que si nous souhaiterions mieux faire en termes de sécurité, il serait plus intelligent de créer la policy suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-ac1dfb4f1ceaaff4aa75839b00dd9c53"><code><strong>$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.127.50.0/24" port port="8080" protocol="tcp" accept'
$ sudo firewall-cmd --reload</strong></code></pre>



<p>Ayant un UTM&nbsp;en amont, je me permets donc de me contenter de la première solution.</p>



<p>Un petit test de vérification depuis le poste source :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="607" height="155" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl.jpg" alt="" class="wp-image-3552" style="width:497px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl.jpg 607w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl-300x77.jpg 300w" sizes="auto, (max-width: 607px) 100vw, 607px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_4ca822-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mode Service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Commençons par créer notre fichier de service. La difficulté que j&rsquo;ai rencontrée ici est de jouer avec l&rsquo;environnement virtuel et le service OpenWebUI à démarrer. J&rsquo;ai bien trouvé une solution de contournement à mon problème toutefois cela me laisse un gout amer car la solution ne me semble pas propre du tout.</p>



<p>C&rsquo;est je pense l&rsquo;un des points qui me frustre le plus dans le monde du libre, l&rsquo;imbrication de solution tierce et dans un sens une non-standardisation des méthodes d&rsquo;implémentations. Bien que je doive le reconnaitre c&rsquo;est ce qui fait tout son charme. Je t&rsquo;aime moi non plus. On se croirait dans Andromaque&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-edb7a7f82c718c64f223a23096d9ca45"><code><strong>$ sudo vim /etc/systemd/system/openwebui.service</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Regardons d&rsquo;un peu plus près le contenu de ce fichier.<br><br>Nous retrouvons la description de notre service ainsi que son ordre de démarrage. OpenWebUI étant intimement lié à Ollama, il convient donc de définir ce dernier comme service requis.<br><br>Au niveau du service, nous sommes sur un type <strong>simple</strong>, le service étant exécuter par l&rsquo;utilisateur dédié <strong>openwebui</strong>. Il peut être acceptable bien que s&rsquo;est sacrément cochon d&rsquo;utiliser le compte root. Mais bon nous voulons éviter de faire étalage de notre amateurisme.<br><br><strong>WorkingDirectory</strong> représente le répertoire de travail dans lequel le programme sera exécuté.<br><strong>Environment</strong> permet de définir les variables d&rsquo;environnement.<br><br><strong>ExecStart</strong> permet d&rsquo;exécuter la commande. Dans mon cas, j&rsquo;en ai deux dont une qui est commentée (et qui ne fonctionne pas). <br><br><strong>Restart</strong> permet de définir le rédémarrage automatique dans le cas où le service viendrait à crash par exemple.<br><strong>RestartSec</strong> défini le délai de redémarrage en seconde.<br><br>Et pour finir, <strong>WantedBy</strong> pour spécifier le mode de service. Ici cela équivaut au mode normal.<br><br></td><td><strong><code>[Unit] </code><br><code>Description=Open WebUI Service</code><br><code>After=network.target ollama.service Requires=ollama.service </code><br><br><code>[Service] </code><br><code>Type=simple </code><br><code>User=openwebui</code><br><br><code>WorkingDirectory=/mnt/ollama/openwebui Environment="TMPDIR=/mnt/ollama/tmp" Environment="PATH=/mnt/ollama/openwebui/venv/bin:/usr/bin:/usr/sbin"</code><br><br><code>#ExecStart=/mnt/ollama/openwebui/venv/bin/open-webui serve --host 10.227.250.11 --port 8080 ExecStart=/bin/bash -c 'source /mnt/ollama/openwebui/venv/bin/activate &amp;&amp; open-webui serve --host 10.227.250.11 --port 8080'</code><br><br><code>Restart=always</code><br><code>RestartSec=5</code><br><br><code>[Install]</code><br><code>WantedBy=multi-user.target</code></strong></td></tr></tbody></table></figure>



<p>Comme nous venons de créer un nouveau service, il sera nécessaire de recharger l&rsquo;ensemble du systemctl pour intégrer le nouveau service à la liste des services disponible. Après, j&rsquo;ai envie de dire c&rsquo;est le schéma classique d&rsquo;activation, démarrage et vérification.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-1de451f486c9405510986bb5d6a71df8"><code><strong>$ sudo systemctl daemon-reload
$ sudo systemctl enable openwebui
$ sudo systemctl start openwebui
$ sudo systemctl status openwebui</strong></code></pre>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="272" class="wp-image-3561" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status-300x149.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status-768x380.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="122" class="wp-image-3566" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1.jpg 1896w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-300x67.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-1024x227.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-768x171.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-1536x341.jpg 1536w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Nginx, HTTPS</h4>



<p>Je suis partagé quant à la rédaction de cette sous partie. Oui il est important de sécuriser l&rsquo;accès à l&rsquo;interface Web, mais j&rsquo;ai peur d&rsquo;être hors sujet et d&rsquo;alourdir l&rsquo;article. Mais d&rsquo;un autre côté, je ne veux pas non plus bâcler la chose&#8230; Encore un pu**n de choix cornélien&#8230;</p>



<p>Bref, je vais faire au plus simple et si besoin écrirai un billet sur Nginx.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_66384a-95 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_8bd374-fd"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L&rsquo;installation et activation du service, je passe mon tour. </p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-0543457c0fe9e0729374dcee107be068"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="450" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg" alt="" class="wp-image-3573" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-300x144.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-768x368.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="83" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg" alt="" class="wp-image-3572" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-300x27.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-768x68.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_228265-dc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Certificats</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Là encore une fois je rencontre un petit problème. Je n&rsquo;ai pas de certificat public que je pourrais utiliser, ma topologie réseau ne me permet pas d&rsquo;utiliser un certificat Let&rsquo;s Encrypt et sans vouloir spoiler je n&rsquo;ai pas envie de me prendre la tête. Donc ça va finir avec un bon vieux certificat autosigné 🙂</p>



<p>La génération n&rsquo;est pas bien compliquée et si besoin, j&rsquo;ai déjà rédigé <a href="https://erwanguillemard.com/linux-certificats/">un article</a> sur le sujet.</p>



<p>Créons le répertoire qui va contenir nos éléments de sécurité :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-f4e5d319873f5128a8b950fc29a910ff"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p>Générons notre certificat :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-138cd2c03fe6716ce56321d41789b458"><code><strong>$ sudo openssl req req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/openwebui.key \
-out /etc/nginx/ssl/openwebui.crt</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="940" height="89" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2.jpg" alt="" class="wp-image-3574" style="aspect-ratio:10.562461026813553;width:771px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2-768x73.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="778" height="147" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3.jpg" alt="" class="wp-image-3575" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3.jpg 778w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3-300x57.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3-768x145.jpg 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></figure>
</div>


<p></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3520_a1b4ed-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Configuration</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Créons et éditons notre fichier de configuration. Je prendrai le temps d&rsquo;expliquer l&rsquo;intégralité du fichier de configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8bf2e2ac7a6fa0624b3de515312c5c6b"><code><strong>$ sudo vim /etc/nginx/conf.d/openwebui.conf</strong></code></pre>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name 10.227.250.11;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name 10.227.250.11;

    ssl_certificate /etc/nginx/ssl/openwebui.crt;
    ssl_certificate_key /etc/nginx/ssl/openwebui.key;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # taille upload
    client_max_body_size 100M;

    # compression
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

    location / {

        proxy_pass http://10.227.250.11:8080;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support (important OpenWebUI)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première section permet de réaliser la redirection du protocole HTTP vers HTTPS de manière permanente. Ainsi si je contacte l&rsquo;url http://10.227.250.11, je serais automatiquement redirigé vers https://10.227.254.11.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="211" class="wp-image-3580" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx.jpg 344w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx-300x115.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le second bloc indique que nous écoutons sur le port 443 sur l&rsquo;interface 10.227.250.11. L&#8217;emplacement des fichiers contenant la clé privée ainsi que le certificat sont spécifiés pour activer la couche de sécurité (j&rsquo;ai l&rsquo;impression d&rsquo;enfoncer des portes ouvertes&#8230;). J&rsquo;indique qu&rsquo;elles sont les versions des protocoles TLS<sup data-fn="1a3ccfdd-7fad-428c-9f9a-15401188579d" class="fn"><a href="#1a3ccfdd-7fad-428c-9f9a-15401188579d" id="1a3ccfdd-7fad-428c-9f9a-15401188579d-link">17</a></sup> autorisées et laisse le serveur choisir le chiffrement le plus sûr.<br>Côté en-tête, j&rsquo;ai repris les suggestions de sécurité implémentée pour ITOP. Soit la restriction de mettre le site en iframe externe, de restreindre le navigateur à deviner le tye MIME qui est utilisé et surtout d&rsquo;activer la protection anti-cross-site scripting. Niveau upload, j&rsquo;ai vu large et j&rsquo;ai autorisé le téléversement de fichier de 100 Mio.<br>Côté performance, j&rsquo;ai activé la compression des flux pour optimiser un peu les performances réseaux.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="446" class="wp-image-3581" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx.jpg 651w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx-300x243.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le troisième bloc concerne la partie Reverse Proxy.<br>Toutes les requêtes qui sont envoyées sur https://10.227.250.11 sont redirigées vers le port 8080.<br>Concernant les en-têtes il est nécessaire d&rsquo;utiliser les websockets car seront transmis l&rsquo;ip du client, le protocole utilisé et le NDD<sup data-fn="6f19f21f-54c7-433f-8a76-3c3d830f4eda" class="fn"><a href="#6f19f21f-54c7-433f-8a76-3c3d830f4eda" id="6f19f21f-54c7-433f-8a76-3c3d830f4eda-link">18</a></sup> ou l&rsquo;IP demandé.<br>Les deux lignes suivantes permettent de réaliser la jonction entre nginx et les websockets.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="381" class="wp-image-3582" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx.jpg 530w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx-300x208.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Une fois la configuration faite, il est important de réaliser un petit contrôle de notre petit fichier afin de s&rsquo;assurer que ce dernier ne comporte pas d&rsquo;erreur. </p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-431bd28015d2c71adaab9e3913939a85"><code><strong>$ sudo nginx -t </strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="106" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4.jpg" alt="" class="wp-image-3578" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4-300x34.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4-768x87.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p>Il faudra penser à recharger la configuration et hop le tour est joué.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_738fe8-6a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurité</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p>Sur le plan interne, autorisons nos flux https :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-71931f831671ed470001cbac0f47f7bc"><code><strong>$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="768" height="84" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5.jpg" alt="" class="wp-image-3576" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5-300x33.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></figure>
</div>


<p>Nous pourrions comme énoncé plus haut pour le protocole HTTP être bien plus rigoureux dans notre règle de sécurité. Mais encore une fois ayant un UTM en amont, j&rsquo;accepte le risque. Juste ne pas oublier de créer la règle sinon vous passez pour un c*n.</p>



<p>Si nous sommes joueurs, nous pouvons essayer de joindre directement notre interface web depuis notre navigateur. Normalement vous devez vous prendre dans les dents</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="606" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7.jpg" alt="" class="wp-image-3569" style="aspect-ratio:2.634850493445279;width:490px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7.jpg 606w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7-300x114.jpg 300w" sizes="auto, (max-width: 606px) 100vw, 606px" /></figure>
</div>


<p>Ca vous fait la b**e hein ? Je vous rassure je me suis pris la même rouste. J&rsquo;ai oublié d&rsquo;autoriser le contexte de mon SELinux pour autoriser les services http à accéder aux réseaux 😀</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-292226daa4277153a0a72abd06865dd7"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="731" height="23" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6.jpg" alt="" class="wp-image-3577" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6.jpg 731w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6-300x9.jpg 300w" sizes="auto, (max-width: 731px) 100vw, 731px" /></figure>
</div>


<p>Un petit F5 et hop c&rsquo;est tout bon &lt;3</p>
</div></div></div>
</div></div></div>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement avec toutes nos actions, nous devons joindre notre interface web depuis un navigateur de manière sécurisée (hormis l&rsquo;erreur liée à notre certificat autosigné).<br><br>Allez, on passe à la partie démonstration ?</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="355" class="wp-image-3571" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8.jpg 958w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8-300x194.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8-768x496.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Démonstration</h2>



<p>Pour le test, j&rsquo;ai décidé de changer un peu de format et de passer par des formats vidéo. Surtout que dans ce cas précis, cela évitera de mon côté de blablater. Cependant, ce n&rsquo;est pas pour autant que le travail est plus simple ou plus rapide.</p>



<p>J&rsquo;ai également pris le parti de commenter mes enregistrements et vidéos en anglais (oui même avec mon anglais aussi rouillé qu&rsquo;une vieille cantine de bidasse, si vous voulez <a href="https://www.youtube.com/watch?v=sufXl_PpKAk">trikitez mes vidéos</a> je vous laisse ce plaisir 🙂 ).</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="APPS   OpenWebUI" width="720" height="405" src="https://www.youtube.com/embed/UQW_L6yub3g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Conclusion</h2>



<p>La combinaison des solutions OpenWebUI et Ollama fonctionne à la perfection. Si nous associons le côté multimodèle d&rsquo;Ollama et son fonctionnement hybride avec la puissance de l&rsquo;interface OpenWebUI il est alors possible de fournir une solution complète à destination des utilisateurs.</p>



<p>Toutefois, je reste profondément frustré pour l&rsquo;instant. L&rsquo;ajout de la couche OpenWebUI vient rallentir et allourdir l&rsquo;usage d&rsquo;Ollama. D&rsquo;un autre côté, est ce vraiment pertinent comme remarque à savoir que je ne réponds à aucun prérequis matériel ? C&rsquo;est là où le bât blesse encore une fois. Cela fonctionne mais à quel prix ?</p>



<p>Il est également important de prendre en compte les couts annexes et variables (comme au hasard, la consommation électrique, refroidissement&#8230;) périphériques à l&rsquo;usage de l&rsquo;IA. Nous parlons du réchauffement climatique, de limiter nos émissions de carbone et j&rsquo;en passe pour d&rsquo;un autre côté user de l&rsquo;IA à tort ou à raison. Je ne tiens pas à lancer un débat climatosceptique ou sur est-ce bien ou non d&rsquo;utiliser l&rsquo;IA.</p>



<p>Je pense simplement qu&rsquo;il y a encore beaucoup à faire pour accorder en synergie la puissance et l&rsquo;usage de l&rsquo;IA avec les convictions écologiques et environnementales. Si nous être vivant allons avoir chaud, que dire des CPUs/GPUs ? <strong><em>#tousdanslemêmebateau</em></strong> Bref, un moratoire serait nécessaire en somme. Mais je laisse ça au pisse violon que je suis.</p>



<p>Je reste convaincu de la fiabilité et viabilité de la solution dans un milieu professionnel, malheureusement, pour moi je préfère me passer de l&rsquo;interface Web. Donc en d&rsquo;autres termes, je vais rollback mon snapshot (ou restaurer mon backup au choix). Après tout, je peux toujours utiliser l&rsquo;interface CLI directement depuis une session SSH<sup data-fn="a61fa4e1-f1b4-4118-a125-8ff2b30744bb" class="fn"><a href="#a61fa4e1-f1b4-4118-a125-8ff2b30744bb" id="a61fa4e1-f1b4-4118-a125-8ff2b30744bb-link">19</a></sup> ? Oui mais pas que.</p>



<p class="has-text-align-center"><strong>Pourquoi ne pas faire une petite interface qui exploite l&rsquo;API Ollama ?</strong></p>



<p>Ah nous y voila ! Ca sent le projet long comme un jour sans pain encore en approche. Blague mis à part, peut être que cela n&rsquo;aboutira pas. Mais j&rsquo;ai envie de pousser relativement loin la solution Ollama.</p>



<p>Pour faire vraiment simple. OpenWebUI c&rsquo;est supercool mais il faut les ressources pour pouvoir l&rsquo;utiliser pleinement pour ne pas souffrir d&rsquo;une grande frustration. 🙂</p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Je branche OpenWebUI sur une prise RJ45 en camembert ! Je contre avec un lama qui compile une girafe. Vous ne pouvez pas, il y a Sandrine ROUSSEAU au festival de la tête de veau.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://docs.openwebui.com/getting-started/">OpenWebUI : Quick Started</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="9b4b7116-7da7-4c05-943e-ac072573b13f"><strong>LLM : </strong>Large Language Models <a href="#9b4b7116-7da7-4c05-943e-ac072573b13f-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4"><strong>IA :</strong> Intelligence Artificielle <a href="#f36cb89d-8ac6-4ed0-8df5-7d578d4680c4-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="9e902093-392b-4860-a9f8-d2c28cf28686"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#9e902093-392b-4860-a9f8-d2c28cf28686-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="4a15f514-bc25-45dc-8c12-3f5fd10c286d"><strong>DSI :</strong> Direction des Services Informatiques <a href="#4a15f514-bc25-45dc-8c12-3f5fd10c286d-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="63b8e4f1-84bc-47ad-8afa-7dae59217921"><strong>CPU :</strong> Central Processing Unit <a href="#63b8e4f1-84bc-47ad-8afa-7dae59217921-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="f958a01e-8b83-4fc9-a592-006e9651956c"><strong>RAM :</strong> Random Access Memory <a href="#f958a01e-8b83-4fc9-a592-006e9651956c-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="8f6e0338-719e-4456-808e-82e0a17b70ea"><strong>SSD :</strong> Solid State Drive <a href="#8f6e0338-719e-4456-808e-82e0a17b70ea-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="57be53ba-9128-49e7-ae7a-c337f01cf69e"><strong>GPU :</strong> Graphics Processing Unit <a href="#57be53ba-9128-49e7-ae7a-c337f01cf69e-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f4993b7e-0f63-4b56-886c-b4e26648314b"><strong>HTTP :</strong> Hypertext Transfer Protocol <a href="#f4993b7e-0f63-4b56-886c-b4e26648314b-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1"><strong>HTTPS :</strong> Hypertext Transfer Protocol Secure <a href="#1d2044d0-2a6b-4f6c-9865-c8cded2e72e1-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="688876c0-5948-48bf-baaf-3d493e2e5c01"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#688876c0-5948-48bf-baaf-3d493e2e5c01-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="13f6c481-ca7e-4e73-875d-cf307bad64ec"><strong>UTM :</strong> Unified Threat Management <a href="#13f6c481-ca7e-4e73-875d-cf307bad64ec-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="ac43ad3e-9b07-4981-8114-d187d3cf6dbf"><strong>WAN :</strong> Wide Area Network <a href="#ac43ad3e-9b07-4981-8114-d187d3cf6dbf-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="103fd0e8-cd60-41ff-b80a-9c51d9c20b76"><strong>DMZ : </strong>DeMilitarized Zone <a href="#103fd0e8-cd60-41ff-b80a-9c51d9c20b76-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="2f21ddb8-be62-4029-92fc-283d894d896c"><strong>VM :</strong> Virtual Machine <a href="#2f21ddb8-be62-4029-92fc-283d894d896c-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="96e1bb31-3abc-4f7d-9141-265b48fe943e"><strong>CLI : </strong>Command Line Interface <a href="#96e1bb31-3abc-4f7d-9141-265b48fe943e-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="1a3ccfdd-7fad-428c-9f9a-15401188579d"><strong>TLS :</strong> Transport Layer Security <a href="#1a3ccfdd-7fad-428c-9f9a-15401188579d-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="6f19f21f-54c7-433f-8a76-3c3d830f4eda"><strong>NDD :</strong> Nom De Domaine <a href="#6f19f21f-54c7-433f-8a76-3c3d830f4eda-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="a61fa4e1-f1b4-4118-a125-8ff2b30744bb"><strong>SSH :</strong> Secure SHell <a href="#a61fa4e1-f1b4-4118-a125-8ff2b30744bb-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; OLLAMA</title>
		<link>https://erwanguillemard.com/apps-ollama/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 11:32:22 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3440</guid>

					<description><![CDATA[Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose. Robot : nom masculin, du tchèque robota, travail forcé, mot créé en 1920 par K. Capek. Dans les œuvres de science-fiction, machine à l&#8217;aspect humain, capable de se mouvoir, d&#8217;exécuter des opérations, de parler. Appareil automatique capable de manipuler des...]]></description>
										<content:encoded><![CDATA[
<p>Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-small-font-size"><strong>Robot :</strong> nom masculin, du tchèque <strong>robota</strong>, travail forcé, mot créé en 1920 par K. Capek.</p>



<p class="has-small-font-size"><em>Dans les œuvres de science-fiction, machine à l&rsquo;aspect humain, capable de se mouvoir, d&rsquo;exécuter des opérations, de parler.</em></p>



<p class="has-small-font-size"><em>Appareil automatique capable de manipuler des objets ou d&rsquo;exécuter des opérations selon un programme fixe, modifiable ou adaptable.</em></p>
<cite><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></cite></blockquote>



<p>Au vu du titre de cet article et de la définition posée précédemment, difficile de ne pas deviner le sujet qui va être abordé.</p>



<p>Hé oui, moi le puriste, je vais parler d&rsquo;IA<sup data-fn="cfefe833-a7a4-4019-87c1-c684487526cf" class="fn"><a href="#cfefe833-a7a4-4019-87c1-c684487526cf" id="cfefe833-a7a4-4019-87c1-c684487526cf-link">1</a></sup> et pire que cela l&rsquo;utiliser de manière récurrente. Je me sens en ce moment comme le capitaine Haddock face au lama dans l&rsquo;œuvre d&rsquo;Hergé, Tintin et le temple du soleil.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="504" height="267" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg" alt="" class="wp-image-3444" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin-300x159.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /></figure>
</div>


<p>Naturellement, au vu de mes précédents écrits, c&rsquo;est vous lecteurs et l&rsquo;ensemble des solutions IA qui me crachent dessus. C&rsquo;est l&rsquo;arroseur arrosé en somme, moi qui ne voulais pas entendre parler de ça&#8230;</p>



<p class="has-text-align-center"><strong>Mais alors pourquoi un tel revirement de situation M&rsquo;sieur GUILLEMARD ?</strong></p>



<p>Je pense qu&rsquo;il faut vivre avec son temps et ignorer cet outil technologique serait signer mon arrêt de mon mort d&rsquo;ici quelques années et devenir un être <strong><em>never been</em></strong> à défaut d&rsquo;<strong><em>has been</em></strong>&#8230;</p>



<p class="has-text-align-center"><strong>Après tout <em><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0404" class="has-inline-color">Errare humanum est, perseverare diabolicum</mark></em></strong><sup data-fn="aadcbef0-7f66-4bcf-bdef-699e3c85609a" class="fn"><a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a" id="aadcbef0-7f66-4bcf-bdef-699e3c85609a-link">2</a></sup><strong> non ?</strong></p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p>J&rsquo;ai pris le parti d&rsquo;être méfiant vis à vis des outils d&rsquo;IA en ligne gratuit ou du moins libre d&rsquo;utilisation.</p>



<ul class="wp-block-list">
<li>ChatGPT</li>



<li>Gemini</li>



<li>Copilot</li>



<li>Claude</li>



<li>&#8230;</li>
</ul>



<p>Je ne me mouille pas trop dans les moteurs d&rsquo;IA&#8230;</p>



<p>Dire que je n&rsquo;ai jamais utilisé l&rsquo;un de ces moteurs serait me parjurer et il faut reconnaitre qu&rsquo;il y a un côté pratique. Difficile une fois avoir gouter à la simplicité pour ne pas l&rsquo;utiliser à tout va pour tout et rien. C&rsquo;est là pour moi le piège de la pauvreté intellectuelle. Comme toutes les bonnes choses il faut savoir ne pas en abuser.</p>



<p>En dehors de l&rsquo;aspect social et sociétal qui me préoccupe tant, se pose la question des données saisies dans le moteur de recherche ou plutôt de prompt.</p>



<ul class="wp-block-list">
<li>Que deviennent les données saisies ?</li>



<li>Que deviennent les données retournées ?</li>



<li>Combien de temps sont conservés ces données ?</li>



<li>A qui profitent ces données ?</li>



<li>Qui sur surveillent les données ?</li>
</ul>



<p>Cela fait un bon nombre de question non ? Surtout qu&rsquo;un grand nombre des acteurs de l&rsquo;IA sont aux US, Chine etc avec une législation bien singulière. Qui de nos jours lis encore les CGUs<sup data-fn="b41451ff-b3b4-4f38-bb68-9645125a745a" class="fn"><a href="#b41451ff-b3b4-4f38-bb68-9645125a745a" id="b41451ff-b3b4-4f38-bb68-9645125a745a-link">3</a></sup> (et qui les a déjà lus) ?</p>



<p>C&rsquo;est ainsi que grâce à mon directeur j&rsquo;ai découvert la solution OLLAMA. Solution open-source qui exécute des modèles d&rsquo;intelligence artificielle (aussi appelé LLM<sup data-fn="1aad26f0-eec5-4a0f-8e20-fdd248a35c69" class="fn"><a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69" id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link">4</a></sup>) localement. Tout de suite, le projet m&rsquo;a séduit et je me suis demandé</p>



<p class="has-text-align-center"><strong>Et pourquoi pas ? </strong></p>



<p>Dans le pire des cas, je mourrai moins c*n ce soir comme dirait un philosophe du cercle familial.</p>



<p>Naturellement, j&rsquo;ai choisi d&rsquo;user de OLLAMA sur ma distribution favorite RockyLinux. L&rsquo;environnement a été préalablement durci.</p>



<p>On se lance dans la théorie puis dans la pratique mes petits Lamas ?</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.x et version ultérieures (pour ma part ça sera du 10.x)</li>



<li>macOS</li>



<li>Windows</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>GPU<sup data-fn="fdf3a5b9-4253-464d-a09e-8fb86b58314e" class="fn"><a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e" id="fdf3a5b9-4253-464d-a09e-8fb86b58314e-link">5</a></sup></li>



<li>Minimum 4 CPU<sup data-fn="73029218-b1cc-46cd-b970-647ebf9d8979" class="fn"><a href="#73029218-b1cc-46cd-b970-647ebf9d8979" id="73029218-b1cc-46cd-b970-647ebf9d8979-link">6</a></sup></li>



<li>Stockage rapide (SSD<sup data-fn="a37422d2-85b9-4b20-aaed-ed832709d897" class="fn"><a href="#a37422d2-85b9-4b20-aaed-ed832709d897" id="a37422d2-85b9-4b20-aaed-ed832709d897-link">7</a></sup> ou Nvme)</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p>Je vais essayer d&rsquo;être le moins rassoir possible. Toutefois et encore il est nécessaire d&rsquo;où nous partons pour en être là maintenant avec l&rsquo;IA.</p>



<h3 class="wp-block-heading">Un peu d&rsquo;histoire</h3>



<p>La notion d&rsquo;intelligence artificielle vient de loin dans notre histoire, puisque l&rsquo;homme depuis l&rsquo;antiquité rêve d&rsquo;objets animés intelligents qui pourraient répondre à ces besoins.</p>



<p>Ce qui est fascinant ce trouve dans les différentes cultures à travers les âges. Que ce soit :</p>



<ul class="wp-block-list">
<li>Les <a href="https://fr.wikipedia.org/wiki/H%C3%A9pha%C3%AFstos">automates d&rsquo;Héphaïstos</a> dans la mythologie grecque</li>



<li>La tentation de créé l&rsquo;Homme servi par l&rsquo;alchimie aux moyen âge comme la science Talkim du grand savant islamique <a href="https://fr.wikipedia.org/wiki/Jabir_ibn_Hayyan">Jabir ibn Hayyan</a> (Geber en latin), des <a href="https://fr.wikipedia.org/wiki/Homoncule_(alchimie)">homoculus</a> par le médecin suisse de conviction chrétienne <a href="https://fr.wikipedia.org/wiki/Paracelse">Paracelse</a> qui s&rsquo;inspirera des travaux de <a href="https://fr.wikipedia.org/wiki/Zosime_de_Panopolis">Zosime de Panopolis</a> sans oublier l&rsquo;un des plus connue de tous ces automates, le Golem d&rsquo;argile présent dans le Talmud du judaïsme, créé par le rabbin Maharal pour protéger la communauté juive de Prague face aux multiples pogroms (j&rsquo;ai d&rsquo;ailleurs eu la possibilité de visiter le cimetière juif de Prague et de comprendre tout cela).</li>



<li>Plus tard, nous retrouverons des œuvres telles que
<ul class="wp-block-list">
<li><a href="https://fr.wikipedia.org/wiki/Les_Aventures_de_Pinocchio">Les Aventures de Pinocchio</a> de <a href="https://fr.wikipedia.org/wiki/Carlo_Collodi">Carlo Collodi</a> avant d&rsquo;être adapté en dessin animé par Disney</li>



<li><a href="https://fr.wikipedia.org/wiki/Frankenstein_ou_le_Prom%C3%A9th%C3%A9e_moderne">Frankenstein</a> de <a href="https://fr.wikipedia.org/wiki/Mary_Shelley">Mary Shelley</a></li>



<li>Ou encore <a href="https://fr.wikipedia.org/wiki/Deep_Blue">Deep Blue</a> qui viendra à bout de <a href="https://fr.wikipedia.org/wiki/Garry_Kasparov">Garry Kasparov</a> aux échecs.</li>
</ul>
</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Bref, tout cela pour dire que depuis l&rsquo;origine de l&rsquo;humanité, nous Homme recherchons à créer des objets autonomes et intelligents à notre services. Pour de multiples raisons, défensives, assistanat etc. Le plus troublant, cette pensée de création pourtant contre religieuse et présente dans toutes les cultures et religions portées par ces savants et lettrés (et ça, voyez-vous je trouve ça beau, très beau).</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="867" class="wp-image-3481" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg" alt="Kafka &amp; Prague Golem" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-225x300.jpg 225w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-768x1024.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1152x1536.jpg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1536x2048.jpg 1536w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>Enfin, il faudra attendre le XXème siècle et l&rsquo;arrivée des premiers ordinateur programmable pour que l&rsquo;IA se développe pleinement.</p>



<p>C&rsquo;est le pionnier et j&rsquo;oserai dire le père de l&rsquo;IA John McCarthy qui ouvre la voie, notamment par cette citation :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>C&rsquo;est la science et l&rsquo;ingénierie de la fabrication de machines intelligentes, en particulier de programmes informatiques intelligents. Elle est liée à la tâche similaire qui consiste à utiliser des ordinateurs pour comprendre l&rsquo;intelligence humaine, mais l&rsquo;IA ne doit pas se limiter aux méthodes qui sont biologiquement observables.</em></p>
<cite>John McCarthy &#8211; <a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia</a></cite></blockquote>



<p>Le sujet étant réellement complexe, il est difficile de concrétiser et de répondre aux attentes des investissements privés et étatiques durant la période 70 à 80. Ce qui vaudra un ralentissement dans la rechercher et la montée en puissance de l&rsquo;IA que nous connaissons ce jour en 2026. Et pourtant les théories et grands principes mathématiques et logiques sont établis et adopté par la DARPA<sup data-fn="551f4327-d659-4f5e-aa79-e901800f9a6f" class="fn"><a href="#551f4327-d659-4f5e-aa79-e901800f9a6f" id="551f4327-d659-4f5e-aa79-e901800f9a6f-link">8</a></sup>. C&rsquo;est ainsi que s&rsquo;affronte deux grands systèmes :</p>



<p class="has-text-align-center"><strong>Le système logiciste <em>VS</em> Le système neuronale</strong></p>



<p>C&rsquo;est en 2010, que l&rsquo;IA fait réellement son entrée dans nos vies du quotidien et dans les différents secteurs d&rsquo;activités.</p>



<p>Pour entrer davantage dans le détail je vous invite à lire la page wikipédia (cf les sources). J&rsquo;ai promis de faire court. 🙂</p>



<h3 class="wp-block-heading">Les modèles d&rsquo;IA</h3>



<p>Les modèles d&rsquo;IA, c&rsquo;est un peu comme un oignon, il y plusieurs couches.</p>



<p>Déjà il est important de dissocier le Machine Learning du Deep Learning.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_904b9a-45 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b2140d-05"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Machine Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="954" height="252" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg" alt="" class="wp-image-3494" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg 954w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-300x79.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-768x203.jpg 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></figure>
</div>


<p>Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 3 :</span></strong> Construire le modèle d&rsquo;analyse basé sur l&rsquo;algorithme choisie lors de l&rsquo;étape précédente.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Utiliser le modèle pour attribuer une note à l&rsquo;ensemble des jeux de données retournés et fournier des patterns pertinents adaptés aux datasets initiaux.</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_61862a-a3"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Deep Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="944" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg" alt="" class="wp-image-3495" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg 944w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-300x73.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-768x187.jpg 768w" sizes="auto, (max-width: 944px) 100vw, 944px" /></figure>
</div>


<p>Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Comprendre le contexte présenté par l&rsquo;utilisateur et décider ou non si le Deep Learning est nécessaire ou non.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><span style="text-decoration: underline;"><strong>Phase 3 :</strong></span> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Compare le modèle ainsi que ces performances face aux données existantes identifiés ou non identifiées avec notre contexte initial.</li>
</ul>
</div></div></div>
</div></div></div>



<p></p>



<p>Pour le comprendre au mieux, il convient de reprendre le <strong><em>Diagramm de Venn</em></strong> pour comprendre comment s&rsquo;imbriquent ces différentes notions d&rsquo;apprentissage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><strong>IA :</strong> a pour objectif de comprendre le langage humain, de réaliser les analyses prédictives offrir une IHM<sup data-fn="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" class="fn"><a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link">9</a></sup> et AGI<sup data-fn="3da01144-9884-4e50-80b3-cb720fe5d120" class="fn"><a href="#3da01144-9884-4e50-80b3-cb720fe5d120" id="3da01144-9884-4e50-80b3-cb720fe5d120-link">10</a></sup>.<br><br><strong>Machine Learning :</strong> se compose de l&rsquo;apprentissage automatique, la clustérisassions, les arbres décisionnels, le SVM<sup data-fn="6b6187e7-bf8d-4671-888c-ddabe2812f2a" class="fn"><a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a" id="6b6187e7-bf8d-4671-888c-ddabe2812f2a-link">11</a></sup>, LLM et NLP<sup data-fn="2ccacfdc-8014-4064-9420-0e51ef9e2778" class="fn"><a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778" id="2ccacfdc-8014-4064-9420-0e51ef9e2778-link">12</a></sup>.<br><br><strong>Réseaux Neuronales :</strong> comprend les RAG<sup data-fn="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" class="fn"><a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link">13</a></sup> / Finetuning ainsi que les Feed Forward.<br><br><strong>Deep Learning</strong></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="494" class="wp-image-3496" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn-300x269.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Bien que rapide dans la présentation, de ce qu&rsquo;est l&rsquo;IA, je pense que nous avons suffisamment d&rsquo;éléments pour aborder les différents types d&rsquo;IA. </p>



<p><em>Toutefois, je suis loin d&rsquo;être spécialiste de l&rsquo;IA et mes connaissances théoriques remontent de mes cours de 2014 et de ce que j&rsquo;ai pu lire et apprendre depuis ces dernières semaines. Je vous invite donc à lire plus en détails son fonctionnement en profondeur.</em></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_aa8e5f-c2 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c6b1c8-9f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Réactive</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>C&rsquo;est la forme la plus élémentaire d&rsquo;IA qui se base sur des situations spécifiques limitées par des règles prédéfinies. Le traitement des entrées sont réalisées en temps réel sans prendre en compte les retours précédents afin de ne pas influer sur la décision qui va être retournée.</p>



<p>De par sa simplicité, ce type d&rsquo;IA est efficace dans certains contextes ou rapidité et spontanéité sont nécessaires dans un traitement en temps réel. Et c&rsquo;est ainsi que l&rsquo;on retrouve ce type d&rsquo;IA dans les chatbots.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_67b18a-3d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Limitée à la Mémoire</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Dans un sens le grand frère de l&rsquo;IA Réactive, la présence de mémoire permet à l&rsquo;IA d&rsquo;apprendre et d&rsquo;évoluer en prenant compte les retours des entrées précédentes. Pour chaque recherche, le système d&rsquo;IA va consulter sa base de connaissance afin de fournir une réponse la plus fiable possible.</p>



<p>Automatiquement, la qualité de la réponse ainsi que sa fiabilité dépendront du nombre d&rsquo;entrée que cette dernière aura en mémoire et va avoir un certain mal à répondre en temps réel. Nous retrouvons principalement son usage sur les sites e-commerces pour proposer des produits similaires à ceux consultés ou consommés par l&rsquo;utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_037cc9-55"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Auto Consciente</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Ce type d&rsquo;IA consiste en théorie à insuffler un état de conscience à la machine afin que cette dernière soit une entité à part entière capable de comprendre son propre état.</p>



<p>Naturellement, aujourd&rsquo;hui toujours en recherche, ce type d&rsquo;IA permettrait une autonomie totale de l&rsquo;IA car cela permettrait des facultés d&rsquo;apprentissages, d&rsquo;adaptations et de réflexions incroyable dans les choix décisionnels.</p>



<p>Se pose alors dans les recherches un questionnement éthique et nécessite encore de percer sur le plan humain le fonctionnement de la conscience qui nous habite. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_690749-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle La théorie de l&rsquo;esprit</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Le dernier type, c&rsquo;est vivre dans le turfu. Cela serait d&rsquo;avoir une IA dotée d&rsquo;un esprit. Soit d&rsquo;avoir une IA capable de comprendre et d&rsquo;adapter les émotions, intentions et croyances d&rsquo;autres IA comme de notre environnement. Pour faire simple, une machine qui serait un humain ++.</p>



<p>Le questionnement sur l&rsquo;éthique devient plus important au vu des implications vie privée, consentement etc. Manquerait plus que de finir comme <a href="https://www.youtube.com/watch?v=I8oRqko7OG4">Sarah Connor</a>&#8230; </p>
</div></div></div>
</div></div></div>



<p></p>



<p>Bon allez ça sera tout pour l&rsquo;instant. Regardons de plus prêt Ollama. 🙂</p>



<h3 class="wp-block-heading">Architecture et Best-Pratices</h3>



<p>Ollama étant cross plateform, j&rsquo;ai pris le parti de déployer ce dernier sous RHEL. Donc le guide va suivre dans ce sens. Ce choix est motivé par mes soins pour garder une meilleure maitrise des ressources qui vont être consommées par le système. Pour MacOS, je ne me prononce pas car je n&rsquo;utilise pas ce dernier. Sous Windows, je voyais déjà mon petite dernier faire du rodéo sur l&rsquo;hyperviseur qui gambade dans le couloir au premier prompt soumis&#8230; 🙂</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Comme énoncé ci-haut, il faut au minimum en ressource :<br>* 4 vCPUs<br>* 16 Gio de RAM<br>* 2 Gio de GPU<br>* Stockage Rapide<br><br>Malheureusement pour moi, je n&rsquo;ai pas les ressources nécessaires, mais cela ne m&#8217;empêchera pas d&rsquo;aller au bout des choses.<br><br>Je propose toutefois de dissocier les modèles et une partie de l&rsquo;architecture OLLAMA sur un disque dédié pour des raisons de performances lors de la soumissions des prompts et ne pas saturer le disque système.<br><br>L&rsquo;accès à l&rsquo;application se fera par des call API<sup data-fn="75955ef0-37da-444b-ba62-3eced558a61a" class="fn"><a href="#75955ef0-37da-444b-ba62-3eced558a61a" id="75955ef0-37da-444b-ba62-3eced558a61a-link">14</a></sup> sur le port <strong>11434/tcp</strong>.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="245" class="wp-image-3503" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg 646w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp-300x134.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Si nous voulions aller plus loin il serait bien de dédié un disque pour les logs et ainsi améliorer les performances.</p>



<p>Niveau sécurité, je suis resté sur mon durcissement classique et divulgâchage alerte ça fonctionne (Jacques TOUBON, le retour aurait été fier de moi pour ce coup-là !).</p>



<p>Je ne vois plus qu&rsquo;un dernier point à aborder et nous pouvons passer à la pratique. Oui comme toute bonne chose, il faut faire durer le plaisir. <strong><em>#sendkisses</em></strong></p>



<h3 class="wp-block-heading">Conséquences de l&rsquo;IA</h3>



<p>L&rsquo;IA est à ce jour (2025) adopté par environ 2/3 de la population mondiale que ce soit à des fins professionnels ou personnels dont environ 73% dans le contexte pro. Ainsi, difficile de nier que l&rsquo;usage particulier et bien au-dessus des institutions organisationnelles.</p>



<p>Comme énoncé bien plus tôt dans cette partie, l&rsquo;usage est principalement à destination des centres de services et à destination des utilisateurs (chatbots, service clients) 60%, l&rsquo;automatisation des ventes et marketings 13%, l&rsquo;optimisation des systèmes IT 9%, l&rsquo;aide à la décision entre 5 et 10% et la production de contenu entre 5 et 10% également. Bien que mes chiffres date de 2023-2024.</p>



<p>Dans son usage concrets, l&rsquo;IA est utilisée à 46% pour la recherche d&rsquo;informations, 43% pour la rédaction de textes et 33% pour de l&rsquo;analyse ou traduction.</p>



<p>Les estimations à venir d&rsquo;ici 2030 seraient un usage de l&rsquo;IA par 80 à 85% de la population mondiale. Cette escalade et course n&rsquo;est pas sans conséquence sur le plan économique et disponibilité des ressources en termes de composants électroniques.</p>



<p>Qui dit plus d&rsquo;usage, dit plus de ressource de calcul et donc plus de composants et plus d&rsquo;énergie. Le système peine à suivre. C&rsquo;est ainsi qu&rsquo;en moyenne, l&rsquo;évolution des couts entre 2024 et 2026 (estimé sur le plan mondial) et de :</p>



<ul class="wp-block-list">
<li>RAM (DDR5) : +170 à +250 %</li>



<li>SSD : +60 à +100 %</li>



<li>GPU : +10 à 25 %</li>



<li>CPU : +0% à +10%</li>
</ul>



<p>Cela entraine donc une hausse des offres Cloud et service SaaS/IaaS/PaaS/BaaS et j&rsquo;en passe ainsi que des couts équipements embarquant ce type de composants. Difficile de faire sans IA de nos jours.</p>



<p>Bon c&rsquo;est promis, passe à la pratique, je ferme la parenthèse que je n&rsquo;ai jamais ouverte.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p>Avant de se lancer dans l&rsquo;installation, si je reprends les prérequis énoncés ci-haut, sachez que :</p>



<ul class="wp-block-list">
<li>Je n&rsquo;ai pas de GPU</li>



<li>Je n&rsquo;ai pas de stockage rapide</li>



<li>Mon hypervisieur est monoprocesseur</li>
</ul>



<p>Tout pour bien fonctionner en somme 🙂</p>



<h3 class="wp-block-heading">Installation</h3>



<p>L&rsquo;installation va se dérouler en 2 parties. Une partie pour installer Ollama, une partie pour l&rsquo;installation des modèles d&rsquo;intelligence artificielle.</p>



<h4 class="wp-block-heading">Ollama</h4>



<h5 class="wp-block-heading">Installation</h5>



<p>La documentation fournit sur le site est simple et claire. Il suffit alors de télécharger et d&rsquo;exécuter le contenu du script install.sh.</p>



<p>Vérifier en amont que le paquet <strong>zstd</strong> est installé sur notre environnement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-78e91345c70998de458fa9707149535d"><code><strong>$ sudo dnf install zstd</strong></code></pre>



<p>Si nous rentrons plus en détail, les arguments :<br></p>



<ul class="wp-block-list">
<li><strong>-f</strong> : ignore les redirections en cas de retour autre que le code 200 du protocole HTTP<sup data-fn="6ad53fdd-7b83-46bd-8608-5b89bf94b781" class="fn"><a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781" id="6ad53fdd-7b83-46bd-8608-5b89bf94b781-link">15</a></sup></li>



<li><strong>-s</strong> : supprime la barre de suppression et rend l&rsquo;exécution de la commande silencieuse</li>



<li><strong>-S</strong> : indique les erreurs</li>



<li><strong>-L</strong> : permet de suivre les redirections HTTP</li>
</ul>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fdc9c501862a41c5e35dd5d3ba3d3a99"><code><strong>$ sudo curl -fsSL https://ollama.com/install.sh | sh</strong></code></pre>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention : </strong>Il est vivement recommandé en amont avant d&rsquo;exécuter un script téléchargé depuis le net de vérifier son contenu et de lire ce dernier. Question de sécurité. Sinon cela revient encore une fois à s&rsquo;étonner d&rsquo;avoir attrapé <em>une gonorrhée après être allé aux p*tes sans capotes</em>&#8230;<br><br><strong>$ sudo curl -fsSL https://ollama.com/install.sh | cat</strong><br></td></tr></tbody></table></figure>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg" alt="" class="wp-image-3453" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-300x77.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-768x197.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1.jpg 1246w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>L&rsquo;installation c&rsquo;est bien passée. Toutefois, le script nous informe qu&rsquo;aucun équipement GPU n&rsquo;a été détecter et donc que les calculs seront effectués par notre CPU. Ce qui va donc être plutôt lent dans mon cas personnel.</p>



<h5 class="wp-block-heading">Service au démarrage</h5>



<p>Nous retrouvons une commande maintenant bien connue dans les environnements RHEL. Ainsi à chaque démarrage de notre système notre daemon ollama va être démarré.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-60892f41106e2af5ff1e267db4089e0f"><code><strong>$ sudo systemctl enable ollama</strong></code></pre>



<h5 class="wp-block-heading">Firewalling</h5>



<p>Encore une fois et comme toujours, il est nécessaire d&rsquo;ouvrir le port <strong>11434/tcp</strong> si nous souhaitons joindre l&rsquo;API depuis l&rsquo;extérieur (comprendre hors localhost).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-87b1a8a000363e2b11cfacb574e43b19"><code><strong>$ sudo firewall-cmd --permanent --add-port=11434/tcp</strong><strong>
$ sudo firewall-cmd --reload</strong></code></pre>



<p>On est d&rsquo;accord que si nous souhaiterions mieux faire en termes de sécurité, il serait plus intelligent de créer la policy suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7cd1a4145b8e795efe3d5c6a206c573b"><code><strong>$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.127.50.0/24" port port="11434" protocol="tcp" accept'
$ sudo firewall-cmd --reload</strong></code></pre>



<p>Ayant un UTM<sup data-fn="ff1afc50-05de-4bce-91e3-563ae4b9fe9f" class="fn"><a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f" id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link">16</a></sup> en amont, je me permets donc de me contenter de la première solution.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="908" height="399" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg" alt="" class="wp-image-3455" style="aspect-ratio:2.275705027150114;width:587px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg 908w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-300x132.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-768x337.jpg 768w" sizes="auto, (max-width: 908px) 100vw, 908px" /></figure>
</div>


<h5 class="wp-block-heading">HTTP ou HTTPS ?</h5>



<p class="has-text-align-center"><strong>Un doute m&rsquo;habite&#8230; Le port 11434/tcp, ça ne serait pas du http ?</strong></p>



<p>Bien vu l&rsquo;aveugle ! Effectivement et niveau sécurité c&rsquo;est pas super, il faudrait mieux user du protocole https. Pour ça, j&rsquo;ai une solution passons par un reverse proxy 🙂</p>



<p>Je suis partagé quant à la rédaction de cette sous partie. Oui il est important de sécuriser l’accès à l’interface Web, mais j’ai peur d’être hors sujet et d’alourdir l’article. Mais d’un autre côté, je ne veux pas non plus bâcler la chose… Encore un pu**n de choix cornélien…</p>



<p>Bref, je vais faire au plus simple et si besoin écrirai un billet sur Nginx.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_5739eb-e1 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_2c1931-a6"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>L’installation et activation du service, je passe mon tour.</p>



<p></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2d96c8f801e10588d862a20dfe6ac0cb"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="939" height="450" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg" alt="" class="wp-image-3573" style="aspect-ratio:2.086739469578783;width:317px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-300x144.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-768x368.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="83" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg" alt="" class="wp-image-3572" style="aspect-ratio:11.302070130967468;width:339px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-300x27.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-768x68.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_a9caf1-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Certificats</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Là encore une fois je rencontre un petit problème. Je n’ai pas de certificat public que je pourrais utiliser, ma topologie réseau ne me permet pas d’utiliser un certificat Let’s Encrypt et sans vouloir spoiler je n’ai pas envie de me prendre la tête. Donc ça va finir avec un bon vieux certificat autosigné 🙂</p>



<p>La génération n’est pas bien compliquée et si besoin, j’ai déjà rédigé&nbsp;<a href="https://erwanguillemard.com/linux-certificats/">un article</a>&nbsp;sur le sujet.</p>



<p>Créons le répertoire qui va contenir nos éléments de sécurité :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-16d3dda1539c5bf2a831ca2965909c37"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p>Générons notre certificat :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d734dc3e16717cda0e24e481dbf0df76"><code><strong>$ sudo openssl req req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/ollama.key \
-out /etc/nginx/ssl/ollama.crt</strong></code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_01a91a-c2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Configuration</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Créons et éditons notre fichier de configuration. Je prendrai le temps d’expliquer l’intégralité du fichier de configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9bc0a5fa80b33bf1ad1ef6a3d6a46601"><code><strong>$ sudo vim /etc/nginx/conf.d/ollama.conf</strong></code></pre>



<pre class="wp-block-code"><code>#server {
#    listen 80;
#    server_name 10.227.250.11;
#
#    return 301 https://$host$request_uri;
#}

server {
    listen 11444 ssl;
    http2 on;
    server_name 10.227.250.11;

    ssl_certificate /etc/nginx/ssl/ollama.crt;
    ssl_certificate_key /etc/nginx/ssl/ollama.key;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # taille upload
    client_max_body_size 100M;

    # compression
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

    location / {

        proxy_pass http://10.227.250.11:11434;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffering off;

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première section permet de réaliser la redirection du protocole HTTP vers HTTPS de manière permanente. Ainsi si je contacte l’url http://10.227.250.11, je serais automatiquement redirigé vers https://10.227.254.11.<br>Toutefois, la section est commentée car elle entre en conflit avec une autre configuration d&rsquo;un billet à venir 😉</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="324" height="148" class="wp-image-3737" style="width: 324px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg 349w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0-300x137.jpg 300w" sizes="auto, (max-width: 324px) 100vw, 324px" /></td></tr><tr><td>Le second bloc indique que nous écoutons sur le port 11444 sur l’interface 10.227.250.11. L’emplacement des fichiers contenant la clé privée ainsi que le certificat sont spécifiés pour activer la couche de sécurité (j’ai l’impression d’enfoncer des portes ouvertes…). J’indique qu’elles sont les versions des protocoles TLS<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#1a3ccfdd-7fad-428c-9f9a-15401188579d">17</a></sup>&nbsp;autorisées et laisse le serveur choisir le chiffrement le plus sûr.<br>Côté en-tête, j’ai repris les suggestions de sécurité implémentée pour ITOP. Soit la restriction de mettre le site en iframe externe, de restreindre le navigateur à deviner le tye MIME qui est utilisé et surtout d’activer la protection anti-cross-site scripting. Niveau upload, j’ai vu large et j’ai autorisé le téléversement de fichier de 100 Mio.<br>Côté performance, j’ai activé la compression des flux pour optimiser un peu les performances réseaux.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="457" class="wp-image-3738" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg 663w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1-300x249.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le troisième bloc concerne la partie Reverse Proxy.<br>Toutes les requêtes qui sont envoyées sur https://10.227.250.11 sont redirigées vers le port 11434.<br>Concernant les en-têtes il est nécessaire d’utiliser les websockets car seront transmis l’ip du client, le protocole utilisé et le NDD<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#6f19f21f-54c7-433f-8a76-3c3d830f4eda">18</a></sup>&nbsp;ou l’IP demandé.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="368" class="wp-image-3739" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg 533w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2-300x201.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p>Une fois la configuration faite, il est important de réaliser un petit contrôle de notre petit fichier afin de s’assurer que ce dernier ne comporte pas d’erreur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c0a5cd62be5632132cc71ae703da0130"><code><strong>$ sudo nginx -t 
$ sudo systemctl restart nginx</strong></code></pre>



<p>Tiens une erreur 🙂 Regardons ça dans la partie suivante&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_aa7045-77"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurité</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p>Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p>Sur le plan interne, autorisons nos flux https :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-82f39b4be835c163c84ee4674bd33142"><code><strong>$ sudo firewall-cmd --permanent --add-port=11444/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p>Toutefois lors de la relance du service on se tape une bonne grosse erreur. C&rsquo;est lié au SELinux. Nginx n&rsquo;est pas autorisé par le SELinux a écouter sur le port 11444. Donc il faut l&rsquo;autoriser.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7d61726b3583615abe3b3620597d056f"><code><strong>#Install semanage
$ sudo dnf install policycoreutils-python-utils

#Ajout du port comme autorisé à l'écoute
$ sudo semanage port -a -t http_port_t -p tcp 11444</strong>

<strong>#Relance du service nginx</strong>
<strong>$ sudo systemctl restart nginx</strong></code></pre>



<p>Normalement nous ne devons plus avoir d&rsquo;erreur. Toutefois si nous essayons de joindre l&rsquo;url <strong>https://egapl-ollama-01:11444</strong> nous devons avoir un jolie 502 Bad Gateway dans notre navigateur 😀</p>



<p>Ca vous fait la b**e hein ? Je vous rassure je me suis pris la même rouste. J’ai oublié d’autoriser le contexte de mon SELinux pour autoriser les services http à accéder aux réseaux 😀</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a7c965cb0ad20254d3dd67e1b9cd6ce2"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>



<p>Un petit F5 et hop c’est tout bon &lt;3</p>



<p></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement avec toutes nos actions, nous devons joindre notre interface web depuis un navigateur de manière sécurisée (hormis l’erreur liée à notre certificat autosigné).</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="257" class="wp-image-3740" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg 1098w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-300x140.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-1024x478.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-768x359.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h5 class="wp-block-heading">Emplacement des modèles</h5>



<p>Lors de ce benchmark, j&rsquo;ai été confronté à un problème d&rsquo;espace disque lié aux modèles. Effectivement, les modèles sont au minimum supérieur à 3 Gio. Et c&rsquo;est là que c&rsquo;est le drame car « pouf » je me tape un message d&rsquo;erreur&#8230;</p>



<p>La solution est donc de déplacer le répertoire de modèle vers un autre disque. J&rsquo;ai vu large, j&rsquo;ai provisionné 100 Gio. Je pars du principe que le disque est monté et formaté.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-36428a3107c846deceb061ab8803f4e9"><code><strong>$ sudo chown -R ollama:ollama /mnt/ollama</strong></code></pre>



<p>Le changement de l&#8217;emplacement du répertoire du modèle va se faire par surcharge du service qui démarre Ollama. Naturellement, on ne modifie pas le service de base car les changements ne seront pas persistants. D&rsquo;où la surcharge&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7441047b0f606bc5e946cd75efce1071"><code><strong>$ sudo mkdir /etc/systemd/system/ollama.service.d
$ sudo vim /etc/systemd/system/ollama.service.d/override.conf</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Service]
Environment="OLLAMA_DEBUG=1"
Environment="OLLAMA_MODELS=/mnt/ollama/ollama-models"
Environment="OLLAMA_HOST=0.0.0.0"</strong>
</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="590" height="102" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg" alt="" class="wp-image-3456" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg 590w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2-300x52.jpg 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></figure>
</div>


<p>Notons que le mode <strong>Debug</strong> est actif et que le chemin de nos modèles est défini. J&rsquo;ai également défini la variable <strong>OLLAMA_HOST</strong> qui va nous permettre de joindre notre application depuis une source externe à notre machine.</p>



<p>Il convient alors de recharger, forcer le gestionnaire de services à recharger l&rsquo;ensemble de ses configurations. Dans un second temps nous redémarrerons le daemon ollama afin de prendre en considération les changements présents dans notre fichier de surcharge. Par mesure de sécurité (car la confiance n&rsquo;exclut pas le contrôle) j&rsquo;aime à vérifier que le service est bien actif.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-e4dd388e47a00051adc0be7943572985"><code><strong>$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama
$ sudo systemctl status ollama
$ sudo ls -al /mnt/ollama/ollama-models/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="438" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg" alt="" class="wp-image-3457" style="aspect-ratio:2.3379521324455643;width:566px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-300x128.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-768x328.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4.jpg 1128w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Dans les sources, nous pouvons constater la présence de nos variables surcharger. Néanmoins nous pouvons afficher le contenu de notre répertoire cible pour les modèles afin de vérifier que l&rsquo;arborescence est bien présente.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="654" height="130" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg" alt="" class="wp-image-3458" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3-300x60.jpg 300w" sizes="auto, (max-width: 654px) 100vw, 654px" /></figure>
</div>


<h4 class="wp-block-heading">Installer des modèles</h4>



<p>J&rsquo;ai fait le parti car c&rsquo;est « un peu » l&rsquo;objectif de base de ce billet d&rsquo;avoir des modèles locaux qui vont être utilisés. Je ne souhaite pas utiliser des connexions avec des sources externes afin de garder un contrôle sur mes recherches et usage.</p>



<p>J&rsquo;ai fait le choix d&rsquo;étudier 4 modèles LLM :</p>



<ul class="wp-block-list">
<li>Llama3</li>



<li>Qwen</li>



<li>Mistral</li>



<li>DeepSeek-Coder</li>
</ul>



<p>Je propose dans un premier temps de faire un comparatif de ces modèles.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Critères</strong></td><td class="has-text-align-center" data-align="center"><strong>Llama 3</strong></td><td class="has-text-align-center" data-align="center"><strong>Qwen</strong></td><td class="has-text-align-center" data-align="center"><strong>Mistral</strong></td><td class="has-text-align-center" data-align="center"><strong>DeepSeek-Coder</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Editeur</strong></td><td class="has-text-align-center" data-align="center">Meta</td><td class="has-text-align-center" data-align="center">Alibaba</td><td class="has-text-align-center" data-align="center">Mistral AI</td><td class="has-text-align-center" data-align="center">DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Type</strong></td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Spé code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Usage</strong></td><td class="has-text-align-center" data-align="center">Populaire</td><td class="has-text-align-center" data-align="center">Bon</td><td class="has-text-align-center" data-align="center">Rapide</td><td class="has-text-align-center" data-align="center">IDE / Dev</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Licence</strong></td><td class="has-text-align-center" data-align="center">Llama Community Licence</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Licence DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Dataset</strong></td><td class="has-text-align-center" data-align="center">Texte/Code/Web</td><td class="has-text-align-center" data-align="center">Multilingue web</td><td class="has-text-align-center" data-align="center">Web + Données filtrées</td><td class="has-text-align-center" data-align="center">~ 90% de code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Avantages</strong></td><td class="has-text-align-center" data-align="center">Raisonnement et coding</td><td class="has-text-align-center" data-align="center">Multilingue et contextuel</td><td class="has-text-align-center" data-align="center">Rapide et faible consommateur de ressources</td><td class="has-text-align-center" data-align="center">Bon pour du code</td></tr></tbody></table></figure>



<p></p>



<p>Avec ce tableau, je pense que nous avons un bon récapitulatif. Toutefois et pour les curieux il existe une centaine de modèles compatible avec Ollama (<a href="https://ollama.com/library">Lien</a>). J&rsquo;ai fait mon choix, à vous de faire le vôtre. Vous êtes des grands garçons et des grandes filles hein ? <strong>#bisous</strong></p>



<p>L&rsquo;installation pour les modèles choisies, suivent tous la même logique. Pas de quoi épiloguer pendant 107 ans&#8230;.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_be8f6d-58 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b83fad-d4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama3</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-aedd1dbc85193c1613782e53b2c9aa59"><code><strong>$ sudo ollama pull llama3</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg" alt="" class="wp-image-3463" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-300x38.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-768x98.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1536x196.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2.jpg 1628w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_6c3ae4-79"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7168c5d58178d30c4ae7c3365a17f021"><code><strong>$ sudo ollama pull qwen</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="682" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg" alt="" class="wp-image-1498" style="aspect-ratio:0.666023595755732;width:189px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg 682w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-200x300.jpg 200w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-768x1152.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1024x1536.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1365x2048.jpg 1365w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-scaled.jpg 1706w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_a52c29-5b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0616d88d832c9cd4c70a69e1b69bb399"><code><strong>$ sudo ollama pull mistral</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="134" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg" alt="" class="wp-image-3464" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-300x39.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-768x100.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1536x200.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0.jpg 1626w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_b7432f-bf"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8e5f43649767beaca209d6420f5b9c1d"><code><strong>$ sudo ollama pull deepseek-coder:6.7b</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="662" height="208" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg" alt="" class="wp-image-3465" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg 662w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0-300x94.jpg 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></figure>
</div></div></div></div>
</div></div></div>



<p></p>



<p>Pour voir l&rsquo;ensemble des modèles il est possible de lister ces derniers grâce à la commande suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-a54c69346022b88f8f0ca96534eb976b"><code><strong>$ sudo ollama list</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="701" height="107" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg" alt="" class="wp-image-3466" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg 701w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4-300x46.jpg 300w" sizes="auto, (max-width: 701px) 100vw, 701px" /></figure>
</div>


<h3 class="wp-block-heading">Démarrage de Ollama</h3>



<p>Maintenant que tout est fonctionnel, démarrons Ollama et c&rsquo;est parti pour un périple des possibles comme <a href="https://fr.wikipedia.org/wiki/Sept_Ans_d%27aventures_au_Tibet#:~:text=L'alpiniste%2C%20explorateur%20et%20%C3%A9crivain,la%20souverainet%C3%A9%20de%20la%20Chine.">Heinrich Harrer à l&rsquo;assaut du Nanga Parbat</a> (l&rsquo;élévation n&rsquo;étant pas celle que l&rsquo;on croit 🙂 ).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="768" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg" alt="" class="wp-image-3468" style="width:411px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-300x225.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-768x576.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fecbb2e3da5b233b288694433aba6622"><code><strong>$ ollama</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Dans le menu qui s&rsquo;offre à nous, la première option permet de démarrer, lancer un de nos modèles localement.<br><br>Toutefois, en dessous de cette première option de navigation, nous retrouvons la possibilité d&rsquo;établir des connexions externes vers des moteurs en ligne tel que :<br><br>* Claude Code<br>* Codex<br>* OpenClaw<br>* Droid<br>* Pi<br>* Cline<br><br>Si vous possédez un compte, vous pouvez réaliser la jonction, mais alors à quoi bon avoir un moteur d&rsquo;IA interne ?</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="649" class="wp-image-3467" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg 612w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-300x300.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-150x150.jpg 150w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p></p>



<p>Si nous cliquons sur le premier choix, il nous est alors demandé de choisir un modèle. Il est possible de télécharger un modèle directement depuis ce menu ou de choisir un modèle précédemment installé tout en bas de cette interface.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="821" height="279" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg" alt="" class="wp-image-3469" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg 821w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-300x102.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-768x261.jpg 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>
</div>


<h2 class="wp-block-heading">Tests</h2>



<p>Et si on se lançais un petit benchmark de nos 4 modèles pour voir le fonctionnement ? 🙂</p>



<p>Amusons-nous tel un <a href="https://www.youtube.com/watch?v=vxx-ZQBHXIA">lamastico</a> &lt;3</p>



<p>Pour le test, j&rsquo;ai décidé de partir sur quelque chose de simple et ISO sinon cela ne sert strictement à rien.</p>



<p>La question sera : </p>



<p class="has-text-align-center"><strong>Peux-tu évaluer et me proposer une version plus robuste de cette fonction powershell s&rsquo;il te plait ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_c4efb1-bc kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c9a31d-08"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="930" class="wp-image-3479" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg 639w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-178x300.jpg 178w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-606x1024.jpg 606w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="93" class="wp-image-3478" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg 895w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-768x130.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_e891f6-13"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="1314" class="wp-image-3477" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg 636w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-126x300.jpg 126w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-428x1024.jpg 428w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="92" class="wp-image-3476" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg 894w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-300x50.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-768x128.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>J&rsquo;ai du tronquer la partie de la réponse en anglais car cela aurait pris énormément d&rsquo;espace. Toutefois la réponse retournée est plus que satisfaisante pour celui qui sait parler la langue de Shakespeare</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_3d6aef-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="643" class="wp-image-3473" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg 973w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-257x300.jpg 257w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-876x1024.jpg 876w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-768x898.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="94" class="wp-image-3474" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg 905w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-768x132.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_8f5a74-34"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="969" class="wp-image-3471" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg 752w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-170x300.jpg 170w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-581x1024.jpg 581w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="96" class="wp-image-3472" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg 901w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-768x135.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p></p>



<p>Je pense que cela est évident en termes de conclusions. Pour 1 prompt identique, nous avons quartes réponses différentes et un point commun. Si certains modèles mettent plus de temps de réponse il est indéniablement contestable que ça chauffe niveau calcul. Dans certains cas, j&rsquo;aime même du SWAP ! Bref, côté consommation électrique, ça consomme&#8230; Mais bon je m&rsquo;y attendais ce n&rsquo;est pas <a href="https://www.youtube.com/watch?v=oY_paPRS3p8">la première fois que je fais des étincelles avec ma b*te</a>&#8230;</p>



<p>Plus sérieusement, je sais quitte à me répéter ou pas ce que je dois faire pour améliorer ma fonction. Et je suis un peu déçu du résultat. Néanmoins en modifiant légèrement le prompt, en précisant :</p>



<p class="has-text-align-center"><strong>Peux-tu évaluer et me proposer une version plus robuste, sécurisé de cette fonction powershell s&rsquo;il te plait comme si tu étais un développeur sénior avec un regard plus critique et sévère ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt initial</strong><br>(qwen)</td><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt plus précis</strong><br>(qwen)</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="519" class="wp-image-3511" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-300x283.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-768x724.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="579" class="wp-image-3512" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg 839w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-285x300.jpg 285w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-768x808.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p></p>



<p class="has-text-align-center has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ff0d0b786a66ea48aaeb04a91218bde4"><mark style="background-color:rgba(0, 0, 0, 0);color:#fd0000" class="has-inline-color"><strong>/!\</strong></mark> <strong>Attention :</strong> J&rsquo;ai volontairement gardé que la suggestion de la fonction et non le blabla d&rsquo;en-tête qui explique tout ce qui va être appliqué.</p>



<p>Encore une fois pas de magie, il suffit de bien rédiger son prompt et là j&rsquo;obtiens un retour plus précis à mes attentes.</p>



<p>Si je résume la situation sur le test à iso périmètre selon le contexte :</p>



<ul class="wp-block-list">
<li>RAM : 8 Go</li>



<li>vCPU : 4</li>



<li>Processeur Physique : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (Mono)</li>



<li>Contexte : Coding</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Durée des réponses</strong></td><td class="has-text-align-center" data-align="center"><strong>Qualité des réponses</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="365" class="wp-image-3696" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg 482w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0-300x199.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="374" class="wp-image-3695" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg 481w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1-300x204.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p>En conclusion Qwen est de loin celui qui met le plus de temps à délivrer la réponse. Cela s&rsquo;explique par une explication plus poussée ce qui prends un certain temps à l&rsquo;affichage. Cependant la qualité de la réponse retournée est de loin supérieur aux trois autres LLMs.</p>



<p>Il serait intéressant de pousser la comparaison sur un prompt de réflexion pur.</p>



<p>De tous les tests de modèles (du moins sur les quatre déployés) c&rsquo;est qwen qui me convient le mieux. Néanmoins tout dépendra encore une fois du contexte et de ce que je souhaite réaliser avec l&rsquo;IA.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Je suis plutôt satisfait bien que sans répondre aux prérequis il faut savoir s&rsquo;armer de patiente. Dans l&rsquo;ensemble Ollama est une bonne solution mais cette dernière doit être utilisé avec un certain contrôle selon les LLMs que l&rsquo;on pourrait être amené à utiliser. Naturellement le retour de prompt vient de la qualité de celui que l&rsquo;utilisateur aura exprimé.</p>



<p>De ce fait, Ollama ne garantit pas une fiabilité aussi conséquente que les géants du Cloud. Toutefois il permet d&rsquo;assurer la confidentialité, sécurité des données localement et de nos recherches contrairement aux outils en ligne.</p>



<p>Ce qui pourrait toutefois rebuter son usage serait de passer par l&rsquo;interface CLI dans le terminal. Effectivement c&rsquo;est loin d&rsquo;être ergonomique pour un usage quotidien d&rsquo;un utilisateur n&rsquo;ayant pas d&rsquo;expérience dans ce domaine. Mais il existe toutefois des alternatives à cette problématique par des outils intermédiaires qui viennent se placer entre l&rsquo;utilisateur et Ollama. Ce sujet sera abordé dans un prochain billet.</p>



<p class="has-text-align-center"><strong><em>Initialement, je souhaitais aborder le sujet dans ce billet mais cela aurait été trop indigeste. Donc j&rsquo;ai CUT comme on dit dans notre milieu 🙂</em></strong></p>



<p>Ollama fournissant une documentation riche et simple il sera alors possible de jouer avec son API. Vous me connaissez avec le temps, s&rsquo;il y a une documentation, une API&#8230; Que vais-je bien pouvoir faire avec le framework .NET et Powershell ? 🙂 L&rsquo;objectif serait de proposer par exemple un petit client de bureau Windows pour les utilisateurs. Il serait également possible de mettre en place des passerelles d&rsquo;automatisation inter applicatives intelligente comme <strong>L&rsquo;ouverture d&rsquo;un incident sur un event VEEAMOne dans ITOP</strong> ou <strong>une fonction de contrôle de code depuis PowerShell ISE</strong> par exemple.</p>



<p>Cette étude m&rsquo;ouvre un nombre de porte considérable en guise de projet et de sujet d&rsquo;étude et ce malgré les contraintes matérielles. Est-ce que je vais utiliser longtemps la solution, je ne pense honnêtement pas car cette dernière est assez énergivore pour mon petit lab et je ne travaille pas chez EDF ni n&rsquo;habite Versailles. Mais cela peut (pour ne pas dire m&rsquo;a) réconcilié avec l&rsquo;utilisation de l&rsquo;IA. <em>Comme quoi il n&rsquo;y a que les cons qui ne changent pas d&rsquo;avis et nous sommes tous le con d&rsquo;un autre</em>.</p>



<p> Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>J&rsquo;ai cherché votre nom sur Ollama ? Comme ça vous êtes triple champion du monde de descente de Guiness catégorie galopin ? </em></p>



<p><em>Vous devez faire erreur avec une autre personne, je suis un DC10 fantôme sortant d&rsquo;une tempête codéinée. </em></p>



<p><em>Milles excuses M&rsquo;sieur Ollama.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia : IA</a></li>



<li><a href="https://www.data-bird.co/blog/types-ia">DataBird : Type d&rsquo;IA</a></li>



<li><a href="https://docs.ollama.com/">Ollama : Documentation</a></li>



<li><a href="https://ollama.com/download">Ollama : Téléchargement</a></li>



<li><a href="https://ollama.com/library">Ollama : Bibliothèque de modèle</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start">OpenWebUI : Documentation</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/">OpenWebUI : Intégration Ollama</a></li>



<li><a href="https://telnyx.com/llm-library/deepseek-coder-6-7b-instruct">Comparatif : Modèles performances</a></li>



<li><a href="https://localaimaster.com/blog/best-local-ai-models-2025-complete-guide">Comparatif : Modèles usages</a></li>



<li><a href="https://www.daf-mag.fr/Thematique/gestion-risque-1241/cyber-climat-2123/Breves/ia-usages-confiance-pierre-angulaire-adoption-durable-480929.htm">Usage de l&rsquo;IA : DAFMag</a></li>



<li><a href="https://lehub.bpifrance.fr/les-chiffres-2023-2024-du-marche-de-lia-dans-le-monde/">Répartition de l&rsquo;usage : BPIFrance</a></li>



<li><a href="https://www.lemonde.fr/emploi/article/2025/04/11/53-des-actifs-utilisent-l-ia-dans-leur-vie-professionnelle_6594046_1698637.html">Usage de l&rsquo;IA : LeMonde</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="cfefe833-a7a4-4019-87c1-c684487526cf"><strong>IA :</strong> Intelligence Artificielle <a href="#cfefe833-a7a4-4019-87c1-c684487526cf-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="aadcbef0-7f66-4bcf-bdef-699e3c85609a">L&rsquo;erreur est humaine, persévérer diabolique <a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="b41451ff-b3b4-4f38-bb68-9645125a745a"><strong>CGU :</strong> Conditions Générales d&rsquo;Utilisations <a href="#b41451ff-b3b4-4f38-bb68-9645125a745a-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69"><strong>LLM :</strong> Large Language Models  <a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="fdf3a5b9-4253-464d-a09e-8fb86b58314e"><strong>GPU :</strong> Graphics Processing Unit  <a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="73029218-b1cc-46cd-b970-647ebf9d8979"><strong>CPU :</strong> Central Processing Unit <a href="#73029218-b1cc-46cd-b970-647ebf9d8979-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="a37422d2-85b9-4b20-aaed-ed832709d897"><strong>SSD :</strong> Solid State Drive <a href="#a37422d2-85b9-4b20-aaed-ed832709d897-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="551f4327-d659-4f5e-aa79-e901800f9a6f"><strong>DARPA :</strong> Defense Advanced Research Projects Agency <a href="#551f4327-d659-4f5e-aa79-e901800f9a6f-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525"><strong>IHM :</strong> Interface Homme Machine <a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3da01144-9884-4e50-80b3-cb720fe5d120"><strong>AGI :</strong> Artificial General Intelligence <a href="#3da01144-9884-4e50-80b3-cb720fe5d120-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="6b6187e7-bf8d-4671-888c-ddabe2812f2a"><strong>SVM :</strong> Support Vector Machine <a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="2ccacfdc-8014-4064-9420-0e51ef9e2778"><strong>NLP :</strong> Natural Language Processing <a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e"><strong>RAG :</strong> Retrieval Augmented Generation <a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="75955ef0-37da-444b-ba62-3eced558a61a"><strong>API :</strong> Application Programming Interface <a href="#75955ef0-37da-444b-ba62-3eced558a61a-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6ad53fdd-7b83-46bd-8608-5b89bf94b781"><strong>HTTP :</strong> Hypertext Transfer Protocol <a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f"><strong>UTM :</strong> Unified Threat Management <a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
