<?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>Applications &#8211; erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/category/applications/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sat, 15 Aug 2026 09:38:05 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>Applications &#8211; erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apps &#8211; GUACAMOLE</title>
		<link>https://erwanguillemard.com/apps-guacamole/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:05 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3751</guid>

					<description><![CDATA[La prise en main à distance sur les SIs est un sujet qui questionne toujours. Certains vous diront qu&#8217;il est question de sécurité, d&#8217;autres de flexibilité ou encore de disponibilité&#8230; C&#8217;est ainsi qu&#8217;un certain nombres d&#8217;équipes informatiques utilisent : Je vois cela d&#8217;un autre regard et sous un autre angle. Je veux parler du regard...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La prise en main à distance sur les SIs<sup data-fn="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766" class="fn"><a href="#b23a0fec-6c5b-46e0-8d6e-eeece1a2f766" id="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766-link">1</a></sup> est un sujet qui questionne toujours. Certains vous diront qu&rsquo;il est question de sécurité, d&rsquo;autres de flexibilité ou encore de disponibilité&#8230;</p>



<p class="wp-block-paragraph">C&rsquo;est ainsi qu&rsquo;un certain nombres d&rsquo;équipes informatiques utilisent :</p>



<ul class="wp-block-list">
<li>VPN SSL<sup data-fn="451eaba6-4b2d-47cd-87ad-683a8801b884" class="fn"><a href="#451eaba6-4b2d-47cd-87ad-683a8801b884" id="451eaba6-4b2d-47cd-87ad-683a8801b884-link">2</a></sup></li>



<li>RDS<sup data-fn="d2294f0d-f3f5-438c-8056-dee10df02f95" class="fn"><a href="#d2294f0d-f3f5-438c-8056-dee10df02f95" id="d2294f0d-f3f5-438c-8056-dee10df02f95-link">3</a></sup> via TSGW<sup data-fn="e0d3d39a-a480-46c8-a565-400c3e99f864" class="fn"><a href="#e0d3d39a-a480-46c8-a565-400c3e99f864" id="e0d3d39a-a480-46c8-a565-400c3e99f864-link">4</a></sup></li>



<li>Solution de prise en main à distance (TeamViewer, LogMeIn, NinjaRMM et j&rsquo;en passe)</li>
</ul>



<p class="wp-block-paragraph">Je vois cela d&rsquo;un autre regard et sous un autre angle. Je veux parler du regard du contrôle, de l&rsquo;audit et de la non-répudiation ! Du respect du RGPD<sup data-fn="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6" class="fn"><a href="#ffad01f9-20fe-4d7a-b264-a5a83f01c0c6" id="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6-link">5</a></sup> et des données stockées. Oui, je fais partie de ces SysAdmins là, ceux qui croient en l&rsquo;ISO27001 et HDS<sup data-fn="658f9d5f-2a83-4303-9299-6ace8b6ea93a" class="fn"><a href="#658f9d5f-2a83-4303-9299-6ace8b6ea93a" id="658f9d5f-2a83-4303-9299-6ace8b6ea93a-link">6</a></sup>, ceux qui croient au BASTION &lt;3</p>



<p class="wp-block-paragraph">Je ne vais pas cracher sur TeamViewer car je l&rsquo;ai longtemps utilisé à des fins personnelles pour me connecter à mon lab, mais bon niveau sécurité c&rsquo;est loin d&rsquo;être fou et encore une fois, où sont mes données ? Et il est toujours borderline dans son utilisation commerciale ou non&#8230;</p>



<p class="wp-block-paragraph">Dans le monde professionnel, j&rsquo;ai eu le loisir d&rsquo;utiliser et d&rsquo;implémenter une solution française de BASTION. Cette solution est super (je n&rsquo;ai pas d&rsquo;action chez eux mais c&rsquo;est avec grand plaisir que je réaliserais de nouveau l&rsquo;implémentation de cette solution) et les équipes support et commercial sont très compétentes.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Quoi ? Le nom de la solution ? Cleanroom/Cyberelement par SYSTANCIA</em></strong></p>



<p class="has-text-align-left wp-block-paragraph">Mais voilà. Bien qu&rsquo;une super solution, moi pauvre petit AdminSys je ne peux pas me payer la solution voyez vous et bonjour l&rsquo;usage pour du lab. C&rsquo;est alors que j&rsquo;ai dû me tourner vers le monde de l&rsquo;open source&#8230;</p>



<p class="has-text-align-left wp-block-paragraph">J&rsquo;ai fait fumer mes méninges et avec <a href="https://www.youtube.com/watch?v=y-ewGIghpyo&amp;list=RDy-ewGIghpyo&amp;start_radio=1">la grosse Adrienne de mon talant</a> (où Montalant ? 🙂 ) je me suis lancé dans l&rsquo;implémentation d&rsquo;un bastion GUACAMOLE ! OLE !</p>



<p class="has-text-align-left wp-block-paragraph">En réalité, ce n&rsquo;est pas ma première tentative d&rsquo;implémentation du bastion Guacamole, mais je n&rsquo;ai jamais aimé l&rsquo;approche Docker et je n&rsquo;ai jamais eu le temps de vraiment étudier la solution. Pis là bah, je me suis dit c&rsquo;est le moment de réaliser ce que je n&rsquo;ai jamais réussi à concrétiser 🙂</p>





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



<p class="wp-block-paragraph">Cet article va être plutôt conséquent. Donc il est préférable de se prendre un petit pack de cerveza (pourquoi petit ?) pour ne pas se déshydrater pendant ce billet.</p>



<p class="wp-block-paragraph">Pour rendre ce dernier plus digeste, j&rsquo;ai pris le parti de scinder quelques fonctionnalités dans des billets dédiés et de couper l&rsquo;article en plusieurs sous-articles. L&rsquo;implémentation d&rsquo;un bastion nécessite un certain nombre de composants tiers et surtout une grande réflexion quant à l&rsquo;architecture et aux fonctionnalités.</p>



<p class="wp-block-paragraph">Bref, j&rsquo;ai fait le choix encore une fois de partir sur un environnement LINUX, RHEL<sup data-fn="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d" class="fn"><a href="#067f23cc-88b8-45bc-bf6b-6bbb5ac4899d" id="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d-link">7</a></sup> comme OS<sup data-fn="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd" class="fn"><a href="#2fe2ddbd-72f5-40e2-9044-cfc779fee5bd" id="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd-link">8</a></sup> et d&rsquo;appliquer comme d&rsquo;accoutumée le durcissement de l&rsquo;ANSSI<sup data-fn="a3a92c34-9ce0-428f-a6f8-cd58c62c570f" class="fn"><a href="#a3a92c34-9ce0-428f-a6f8-cd58c62c570f" id="a3a92c34-9ce0-428f-a6f8-cd58c62c570f-link">9</a></sup> pour les systèmes GNU/LINUX. Le bastion doit être le seul point d&rsquo;entrée de notre SI pour accéder à nos ressources. C&rsquo;est pourquoi je veux qu&rsquo;il soit le plus sécurisé possible. Je vais donc aller relativement loin dans la sécurisation et il n&rsquo;est donc pas impossible de se perdre en route. C&rsquo;est toutefois comme ça qu&rsquo;on apprend ! <a href="https://www.youtube.com/watch?v=wtGAHjqlnmo&amp;list=RDwtGAHjqlnmo&amp;start_radio=1">Il faut pour se trouver savoir se perdre sur des chemins de traverse</a> 🙂</p>



<p class="wp-block-paragraph">J&rsquo;ai beaucoup appris et ainsi, je souhaite vous partager mon expérience. </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Señor, Señora, Ándale Ándale Arriba</em></strong> <strong>!</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="696" height="392" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font.jpg" alt="" class="wp-image-3885" style="width:350px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font.jpg 696w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font-300x169.jpg 300w" sizes="(max-width: 696px) 100vw, 696px" /></figure>
</div>


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



<ul class="wp-block-list">
<li><strong>SE :</strong> 
<ul class="wp-block-list">
<li>GNU/Linux RHEL</li>
</ul>
</li>



<li><strong>Apps :</strong>
<ul class="wp-block-list">
<li>Guacamole 1.6</li>



<li>Tomcat 9.X</li>



<li>MariaDB 15.X</li>



<li>Nginx</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Certificats</li>
</ul>
</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/apps-guacamole-partie-1-theorie/"><strong>Partie 1 : Théorie</strong></a>
<ul class="wp-block-list">
<li>Définir ce qu&rsquo;est un bastion</li>



<li>Réflexion sur l&rsquo;architecture</li>
</ul>
</li>



<li><strong><a href="https://erwanguillemard.com/apps-guacamole-partie-2-pratique/">Partie 2 : Installation</a></strong>
<ul class="wp-block-list">
<li>Guide de déploiement</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/apps-guacamole-partie-3-securisation/"><strong>Partie 3: Sécurisation</strong></a>
<ul class="wp-block-list">
<li>Réseau</li>



<li>Système</li>



<li>Application</li>
</ul>
</li>



<li><strong><a href="https://erwanguillemard.com/apps-guacamole-partie-4-configuration/">Partie 4 : Configuration</a></strong>
<ul class="wp-block-list">
<li>Paramètres</li>



<li>Utilisateurs</li>



<li>Groupes</li>



<li>Ressources</li>
</ul>
</li>



<li><strong>Partie 5 : Démonstration</strong>
<ul class="wp-block-list">
<li>Présentation de la solution</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Il n&rsquo;est pas évident aujourd&rsquo;hui de garder la main sur nos environnements de manière sécurisée, comme il n&rsquo;est pas aisé de contrôler l&rsquo;ensemble des activités d&rsquo;un fournisseur ou prestataire sur notre SI. Même si la connexion est éphémère, nous nous devons de contrôler cette dernière. J&rsquo;ai repris la lecture des poèmes d&rsquo;Omar KHAYYÂM, et je suis tombé sur celui-ci que je trouve à la fois beau et adapté à la thématique de mon billet. (Je ne parle pas de politique et je lis depuis très longtemps cet ouvrage).</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-left wp-block-paragraph"><em>Considère ce vieux caravansérail qu’on nomme le monde,<br>dont les portes sont le Jour et la Nuit ;<br>des souverains y passent avec leur faste,<br>y demeurent une heure ou deux… puis s’en vont</em></p>
<cite>Omar KHAYYÂM &#8211; Robâiyât</cite></blockquote>



<p class="wp-block-paragraph">Nous pouvons alors facilement considérer que le caravansérail est notre bastion, les voyageurs nos sessions, les gardiens de la porte les administrateurs systèmes et réseaux&#8230;</p>



<p class="wp-block-paragraph">Les solutions de BASTION bien qu&rsquo;onéreuses viennent pallier à tous cela. Toutefois et c&rsquo;est souvent l&rsquo;argument le coût de la solution est difficilement supportable ce qui justifie l&rsquo;usage à tort et pour tout des VPN SSL, TS GW ou des outils de prise en main à distance. A l&rsquo;inverse GUACAMOLE répond à l&rsquo;ensemble des problématiques financières et technologiques. J&rsquo;ai un bastion gratuit et souverain sur mon SI que demander de mieux ? Ce n&rsquo;est malheureusement pas gratuit. Regardons de plus près le coût ETP<sup data-fn="cf376983-08ec-4d96-918a-505df778c0b1" class="fn"><a href="#cf376983-08ec-4d96-918a-505df778c0b1" id="cf376983-08ec-4d96-918a-505df778c0b1-link">10</a></sup> lié à la solution. Il faut installer, maintenir la solution au-delà de son contexte infrastructure mais également applicative. Et comme vous pouvez le constater, c&rsquo;est loin d&rsquo;une mince affaire pour qui souhaite bien faire les choses.</p>



<p class="wp-block-paragraph">Le choix de ne pas passer par la technologie docker m&rsquo;est propre. Je ne vois pas l&rsquo;utilité d&rsquo;une telle solution pour un projet de ce type. Docker reste pour moi un usage de développement et non de production. Je ne dis pas que c&rsquo;est mauvais, je dis que cela ne m&rsquo;est pas adapté. Un jour peut-être je changerai d&rsquo;avis, pour l&rsquo;instant la tête de cochon que je suis continuera de réaliser ces infrastructures en environnement non containerisé ! (GUILLEMARD ça rime avec tête de lard pour ne pas dire co**ard 🙂 )</p>



<p class="wp-block-paragraph">Je suis content d&rsquo;arriver au bout de cet article et de cet outil magnifique qu&rsquo;est GUACAMOLE. J&rsquo;aurai appris énormément de choses encore et cela faisait longtemps que je n&rsquo;avais pas passé des nuits blanches à cogiter sur des débugs et analyses. Je pense toutefois que la solution doit être sauvegardé au cas où et ce peu importe la solution utilisée. Si le bastion reste indisponible pour de bonnes et mauvaise raisons, il nous faut alors passer par la poterne de notre SI pour voir ce qu&rsquo;il se passe. Son usage doit être restreint au maximum et doit se faire qu&rsquo;en cas d&rsquo;extrême nécessité.</p>



<p class="wp-block-paragraph">La morale de ce billet se résumera à si j&rsquo;avais un budget je passerai sans hésiter par SYSTANCIA (non je n&rsquo;ai pas d&rsquo;action), solution française, support humain et sympathique et une analyse forte en cas d&rsquo;incident et de correctif applicatif de l&rsquo;ensemble de leurs solutions (<em><strong>Cleanroom </strong>devenu <strong>CyberElements</strong></em>). Malheureusement, je n&rsquo;ai pas le sou et donc je me rabat sur Apache GUACAMOLE et cela n&rsquo;est pas sans regrets 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>J&rsquo;initie une connexion guacamole sur fond de paddle. Votre avocat fait appel et vous informe que la balle est au centre. UN-DEUX-TROIS, on ne se bat pas ici ! Superbe relance de l&rsquo;ami Kaouette, une teq paf pour la 12.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://guacamole.apache.org/releases/1.6.0/">GUACAMOLE : Download page</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/guacamole-native.html">GUACAMOLE : Native Installation Guide</a></li>



<li><a href="https://www.systancia.com/">SYSTANCIA</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766"><strong>SI :</strong> Système d&rsquo;Information <a href="#b23a0fec-6c5b-46e0-8d6e-eeece1a2f766-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="451eaba6-4b2d-47cd-87ad-683a8801b884"><strong>VPN SSL :</strong> Virtual Private Network Secure Socket Layer <a href="#451eaba6-4b2d-47cd-87ad-683a8801b884-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="d2294f0d-f3f5-438c-8056-dee10df02f95"><strong>RDS :</strong> Remote Desktop Server <a href="#d2294f0d-f3f5-438c-8056-dee10df02f95-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="e0d3d39a-a480-46c8-a565-400c3e99f864"><strong>TSGW :</strong> Terminal Server GateWay <a href="#e0d3d39a-a480-46c8-a565-400c3e99f864-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6"><strong>RGPD :</strong> Règlement Général de Protection des Données <a href="#ffad01f9-20fe-4d7a-b264-a5a83f01c0c6-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="658f9d5f-2a83-4303-9299-6ace8b6ea93a"><strong>HDS :</strong> Hébergement de Données de Santé <a href="#658f9d5f-2a83-4303-9299-6ace8b6ea93a-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#067f23cc-88b8-45bc-bf6b-6bbb5ac4899d-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd"><strong>OS :</strong> Operating System <a href="#2fe2ddbd-72f5-40e2-9044-cfc779fee5bd-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="a3a92c34-9ce0-428f-a6f8-cd58c62c570f"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Information <a href="#a3a92c34-9ce0-428f-a6f8-cd58c62c570f-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="cf376983-08ec-4d96-918a-505df778c0b1"><strong>ETP :</strong> Employé(e) Temps Plein <a href="#cf376983-08ec-4d96-918a-505df778c0b1-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; Tomcat</title>
		<link>https://erwanguillemard.com/apps-tomcat/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 13:23:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3761</guid>

					<description><![CDATA[C&#8217;est marrant, je veux parler d&#8217;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&#8217;ai fait un article. Mais alors pourquoi faire un article sur Tomcat ? Parce que...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">C&rsquo;est marrant, je veux parler d&rsquo;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&rsquo;ai fait un article.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais alors pourquoi faire un article sur Tomcat ?</strong></p>



<p class="wp-block-paragraph">Parce que premièrement cela aurait rendu l&rsquo;article indigeste déjà qu&rsquo;en temps normal ce n&rsquo;est pas ouf et que deuxièmement en creusant un peu le sujet cela ne se résume pas à juste un <strong><em>dnf install tomcat</em></strong>&#8230;</p>



<p class="wp-block-paragraph">Bref, ce billet sera technique car j&rsquo;ai hâte de revenir à mon article initial. Mais cela vaut le coup car j&rsquo;ai appris encore énormément de chose 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=r4OhIU-PmB8&amp;list=RDr4OhIU-PmB8&amp;start_radio=1">Tommy the Cat is my name and I say unto thee</a></p>





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



<p class="wp-block-paragraph">L&rsquo;étude de Tomcat vient simplement de l&rsquo;implémentation d&rsquo;un billet qui sera publié prochainement qui nécessite la présence d&rsquo;un serveur d&rsquo;applet Java. Je garde volontairement une part de mystère, sinon ce n&rsquo;est pas marrant non ? 🙂</p>



<p class="wp-block-paragraph">De mon passé, d&rsquo;étudiant, j&rsquo;ai appris la POO<sup data-fn="16da1029-699d-4bca-a6e9-7768a7099ca3" class="fn"><a href="#16da1029-699d-4bca-a6e9-7768a7099ca3" id="16da1029-699d-4bca-a6e9-7768a7099ca3-link">1</a></sup> lors de mes études en BTS<sup data-fn="8fe03776-25cc-4570-88c0-2c285e68ced0" class="fn"><a href="#8fe03776-25cc-4570-88c0-2c285e68ced0" id="8fe03776-25cc-4570-88c0-2c285e68ced0-link">2</a></sup> d&rsquo;info industrielle sur C++. J&rsquo;avoue que je n&rsquo;ai pas bien saisie la pratique&#8230; C&rsquo;est lors de ma licence en sécu logicielle que j&rsquo;ai unlock et appliqué tous les pratiques de la POO sur le langage JAVA.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Cool ta life mon gars, ça aurait mérité un post Facebook en 2012 avec en premier commentaire « Ba moi hier j&rsquo;ai mangé une pomme »</em></strong></p>



<p class="wp-block-paragraph">Ouai peut-être mais cela a été pour moi une révélation. J&rsquo;ai trouvé ce langage magnifique et je pensais avoir trouvé ma voie. Et pourtant JAVA est loin d&rsquo;être un langage des plus fiable et ergonomique. Des IDEs<sup data-fn="6b0bb7de-b295-4951-b60c-c2f13e9cfca2" class="fn"><a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2" id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link">3</a></sup> NetBeans, Eclipse, Android Studio sans oublier le serveur d&rsquo;applet web GlassFish je trouvais ça top. Et puis je me suis rendu compte que les applets c&rsquo;étaient lourds, les applications Java difficilement ergonomique, des failles de sécurités qui doivent être patché avec des updates de la JDK<sup data-fn="af7fd030-5eb8-459c-b326-4cfe6ebc218e" class="fn"><a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e" id="af7fd030-5eb8-459c-b326-4cfe6ebc218e-link">4</a></sup> côté développeur de la JVM<sup data-fn="2c0f76eb-2466-4e3d-a508-12ed484fb0c7" class="fn"><a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7" id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link">5</a></sup>, JRE<sup data-fn="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" class="fn"><a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link">6</a></sup> côté client, le code qui ne devient plus compatible&#8230;</p>



<p class="wp-block-paragraph">Voilà, les raisons de pourquoi j&rsquo;ai délaissé mon amour de JAVA par dépit à la suite de ces frustrations. L&rsquo;une des autres raisons et la difficulté de jongler entre la sécurité des versions clients et les progicielles. Accepter de mettre à jour et ne plus travailler car au lancement de l&rsquo;application ou de fonctionnalité ça crash ou retourne des erreurs de stack traces dans tous les sens ou accepter d&rsquo;avoir des failles de sécurité partout et pouvoir travailler ? </p>



<p class="wp-block-paragraph">Bref, encore une fois, un article pour installer un service au premier abord simple mais qui nécessite d&rsquo;être bien sécurisé.</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.4 et versions ultérieures</li>
</ul>
</li>



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



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Hardenned Linux</li>
</ul>
</li>
</ul>



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



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



<p class="wp-block-paragraph"><em>Il était une fois, un meunier ne laissa pour tous biens, à trois enfants qu&rsquo;il avait, que son moulin, son âne et son chat.</em>.. </p>



<p class="wp-block-paragraph">Bien joué Charles 😉 Je ne vais pas vous compter le conte du Chat Botté de Perrault mais bien celle de Tomcat, je vous rassure, mais la tentation était trop grande &lt;3</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;objectif principal était de fournir une implémentation de référence pour JAVA Web (servlets et JSP<sup data-fn="5aa72831-364a-4813-a223-8651ecf90bfd" class="fn"><a href="#5aa72831-364a-4813-a223-8651ecf90bfd" id="5aa72831-364a-4813-a223-8651ecf90bfd-link">7</a></sup>). C&rsquo;est ainsi que James Duncan DAVIDSON créa Tomcat en 1998 sans lui donner encore de nom.<br><br>Le projet sera donné à la fondation Apache en 1999 qui le baptisera Tomcat et passera ce dernier sous licence OpenSource Apache.<br><br>Au cours des années 1999 à 2001, la première version stable de Tomcat est disponible pour principalement être utilisé comme moteur de servlet et est fortement lié au server web Apache.<br><br>Au fil des années, le projet Tomcat continuera d&rsquo;évoluer avec l&rsquo;âge d&rsquo;or d&rsquo;internet. A ce jour, la version la plus récente est la version 11 qui comme nous pouvons en douter à une optimisation pour le cloud et les micro services. (Il faut bien vivre avec son temps 🙂 ).<br></td><td class="has-text-align-center" data-align="center"><img decoding="async" width="550" height="679" class="wp-image-3804" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg 735w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font-243x300.jpg 243w" sizes="(max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ce qu&rsquo;il est important de retenir, c&rsquo;est que ce dernier reste un projet OpenSource maintenu par une communauté très active. Tomcat reste également un serveur d&rsquo;application léger très populaire et de base (et c&rsquo;est pourquoi il est fortement lié à JAVA) la référence de l&rsquo;implémentation JAVA.</p>



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



<p class="wp-block-paragraph">Il est important comme pour toutes applications de savoir comment cette dernière est structurée et comment elle fonctionne.</p>



<p class="wp-block-paragraph">Ainsi, nous pouvons différencier 9 répertoires distincts au sein du daemon Tomcat :</p>



<ul class="wp-block-list">
<li><strong>bin :</strong> L&rsquo;ensemble des scripts et exécutables propre au daemon pour démarrer ou arrêter le serveur.</li>



<li><strong>common :</strong> Nous pourrions dire que ce répertoire contient le code (classes et méthodes) commun utilisé par le service Catalina et certaines applications web.</li>



<li><strong>conf :</strong> Le répertoire qui stocke les fichiers de configuration du server.</li>



<li><strong>lib :</strong> Répertoire qui stocke l&rsquo;ensembles des bibliothèques (les .jar)</li>



<li><strong>logs :</strong> Dossier qui va stocker l&rsquo;ensemble des journaux d&rsquo;événement. Attention à ce que ce dernier ne prenne pas trop de place sinon BOUM plus de service. Le mieux serait de le déplacer sur un disque dédié.</li>



<li><strong>server :</strong> Code contenant les méthodes et classes systèmes utilisés uniquement de Catalina.</li>



<li><strong>shared :</strong> Les classes partagées utilisées par toutes les applications</li>



<li><strong>webapps :</strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong>work :</strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache)</li>
</ul>



<p class="wp-block-paragraph">Chacun des répertoires joue un rôle clé et donc selon le contexte doit être sécurisé.</p>



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



<p class="wp-block-paragraph">Le fonctionnement de Tomcat peut paraitre complexe au premier abord. Toutefois avec un bon schéma, cela devient aussi divin que les croquettes Ultima Saumon pour chat stérilisé (« <em><strong>Sale Histoire</strong></em> » que mon avocat garde sous silence en reprenant la citation d&rsquo;un membre de la famille).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="873" height="449" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg" alt="" class="wp-image-3809" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg 873w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-768x395.jpg 768w" sizes="(max-width: 873px) 100vw, 873px" /></figure>
</div>


<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3761_7231f1-be kt-accordion-has-5-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-pane3761_d60c16-59"><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>Phase 1 : Le connecteur</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 class="wp-block-paragraph">L&rsquo;utilisateur exécute une requête <strong>HTTP</strong><sup data-fn="49aa99e2-1a30-4956-b8aa-08bef6ca1b65" class="fn"><a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65" id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link">8</a></sup>, cette même requête se présente au connecteur sur le port <strong>8080</strong>. Le connecteur va alors transformer la requête en objets JAVA, deux pour être précis :</p>



<ul class="wp-block-list">
<li>Les données entrantes : <strong>HttpServletRequest</strong></li>



<li>Les données sortantes : <strong>HttpServletResponse</strong></li>
</ul>



<p class="wp-block-paragraph">Les données sortantes sont vides et seront complétées à la fin du traitement de la requête d&rsquo;entrée.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3761_1ceabd-49"><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>Phase 2 : L&rsquo;engin Catalina</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 class="wp-block-paragraph">Les données d&rsquo;entrées sont soumises au moteur de décision de son petit nom <strong>Catalina</strong>. Il va analyser l&rsquo;en-tête de la requête (header) pour orienter cette dernière vers le bon host virtuel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3761_31c3e0-db"><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>Phase 3 : Host &amp; Context</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 class="wp-block-paragraph">Un peu comme la tour de contrôle, nous pouvons voir ce dernier comme un aiguillage. Ainsi, si nous avions plusieurs domaines, le host va identifier le bon domaine et aiguiller le flux vers l&rsquo;application, le context.</p>



<p class="wp-block-paragraph">C&rsquo;est l&rsquo;application web spécifique (le .war) qui va alors traiter la demande. Nous pouvons donc avoir une multitude d&rsquo;application sur le même serveur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3761_039b51-8c"><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>Phase 4 : L&rsquo;Exécution</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 class="wp-block-paragraph">Le <strong>wrapper </strong>va appeler notre <strong>servlet </strong>correspondant. Tomcat charge alors la <strong>classe </strong>JAVA, l&rsquo;instancie et appelle la méthode <strong>Service()</strong>, <strong>doGet()</strong> ou <strong>doPost()</strong>.</p>



<p class="wp-block-paragraph">Le code va alors s&rsquo;exécuter et retourner la réponse dans l&rsquo;objet en attente, <strong>HttpServletResponse </strong>dissocier de la requête à l&rsquo;étape 1.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3761_13b9e2-6d"><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>Phase 5 : La Réponse</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 class="wp-block-paragraph">Tomcat récupère l&rsquo;objet réponse et va alors transformer cette dernière en flux de données HTTP (texte, HTLM, JSON) et renvoyer par le biais du connecteur la réponse au navigateur du client.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention :</strong></span> Cette architecture reste valable, mais Tomcat 10 a migré vers <strong>Jakarta EE</strong> en rendant incompatible les applications basées sur <strong>javax.servlet</strong>. Donc si usage des Servlets c&rsquo;est Tomcat 9&#8230;</p>



<p class="wp-block-paragraph">Pour faire simple, si lors du lancement de votre application ne se lance pas et que dans les logs localhost ou catalina vient fleurir l&rsquo;erreur <code><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;">ClassNotFoundException: javax.servlet</span></em></strong></mark></code>, et bien c&rsquo;est que vous l&rsquo;avez dans l&rsquo;OS bien profond et que vous êtes marron&#8230; Votre application n&rsquo;est pas compatible Tomcat 10. Vous êtes bon pour un downgrade &lt;3 Ca fait du bien de temps en temps de se prendre un bon coup de nerf de bœuf sur l&rsquo;arrière train, ça fait circuler le sang !</p>



<p class="wp-block-paragraph">Cette structure modulaire d&rsquo;encapsulation, permet de garantir une certaine souplesse sans avoir à changer la logique des applications.</p>



<p class="wp-block-paragraph">Je pense qu&rsquo;il n&rsquo;y a pas besoin d&rsquo;en savoir plus pour installer le service sur notre serveur. Passe à la pratique.</p>



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



<p class="wp-block-paragraph">J&rsquo;ai pris le parti de sortir pour une nouvelle fois des sentiers battu et de ne pas me limiter à l&rsquo;installation de Tomcat depuis le repo source. J&rsquo;ai choisi de déployer ce dernier depuis le site officiel.</p>



<p class="wp-block-paragraph">Ce choix est motivé par les versions spécifiques nécessaire à certaines applications. De ce fait, l&rsquo;installation depuis le repo n&rsquo;est pas d&rsquo;une grande utilité. Et une nouvelle fois de par mon expérience, il est plus probable de passer par le site officiel.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p class="wp-block-paragraph">En termes de dépendance, ce n&rsquo;est pas bien compliqué, il nous faut la JDK pour faire tourner notre serveur Tomcat. Donc ?</p>



<p class="wp-block-paragraph">On installe la JDK 🙂</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-1"><code><strong>#Install Java
$ sudo dnf install java-21-openjdk-headless</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="656" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg" alt="" class="wp-image-3785" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-300x209.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-768x536.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Je passe encore et toujours mon tour sur cette étape qui devient un incontournable des billets que je rédige sous GNU/Linux.</p>



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



<p class="wp-block-paragraph">Bien. Maintenant que notre dépendance est installée, commençons par le début.</p>



<p class="wp-block-paragraph">Créons notre groupe <strong>tomcat </strong>et notre utilisateur de service <strong>tomcat</strong>. Pour répondre au bonne pratique, un service = un compte applicatif. Cela permet de faciliter le debug et surtout en termes de sécurité c&rsquo;est bien mieux que de tout faire tourner avec le compte root.</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-2"><code><strong>$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat</strong></code></pre>



<p class="wp-block-paragraph">Naturellement, l&rsquo;utilisateur tomcat est membre du groupe tomcat&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="42" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg" alt="" class="wp-image-3784" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-300x13.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-768x34.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;installation se fait de deux manières. Soit par la commande <strong>curl </strong>qui est nativement présente sur notre SE<sup data-fn="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" class="fn"><a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link">9</a></sup>. Soit par <strong>wget </strong>qui devra être installé. Il conviendra d&rsquo;adapter l&rsquo;URL<sup data-fn="8d533817-d743-4f53-9f04-09b0d390cfa6" class="fn"><a href="#8d533817-d743-4f53-9f04-09b0d390cfa6" id="8d533817-d743-4f53-9f04-09b0d390cfa6-link">10</a></sup> selon la version recherchée. J&rsquo;ai décidé de télécharger le <strong>.tar.gz</strong> directement dans le répertoire <strong>/tmp</strong>.</p>



<p class="wp-block-paragraph">Créons-le répertoire <strong>/opt/tomcat</strong> puis décompressons notre archive stocké sous <strong>/tmp</strong> dans le répertoire fraichement créé.</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-3"><code><strong>$ curl -L --output-dir /tmp -O  https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.54/bin/apache-tomcat-10.1.54.tar.gz
$ mkdir /opt/tomcat
$ tar -xf /tmp/apache-tomcat-10.1.54.tar.gz -C /opt/tomcat --strip-components=1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="216" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg" alt="" class="wp-image-3783" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-300x69.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-768x177.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p class="wp-block-paragraph">Bon, si on regarde du côté de l&rsquo;ANSSI<sup data-fn="d2695521-2349-42a7-b9d8-98daece4022d" class="fn"><a href="#d2695521-2349-42a7-b9d8-98daece4022d" id="d2695521-2349-42a7-b9d8-98daece4022d-link">11</a></sup>, ces derniers nous recommandent que notre compte de service tomcat ne doit pas propriétaire des binaires (exécutables). Pourquoi ? Admettons qu&rsquo;il y est compromission, le compte ne sera pas en possibilité de s&rsquo;altérer lui-même. Ainsi, nous pouvons voir une sorte de silotage.</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-4"><code><strong>$ sudo chgrp -R tomcat /opt/tomcat
$ sudo chmod -R g+r /opt/tomcat/conf
$ sudo chmod g+x /opt/tomcat/conf
$ sudo chown -R tomcat /opt/tomcat/{webapps,work,temp,logs}</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="942" height="532" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg" alt="" class="wp-image-3782" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-768x434.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></figure>
</div>


<p class="wp-block-paragraph">Le groupe utilisateur <strong>tomcat </strong>a donc les droits de lecture et d&rsquo;exécution sur l&rsquo;ensemble des sous éléments du répertoire <strong>/opt/tomcat</strong>. L&rsquo;utilisateur <strong>tomcat </strong>sera propriétaire uniquement des sous répertoires et leurs contenus :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">webapps :</span></strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong><span style="text-decoration: underline;">work :</span></strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache) persistant. C&rsquo;est à dire utiliser par les servlets.</li>



<li><strong><span style="text-decoration: underline;">temp :</span></strong> Le répertoire va stocker les fichiers à déplacer. Il joue le rôle de passe plat. Les fichiers qui viendraient à persister sont automatiquement supprimés à chaque redémarrage du service.</li>



<li><strong><span style="text-decoration: underline;">logs :</span></strong> Les journaux d&rsquo;événements, il faut bien que le service puisse écrire ce qui se passe non ?</li>
</ul>



<h3 class="wp-block-heading">Sécurité</h3>



<p class="wp-block-paragraph">Niveau sécurité, les actions vont se concentrer et se définir dans le fichier server.xml ainsi que dans le fichier web.xml.</p>



<p class="wp-block-paragraph">L&rsquo;objectif sera de se prémunir des attaques classiques MIM<sup data-fn="6ba62ef7-23e3-40d7-9103-43c42443f43d" class="fn"><a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d" id="6ba62ef7-23e3-40d7-9103-43c42443f43d-link">12</a></sup>, Clickjacking, XSS<sup data-fn="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" class="fn"><a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link">13</a></sup> et de masquer l&rsquo;identité de notre serveur le plus possible. Parce qu&rsquo;on ne dévoile pas tout le premier soir 😉</p>



<h4 class="wp-block-heading">Audit et divulgation d&rsquo;identité</h4>



<p class="wp-block-paragraph">Commençons par éditer le fichier server.xml.</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-5"><code><strong>$ sudo vim /opt/tomcat/conf/server.xml</strong></code></pre>



<p class="wp-block-paragraph">Un truc qui pourrait être tout bête, appliquons le principe : </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Vivons heureux, Vivons cachés ! </em></strong></p>



<p class="wp-block-paragraph">C&rsquo;est à dire outre mon langage (car peu parle le Erwan première langue), masquons la version de notre serveur tomcat dans les trames d&rsquo;entêtes (le header&#8230;) HTTP. Ainsi il est possible de savoir que je suis un serveur tomcat, mais de connaitre ma version. 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Malinx le Lynx. D&rsquo;un autre côté c&rsquo;est Tomcat&#8230; Voilà voilà, il est content de sa vanne&#8230;</strong></p>



<p class="has-text-align-center wp-block-paragraph">Dans le connecteur HTTP, ajouter <strong>server= » « </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><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><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-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="308" height="98" class="wp-image-3787" style="width: 308px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg 406w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON-300x95.jpg 300w" sizes="auto, (max-width: 308px) 100vw, 308px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="235" class="wp-image-3788" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg 401w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF-300x128.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Tiens, tu ajoutes un <strong>secure= »true »</strong>. C&rsquo;est cool, du coup tu forces les connexions chiffrées ? 🙂 Et bien pas du tout ! Je me suis fait k*n aussi. Je suis allé regarder la documentation pour mieux comprendre. Par défaut, secure est à false. Nos applications par le biais de notre server peuvent refuser de délivrer les cookies sensibles ou vouloir rediriger les utilisateurs vers le protocole HTTPS<sup data-fn="f00b61b2-171d-465a-96ff-80a705088787" class="fn"><a href="#f00b61b2-171d-465a-96ff-80a705088787" id="f00b61b2-171d-465a-96ff-80a705088787-link">14</a></sup>. Dans le meilleur des cas ça créé des lenteurs au pire c&rsquo;est l&rsquo;infinity loop&#8230; Alors que si nous le forçons à <strong>true</strong>, Tomcat va confirmer auprès de l&rsquo;application que la requête vient d&rsquo;un canal sécurisé (ce qui n&rsquo;est pas le cas. Où le vilain menteur !) même s&rsquo;il vient d&rsquo;un canal non sécurisé.</p>



<p class="wp-block-paragraph">De toute façon, nous allons passer par un reverse proxy <strong>nginx </strong>et en frontal nous aurons une publication avec une règle de proxy.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="378" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg" alt="" class="wp-image-3811" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg 756w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce-300x150.jpg 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois cela ne suffit pas. Quand est-il des pages d&rsquo;erreurs ? En creusant un peu il va falloir fermer les valves&#8230; 🙂</p>



<p class="wp-block-paragraph">L&rsquo;objectif est de supprimer la mention « <strong>Apache Tomcat/&lt;version&gt;</strong> » dans les pages d&rsquo;erreurs ainsi que la description des erreurs (la <strong>stacktrace</strong>. Que de nostalgie&#8230;). L&rsquo;objectif est de donner le moins d&rsquo;information possible à un potentiel attaquant qui souhaiterai exploiter une CVE<sup data-fn="5523c1bf-ded6-4124-9e1d-b2fc579b24a2" class="fn"><a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2" id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link">15</a></sup> en relation avec la version de notre produit. L&rsquo;objectif est de rendre aveugle l&rsquo;attaquant le temps que les mécanismes en place ce déclenche ou nous alertes.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="875" height="441" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg" alt="" class="wp-image-3789" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg 875w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-300x151.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-768x387.jpg 768w" sizes="auto, (max-width: 875px) 100vw, 875px" /></figure>
</div>


<p class="wp-block-paragraph">Niveau Audit, nous pouvons également renforcer la verbosité si nous suivons les recommandations de l&rsquo;ANSSI.</p>



<pre class="wp-block-code"><code><strong>&lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b %D &amp;quot;%{User-Agent}i&amp;quot;" /></strong>
</code></pre>



<ul class="wp-block-list">
<li><strong>%h :</strong> l&rsquo;adresse IP distante</li>



<li><strong>%l :</strong> Identifiant logique</li>



<li><strong>%u : </strong>Utilisateur authentifié</li>



<li><strong>%t :</strong> horodatage</li>



<li><strong>%r :</strong> Ligne de requête (la méthode et l&rsquo;URL appelé)</li>



<li><strong>%s :</strong> Code de retour du protocole HTTP</li>



<li><strong>%b :</strong> Taille de la réponse en octet</li>



<li><strong>%D :</strong> Le temps de traitement en ms</li>



<li><strong>%i : </strong>Le User-Agent pour repérer les outils automatisés (nmap et autres) et surtout les navigateurs « chelou » comme diraient mes enfants&#8230;</li>
</ul>



<p class="wp-block-paragraph">Par exemple :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="69" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg" alt="" class="wp-image-3780" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg 937w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-300x22.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-768x57.jpg 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure>
</div>


<p class="wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark></strong></span> <strong><span style="text-decoration: underline;">Attention :</span> L&rsquo;activation de l&rsquo;audit n&rsquo;est pas anodine en termes d&rsquo;espace. Il faut penser à mettre en place une rotation des logs. Sinon&#8230; BOUM !!!</strong></p>



<p class="wp-block-paragraph">Toutes les applications par défaut, ça dégage ! Pourquoi garder les éléments de bases qui sont d&rsquo;autant plus des vecteurs d&rsquo;attaque et des points de vulnérabilité ?</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-6"><code><strong>$ sudo rm -Rf /opt/tomcat/webapps/*</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="693" height="299" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg" alt="" class="wp-image-3781" style="aspect-ratio:2.31779257849667;width:535px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg 693w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps-300x129.jpg 300w" sizes="auto, (max-width: 693px) 100vw, 693px" /></figure>
</div>


<p class="wp-block-paragraph">Un truc que je ne connaissais pas et que j&rsquo;ai trouvé en étudiant Tomcat, c&rsquo;est le cas de « Protection du Shutdown ». Au premier abord, je me suis demandé qu&rsquo;est-ce que c&rsquo;est que ce truc. Le paramètre <strong>shutdown</strong> est explicite. Et bien voyez-vous c&rsquo;est marrant, c&rsquo;est une commande qui permet d&rsquo;éteindre le daemon. Alors certes, par défaut il est sur le port <strong>8005/tcp</strong> et normalement accessible qu&rsquo;en local. Mais tapons shutdown et pouf ! Notre daemon il va à la niche.</p>



<p class="wp-block-paragraph">Donc, on change le port et pour le mot de passe on utilise le bon vieux <strong>Soleil123!</strong> . Vous m&rsquo;avez compris non ? 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="448" height="24" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg" alt="" class="wp-image-3792" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg 448w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown-300x16.jpg 300w" sizes="auto, (max-width: 448px) 100vw, 448px" /></figure>
</div>


<pre class="wp-block-code"><code><strong>&lt;Server port="-1" shutdown="y2Fxg@kLx4:If2L0_MD1Ccz"&gt;</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="592" height="25" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg" alt="" class="wp-image-3791" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg 592w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1-300x13.jpg 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></figure>
</div>


<h4 class="wp-block-heading">Prévention des attaques</h4>



<p class="wp-block-paragraph">Ouvrons le fichier web.xml.</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-7"><code><strong>$ sudo vim /opt/tomcat/conf/web.xml</strong></code></pre>



<p class="wp-block-paragraph">A la fin de la section &lt;filter&gt;, ajoutons les lignes suivantes :</p>



<pre class="wp-block-code"><code>&lt;!-- Begin R-ONE Modification -->
        &lt;filter>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter&lt;/filter-class>
                &lt;async-supported>true&lt;/async-supported>

                &lt;init-param>
                        &lt;param-name>hstsMaxAgeSeconds&lt;/param-name>
                        &lt;param-value>31536000&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>antiClickJackingOption&lt;/param-name>
                        &lt;param-value>DENY&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>blockContentTypeSniffingEnabled&lt;/param-name>
                        &lt;param-value>true&lt;/param-value>
                &lt;/init-param>
        &lt;/filter>
&lt;!-- End Modification -->
</code></pre>



<p class="wp-block-paragraph">Parcourons en détails chaque ligne pour comprendre ce que nous sécurisons avec les filtres. (Normal c&rsquo;est du café de Java&#8230; Franchement, il ne mérite pas d&rsquo;aller jouer sur l&rsquo;autoroute à contre sens pour bien voir le danger ? L&rsquo;auteur de ce billet est bof, il fait triste à voir.)</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;usage du filtre de sécurité « <strong>HttpHeaderSecurityFilter</strong> » permet d&rsquo;ajouter des réponses dans le header des requetes HTTP pour protéger les utilisateurs et les applications des attaques mentionnées ci haut.<br><br>Ainsi pour une défense en profondeur l&rsquo;activation de ces options sont primordiales.<br><br><strong>hstsMaxAgeSeconds</strong> indique que le site ne peut être consulté uniquement via le protocole HTTPS et force ainsi le navigateur à chiffrer les requêtes. Cela permet donc de prévenir des attaques d&rsquo;interception SSL (SSL stripping).<br><br><strong>antiClickJackingOption</strong> aussi connu sous le nom de X-Frame-Options. Cela permet au site de ne pas intégrer l&rsquo;application dans une balise html iframe et donc de faire une superposition d&rsquo;interface invisible et valider une action non voulue.<br><br><strong>blockContentTypeSniffingEnabled</strong> ou X-Content-Type-Options: nosniff permet <s>de blague censurée</s> de forcer le navigateur à respecter le type MIME envoyé par le serveur. L&rsquo;objectif et de se prémunir des attaques XSS.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="283" class="wp-image-3793" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-768x395.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></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"><img loading="lazy" decoding="async" width="550" height="109" class="wp-image-3794" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg 683w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping-300x59.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Il nous reste un dernier point, les cookies. Afin que ces derniers ne soient pas volés par Cookie Monster par exemple, il est primordial d&rsquo;interdire l&rsquo;accès au cookie via JavaScript (d&rsquo;où la présence du <strong>http-only</strong> à <strong>true</strong>. Nous bloquons ainsi le vol de session via XSS. L&rsquo;usage de <strong>secure</strong> va faire en sorte que le cookie n&rsquo;est envoyé si et seulement si la connexion est sécurisée.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code"><code><strong>&lt;!-- Modification R-ONE -->
        &lt;filter-mapping>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;url-pattern>/*&lt;/url-pattern>
        &lt;/filter-mapping>
&lt;!-- End Modification --></strong></code></pre>



<p class="wp-block-paragraph">Un truc c*n qui m&rsquo;a fait perdre une nuit de sommeil. J&rsquo;avais cette put**n d&rsquo;erreur&#8230; A devenir fou !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="409" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg" alt="" class="wp-image-3822" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg 409w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error-300x96.jpg 300w" sizes="auto, (max-width: 409px) 100vw, 409px" /></figure>
</div>


<p class="wp-block-paragraph">Après pas mal de recherche, c&rsquo;est un truc simple. Franchement je suis vraiment un c*n&#8230; Mon nouveau fichier de conf, avait pour owner<strong> root:root</strong> et non <strong>tomcat:tomcat</strong>. La haine, vraiment. Pensez donc à bien set de nouveau les bons droits&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="640" height="360" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_font.gif" alt="" class="wp-image-3834" style="width:505px;height:auto"/></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 wp-elements-8"><code><strong>$ sudo chown tomcat:tomcat -R /opt/tomcat/conf/</strong></code></pre>



<p class="wp-block-paragraph">Un petit test avant, après ?</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><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><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-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="161" class="wp-image-3823" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff-300x88.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="213" class="wp-image-3824" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn-300x116.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Daemon Firewall</h4>



<p class="wp-block-paragraph">Côté firewall il faut publier le port <strong>8080/tcp</strong></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-9"><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"><img loading="lazy" decoding="async" width="814" height="86" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg" alt="" class="wp-image-3796" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg 814w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-300x32.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-768x81.jpg 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois ça ne fonctionnera pas NANANANERE ! Et pourquoi ? Hein, pourquoi ? A cause du SELinux ventrebleu !</p>



<p class="wp-block-paragraph">Par défaut le port 8080 n&rsquo;est pas autorisé dans le SELinux pour la communication HTTP. Il est donc nécessaire de lui dire qu&rsquo;il en fait partie.</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-10"><code><strong>$ sudo semanage port -a -t http_port_t -p tcp 8080</strong></code></pre>


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


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



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



<p class="wp-block-paragraph">Créons et éditons le fichier de rotation propre à <strong>tomcat </strong>sous <strong>/etc/logrotate.d</strong>.</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-11"><code><strong>$ sudo vim /etc/logrotate.d/tomcat</strong></code></pre>



<p class="wp-block-paragraph">Nous allons spécifier dans notre fichier que nous souhaitons effectuer la rotation du fichier <strong>catalina.out</strong>, les fichiers <strong>localhost_access_log*.txt</strong> ainsi que l&rsquo;ensemble des fichiers d&rsquo;extensions .log.</p>



<p class="wp-block-paragraph">C&rsquo;est dernier afin de ne pas impacter la production seront vidé à chaud (<strong>copytruncate</strong>) de manière journalière en gardant 30 jours de rétention (histoire de faciliter les investigations en cas de suspicion). Nous compresserons les points de rétentions si pas de fichier nous ne faisons rien ni si les fichiers sont vides. Nous recréerons les fichiers avec les droits <strong>0640</strong> avec en groupe et propriétaire le compte de service <strong>tomcat</strong>.</p>



<pre class="wp-block-code"><code>/opt/tomcat/logs/catalina.out
/opt/tomcat/logs/localhost_access_log*.txt
/opt/tomcat/logs/*.log {
    copytruncate
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 0640 tomcat tomcat
}</code></pre>



<p class="wp-block-paragraph">Une commande que je ne connaissais pas. C&rsquo;est en me replongeant dans la documentation de logrotate que j&rsquo;ai découvert qu&rsquo;il existait un mode debug qui vient simuler notre fichier de rotation. C&rsquo;est vraiment cool.</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-12"><code><strong>$ sudo logrotate -d /etc/logrotate.d/tomcat</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="904" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg" alt="" class="wp-image-3778" style="aspect-ratio:1.037616803769667;width:557px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-300x289.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-768x740.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Bon ba fonctionne pas. Que pasa ? Ca ne serait pas encore un coup du SELinux ? Mais si, Mais si j&rsquo;ai cru voir un SELinux !</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-13"><code><strong>$ ls -Zd /opt/tomcat/logs</strong>
<strong>$ sudo semanage fcontext -a -t var_log_t "/opt/tomcat/logs(/.*)?"
$ sudo restorecon -Rv /opt/tomcat/logs</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="317" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg" alt="" class="wp-image-3779" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-300x101.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-768x260.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Après vérification du contexte de sécurité, il s&rsquo;avère que <strong>logrotate </strong>est bloqué par le SELinux lorsqu&rsquo;il essai d&rsquo;écrire dans le répertoire <strong>/opt/tomcat/logs</strong>. Il convient donc alors d&rsquo;ajouter le contexte et de restaurer le contexte de sécurité sur le répertoire <strong>/opt/tomcat/logs</strong>. 🙂</p>



<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong><em>Tu vois Monsieur CHAPPINION, je ne laisse pas la sécurité au hasard et des backdoors partout comme tu aimes le crier haut et fort en te pavanant. Continu de cracher ton VENIN avec ta clic&#8230; #bisous #gratuit #faitdubien 🙂</em></strong></p>



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



<p class="wp-block-paragraph">Comme j&rsquo;ai choisi l&rsquo;installation depuis le package et non depuis le repo, il faut se farcir à la main le fichier de service. Cela dit, c&rsquo;est plutôt intéressant de se pencher sur le cas. Encore une fois et c&rsquo;est mon point de vue, c&rsquo;est agréable de savoir cuisiner que d&rsquo;acheter des produits transformés tous les jours.</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-14"><code><strong>$ sudo vim /etc/systemd/system/tomcat.service</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Unit]
Description=Apache Tomcat Web Application Container
After=network.target

&#91;Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

# Sécurité Systemd (Sandboxing)
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true

&#91;Install]
WantedBy=multi-user.target</strong></code></pre>



<p class="wp-block-paragraph">Normalement maintenant c&rsquo;est le moment de vérité&#8230; Démarrons notre service. Si tout va bien, pas d&rsquo;erreur. Sinon c&rsquo;est parti pour du début et avec Java ça peut vite devenir pénible et encore le paroxysme est loin. Mais je ne veux pas vous décourager&#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-15"><code><strong>$ sudo systemctl start tomcat
$ sudo systemctl status tomcat</strong></code></pre>



<p class="wp-block-paragraph">Si c&rsquo;est ok, le service peut être actif au démarrage du système. Ce dernier se lancera après le service réseau (cf la conf du service).</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-16"><code><strong>$ systemctl enable tomcat</strong></code></pre>



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



<p class="wp-block-paragraph">Pour vérifier que tout est fonctionnel, il est nécessaire comme nous avons supprimé l&rsquo;intégralité du contenu de notre répertoire <strong>/webapps/</strong> de générer un fichier de test :</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-17"><code><strong>$ sudo mkdir /opt/tomcat/webapps/ROOT
$ sudo echo "OK FINAL ROOT" &gt; /opt/tomcat/webapps/ROOT/index.html
$ chown tomcat:tomcat -R /opt/tomcat/webapps/ROOT
$ sudo systemctl restart tomcat</strong></code></pre>



<p class="wp-block-paragraph">Maintenant depuis un navigateur web, sous réserve d&rsquo;avoir créé la règle sur votre UTM<sup data-fn="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" class="fn"><a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link">16</a></sup> si vous n&rsquo;êtes pas dans le même subnet rendez-vous sur l&rsquo;URL <strong>http://&lt;SERVER&gt;:8080</strong> ou depuis directement depuis votre server curl <strong>http://127.0.0.1:8080</strong> vous devriez avoir en retour :</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>Remote</strong></td><td class="has-text-align-center" data-align="center"><strong>Local</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="222" class="wp-image-3825" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg 441w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote-300x121.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="41" class="wp-image-3826" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg 621w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote-300x22.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je pense que nous avons clôt ce billet. Nous voilà avec un server Tomcat sécurisé et fonctionnel&#8230; 🙂</p>



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



<p class="wp-block-paragraph">Je me suis arraché les cheveux sur ce billet.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Ecoute ma bonne Catalina, tu un engine modèle, mais si tu n&rsquo;as que des qualités et en termes de verbosité tu es resté comme je l&rsquo;espérai, c&rsquo;est le bonheur rangé dans une armoire. Tu vois si c&rsquo;était à refaire, je t&rsquo;installerai de nouveau mais tu m&#8217;emmerdes !</em></p>
<cite>Erwan Guillemard, revisite d&rsquo;<span style="text-decoration: underline;"><a href="https://www.youtube.com/watch?v=ZywHVw_WIaA">Un singe en hiver</a> d&rsquo;Henri VERNEUIL</span></cite></blockquote>



<p class="wp-block-paragraph">Mais alors pourquoi je tiens ces propos ? Je me suis une nouvelle fois aventuré dans la <strong>stacktrace </strong>et dans les logs à la suite d&rsquo;un <strong>404 Not Found</strong>. D&rsquo;erreur dans le fichier de configuration car sensible à la case sur UN caractère. L&rsquo;absence de log par moment&#8230; Tout ce que j&rsquo;aime avec JAVA, ou du moins j&rsquo;aimais&#8230; Imaginons maintenant une montée de version ? J&rsquo;espère que votre formulaire de CAB<sup data-fn="3aa5110f-a4b9-4a7d-afe0-234fc96d5687" class="fn"><a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687" id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link">17</a></sup> est à jour et que vous avez un environnement de production iso à votre production.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>JAVA et Tomcat c&rsquo;est un peu comme regardez notre bonne vieille boite de Schrödinger. Le service est démarré, mais cela ne fonctionne. Le chat, c&rsquo;est notre Tomcat numérique (C&rsquo;est surtout la faute du mec entre le clavier et la chaise qui est dans un état quantique oui !).</td><td><img loading="lazy" decoding="async" width="350" height="467" class="wp-image-3840" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-225x300.jpeg 225w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-768x1024.jpeg 768w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1152x1536.jpeg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1536x2048.jpeg 1536w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://www.google.com/search?sca_esv=042d98b02a14ad67&amp;rlz=1C1VDKB_frFR1007FR1007&amp;sxsrf=ANbL-n5g0SGLR_FWDKmUlxRKrbUzg2m9Fw:1776192360032&amp;q=schrodinger&amp;si=AL3DRZHSpE0pse5fJpxwjTYaymAaGmMpRhbxpA7uMSemdL5dKZeVcKV4-oc58az3G7fIb7JrAUZtKhLoqaP4Xh3erRAOpS2vbpdBPWfMAVztgIr6WaS5Ss0%3D&amp;sa=X&amp;ved=2ahUKEwjDpLCVgO6TAxXPU6QEHTMgGXUQyNoBKAB6BAgeEAA&amp;ictx=1"></a>Enfin passons, si j&rsquo;ai fait un billet sur Tomcat, c&rsquo;est que je vais surtout en avoir besoin dans l&rsquo;article prochain et qu&rsquo;il était vraiment important d&rsquo;étudier en profondeur ce produit de la gamme Apache. Il faut reconnaitre tout de même qu&rsquo;en terme de serveur web il y a bien pire 🙂</p>



<p class="wp-block-paragraph">Rien que les notions de sécurité, nous revenons une nouvelle fois autour des mêmes notions conceptuelles, moindre privilège, réduction de la surface d&rsquo;attaque, audit, chiffrement et isolation. Ces points sont primordiaux pour Tomcat.</p>



<p class="wp-block-paragraph">Pourquoi me direz-vous ? Parce que nous publions un service Web qui exécute du code JAVA qui si mal isolé, croyez-moi peut faire énormément de dégât dans un système d&rsquo;information. Il serait bien de porter si vous utiliser ce dernier renforcer la vigilance sur ce dernier avec votre SIEM<sup data-fn="3d2466aa-4353-4408-a243-6def2b5bade4" class="fn"><a href="#3d2466aa-4353-4408-a243-6def2b5bade4" id="3d2466aa-4353-4408-a243-6def2b5bade4-link">18</a></sup> (c&rsquo;est marrant, je n&rsquo;en ai pas 🙂 )&#8230;</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Le chat botté chevauche Tomcat pendant que Charles Perrault configure du HSTS dans une cafetière. Arabica mon chers Watson, je danse la JAVA de Broadway. A non, il y a Catalina en travers sur une requête HTTP, le firewall vous fait chapeau bas !</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://messervices.cyber.gouv.fr/documents-guides/anssi-guide-recommandations_mise_en_oeuvre_site_web_maitriser_standards_securite_cote_navigateur-v2.0.pdf">ANSSI : Standards de sécurité côté navigateur</a></li>



<li><a href="https://linux.die.net/man/8/logrotate">Logrotate : Man</a></li>



<li><a href="https://linux.die.net/man/1/curl">Curl : Man</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Apache_Tomcat">Wikipédia : Apache Tomcat</a></li>



<li><a href="https://ipweb.univ-evry.fr/docs/">Tomcat : Documentation</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="16da1029-699d-4bca-a6e9-7768a7099ca3"><strong>POO :</strong> Programmation Orientée Objet <a href="#16da1029-699d-4bca-a6e9-7768a7099ca3-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8fe03776-25cc-4570-88c0-2c285e68ced0"><strong>BTS :</strong> Brevet de Technicien Supérieur <a href="#8fe03776-25cc-4570-88c0-2c285e68ced0-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2"><strong>IDE :</strong> Integrated Environment Development <a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="af7fd030-5eb8-459c-b326-4cfe6ebc218e"><strong>JDK :</strong> JAVA Development Tools <a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7"><strong>JVM :</strong> JAVA Virtual Machine <a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec"><strong>JRE :</strong> JAVA Runtime Environment <a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="5aa72831-364a-4813-a223-8651ecf90bfd"><strong>JSP :</strong> JAVA Server Pages <a href="#5aa72831-364a-4813-a223-8651ecf90bfd-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65"><strong>HTTP :</strong> HyperText Transfert Protocol <a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c"><strong>SE </strong>: Système d&rsquo;Exploitation <a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="8d533817-d743-4f53-9f04-09b0d390cfa6"><strong>URL :</strong> Uniform Resource Locator <a href="#8d533817-d743-4f53-9f04-09b0d390cfa6-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2695521-2349-42a7-b9d8-98daece4022d"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Information <a href="#d2695521-2349-42a7-b9d8-98daece4022d-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="6ba62ef7-23e3-40d7-9103-43c42443f43d"><strong>MIM :</strong> Man In the Middle <a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6"><strong>XSS :</strong> Cross Site Scripting <a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="f00b61b2-171d-465a-96ff-80a705088787"><strong>HTTPS :</strong> Secure HyperText Transfert Protocol  <a href="#f00b61b2-171d-465a-96ff-80a705088787-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2"><strong>CVE :</strong> Common Vulnerabilities and Exposures <a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b"><strong>UTM :</strong> Unified Threat Management  <a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687"><strong>CAB :</strong> Change Advisory Board  <a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="3d2466aa-4353-4408-a243-6def2b5bade4"><strong>SIEM :</strong> Security Information and Event Management <a href="#3d2466aa-4353-4408-a243-6def2b5bade4-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Zelen Zajac, Ollama Client IA</title>
		<link>https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:56:45 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3595</guid>

					<description><![CDATA[Ce matin un lapin, a tué un chasseur&#8230; Dans mon cas personnel je devrais plutôt dire, Ce matin un prompt Ollama a tué mon serveur&#8230; Toujours dans la dynamique du sujet d&#8217;étude en cours « l&#8217;IA » et l&#8217;étude de la solution Ollama, je suis victime du fait de sa causalité de l&#8217;ouverture d&#8217;un projet et donc...]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center wp-block-paragraph"><em>Ce matin un lapin, a tué un chasseur&#8230;</em></p>



<p class="wp-block-paragraph">Dans mon cas personnel je devrais plutôt dire, Ce matin un prompt Ollama a tué mon serveur&#8230;</p>



<p class="wp-block-paragraph">Toujours dans la dynamique du sujet d&rsquo;étude en cours « l&rsquo;<strong>IA</strong><sup data-fn="3c238b86-0447-4ce9-8d8d-9de00b698ba6" class="fn"><a href="#3c238b86-0447-4ce9-8d8d-9de00b698ba6" id="3c238b86-0447-4ce9-8d8d-9de00b698ba6-link">1</a></sup> » et l&rsquo;étude de la solution Ollama, je suis victime du fait de sa causalité de l&rsquo;ouverture d&rsquo;un projet et donc de cet article.</p>



<p class="wp-block-paragraph">Pour reprendre la conclusion de l&rsquo;article traitant d&rsquo;Ollama et de la solution OpenWebUI, j&rsquo;avais émis l&rsquo;hypothèse de créer mon propre client Ollama en me passant sur l&rsquo;API<sup data-fn="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303" class="fn"><a href="#d93bfd9a-2f90-476d-aa8e-1e89b2a1d303" id="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303-link">2</a></sup> de ce dernier.</p>



<p class="wp-block-paragraph">Du fait de la consommation de ressource importante nécessaire au bon fonctionnement d&rsquo;OpenWebUI et d&rsquo;Ollama, je voyais plutôt d&rsquo;un bon œil de créer son propre client. Soit pour faire simple de se passer de la solution OpenWebUI. L&rsquo;un des arguments complémentaires, l&rsquo;interface CLI d&rsquo;Ollama n&rsquo;est pas hyper user-friendly pour celui qui n&rsquo;a pas l&rsquo;habitude des interfaces CLIs. Ce que je souhaite c&rsquo;est un usage à moyen et grande échelle. Comprendre par là un environnement familial ou pourquoi pas dans une PME ?</p>



<p class="wp-block-paragraph">Avec l&rsquo;ensemble de ces réflexions, je me suis dit </p>



<p class="has-text-align-center wp-block-paragraph"><strong>« Ok je me lance et si ça les tests sont concluants je fais ma petite application&#8230; » </strong></p>



<p class="wp-block-paragraph">C&rsquo;est là que ça dérape. Pris d&rsquo;une <a href="https://www.youtube.com/watch?v=b_IpgKzy75E">creative fever</a> (sans vouloir divulgâcher la suite du billet), le projet <strong>SS_045</strong><sup data-fn="87c4ae21-fecd-403f-8e83-790ff6782e42" class="fn"><a href="#87c4ae21-fecd-403f-8e83-790ff6782e42" id="87c4ae21-fecd-403f-8e83-790ff6782e42-link">3</a></sup> va basculer en <strong>GS_045</strong><sup data-fn="4157211a-1421-4b7f-991f-5b01f3f1e8da" class="fn"><a href="#4157211a-1421-4b7f-991f-5b01f3f1e8da" id="4157211a-1421-4b7f-991f-5b01f3f1e8da-link">4</a></sup> sous son nom de code <strong><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Zelen Zajac</mark></em></strong> ou en français <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color"><strong><em>Lapin Vert</em></strong>.</mark> Cela viendra donc concrétiser la création d&rsquo;un client multiplateforme CLI<sup data-fn="c8caa45d-16d4-4278-8ccc-77558ca817d5" class="fn"><a href="#c8caa45d-16d4-4278-8ccc-77558ca817d5" id="c8caa45d-16d4-4278-8ccc-77558ca817d5-link">5</a></sup> et GUI<sup data-fn="8443a5bd-9822-4617-8326-496debed06f8" class="fn"><a href="#8443a5bd-9822-4617-8326-496debed06f8" id="8443a5bd-9822-4617-8326-496debed06f8-link">6</a></sup> pour Windows.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo.png" alt="" class="wp-image-3599" style="width:341px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo.png 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-150x150.png 150w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Comme quoi, encore une fois d&rsquo;une petite idée va naitre un projet sympathique. Surement inutile, mais sympathique 🙂 Et je suis certain que le fan club de <a href="https://www.youtube.com/watch?v=eD-sqt5rA9g">Chantal Goya</a> sera content <strong>#coeur</strong>.</p>





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



<p class="wp-block-paragraph">Contrairement aux projets précédents <a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting/">Green Ray</a> ou <a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">Dream Nebula</a> je vais rentrer un peu plus en détail dans la technique et ce pour des raisons simples que j&rsquo;ai appris et renforcé pas mal de compétence en termes de développement.</p>



<p class="wp-block-paragraph">Cet article sera donc orienté plus développement qu&rsquo;infrastructure.</p>



<p class="wp-block-paragraph">Mon code sera disponible sur GitHub contrairement à d&rsquo;autres projets.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi ce choix et ce revirement de position ? </strong></p>



<p class="wp-block-paragraph">Parce que je pense que cela peut être profitable à d&rsquo;autres utilisateurs de la solution Ollama qui veulent se passer d&rsquo;OpenWebUI. 🙂 Et je pense que là c&rsquo;est rester dans le monde de l&rsquo;open-source.</p>



<p class="wp-block-paragraph">Bref, si votre curiosité est toujours suscitée je pense que le reste de l’article devrait vous satisfaire. Dans le cas contraire, je vous laisse exécuter la combinaison&nbsp;<strong>Ctrl+F4</strong> ou <strong>Ctrl+W</strong> pour fermer cet onglet.</p>



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



<ul class="wp-block-list">
<li><strong>SE :</strong> 
<ul class="wp-block-list">
<li>Windows (Server ou Workstation)</li>



<li>GNU/Linux (RHEL<sup data-fn="9864d609-454b-4668-93e4-84c33fbd3d0e" class="fn"><a href="#9864d609-454b-4668-93e4-84c33fbd3d0e" id="9864d609-454b-4668-93e4-84c33fbd3d0e-link">7</a></sup> ou Debian)</li>
</ul>
</li>



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



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et supérieur</li>
</ul>
</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-1-theorie">Partie 1 : Théorie</a>
<ul class="wp-block-list">
<li>Définir l&rsquo;expression du besoin</li>



<li>Aborder le cahier des charges</li>



<li>Défendre les solutions techniques retenus</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-2-pratique">Partie 2 : Pratique</a>
<ul class="wp-block-list">
<li>Guide de déploiement de la solution</li>



<li>Paramétrage de l&rsquo;application</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-3-demonstration">Partie 3 : Démonstration</a>
<ul class="wp-block-list">
<li>Présentation de la solution dans les différents modes qui ont été développés</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Ce petit projet a été source de défis pour ne pas écrire challenges et de montée en compétence sur le code. Oui moi qui ne jure que sur le CLI, je me mets à faire du GUI. </p>



<p class="wp-block-paragraph">La plus belle satisfaction reste d&rsquo;avoir fait mon premier code cross-plateform .Net entre les SEs<sup data-fn="8ae87058-3ec7-4203-8667-e45f6b3a5164" class="fn"><a href="#8ae87058-3ec7-4203-8667-e45f6b3a5164" id="8ae87058-3ec7-4203-8667-e45f6b3a5164-link">8</a></sup> Windows et Linux. Le côté agnostique permet donc d&rsquo;avoir une seule version du code ce qui facilite l&rsquo;évolution et le maintien du code, mais surtout d&rsquo;offrir les mêmes services peu importe la nature du système de l&rsquo;utilisateur. Je me sens à ce moment comme un chevalier ayant réussi ça quête… Ou pas car le démoniaque lapin est toujours là est doit être rassasié (amélioré, je voulais dire &lt;3 ) !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="160" height="90" src="https://erwanguillemard.com/wp-content/uploads/2026/05/PP_006_008_fond.gif" alt="" class="wp-image-3832" style="width:441px;height:auto"/></figure>
</div>


<p class="wp-block-paragraph">Si je me réfère à l&rsquo;actualité au moment de la rédaction de ce billet, la volonté du gouvernement français de se libérer des technologies américaines sur les outils informatiques aux détriments de solutions françaises et open source viennent alimenter d&rsquo;eau mon moulin.</p>



<p class="wp-block-paragraph">Au-delà de ces derniers points, j&rsquo;ai trouvé intéressant de manipuler l&rsquo;API OLLAMA dans le cadre d&rsquo;un réseau local afin d&rsquo;offrir une solution viable et fiable dans une PME.</p>



<p class="wp-block-paragraph">Mon application reste certes à évoluer pour être réellement concurrentiel aux solutions actuellement sur le marché. Toutefois est-ce là mon objectif ? Je ne crois pas, du moins je n&rsquo;ai pas cette prétention.</p>



<p class="wp-block-paragraph">Ce qui me rassurer néanmoins, ce que j&rsquo;ai pu faire nativement peut donc être implémenté comme plugin d&rsquo;une application, voir encore être utilisé comme une passerelle applicative entre deux applications. Par exemple, j&rsquo;ai la volonté de reprendre mon projet de passerelle applicative entre VEEAMOne et ITOP pour générer des tickets sur le déclenchement d&rsquo;une alarme d&rsquo;exploitation géré par l&rsquo;IA. Ca, c&rsquo;est bandant comme projet et serait super faire un pas de plus vers l&rsquo;efficience !</p>



<p class="wp-block-paragraph">L&rsquo;IA que je voyais comme une menace est ennemie au final selon l&rsquo;usage que nous voulons en faire devient un outil puissant. Certes, j&rsquo;ai mis du temps à être convaincu par la chose mais il n&rsquo;est jamais trop tard. Le plus important pour moi est de rester supérieur à l&rsquo;IA dans l&rsquo;usage que je vais en faire. </p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>C&rsquo;est l&rsquo;histoire d&rsquo;un Lama qui rencontre un Lapin, vous buvez un verre ? Puis un homme rentre dans un bar. Stop appelez Brigitte BARDOT ! J&rsquo;ai mon API qui me dérange ! <a href="https://www.youtube.com/watch?v=OLX5d9l6N4Y">Je je suis agnostique, je suis un lapin</a></em> !</p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/fr-fr/powershell/scripting/install/install-powershell-on-linux?view=powershell-7.6&amp;viewFallbackFrom=powershell-7.1">Windows : Installer Powershell pour Linux</a></li>



<li>Article : OpenWebui</li>



<li>Article : Ollama</li>
</ul>


<ol class="wp-block-footnotes"><li id="3c238b86-0447-4ce9-8d8d-9de00b698ba6"><strong>IA :</strong> Intelligence Artificielle <a href="#3c238b86-0447-4ce9-8d8d-9de00b698ba6-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303"><strong>API :</strong> Application Programing Interface <a href="#d93bfd9a-2f90-476d-aa8e-1e89b2a1d303-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="87c4ae21-fecd-403f-8e83-790ff6782e42"><strong>SS_045 :</strong> SystemScript #45 <a href="#87c4ae21-fecd-403f-8e83-790ff6782e42-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="4157211a-1421-4b7f-991f-5b01f3f1e8da"><strong>GS_045 :</strong> GraphicalScript #45 <a href="#4157211a-1421-4b7f-991f-5b01f3f1e8da-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="c8caa45d-16d4-4278-8ccc-77558ca817d5"><strong>CLI :</strong> Client Lign Interface <a href="#c8caa45d-16d4-4278-8ccc-77558ca817d5-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="8443a5bd-9822-4617-8326-496debed06f8"><strong>GUI :</strong> Graphical User Interface <a href="#8443a5bd-9822-4617-8326-496debed06f8-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="9864d609-454b-4668-93e4-84c33fbd3d0e"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#9864d609-454b-4668-93e4-84c33fbd3d0e-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="8ae87058-3ec7-4203-8667-e45f6b3a5164"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#8ae87058-3ec7-4203-8667-e45f6b3a5164-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; VEEAM Repo &#038; MinIO Object Storage</title>
		<link>https://erwanguillemard.com/apps-minio-object-storage/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 26 Jul 2026 14:39:05 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[MINIO]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[VEEAM]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=2198</guid>

					<description><![CDATA[L’immuabilité prend bien des formes. Si j’ai abordé dans un billet précédent l’immuabilité au sens SE du terme intégré avec VEEAM, aujourd’hui je me suis tourné vers l’immuabilité au sens S3, toujours interfacée avec l’application tierce VEEAM. Difficile néanmoins de progresser vite sur cette technologie puisque je suis Candide. M&#8217;enfin comme l&#8217;écrivait Franquin, je vais...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">L’immuabilité prend bien des formes. Si j’ai abordé dans un billet précédent l’immuabilité au sens SE<sup data-fn="5daf5660-def4-42b2-81fc-7381fb71f8eb" class="fn"><a href="#5daf5660-def4-42b2-81fc-7381fb71f8eb" id="5daf5660-def4-42b2-81fc-7381fb71f8eb-link">1</a></sup> du terme intégré avec VEEAM, aujourd’hui je me suis tourné vers l’immuabilité au sens S3<sup data-fn="64126bc5-ea68-4702-914c-0c2efa484ca6" class="fn"><a href="#64126bc5-ea68-4702-914c-0c2efa484ca6" id="64126bc5-ea68-4702-914c-0c2efa484ca6-link">2</a></sup>, toujours interfacée avec l’application tierce VEEAM.</p>



<p class="wp-block-paragraph">Difficile néanmoins de progresser vite sur cette technologie puisque je suis Candide. M&rsquo;enfin comme l&rsquo;écrivait Franquin, je vais essayer de décortiquer la techno et son fonctionnement et de présenter ma compréhension de la chose. L&rsquo;objectif étant naturellement de prouver s&rsquo;il est possible d&rsquo;altérer l&rsquo;inaltérable du stockage objet.</p>





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



<ul class="wp-block-list">
<li><strong>SE :</strong> RHEL, UBUNTU</li>



<li><strong>Apps : </strong>VEEAM B&amp;R 12.1</li>



<li><strong>Autres : </strong>
<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/linux/">Environnement GNU LINUX Durci</a></li>



<li><a href="https://erwanguillemard.com/windows-veeam-backup-replication/">VEEAM B&amp;R 12.1 et versions ultérieures</a></li>



<li>License VEEAM Entreprise</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Nous allons commencer par un petit brin d&rsquo;histoire sur l&rsquo;interface S3.</p>



<p class="wp-block-paragraph">Qu&rsquo;est ce que signifie l&rsquo;interface S3 ? Il signifie Amazon Simple Storage Service (et oui, Jeff BEZOS in da house !). Contrairement à ce que j&rsquo;ai pu penser, l&rsquo;interface n&rsquo;est pas toute jeune (quoi que vous me direz, le temps c&rsquo;est relatif, non ?). L&rsquo;API S3 a été officiellement mis sur le marché en 2006 par Amazon.</p>



<p class="wp-block-paragraph">L&rsquo;objectif initial était et reste de proposer à des entreprises un service de stockage de données dans le nuage et de s&rsquo;assurer de la disponibilité et de l&rsquo;intégrité de ces dernières. Ouai mais bon en 2006, le cloud c&rsquo;est pas trop d&rsquo;actualité, c&rsquo;est plus l&rsquo;ère du Personal Computer ? Pour la plèbe, oui, mais nous avons toujours un train de retard avec les grands GAFAM<sup data-fn="ebd22563-41db-4ad8-b047-7f3efb5205e5" class="fn"><a href="#ebd22563-41db-4ad8-b047-7f3efb5205e5" id="ebd22563-41db-4ad8-b047-7f3efb5205e5-link">3</a></sup> et autres sociétés de la tech 🙂</p>



<p class="wp-block-paragraph">Bref, certaines entreprises décident de stocker leurs données chez Amazon à travers ce nouveau service pour s&rsquo;affranchir des coûts et inconvénients d&rsquo;un SI local. En contrepartie, Amazon facture ces dites entreprises au stockage (Go) ainsi qu&rsquo;au trafic internet à destination de ces données. Depuis, l&rsquo;usage a littéralement explosé puisque nous ne parlons plus en Gigaoctet, mais de manière commune en Téraoctet voir Pétaoctet et certains plus consommateurs que d&rsquo;autres en Exaoctet (1 Eo = 1 000 000 000 Go) puisque l&rsquo;usage du cloud n&rsquo;est plus restreint à un besoin professionnel mais orienté comme un service à destination des usagers (coucou NETFLIX, SPOTIFY, FACEBOOK, X etc).</p>



<p class="wp-block-paragraph">La base de l&rsquo;API S3 est donc de fournir une disponibilité de la data la plus haute possible de manière sécurisé tout en restant le plus flexible possible. L&rsquo;objectif étant de stocker des quantités phénoménales de données. Dans certains cas, il n&rsquo;est pas rare de parler de DataLake (Lac de données).</p>



<p class="wp-block-paragraph">Oui mais alors qu&rsquo;est ce qu&rsquo;on stocke ? Principalement tout et rien, c&rsquo;est à dire des données de sauvegarde, d&rsquo;archive, des applications, sites webs, contenu multimédia, bases de données, etc. Cependant tous ces types de données pour la plupart répondent à un même usage, le WORM<sup data-fn="67827f4e-9213-452a-be37-7b3f023820e9" class="fn"><a href="#67827f4e-9213-452a-be37-7b3f023820e9" id="67827f4e-9213-452a-be37-7b3f023820e9-link">4</a></sup>. (C&rsquo;est un super jeu avec des vers qui se tirent dessus ? Non ça c&rsquo;est <a href="https://www.youtube.com/watch?v=WamGYvnAgxo&amp;ab_channel=Team17">WORMS</a> 🙂 )</p>



<p class="wp-block-paragraph">WORM signifie Write Once Read Many. Soit dans les faits j&rsquo;écris une fois les données et je les consulte énormément. Par exemple, je charge une photo sur un réseau social. Je vais l&rsquo;écrire une fois sur le système puis cette dernière sera visible et accessible de tous. La donnée ne va pas vivre. Sur ce principe, il va alors être possible de définir des algorithmes de segmentation de cette donnée pour garantir un gain d&rsquo;espace, d&rsquo;évolutivité, la sécurité de la donnée ainsi que sa disponibilité.</p>



<p class="wp-block-paragraph">Si nous regardons à la loupe les 4 critères ces derniers permettent :</p>



<ul class="wp-block-list">
<li><strong>Gain d&rsquo;espace :</strong> Compression de la données avec déduplication et dans certains cas de l&rsquo;eraser coding</li>



<li><strong>Evolutivité :</strong> Possibilité de définir un nouveau stockage et de joindre celui ci au système existant à travers internet. </li>



<li><strong>Sécurité :</strong> Les données sont traduites en objets et stockées à plusieurs emplacements de stockage permettant de reconstruire la donnée en cas de corruption d&rsquo;un ou plusieurs stockages (sur la base de la reconstruction par parité). Il sera également possible de définir une durée de vie à cette donnée (coucou immutability). J&rsquo;ai vulgarisé. En réalité, l&rsquo;objet étant une entité logique, ce dernier est stocké sous forme de fragment&#8230; Complexe d&rsquo;un coup non ? 🙂</li>



<li><strong>Disponibilité</strong> : A partir du critère précédent, si un des serveurs où se trouve ma donnée est HS ou momentanément inaccessible, ma donnée continue d&rsquo;être disponible car ces données en tant qu&rsquo;objet sont fragmentées sur d&rsquo;autres serveurs.</li>
</ul>



<p class="wp-block-paragraph">Avant d&rsquo;aller plus loin, il est important de comprendre que l&rsquo;interface S3 a tout son sens en tant que SaaS<sup data-fn="6e7f7b72-5d59-45a2-9059-bf1e1e4b7b6e" class="fn"><a href="#6e7f7b72-5d59-45a2-9059-bf1e1e4b7b6e" id="6e7f7b72-5d59-45a2-9059-bf1e1e4b7b6e-link">5</a></sup>. Néanmoins, cela implique de souscrire à ce service chez Amazon par exemple. Ce n&rsquo;est pas objectif car je recherche une solution OnPremise pour construire et éventuellement proposer ce service dans mon catalogue de service. C&rsquo;est pourquoi il a été compliqué de trouver une solution S3 OnPremise totalement « open ». L’une des forces du stockage objet (S3) est sa flexibilité. L’un des inconvénients (selon moi) est comment s&rsquo;assurer que les données (mes datas à moi) ne sont pas utilisées par autrui, sont bien supprimées etc ? Il faut faire confiance mais aujourd&rsquo;hui cela ne suffit pas&#8230;</p>



<p class="wp-block-paragraph">Bref, en cherchant un petit peu mais pas trop, j&rsquo;ai identifié une solution opensource MinIO. C&rsquo;est avec cette dernière que je vais m&rsquo;amuser avec le stockage objet.</p>



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



<p class="wp-block-paragraph">L&rsquo;une des premières questions que nous pouvons nous poser, Linux Hardened VS S3 ?</p>



<p class="wp-block-paragraph">Comme j&rsquo;ai pu le présenter dans un <a href="https://erwanguillemard.com/apps-veeam-repo-backup-hardened/">article précédent</a>, l&rsquo;immuabilité au sens hardened du terme est portée par l&rsquo;OS<sup data-fn="3af07056-54d6-45db-ad01-36f5f0a26035" class="fn"><a href="#3af07056-54d6-45db-ad01-36f5f0a26035" id="3af07056-54d6-45db-ad01-36f5f0a26035-link">6</a></sup> nativement. Toutefois, ce dernier est plus adapté pour la protection des fichiers que des données et le risque se trouve au niveau du compte système (Root). S&rsquo;il y a escalade des droits et donc contournement des mécanismes de sécurité, il est possible de supprimer les données en retirant l&rsquo;attribut « <strong>i</strong>« .</p>



<p class="wp-block-paragraph">Dans le cas de S3, l&rsquo;approche est différente car c&rsquo;est le moteur S3 qui gère l&rsquo;immuabilité et les données ne sont pas stockées sous forme de fichier mais d&rsquo;objet. Ainsi, pas possible de supprimer la donnée peu importe que nous soyons administrateur, Trump, Gourou d&rsquo;une secte ou même une divinité. Toutefois, un acte physique devrait faire y arriver&#8230;</p>



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



<p class="wp-block-paragraph">Comme toujours, mon côté père castor il est important de s&rsquo;intéresser à l&rsquo;histoire de MinIO.</p>



<p class="wp-block-paragraph">MionIO a été fondé en 2014 par Arnand Badu Periasamy, Garima Kapoor et Harshavardhana. L&rsquo;objectif du projet est de démocratiser le stockage cloud autour de la technologie de stockage objet dans le vaste univers de la communauté OpenSource. C&rsquo;est ainsi que naît Minimal Object Storage » ou MinIO :).</p>



<p class="wp-block-paragraph">Une première release ou version voit le jour courant 2017. Durant cette période un changement de licence va être réalisé suite à son essor auprès de la communauté. L&rsquo;ensemble des technologies est alors protégé par la licence GNU-AGPLv3. L&rsquo;objectif étant de se prémunir des géants de la tech.</p>



<p class="wp-block-paragraph">Par la suite, le bras de fer et les contentieux vont commencer. MinIO avec la montée en puissance de KUBERNETES est perçu comme une licorne. MinIO ira jusqu&rsquo;à révoquer les droits d&rsquo;usage de NUTANIX sur son service NUTANIX Objects pour violation de licence&#8230; Quand il y a du pognon en jeu, cela devient vite le bordel, je l&rsquo;ai toujours dit&#8230; M&rsquo;enfin. Le pourquoi ? L&rsquo;usage commercial sans paiement, ça ne passe pas&#8230;</p>



<p class="wp-block-paragraph">2025, MinIO cesse la publication d&rsquo;images Docker et des binaires précompilés pour les versions communautaires. MinIO devient MinIO AIStor.</p>



<p class="wp-block-paragraph">Malheureusement, c&rsquo;est le cas classique d&rsquo;un projet formidable ouvert à tous qui avec le temps s&rsquo;enferme dans la génération de profit, de protection intellectuelle. MinIO souhaite avoir comme tous les acteurs de ce monde une part du gateau CLOUD+IA.</p>



<h3 class="wp-block-heading">S3 versus Linux Hardening</h3>



<p class="wp-block-paragraph">Dans un billet précédent, je ventais par Mont et par Vaux les mérites et robustesses du hardening linux, mais qu&rsquo;en est il du hardening S3 ?</p>



<p class="wp-block-paragraph">Je pense que pour répondre à cette magnifique question, il est nécessaire de passer par un tableau (oui j&rsquo;aime rédiger sous la forme de tableau).</p>


<div class="kb-table-container kb-table-container2198_7a89b4-99 wp-block-kadence-table"><table class="kb-table kb-table2198_7a89b4-99">
<tr class="kb-table-row kb-table-row2198_51501e-33">
<th  scope="col" class="kb-table-data kb-table-data2198_1a17ae-53">

<p class="has-text-align-center has-theme-palette-2-background-color has-background wp-block-paragraph">Critères</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_fcfba2-6e">

<p class="has-text-align-center has-theme-palette-2-background-color has-background wp-block-paragraph">S3</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_4f9074-1c">

<p class="has-text-align-center has-theme-palette-2-background-color has-background wp-block-paragraph">Hardening</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2198_617253-d2">
<td  class="kb-table-data kb-table-data2198_9b3fc2-41">

<p class="has-text-align-center wp-block-paragraph"><strong>Technologies</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_ac18e8-ef">

<p class="wp-block-paragraph">S3 se place comme une solution applicative qui empêche la suppression de données.<br>Deux modes :</p>



<ul class="wp-block-list">
<li><strong>Compliance :</strong> Personne ne peut supprimer les datas, il faut attendre la fin de la période de rétention</li>



<li><strong>Governance :</strong> Seuls les utilisateurs avec des droits spéciaux peuvent supprimer les données</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data2198_57c614-a0">

<p class="wp-block-paragraph">Le hardening Linux se place comme une solution OS, système de fichiers qui empêche la suppression des données au niveau du noyau.<br>Généralement, l&rsquo;usage de l&rsquo;immuabilité est utilisé pour protéger les éléments sensibles de la suppression ou modification accidentelle ou malveillante.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_700d94-d5">
<td  class="kb-table-data kb-table-data2198_8e0ae8-a8">

<p class="has-text-align-center wp-block-paragraph"><strong>Niveau</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_d753ff-cc">

<p class="wp-block-paragraph">Applicatif (MinIO)</p>

</td>

<td  class="kb-table-data kb-table-data2198_85add3-25">

<p class="wp-block-paragraph">Système de Fichiers Linux</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_6256f9-14">
<td  class="kb-table-data kb-table-data2198_243d9a-f5">

<p class="has-text-align-center wp-block-paragraph"><strong>Portée</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_493236-e5">

<p class="wp-block-paragraph">Les objets (data)</p>

</td>

<td  class="kb-table-data kb-table-data2198_7ff0fc-87">

<p class="wp-block-paragraph">Les fichiers (data, configuration, binaire)</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_7baa03-5f">
<td  class="kb-table-data kb-table-data2198_dc2b63-72">

<p class="has-text-align-center wp-block-paragraph"><strong>Gestion</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_6d213f-9e">

<p class="wp-block-paragraph">Applicatif (MinIO)</p>

</td>

<td  class="kb-table-data kb-table-data2198_f6ca88-b0">

<p class="wp-block-paragraph">Root Linux (<strong>chattr</strong>)</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_a3d6ae-c8">
<td  class="kb-table-data kb-table-data2198_80ca32-4f">

<p class="has-text-align-center wp-block-paragraph"><strong>Durée</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_f426a5-8e">

<p class="wp-block-paragraph">Temporaire (rétention définie)</p>

</td>

<td  class="kb-table-data kb-table-data2198_a80eb8-6a">

<p class="wp-block-paragraph">Permanente jusqu&rsquo;au retrait de l&rsquo;immuabilité (<strong>chattr -i</strong>)</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_d3ed8c-98">
<td  class="kb-table-data kb-table-data2198_c326ed-fc">

<p class="has-text-align-center wp-block-paragraph"><strong>Contournable</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_ba6007-87">

<p class="wp-block-paragraph">Non si en mode Compliance</p>

</td>

<td  class="kb-table-data kb-table-data2198_dbe490-fc">

<p class="wp-block-paragraph">Non (nécessite de retirer l&rsquo;attribut <strong>i</strong>)</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_f5420f-4a">
<td  class="kb-table-data kb-table-data2198_45ff81-cc">

<p class="has-text-align-center wp-block-paragraph"><strong>Usage</strong></p>

</td>

<td  class="kb-table-data kb-table-data2198_dae217-ee">

<p class="wp-block-paragraph">WORM, conformité légale</p>

</td>

<td  class="kb-table-data kb-table-data2198_4b0860-27">

<p class="wp-block-paragraph">Hardening Server</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Ce que nous pouvons conclure de cette analyse, S3 est plus à même de protéger les données que le hardening LINUX. S3 permettant une meilleure immuabilité dans le temps et ce dernier est prévu pour cet usage précis. Même si cela fonctionne avec la gestion de l&rsquo;immuabilité LINUX. </p>



<p class="wp-block-paragraph">Vous lecteurs, ne pouvez pas savoir la souffrance que cela m&rsquo;apporte d&rsquo;écrire de tels mots. J&rsquo;ai toujours défendu bec et ongles le hardening linux et voyez vous, force est de constater que je suis dans le déni. Tel Pierre CAMBRONNE à la bataille de WATERLOO :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>La garde meurt mais ne se rend pas.</em></p>
<cite>Pierre CAMBRONNE</cite></blockquote>



<p class="wp-block-paragraph">  Même si dans mon cas c&rsquo;est un peu exagéré (mais juste un iota hein 🙂 )</p>



<h3 class="wp-block-heading">Mécanisme S3</h3>



<p class="wp-block-paragraph">Maintenant que nous savons faire la différence entre le hardening et l&rsquo;API S3, intéressons nous à comment l&rsquo;objet est rendu immuable 🙂 Chose que j&rsquo;ai mise un certain temps à assimiler personnellement et qui je le pense ne doit pas forcément être très claire pour bon nombre d&rsquo;entre nous.</p>



<h4 class="wp-block-heading">S3 Comment ça marche ?</h4>



<p class="wp-block-paragraph">Pour faire simple car je rentre dans le détail dans la sous partie suivante, lorsque nous envoyons un fichier vers un média S3, le service S3 va générer un fichier de metadata qui va contenir toutes les informations de la donnée. Puis le fichier va être découpé suivant l&rsquo;algorithme d&rsquo;Erasure coding paramétré afin de définir notre donnée avec des blocs de données puis de parité.</p>



<p class="wp-block-paragraph">Le moteur va alors stocker les donnée en respectant les contraintes de restauration et de disponibilité de la données sur chaque disque puis retournera à l&rsquo;utilisateur le succès ou non de l&rsquo;opération. Le stockage des données va se faire dans des Buckets.</p>



<p class="wp-block-paragraph">La durée de vie de la donnée sera stockée dans le fichier de métadonnées. Ainsi, si je souhaite supprimer une donnée pour laquelle la durée de rétention n&rsquo;est pas atteinte, lors de l&rsquo;appel de l&rsquo;opération de suppression, le moteur va lire le fichier de donnée puis me retourner une erreur 403 Forbidden car je ne réponds pas à la condition d&rsquo;altération de la donnée.</p>



<p class="wp-block-paragraph">Plutôt simple non ?</p>



<h4 class="wp-block-heading">Déroulé d&rsquo;un appel S3</h4>


<div class="kb-table-container kb-table-container2198_c56ad5-a8 wp-block-kadence-table"><table class="kb-table kb-table2198_c56ad5-a8">
<tr class="kb-table-row kb-table-row2198_c21824-a0">
<td  class="kb-table-data kb-table-data2198_9f2f64-f3">

<p class="wp-block-paragraph">Dans un premier temps, nous l&rsquo;application (interne ou externe) va émettre une requête HTTP standard conforme à l&rsquo;API S3. Un PUT pour écrire, un GET pour lire, un DELETE ou LIST pour gérer les objets. Dans les headers, nous devons retrouver les valeurs suivantes (x-amz-*).</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">L&rsquo;authentification est réalisée pour chaque requête côté client à travers une clé. MinIO vérifie la signature et va consulter les politiques IAM afin de définir si oui ou non l&rsquo;opération est autorisée. Dans le cas contraire, nous aurons un joli 403 Forbidden.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">MinIO va parser l&rsquo;URL afin de router la requête vers la bonne donnée objet dans le bon bucket ainsi que le header pour identifier l&rsquo;opération à réaliser :</p>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>Ecriture simple ?</li>



<li>Multipart upload ?</li>



<li>Téléchargement ?</li>



<li>Suppression avec versionning ?</li>



<li>Liste des objets ?</li>
</ul>



<p class="wp-block-paragraph">C&rsquo;est au niveau du moteur objet, coeur de l&rsquo;application que tout va se jouer. Pour chaque Objet, MinIO va générer un fichier de métadonnée (x.meta) qui va contenir :</p>



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



<li>Le Etag</li>



<li>La version</li>



<li>La carte de blocks</li>
</ul>



<p class="wp-block-paragraph">C&rsquo;est alors l&rsquo;Erasor Coding qui va découper la donnée en blocs de données et de parité.</p>



<p class="wp-block-paragraph">Les blocs sont distribués sur les disques selon la politique d&rsquo;EC défini.</p>



<p class="wp-block-paragraph">Si c&rsquo;est un succès, MinIO retournera le code HTTP 200/204 avec l&rsquo;Etag de l&rsquo;objet ainsi qu&rsquo;un identifiant de requête. </p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Dans le cas contraire (une surcharge par exemple ou un bucket qui n&rsquo;existe pas) nous aurons un code HTTP 4XX ou 5XX avec un message compatible S3.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Le chiffrement (SSE-S3 ou TLS), le versionning, les lifecycle rules et la réplication asynchrone fonctionnent de manière transparente sur toutes les opérations.</p>

</td>

<td  class="kb-table-data kb-table-data2198_e98ea3-d0">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="669" height="824" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_102_Schema.jpg" alt="" class="wp-image-4248" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_102_Schema.jpg 669w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_102_Schema-244x300.jpg 244w" sizes="auto, (max-width: 669px) 100vw, 669px" /></figure>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Architecture S3</h3>



<p class="wp-block-paragraph">Dans la logique, l&rsquo;architecture que nous devrions mettre en place est la suivante :</p>



<ul class="wp-block-list">
<li>Infrastructure Clustérisé pour MinIO (ring)</li>



<li>Protection par un certificat si publication du service</li>



<li>Mise en place de NAT <sup data-fn="b243a23f-4d53-4e0b-a631-32d9433a3b01" class="fn"><a href="#b243a23f-4d53-4e0b-a631-32d9433a3b01" id="b243a23f-4d53-4e0b-a631-32d9433a3b01-link">7</a></sup>+ PAT<sup data-fn="bd5e85eb-9910-4b06-a8c6-3c0ecd0abd88" class="fn"><a href="#bd5e85eb-9910-4b06-a8c6-3c0ecd0abd88" id="bd5e85eb-9910-4b06-a8c6-3c0ecd0abd88-link">8</a></sup></li>



<li>Configuration de l&rsquo;Eraser Coding</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="903" height="401" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_100_Schema.jpg" alt="" class="wp-image-4240" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_100_Schema.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_100_Schema-300x133.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_100_Schema-768x341.jpg 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>
</div>


<p class="wp-block-paragraph">Vous comprendrez qu&rsquo;il n&rsquo;est pas possible chez moi d&rsquo;établir un ring.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Un seul argument s&rsquo;y oppose, un seul ! C&rsquo;est dangereux. Bah ceux qui n&rsquo;aiment pas le danger, faut qu&rsquo;ils choisissent une autre activité.</em></p>
<cite>Nicolas SARKOZY</cite></blockquote>



<p class="wp-block-paragraph">En l&rsquo;occurrence, le danger étant ma formidable épouse, je vais choisir une autre solution. Je lui ai déjà pris une partie de son dressing, de la buanderie, je ne suis pas venu ici pour souffrir okay ? 🙂 (Je t&rsquo;aime chérie, promis je vais faire le ménage).</p>



<p class="wp-block-paragraph">Donc, pas de VM que du physique. Toutefois, je vous parle d&rsquo;Eraser Coding. Qu&rsquo;est que cela vient faire la dedans ? Je pense qu&rsquo;une sous partie va être nécessaire.</p>



<h4 class="wp-block-heading">Eraser Coding</h4>



<p class="wp-block-paragraph">L&rsquo;Eraser Coding est un moyen de protection des données par calcul mathématique plutôt que la copie des données. Cette technologie est bien plus efficace en terme de stockage que le RAID ou la réplication.</p>



<p class="wp-block-paragraph">Voyons plutôt.</p>



<p class="wp-block-paragraph">Une donnée est découpée par N blocs de données et M blocs de parité. La configuration EC:M définit alors le nombre de blocs de parité. Exemple : EC:2, 2 blocs de parité.</p>



<p class="wp-block-paragraph">Chaque bloc de parité est une combinaison linéaire des blocs de données calculée. Ainsi, n&rsquo;importe quels N blocs parmi les N+M suffisent à reconstruire l&rsquo;objet entier, que ce soit des blocs de parité ou de données. Si nous avons 4 blocs de données et 2 de parité, 4 blocs sur 6 permettent de reconstruire la donnée.</p>



<p class="wp-block-paragraph">Les systèmes vont alors distribuer la donnée aléatoirement sur les disques de l&rsquo;erasure définit. Soit un seul bloc par disque par objet. Aucun disque ne doit contenir deux blocs du même objet, puisque en cas de panne d&rsquo;un disque, les blocs restants sur les autres disques doivent permettre de recalculer le bloc manquant.</p>



<p class="wp-block-paragraph">Faisons une petite comparaison avec un RAID5 et RAID6.</p>


<div class="kb-table-container kb-table-container2198_3d6060-86 wp-block-kadence-table"><table class="kb-table kb-table2198_3d6060-86">
<tr class="kb-table-row kb-table-row2198_1213b4-86">
<th  scope="col" class="kb-table-data kb-table-data2198_29d1a1-04">

<p class="wp-block-paragraph"></p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_f81253-77">

<p class="has-text-align-center wp-block-paragraph">RAID5</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_2b8fba-85">

<p class="has-text-align-center wp-block-paragraph">RAID6</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_9e17c0-c4">

<p class="has-text-align-center wp-block-paragraph">EC:2<br>(8 disques)</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2198_5eeaea-07">
<th  scope="row" class="kb-table-data kb-table-data2198_012438-d9">

<p class="has-text-align-center wp-block-paragraph">Tolérance de pannes</p>

</th>

<td  class="kb-table-data kb-table-data2198_68eaca-25">

<p class="has-text-align-center wp-block-paragraph">1 Disque</p>

</td>

<td  class="kb-table-data kb-table-data2198_e61bed-3f">

<p class="has-text-align-center wp-block-paragraph">2 Disques</p>

</td>

<td  class="kb-table-data kb-table-data2198_6f9c20-70">

<p class="has-text-align-center wp-block-paragraph">2 Disques</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_7863ae-a4">
<th  scope="row" class="kb-table-data kb-table-data2198_e4b0f1-9b">

<p class="has-text-align-center wp-block-paragraph">Granularité</p>

</th>

<td  class="kb-table-data kb-table-data2198_aa6218-c7">

<p class="has-text-align-center wp-block-paragraph">Volume entier</p>

</td>

<td  class="kb-table-data kb-table-data2198_c0fb03-fa">

<p class="wp-block-paragraph">Volume entier</p>

</td>

<td  class="kb-table-data kb-table-data2198_a3a029-3c">

<p class="has-text-align-center wp-block-paragraph">Par objet</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_24394c-22">
<th  scope="row" class="kb-table-data kb-table-data2198_0358a8-60">

<p class="has-text-align-center wp-block-paragraph">Overhead</p>

</th>

<td  class="kb-table-data kb-table-data2198_e85433-bc">

<p class="has-text-align-center wp-block-paragraph">1 Disque</p>

</td>

<td  class="kb-table-data kb-table-data2198_aa1e9e-c2">

<p class="has-text-align-center wp-block-paragraph">2 Disques</p>

</td>

<td  class="kb-table-data kb-table-data2198_eac735-31">

<p class="has-text-align-center wp-block-paragraph">2 sur 8 Disques (25%)</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_fb8a87-0c">
<th  scope="row" class="kb-table-data kb-table-data2198_6ad695-23">

<p class="has-text-align-center wp-block-paragraph">Rebuild</p>

</th>

<td  class="kb-table-data kb-table-data2198_246639-50">

<p class="has-text-align-center wp-block-paragraph">Lent</p>

</td>

<td  class="kb-table-data kb-table-data2198_e7ee56-9a">

<p class="has-text-align-center wp-block-paragraph">Très lent</p>

</td>

<td  class="kb-table-data kb-table-data2198_c8b229-cb">

<p class="has-text-align-center wp-block-paragraph">Rapide</p>



<p class="has-text-align-center wp-block-paragraph">(objet par objet)</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Là on n&rsquo;y voit plus clair, pourtant, il existe une relation à bien assimiler entre le nombre de parités possibles par rapport au nombre de disques. Cette règle est fondamentale et doit être acquise.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">Disques Utilisables</mark> = <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Disques Totaux</mark> &#8211; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Blocs de Parité</mark></strong></p>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">Espace Utilisables</mark> = (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Disques Totaux</mark> &#8211; EC:N) / <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Disques Totaux</mark></strong></p>


<div class="kb-table-container kb-table-container2198_aa84f3-26 wp-block-kadence-table"><table class="kb-table kb-table2198_aa84f3-26">
<tr class="kb-table-row kb-table-row2198_e901f0-eb">
<th  scope="col" class="kb-table-data kb-table-data2198_b873e7-c1">

<p class="wp-block-paragraph">Disques</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_e43d51-4d">

<p class="wp-block-paragraph">EC</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_6e0a9e-8d">

<p class="wp-block-paragraph">Disques Data</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_bdb8be-34">

<p class="wp-block-paragraph">Tolérances Pannes</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_83ff11-24">

<p class="wp-block-paragraph">Espace Utilisable</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2198_ef9a8a-e6">
<td  class="kb-table-data kb-table-data2198_8f10e5-4b">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_448acc-bb">

<p class="has-text-align-center wp-block-paragraph">EC:1</p>

</td>

<td  class="kb-table-data kb-table-data2198_d7d712-76">

<p class="has-text-align-center wp-block-paragraph">3</p>

</td>

<td  class="kb-table-data kb-table-data2198_a560af-30">

<p class="has-text-align-center wp-block-paragraph">1</p>

</td>

<td  class="kb-table-data kb-table-data2198_67fefc-07">

<p class="has-text-align-center wp-block-paragraph">75%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_b92adf-04">
<td  class="kb-table-data kb-table-data2198_8f8478-3b">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_da63af-cc">

<p class="has-text-align-center wp-block-paragraph">EC:2</p>

</td>

<td  class="kb-table-data kb-table-data2198_4aa570-bb">

<p class="has-text-align-center wp-block-paragraph">2</p>

</td>

<td  class="kb-table-data kb-table-data2198_e1643c-60">

<p class="has-text-align-center wp-block-paragraph">2</p>

</td>

<td  class="kb-table-data kb-table-data2198_3691cf-33">

<p class="has-text-align-center wp-block-paragraph">50%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_22da70-59">
<td  class="kb-table-data kb-table-data2198_24314f-2a">

<p class="has-text-align-center wp-block-paragraph">6</p>

</td>

<td  class="kb-table-data kb-table-data2198_9328e3-da">

<p class="has-text-align-center wp-block-paragraph">EC:2</p>

</td>

<td  class="kb-table-data kb-table-data2198_199a91-12">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_980fcb-69">

<p class="has-text-align-center wp-block-paragraph">2</p>

</td>

<td  class="kb-table-data kb-table-data2198_ea59a0-72">

<p class="has-text-align-center wp-block-paragraph">67%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_3ae00a-12">
<td  class="kb-table-data kb-table-data2198_e41800-13">

<p class="has-text-align-center wp-block-paragraph">8</p>

</td>

<td  class="kb-table-data kb-table-data2198_63c866-ba">

<p class="has-text-align-center wp-block-paragraph">EC:2</p>

</td>

<td  class="kb-table-data kb-table-data2198_e98c67-fc">

<p class="has-text-align-center wp-block-paragraph">6</p>

</td>

<td  class="kb-table-data kb-table-data2198_7e3217-de">

<p class="has-text-align-center wp-block-paragraph">2</p>

</td>

<td  class="kb-table-data kb-table-data2198_6e4ceb-dc">

<p class="has-text-align-center wp-block-paragraph">75%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_735c15-0b">
<td  class="kb-table-data kb-table-data2198_69dc91-09">

<p class="has-text-align-center wp-block-paragraph">8</p>

</td>

<td  class="kb-table-data kb-table-data2198_0d3eec-18">

<p class="has-text-align-center wp-block-paragraph">EC:4</p>

</td>

<td  class="kb-table-data kb-table-data2198_2e33b7-1b">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_c5409f-99">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_71d2b0-0a">

<p class="has-text-align-center wp-block-paragraph">50%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_6398f6-ba">
<td  class="kb-table-data kb-table-data2198_b2998a-47">

<p class="has-text-align-center wp-block-paragraph">16</p>

</td>

<td  class="kb-table-data kb-table-data2198_0f7ffe-1d">

<p class="has-text-align-center wp-block-paragraph">EC:4</p>

</td>

<td  class="kb-table-data kb-table-data2198_2206ae-4b">

<p class="has-text-align-center wp-block-paragraph">12</p>

</td>

<td  class="kb-table-data kb-table-data2198_3fdc99-7b">

<p class="has-text-align-center wp-block-paragraph">4</p>

</td>

<td  class="kb-table-data kb-table-data2198_d196c2-aa">

<p class="has-text-align-center wp-block-paragraph">75%</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_173338-69">
<td  class="kb-table-data kb-table-data2198_862d9c-b2">

<p class="has-text-align-center wp-block-paragraph">16</p>

</td>

<td  class="kb-table-data kb-table-data2198_67ec7d-fb">

<p class="has-text-align-center wp-block-paragraph">EC:8</p>

</td>

<td  class="kb-table-data kb-table-data2198_4438e3-09">

<p class="has-text-align-center wp-block-paragraph">8</p>

</td>

<td  class="kb-table-data kb-table-data2198_4124f6-60">

<p class="has-text-align-center wp-block-paragraph">8</p>

</td>

<td  class="kb-table-data kb-table-data2198_3d7bff-96">

<p class="has-text-align-center wp-block-paragraph">50%</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Donc on ne définit pas au doigt mouillé la parité de notre EC. </p>



<p class="wp-block-paragraph">Je pense (comme dans tous mes billets lorsque j&rsquo;arrive à la fin de la partie théorique) que nous sommes suffisamment armés pour nous lancer dans la partie pratique. J&rsquo;ai choisi d&rsquo;implémenter un stockage S3 pour mon serveur VEEAM.</p>



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



<p class="wp-block-paragraph">Nous considérons que nous possédons déjà un Serveur VEEAM ainsi qu&rsquo;un serveur physique de préférence (mais virtuel fonctionne aussi bien) RHEL<sup data-fn="bbd16f7c-6276-4d33-a765-0d3a85e4a505" class="fn"><a href="#bbd16f7c-6276-4d33-a765-0d3a85e4a505" id="bbd16f7c-6276-4d33-a765-0d3a85e4a505-link">9</a></sup> ou UBUNTU/DEBIAN durci au préalable pour notre stockage objet.</p>



<p class="wp-block-paragraph">Egalement, notre futur serveur de stockage objet (compatible S3) aura une partition dédiée au stockage montée et formatée au format XFS.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="806" height="434" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_101_Schema.jpg" alt="" class="wp-image-4239" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_101_Schema.jpg 806w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_101_Schema-300x162.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_101_Schema-768x414.jpg 768w" sizes="auto, (max-width: 806px) 100vw, 806px" /></figure>
</div>


<p class="wp-block-paragraph">Brouillon enregistré.</p>



<p class="wp-block-paragraph">Naturellement, cela va être un peu short niveau ressource donc je vais adapter en conséquence les paramètres de ma VM à défaut d&rsquo;avoir un serveur physique dédié pour le stockage S3.</p>



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



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



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



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2198_74ab24-dc kt-accordion-has-3-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-pane2198_1ef866-8d"><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>1 &#8211; Download me</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 class="wp-block-paragraph">Il sera nécessaire d&rsquo;ajouter les sources de l&rsquo;éditeur en téléchargeant le package RPM puis d&rsquo;installer celui-ci.</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-18"><code><strong>## Community Edition
# wget https://dl.min.io/server/minio/release/linux-amd64/minio-20250907161309.0.0-1.x86_64.rpm -O minio.rpm

or

## AGPL License
# wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240613225353.0.0-1.x86_64.rpm -O minio.rpm</strong></code></pre>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention</strong>, ne privilégiez pas la Community Edition, sauf si vous savez ce que vous faites&#8230; Perso, nous partirons sur la version sous licence AGPL, bien plus complète.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="785" height="282" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_001_wget.png" alt="" class="wp-image-2206" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_001_wget.png 785w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_001_wget-300x108.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_001_wget-768x276.png 768w" sizes="auto, (max-width: 785px) 100vw, 785px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2198_aa26a6-e9"><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>2 &#8211; Install me</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-19"><code><strong># dnf install minio.rpm</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="797" height="274" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_002_install.png" alt="" class="wp-image-2207" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_002_install.png 797w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_002_install-300x103.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_002_install-768x264.png 768w" sizes="auto, (max-width: 797px) 100vw, 797px" /></figure>
</div></div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



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



<p class="wp-block-paragraph">Le client va nous permettre d&rsquo;interagir directement avec notre daemon en ligne de 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 wp-elements-20"><code><strong># </strong>curl -L -o /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc

# chmod +x /usr/local/bin/mc
# /usr/local/bin/mc --version</code></pre>



<h4 class="wp-block-heading">Configuration Système</h4>



<p class="wp-block-paragraph">J&rsquo;enfonce une porte ouverte. Mais cette étape est importante car elle représente un enjeu majeur de la sécurité de notre serveur de stockage dédié à la sauvegarde et donc de notre système d&rsquo;exploitation.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2198_a96a22-46 kt-accordion-has-5-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-pane2198_656681-fe"><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>1 &#8211; Compte 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 class="wp-block-paragraph">Dans le respect des bonnes pratiques ANSSI nous allons créer un compte système sans home et groupe dédié au service MinIO.</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-21"><code><strong># groupadd -r minio
# useradd -M -r -g minio minio</strong></code></pre>



<p class="wp-block-paragraph">Nous définissions les droits sur notre répertoire (point de montage naturellement) ainsi que les permissions adéquates.</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-22"><code><strong># chown minio:minio /mnt/minio
# chmod 700 /mnt/minio
# ls -al /mnt/minio</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="196" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_003_users_groups.png" alt="" class="wp-image-2208" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_003_users_groups.png 605w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_003_users_groups-300x97.png 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2198_5c1a1c-b1"><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>2 &#8211; Setting MinIO Systemd Service File</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 class="wp-block-paragraph">Créons le fichier qui va nous permettre de lancer notre daemon MinIO au démarrage de notre système.</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-23"><code><strong># vim /usr/lib/systemd/system/minio.service</strong></code></pre>



<pre class="wp-block-code has-small-font-size"><code><strong>&#91;Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

&#91;Service]
Type=notify

WorkingDirectory=/usr/local

User=minio
Group=minio
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if &#91; -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Turn-off memory accounting by systemd, which is buggy.
MemoryAccounting=no

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutSec=infinity

SendSIGKILL=no

&#91;Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})</strong>
</code></pre>



<p class="wp-block-paragraph">Attention de bien remplacer la valeur des variables <em>User</em> et <em>Group</em> par celles que nous avons créées précédemment.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="880" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_004_minioservices.png" alt="" class="wp-image-2209" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_004_minioservices.png 937w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_004_minioservices-300x282.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_004_minioservices-768x721.png 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2198_710135-63"><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>3 &#8211; Variable d&rsquo;environnement</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 class="wp-block-paragraph">Créons maintenant le fichier contenant nos variables d&rsquo;environnement qui sera utilisé par notre service.</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-24"><code><strong># vim /etc/default/minio</strong></code></pre>



<p class="wp-block-paragraph">Prenez le temps de définir le nom ainsi que le mot de passe du compte super administrateur qui permettra de s&rsquo;authentifier à l&rsquo;interface WEBUI. L&rsquo;accès à l&rsquo;interface se fera sur le port <strong>9001</strong>.</p>



<pre class="wp-block-code has-theme-palette-7-background-color has-background"><code><strong># MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment

MINIO_ROOT_USER=adm.minio
MINIO_ROOT_PASSWORD=***********************

# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.

MINIO_VOLUMES="/mnt/minio"

# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
# For example, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9001"
</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="363" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_005_varfileenv.png" alt="" class="wp-image-2210" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_005_varfileenv.png 940w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_005_varfileenv-300x116.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_005_varfileenv-768x297.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">En termes de permission sur le fichier, ces derniers sont en modification uniquement par le compte root. Donc nous sommes rassurés.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane2198_2d18da-15"><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>4 &#8211; Manivelle et Service au 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 class="wp-block-paragraph">Comme toujours, nous allons faire en sorte que notre daemon démarre lors de la mise sous tension de notre serveur.</p>



<p class="wp-block-paragraph">Pour ce faire, vérifions dans un premier temps que le service se lance bien.</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-25"><code><strong># systemctl start minio.service
# systemctl status minio.service</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="149" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_006_systemctlminio.png" alt="" class="wp-image-2211" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_006_systemctlminio.png 605w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_006_systemctlminio-300x74.png 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="wp-block-paragraph">Puis comme d&rsquo;accoutumé</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-26"><code><strong># systemctl enable minio.service</strong></code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane2198_ffcf31-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>5 -Firewall</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 class="wp-block-paragraph">Il y a deux choses à bien différencier quant à notre service MinIO. La partie console d&rsquo;administration et la partie API pour le flux de données.</p>



<ul class="wp-block-list">
<li>Console WEBUI : Port 9001/tcp</li>



<li>Protocol S3 : Port 9000/tcp</li>
</ul>



<p class="wp-block-paragraph">Il est donc nécessaire d&rsquo;ouvrir les flux sur notre firewall.</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-27"><code><strong># firewall-cmd --permanent --add-port=9001/tcp
# firewall-cmd --permanent --add-port=9000/tcp
# firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">Naturellement, si nous souhaitons publier notre service de stockage S3 sur le WEB, il conviendrait de faire un SPAT de IP_PUB:443 à destination de notre IP_LOCAL_MINIO:9000. Pour renforcer la sécurité, nous implémenterons IPS, Géolocalisation, Application Control et filtrage sur les IPs Publics entrantes habilitées uniquement.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il nous reste alors à créer notre règle sur notre firewall pour accéder à notre interface web. Puis depuis notre navigateur favori d&rsquo;accéder à notre interface (pour l&rsquo;instant en http).</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"><img loading="lazy" decoding="async" width="550" height="594" class="wp-image-4269" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_1.jpg 959w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_1-278x300.jpg 278w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_1-948x1024.jpg 948w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_1-768x830.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="594" class="wp-image-4268" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_2.jpg 960w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_2-278x300.jpg 278w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_2-949x1024.jpg 949w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_007_Install_2-768x829.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A partir de maintenant, nous allons attaquer les choses sérieuses. C&rsquo;est parti pour les buckets et l&rsquo;assaut du Colonel Kentucky !</p>



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



<p class="wp-block-paragraph">Naturellement il va falloir que l&rsquo;on sécurise un minimum nos services web. Par défaut MinIO utilise le protocole HTTP<sup data-fn="012490a3-ac71-4235-bc22-07bcaf1ff0b8" class="fn"><a href="#012490a3-ac71-4235-bc22-07bcaf1ff0b8" id="012490a3-ac71-4235-bc22-07bcaf1ff0b8-link">10</a></sup>. Pour ce faire je vais me simplifier la tâche en utilisant un certificat auto-signé. J&rsquo;ai la flemme monstrueuse de passer par un let&rsquo;s encrypt de me taper des règles de PAT<sup data-fn="d22eba11-5291-4a7f-8c9f-fad2e712216f" class="fn"><a href="#d22eba11-5291-4a7f-8c9f-fad2e712216f" id="d22eba11-5291-4a7f-8c9f-fad2e712216f-link">11</a></sup> entre ma box, mon UTM<sup data-fn="94404204-8ddc-4807-95d0-736e3657862b" class="fn"><a href="#94404204-8ddc-4807-95d0-736e3657862b" id="94404204-8ddc-4807-95d0-736e3657862b-link">12</a></sup>&#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-28"><code><strong># vim openssl.cnf</strong></code></pre>



<p class="wp-block-paragraph">Pour ne pas me prendre la tête, je passe dorénavant par des fichiers de configuration tout prêts. Les données les plus importantes étant comme nous pouvons nous en douter les SANs<sup data-fn="ef3f562d-2ef3-476e-843b-f1a800b5139a" class="fn"><a href="#ef3f562d-2ef3-476e-843b-f1a800b5139a" id="ef3f562d-2ef3-476e-843b-f1a800b5139a-link">13</a></sup> (et là je ne parle pas stockage, bande de petits malins).</p>



<pre class="wp-block-code"><code><strong>&#91;req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

&#91;dn]
C = FR
ST = France
L = MACON
O = RONELAB
CN = egapl-minio-01.ronelab.lan

&#91;req_ext]
subjectAltName = @alt_names

&#91;alt_names]
DNS.1 = egapl-minio-01.ronelab.lan
IP.1 = 10.127.252.250</strong></code></pre>



<p class="wp-block-paragraph">Nous générons notre clé privée et notre certificat public avec notre bon vieux openssl des familles.</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-29"><code><strong># openssl req -x509 -nodes -newkey rsa:4096 -days 3650 -keyout private.key -out public.crt -config openssl.cnf</strong></code></pre>



<p class="wp-block-paragraph">Nous créons si ce n&rsquo;est pas le cas le répertoire home de notre utilisateur de service dédié à MinIO (dans mon cas « minio »), et reste à déplacer les fichiers générés ainsi que l&rsquo;attribution des permissions pour garantir un minimum de sécurité.</p>



<pre class="wp-block-code"><code><strong># mkdir -p /home/minio
# mkdir -p /home/minio/.minio
# mkdir -p /home/minio/.minio/certs

# mv public.crt /home/minio/.minio/certs/
# mv private.key /home/minio/.minio/certs/

# chown -R minio:minio /home/minio</strong>
<strong># chown -R 700 /home/minio
# chown 600 /home/minio/.minio/certs/private.key
# chown 644 /home/minio/.minio/certs/public.crt</strong></code></pre>



<p class="wp-block-paragraph">Ne reste alors plus qu&rsquo;à restart notre daemon et avanti !</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-30"><code><strong># systemctl restart minio</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="825" height="790" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_011_certificat.jpg" alt="" class="wp-image-4286" style="aspect-ratio:1.044321940463065;width:523px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_011_certificat.jpg 825w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_011_certificat-300x287.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_011_certificat-768x735.jpg 768w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>
</div>


<p class="wp-block-paragraph">Une chose de plus en moins à réaliser. Passons à la suite. 🙂</p>



<h4 class="wp-block-heading">Configuration Bucket</h4>



<p class="wp-block-paragraph">La première question est qu&rsquo;est ce qu&rsquo;un bucket ? Et je ne parle pas du saut de poulet spaghetti que l&rsquo;on trouve à KFC M&rsquo;sieurs Dames. Un peu de sérieux ! (Dixit le gars&#8230; C&rsquo;est le camembert qui dit au curé qu&rsquo;il est communiste ?)</p>



<p class="wp-block-paragraph">Un bucket, est un conteneur logique qui va stocker des objets (fichiers et les métadatas). Si nous faisons une comparaison avec un système de fichiers classique nous aurions :</p>


<div class="kb-table-container kb-table-container2198_fc4211-54 wp-block-kadence-table"><table class="kb-table kb-table2198_fc4211-54">
<tr class="kb-table-row kb-table-row2198_4f3e70-6d">
<th  scope="col" class="kb-table-data kb-table-data2198_b42e4a-34">

<p class="wp-block-paragraph">Système de Fichiers</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data2198_21453a-6d">

<p class="wp-block-paragraph">S3</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row2198_d99ed0-cd">
<td  class="kb-table-data kb-table-data2198_74a708-69">

<p class="has-text-align-center wp-block-paragraph">Disque</p>

</td>

<td  class="kb-table-data kb-table-data2198_4c8f2a-bc">

<p class="has-text-align-center wp-block-paragraph">Serveur S3</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_3911bc-64">
<td  class="kb-table-data kb-table-data2198_6368d0-57">

<p class="has-text-align-center wp-block-paragraph">Répertoire Racine</p>

</td>

<td  class="kb-table-data kb-table-data2198_b5abbf-c2">

<p class="has-text-align-center wp-block-paragraph">Bucket</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_51c220-ac">
<td  class="kb-table-data kb-table-data2198_a5879a-87">

<p class="has-text-align-center wp-block-paragraph">Dossier</p>

</td>

<td  class="kb-table-data kb-table-data2198_110545-ef">

<p class="has-text-align-center wp-block-paragraph">Préfixe dans une clé</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row2198_1bff11-4a">
<td  class="kb-table-data kb-table-data2198_4a1a01-be">

<p class="has-text-align-center wp-block-paragraph">Fichier</p>

</td>

<td  class="kb-table-data kb-table-data2198_8e5f78-9b">

<p class="has-text-align-center wp-block-paragraph">Objet</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Chaque bucket a sa propre configuration comme :</p>



<ul class="wp-block-list">
<li>Les droits d&rsquo;accès</li>



<li>Le chiffrement des objets qui le compose</li>



<li>Le versionning</li>



<li>Les règles de cycle de vie (suppression, archivage etc)</li>
</ul>



<p class="wp-block-paragraph">Là où nous allons devoir être vigilants va se trouver sur la méthode de création du bucket. En GUI<sup data-fn="bb9026cc-6808-403e-b2ec-4ae6ad07b929" class="fn"><a href="#bb9026cc-6808-403e-b2ec-4ae6ad07b929" id="bb9026cc-6808-403e-b2ec-4ae6ad07b929-link">14</a></sup> et CLI<sup data-fn="51523e5a-c67d-4757-a737-5a5e08fc388e" class="fn"><a href="#51523e5a-c67d-4757-a737-5a5e08fc388e" id="51523e5a-c67d-4757-a737-5a5e08fc388e-link">15</a></sup>, nous n&rsquo;avons pas les mêmes options et cela va avoir un impact sur certaines applications et dans mon cas un impact sur VEEAM.<br>Je ne présenterai que la partie CLI. La partie GUI, il faut RTFM<sup data-fn="128d73cd-33da-42d4-b2fd-72375a3e9720" class="fn"><a href="#128d73cd-33da-42d4-b2fd-72375a3e9720" id="128d73cd-33da-42d4-b2fd-72375a3e9720-link">16</a></sup>&#8230; 🙂</p>



<h5 class="wp-block-heading"><strong>CLI</strong></h5>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2198_c230ff-59 kt-accordion-has-3-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-pane2198_06cb65-2c"><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>1 &#8211; Alias ou AKA</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 class="wp-block-paragraph">Avant de créer notre bucket il va être nécessaire de créer un alias.</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-31"><code><strong># mc alias list
# mc alias set ronelab http://127.0.0.1:9000 adm.minio 'MyPassword_define_in_file'</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="986" height="928" src="https://erwanguillemard.com/wp-content/uploads/2024/06/Capture-decran-2026-07-26-105603.jpg" alt="" class="wp-image-4274" style="aspect-ratio:1.0625087635660002;width:415px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/Capture-decran-2026-07-26-105603.jpg 986w, https://erwanguillemard.com/wp-content/uploads/2024/06/Capture-decran-2026-07-26-105603-300x282.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/Capture-decran-2026-07-26-105603-768x723.jpg 768w" sizes="auto, (max-width: 986px) 100vw, 986px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2198_713fcd-46"><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>2 &#8211; Bucket</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 class="wp-block-paragraph">Une fois notre alias défini nous allons pouvoir créer notre bucket pour VEEAM. Il est important de préciser l&rsquo;argument <strong>-l</strong>.</p>



<p class="wp-block-paragraph">L&rsquo;argument signifie que ce bucket à l&rsquo;ObjectLock d&rsquo;activé. Ce qui va permettre de gérer l&rsquo;immuabilité des données sur une durée définie.</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-32"><code><strong># /usr/local/bin/mc mb -l ronelab/veeambucket</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="594" height="46" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_0.jpg" alt="" class="wp-image-4275" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_0.jpg 594w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_0-300x23.jpg 300w" sizes="auto, (max-width: 594px) 100vw, 594px" /></figure>
</div>


<p class="wp-block-paragraph">Nous pouvons également voir les statistiques liées à notre bucket ainsi que sa 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-33"><code><strong># /usr/local/bin/mc stat ronelab/veeambucket</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="586" height="614" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_1.jpg" alt="" class="wp-image-4276" style="width:456px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_1.jpg 586w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_009_Bucket_CUI_1-286x300.jpg 286w" sizes="auto, (max-width: 586px) 100vw, 586px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2198_f61582-8a"><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>3 &#8211; Account Keys &amp; Policy</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-34"><code><strong># mc admin user add ronelab veeamuser 'MyVeeamPassword'</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="924" height="48" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_0.jpg" alt="" class="wp-image-4280" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_0.jpg 924w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_0-300x16.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_0-768x40.jpg 768w" sizes="auto, (max-width: 924px) 100vw, 924px" /></figure>
</div>


<p class="wp-block-paragraph">Définissons la politique qui va être attachée à notre utilisateur. Dans notre cas, les droits de lecture et écriture.</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-35"><code><strong># mc admin policy attach ronelab readwrite --user veeamuser</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="924" height="66" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_1.jpg" alt="" class="wp-image-4281" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_1.jpg 924w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_1-300x21.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_1-768x55.jpg 768w" sizes="auto, (max-width: 924px) 100vw, 924px" /></figure>
</div>


<p class="wp-block-paragraph">Vérifions que tout est bon.</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-36"><code><strong># mc admin user info ronelab veeamuser</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="678" height="108" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_2.jpg" alt="" class="wp-image-4282" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_2.jpg 678w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_2-300x48.jpg 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;utilisateur étant créé, nous pouvons générer notre clé d&rsquo;accès qui servira plus tard à l&rsquo;authentification de l&rsquo;application VEEAM.</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-37"><code><strong># mc admin user svcacct add ronelab veeam-minio</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="763" height="89" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_4.jpg" alt="" class="wp-image-4283" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_4.jpg 763w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_010_AccessKey_CUI_4-300x35.jpg 300w" sizes="auto, (max-width: 763px) 100vw, 763px" /></figure>
</div></div></div>
</div></div></div>



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



<p class="wp-block-paragraph">L&rsquo;article à la base, je l&rsquo;avais commencé sur VBR<sup data-fn="d1678b38-e8c5-4b7e-9671-72916cb7f12b" class="fn"><a href="#d1678b38-e8c5-4b7e-9671-72916cb7f12b" id="d1678b38-e8c5-4b7e-9671-72916cb7f12b-link">17</a></sup> 12.1 courant 2024.  Puis ayant dû me focaliser sur ma vie professionnelle et personnelle par la suite, je me dois de refaire l&rsquo;intégralité de l&rsquo;intégration sur VEEAM 13.0.X, et plus particulièrement sur la VSA<sup data-fn="0383aeba-7f53-46aa-8ef7-f9ef47d0b47e" class="fn"><a href="#0383aeba-7f53-46aa-8ef7-f9ef47d0b47e" id="0383aeba-7f53-46aa-8ef7-f9ef47d0b47e-link">18</a></sup> 13.0.X &lt;3</p>



<h4 class="wp-block-heading">S3-Repository</h4>



<p class="wp-block-paragraph">Comme toujours avant de créer un job, il est nécessaire de passer par la phase d&rsquo;ajout d&rsquo;un nouveau backup repository.</p>



<p class="wp-block-paragraph">Dans <strong>Backup Infrastructure</strong>, sélectionnez <strong>Backup Repositories</strong> et avec votre plus beau clic droit, choisissez <strong>Add</strong>&#8230; Le type de backup sera de nature <strong>Object storage</strong>. Il est important de choisir <strong>S3 Compatible</strong> puis de choisir de nouveau ce dernier (je pense que MinIO est en capacité de prendre en charge du S3 Glacier, mais dans le doute je ne vais pas m&rsquo;avancer&#8230;).</p>


<div class="kb-gallery-wrap-id-2198_c68aec-c2 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-2198_c68aec-c2 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001-1024x579.jpg" width="1024" height="579" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001.jpg" data-id="4287" class="wp-image-4287 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001-1024x579.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001-300x170.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001-768x434.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_001.jpg 1219w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_002.jpg" width="703" height="629" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_002.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_002.jpg" data-id="4288" class="wp-image-4288 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_002.jpg 703w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_002-300x268.jpg 300w" sizes="auto, (max-width: 703px) 100vw, 703px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_003.jpg" width="705" height="634" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_003.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_003.jpg" data-id="4289" class="wp-image-4289 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_003.jpg 705w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_003-300x270.jpg 300w" sizes="auto, (max-width: 705px) 100vw, 705px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_004.jpg" width="709" height="636" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_004.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_004.jpg" data-id="4290" class="wp-image-4290 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_004.jpg 709w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_004-300x269.jpg 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Une fois cette étape passée, nous voilà enfin dans le Wizard pour configurer notre repo S3.</p>



<p class="wp-block-paragraph">Honnêtement, rien ne change vraiment de l&rsquo;ajout d&rsquo;un repo classique mais je trouve toujours sympa d&rsquo;illustrer mes actions. Cela me donne un côté sérieux. Toujours dans les limites de mon infra, j&rsquo;ai limité le nombre de tâches parallèles à 1.</p>



<p class="wp-block-paragraph">Le gros du travail se situe à l&rsquo;étape 2 Account. Là en tant que <strong>service point</strong>, saisissez l&rsquo;url de votre serveur <strong>https://egapl-minio-01.ronelab.lan:9000</strong> [<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention :</strong> <em>Je me suis encore fait avoir sur la capture d&rsquo;écran&#8230; Le port pour l</em>&lsquo;API<em> S3 est <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color"><strong>9000</strong></mark> et non <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">9001</mark></strong>. A bon entendeur..</em>]. Renseignez la location et complétez les credentials. Pour cette étape, lors de notre création en ligne de commande précédemment, les informations vous ont été retournées. Ce sont ces dernières qui sont attendues. Lorsque vous cliquerez sur suivant, dans le cas de certificat SSC<sup data-fn="102b0213-94e3-47fa-ac9f-4c8ebc8eb724" class="fn"><a href="#102b0213-94e3-47fa-ac9f-4c8ebc8eb724" id="102b0213-94e3-47fa-ac9f-4c8ebc8eb724-link">19</a></sup>, il faudra accepter comme d&rsquo;accoutumé le certificat.</p>



<p class="wp-block-paragraph">La partie 3, Bucket est la dernière étape qui diffère d&rsquo;un ajout classique. Il faudra choisir le bucket à partir du bouton Browse. Si par pur hasard vous obtenez un message d&rsquo;erreur de la part de VEEAM c&rsquo;est que vous avez surement utilisé le port 9001 et non 9000 :). Choisissez également le répertoire. Si aucun n&rsquo;est présent, créez en un depuis le wizard. Il est important de comprendre que l&rsquo;immuabilité est portée par VEEAM et non par MinIO. C&rsquo;est pourquoi c&rsquo;est à vous de cocher la fonctionnalité <strong>Immutability Settings</strong> et de définir la <strong>période d&rsquo;immuabilitée</strong>.</p>



<p class="wp-block-paragraph">Pour les autres étapes du Wizard, c&rsquo;est de la rando. Je vous laisse poursuivre.</p>


<div class="kb-gallery-wrap-id-2198_e7fc0d-42 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-2198_e7fc0d-42 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010.jpg" width="885" height="623" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010.jpg" data-id="4292" class="wp-image-4292 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010.jpg 885w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_010-768x541.jpg 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011.jpg" width="885" height="625" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011.jpg" data-id="4293" class="wp-image-4293 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011.jpg 885w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011-300x212.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_011-768x542.jpg 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012.jpg" width="883" height="625" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012.jpg" data-id="4294" class="wp-image-4294 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012-300x212.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_012-768x544.jpg 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013.jpg" width="916" height="661" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013.jpg" data-id="4295" class="wp-image-4295 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013.jpg 916w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013-300x216.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_013-768x554.jpg 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014.jpg" width="888" height="626" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014.jpg" data-id="4296" class="wp-image-4296 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014.jpg 888w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_014-768x541.jpg 768w" sizes="auto, (max-width: 888px) 100vw, 888px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015.jpg" width="886" height="623" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015.jpg" data-id="4297" class="wp-image-4297 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015.jpg 886w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_015-768x540.jpg 768w" sizes="auto, (max-width: 886px) 100vw, 886px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016.jpg" width="883" height="622" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016.jpg" data-id="4298" class="wp-image-4298 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_016-768x541.jpg 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017.jpg" width="882" height="621" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017.jpg" data-id="4299" class="wp-image-4299 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017.jpg 882w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_017-768x541.jpg 768w" sizes="auto, (max-width: 882px) 100vw, 882px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Une fois le wizard terminé, si nous regardons notre infrastructure, nous retrouvons bien notre nouveau repo 🙂 &lt;3</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="101" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_018-1024x101.jpg" alt="" class="wp-image-4300" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_018-1024x101.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_018-300x30.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_018-768x76.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_018.jpg 1120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading">Job Configuration</h4>



<p class="wp-block-paragraph">Pour la création du job, cela va être exactement la même chose que la création d&rsquo;un job classique. Le seul point qui va diverger (Oh il a écrit verge&#8230; Okay cool&#8230;) va être le choix du repository S3, et c&rsquo;est tout&#8230;</p>



<p class="wp-block-paragraph">Toujours pour des problématiques d&rsquo;infrastructures j&rsquo;ai volontairement restreint la planification du job. De toute façon, l&rsquo;Appliance va être archivé d&rsquo;ici la fin de semaine donc OSEF j&rsquo;ai envie de vous dire&#8230;</p>


<div class="kb-gallery-wrap-id-2198_bf751a-e4 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-2198_bf751a-e4 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020.jpg" width="814" height="625" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020.jpg" data-id="4303" class="wp-image-4303 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020.jpg 814w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020-300x230.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_020-768x590.jpg 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021.jpg" width="813" height="622" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021.jpg" data-id="4304" class="wp-image-4304 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021.jpg 813w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021-300x230.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_021-768x588.jpg 768w" sizes="auto, (max-width: 813px) 100vw, 813px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022.jpg" width="812" height="621" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022.jpg" data-id="4305" class="wp-image-4305 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022.jpg 812w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022-300x229.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_022-768x587.jpg 768w" sizes="auto, (max-width: 812px) 100vw, 812px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023.jpg" width="815" height="624" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023.jpg" data-id="4306" class="wp-image-4306 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023.jpg 815w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023-300x230.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_023-768x588.jpg 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024.jpg" width="817" height="624" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024.jpg" data-id="4307" class="wp-image-4307 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024.jpg 817w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024-300x229.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_024-768x587.jpg 768w" sizes="auto, (max-width: 817px) 100vw, 817px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025.jpg" width="813" height="624" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025.jpg" data-id="4308" class="wp-image-4308 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025.jpg 813w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025-300x230.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_025-768x589.jpg 768w" sizes="auto, (max-width: 813px) 100vw, 813px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Notre job étant créé, place au test 🙂</p>



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



<p class="wp-block-paragraph">Le test est plutôt simple, je vais lancer un job et tenter de supprimer ce dernier depuis la console VEEAM.</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>Début</strong></td><td class="has-text-align-center" data-align="center"><strong>Fin</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="400" class="wp-image-4310" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_030.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_030.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_030-300x218.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_030-768x559.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="399" class="wp-image-4311" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_031.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_031.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_031-300x218.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_031-768x557.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">La sauvegarde s&rsquo;est bien déroulée, donc cela prouve qu&rsquo;avec le durcissement ANSSI<sup data-fn="538518c1-0a50-4ba8-a094-bb9d754f6ff0" class="fn"><a href="#538518c1-0a50-4ba8-a094-bb9d754f6ff0" id="538518c1-0a50-4ba8-a094-bb9d754f6ff0-link">20</a></sup> et notre configuration de MinIO je n&rsquo;ai pas fait de me**e. Regardons notre chaine de sauvegarde.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="190" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_032-1024x190.jpg" alt="" class="wp-image-4312" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_032-1024x190.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_032-300x56.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_032-768x143.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_032.jpg 1126w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Si je choisis de supprimer le point, vais je pouvoir supprimer le backup ? La réponse est évidemment non mais nous nous devons de vérifier ce point.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="475" src="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_033-1024x475.jpg" alt="" class="wp-image-4313" srcset="https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_033-1024x475.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_033-300x139.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_033-768x356.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/06/AP_008_012_veeam_033.jpg 1120w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">J&rsquo;ai envie d&rsquo;écrire, la messe est dite. L&rsquo;immuabilité fonctionne.</p>



<p class="wp-block-paragraph">Je me suis posé la question comme pour la partie hardened de supprimer les données de mon serveur standalone. La réponse est évidemment oui si j&rsquo;ai les droits root. Je peux démonter le disque ou supprimer son contenu. Toutefois, et c&rsquo;est là que je n&rsquo;ai pas les ressources, mais si c&rsquo;était un ring je n&rsquo;aurais pas pu. </p>



<p class="wp-block-paragraph">J&rsquo;ai mentionné plus haut que même une divinité ne peut supprimer les données c&rsquo;est pourquoi je nuance mes écrits. Il sera toujours possible à l&rsquo;utilisateur, que dis-je administrateur qui a tous les accès de supprimer les données.</p>



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



<p class="wp-block-paragraph">Cet article fait partie des premiers que j&rsquo;ai commencé à écrire en 2024 et puis je l&rsquo;ai abandonné. Je pense par frustration à l&rsquo;époque.</p>



<p class="wp-block-paragraph">J&rsquo;ai toujours défendu bec et ongle l&rsquo;immuabilité hardened vis à vis de l&rsquo;immuabilité S3. Pourtant il convient de reconnaitre de ma part que le Storage S3 offre plus de sécurité. Néanmoins je reste convaincue qu&rsquo;un repo hardened répond très bien au ESN ayant aux moins deux sites et qui veulent arrêter de s&#8217;emm***er avec des rotations de disque dur externe (même si cela reste une solution viable et qui est toujours mieux que rien).</p>



<p class="wp-block-paragraph">Dans les deux cas, je trouve bien la possibilité dans ces deux cas de pouvoir recycler des équipements (serveurs) considérés comme obsolètes pour des environnements de production pour les utiliser comme repo S3 standalone ou hardened.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Si je devais faire un choix ?</strong></p>



<p class="wp-block-paragraph">Je répondrai en politicien, avec ma plus belle <a href="https://www.youtube.com/watch?v=hz5xWgjSUlk">langue de bois</a>. Cela dépendra du contexte. 🙂 Il faut garder à l&rsquo;esprit que le Hardened protège plus facilement des ransonmware, des erreurs humaines et des compromissions VEEAM. A l&rsquo;inverse, S3 est plus adapté contre la suppression logique, la conformité réglementaire, les suppressions depuis VEEAM. </p>



<p class="wp-block-paragraph">Toutefois, si j&rsquo;avais continué ma carrière en ESN, j&rsquo;implémenterais ce type de solution avec 3 nodes « obsolètes » sur le papier en conservant une extension de garantie des équipements et intégrerais MinIO au catalogue de service. Mais ça, c&rsquo;est si j&rsquo;étais toujours dans une ESN.</p>



<p class="wp-block-paragraph">L&rsquo;une des ouvertures et projet à venir serait de monter un ring sur 3 sites différents&#8230;</p>



<p class="wp-block-paragraph">Finalement, c&rsquo;est beau et bien de terminer un article plus de deux ans après&#8230; 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Je range un cadeau dans MinIO, le S3 applaudit en IPv6, le bucket éternue, et ma théière me retourne une Error 418. Très joli coup. Vous passez en case Jacob Delafonte.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/Welcome.html">AMAZON S3</a></li>



<li><a href="https://erwanguillemard.com/apps-veeam-repo-backup-hardened/">Apps – VEEAM Repo &amp; Backup Hardened</a></li>



<li><a href="https://linux.die.net/man/8/useradd">LINUX &#8211; useradd Man</a></li>



<li><a href="https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html#minio-snsd">MinIO &#8211; Install Guide</a></li>



<li><a href="https://min.io/docs/minio/linux/integrations/using-minio-with-veeam.html">MinIO &#8211; VEEAMBucket</a></li>
</ul>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="5daf5660-def4-42b2-81fc-7381fb71f8eb"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#5daf5660-def4-42b2-81fc-7381fb71f8eb-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="64126bc5-ea68-4702-914c-0c2efa484ca6"><strong>S3 :</strong> Simple Storage Service <a href="#64126bc5-ea68-4702-914c-0c2efa484ca6-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="ebd22563-41db-4ad8-b047-7f3efb5205e5"><strong>GAFAM :</strong> Google Amazon Facebook Apple Microsoft <a href="#ebd22563-41db-4ad8-b047-7f3efb5205e5-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="67827f4e-9213-452a-be37-7b3f023820e9"><strong>WORM :</strong> Write Once Read Many <a href="#67827f4e-9213-452a-be37-7b3f023820e9-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="6e7f7b72-5d59-45a2-9059-bf1e1e4b7b6e"><strong>SaaS :</strong> Software As A Service <a href="#6e7f7b72-5d59-45a2-9059-bf1e1e4b7b6e-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="3af07056-54d6-45db-ad01-36f5f0a26035"><strong>OS :</strong> Operating System <a href="#3af07056-54d6-45db-ad01-36f5f0a26035-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="b243a23f-4d53-4e0b-a631-32d9433a3b01"><strong>NAT : </strong>Network Address Translation <a href="#b243a23f-4d53-4e0b-a631-32d9433a3b01-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="bd5e85eb-9910-4b06-a8c6-3c0ecd0abd88"><strong>PAT :</strong> Port Address Translation <a href="#bd5e85eb-9910-4b06-a8c6-3c0ecd0abd88-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="bbd16f7c-6276-4d33-a765-0d3a85e4a505"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#bbd16f7c-6276-4d33-a765-0d3a85e4a505-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="012490a3-ac71-4235-bc22-07bcaf1ff0b8"><strong>HTTP :</strong> HyperText Transfert Protocol <a href="#012490a3-ac71-4235-bc22-07bcaf1ff0b8-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d22eba11-5291-4a7f-8c9f-fad2e712216f"><strong>PAT :</strong> Port Address Translation <a href="#d22eba11-5291-4a7f-8c9f-fad2e712216f-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="94404204-8ddc-4807-95d0-736e3657862b"><strong>UTM :</strong> Unified Tread Management <a href="#94404204-8ddc-4807-95d0-736e3657862b-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="ef3f562d-2ef3-476e-843b-f1a800b5139a"><strong>SAN :</strong> Subject Alternative Name <a href="#ef3f562d-2ef3-476e-843b-f1a800b5139a-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="bb9026cc-6808-403e-b2ec-4ae6ad07b929"><strong>GUI :</strong> Graphic User Interface <a href="#bb9026cc-6808-403e-b2ec-4ae6ad07b929-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="51523e5a-c67d-4757-a737-5a5e08fc388e"><strong>CLI :</strong> Command Line Interface <a href="#51523e5a-c67d-4757-a737-5a5e08fc388e-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="128d73cd-33da-42d4-b2fd-72375a3e9720"><strong>RTFM :</strong> Read The Fucking Manual <a href="#128d73cd-33da-42d4-b2fd-72375a3e9720-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="d1678b38-e8c5-4b7e-9671-72916cb7f12b"><strong>VBR :</strong> Veeam Backup et Replication <a href="#d1678b38-e8c5-4b7e-9671-72916cb7f12b-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="0383aeba-7f53-46aa-8ef7-f9ef47d0b47e"><strong>VSA :</strong> Veeam Software Appliance <a href="#0383aeba-7f53-46aa-8ef7-f9ef47d0b47e-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="102b0213-94e3-47fa-ac9f-4c8ebc8eb724"><strong>SSC :</strong> Self-Signed Certificat <a href="#102b0213-94e3-47fa-ac9f-4c8ebc8eb724-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li><li id="538518c1-0a50-4ba8-a094-bb9d754f6ff0"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Informations <a href="#538518c1-0a50-4ba8-a094-bb9d754f6ff0-link" aria-label="Aller à la note de bas de page 20">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Pourquoi ?</strong></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">L&rsquo;utilisation d&rsquo;OpenWebUI n&rsquo;est pas sans conséquences vis à vis des services qu&rsquo;il peut apporter.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 loading="lazy" 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="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 loading="lazy" 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="auto, (max-width: 861px) 100vw, 861px" /></figure>
</div>


<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 loading="lazy" 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="auto, (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 class="wp-block-paragraph">Bref, pour pallier à ce problème, j&rsquo;ai dédié un disque d&rsquo;une capacité de 100 Gio.</p>



<p class="wp-block-paragraph">Bien, on se lance dans la pratique ? Après on est bien aussi ici 🙂</p>



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



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">Donc je partirai sur Python en environnement virtuel (venv).</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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-38"><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 class="wp-block-paragraph">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-39"><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 class="wp-block-paragraph">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-40"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-41"><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 class="wp-block-paragraph">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 class="wp-block-paragraph"><strong><em>Sans hésitez, la réponse D Jean-Pierre, ça <strong><em>sera mon dernier goulot.</em></strong> </em></strong></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><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 class="wp-block-paragraph">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-42"><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 class="wp-block-paragraph">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 class="wp-block-paragraph"></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-43"><code><strong>$ sudo open-webui serve --host 10.227.250.11 --port 8080</strong></code></pre>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-44"><code><strong>$ sudo useradd -r -s /bin/false openwebui
$ sudo chown -R openwebui:openwebui /mnt/ollama/openwebui</strong></code></pre>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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-45"><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 class="wp-block-paragraph">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-46"><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 class="wp-block-paragraph">Ayant un UTM&nbsp;en amont, je me permets donc de me contenter de la première solution.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-47"><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 class="wp-block-paragraph">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 class="wp-block-paragraph"></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-48"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">L&rsquo;installation et activation du service, je passe mon tour. </p>



<p class="wp-block-paragraph"></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-49"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-50"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p class="wp-block-paragraph">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-51"><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 class="wp-block-paragraph"></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 class="wp-block-paragraph">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-52"><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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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-53"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p class="wp-block-paragraph">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-54"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-55"><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 class="wp-block-paragraph">Un petit F5 et hop c&rsquo;est tout bon &lt;3</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Pourquoi ne pas faire une petite interface qui exploite l&rsquo;API Ollama ?</strong></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><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 class="wp-block-paragraph">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 wp-block-paragraph"><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 wp-block-paragraph"><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 wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Mais alors pourquoi un tel revirement de situation M&rsquo;sieur GUILLEMARD ?</strong></p>



<p class="wp-block-paragraph">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 wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">Je ne me mouille pas trop dans les moteurs d&rsquo;IA&#8230;</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Et pourquoi pas ? </strong></p>



<p class="wp-block-paragraph">Dans le pire des cas, je mourrai moins c*n ce soir comme dirait un philosophe du cercle familial.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"><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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Le système logiciste <em>VS</em> Le système neuronale</strong></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">Les modèles d&rsquo;IA, c&rsquo;est un peu comme un oignon, il y plusieurs couches.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">Tout pour bien fonctionner en somme 🙂</p>



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



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-57"><code><strong>$ sudo dnf install zstd</strong></code></pre>



<p class="wp-block-paragraph">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-58"><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 class="wp-block-paragraph"></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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-59"><code><strong>$ sudo systemctl enable ollama</strong></code></pre>



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



<p class="wp-block-paragraph">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-60"><code><strong>$ sudo firewall-cmd --permanent --add-port=11434/tcp</strong><strong>
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">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-61"><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 class="wp-block-paragraph">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 wp-block-paragraph"><strong>Un doute m&rsquo;habite&#8230; Le port 11434/tcp, ça ne serait pas du http ?</strong></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">L’installation et activation du service, je passe mon tour.</p>



<p class="wp-block-paragraph"></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-62"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-63"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p class="wp-block-paragraph">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-64"><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 class="wp-block-paragraph">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-65"><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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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-66"><code><strong>$ sudo nginx -t 
$ sudo systemctl restart nginx</strong></code></pre>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p class="wp-block-paragraph">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-67"><code><strong>$ sudo firewall-cmd --permanent --add-port=11444/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">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-68"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-69"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>



<p class="wp-block-paragraph">Un petit F5 et hop c’est tout bon &lt;3</p>



<p class="wp-block-paragraph"></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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-70"><code><strong>$ sudo chown -R ollama:ollama /mnt/ollama</strong></code></pre>



<p class="wp-block-paragraph">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-71"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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-72"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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-73"><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-74"><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-75"><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-76"><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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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-77"><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 class="wp-block-paragraph">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-78"><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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">Et si on se lançais un petit benchmark de nos 4 modèles pour voir le fonctionnement ? 🙂</p>



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



<p class="wp-block-paragraph">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 class="wp-block-paragraph">La question sera : </p>



<p class="has-text-align-center wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><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 class="wp-block-paragraph"></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-79 wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">Il serait intéressant de pousser la comparaison sur un prompt de réflexion pur.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 wp-block-paragraph"><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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph"> Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><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 class="wp-block-paragraph"><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 class="wp-block-paragraph"><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>
		<item>
		<title>PROJET &#8211; Linux Partitions Calculator</title>
		<link>https://erwanguillemard.com/projet-linux-partitions-calculator/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 11 Apr 2026 13:55:29 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3409</guid>

					<description><![CDATA[Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&#8217;expression) à déployer une machine linux. Je rassure le lecteur qui s&#8217;est égaré ici, ce billet va être simple. Bref, j&#8217;ai la problématique...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&rsquo;expression) à déployer une machine linux.</p>



<p class="wp-block-paragraph">Je rassure le lecteur qui s&rsquo;est égaré ici, ce billet va être simple.</p>



<p class="wp-block-paragraph">Bref, j&rsquo;ai la problématique suivante, lorsque je déploie une nouvelle machine Linux (RHEL<sup data-fn="d0cf7aef-1d32-469c-80aa-165e012513eb" class="fn"><a href="#d0cf7aef-1d32-469c-80aa-165e012513eb" id="d0cf7aef-1d32-469c-80aa-165e012513eb-link">1</a></sup> ou Debian) je suis le guide d&rsquo;hygiène et sécurité de l&rsquo;ANSSI<sup data-fn="0a4dc23e-e493-4f49-8cdf-9a361464e536" class="fn"><a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536" id="0a4dc23e-e493-4f49-8cdf-9a361464e536-link">2</a></sup>. Ce qui se traduit par le partitionnement strict des points de montage système et de données. Sauf que lorsque la taille de notre disque varie, difficile de définir de tête quelle volumétrie doit être provisionnée pour chaque partition&#8230;</p>



<p class="wp-block-paragraph">C&rsquo;est donc là que j&rsquo;ai pris un coup de sang.</p>



<p class="has-text-align-center wp-block-paragraph">En voiture Simone, c&rsquo;est parti !</p>





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



<p class="wp-block-paragraph">Je ne vais pas rentrer dans le détail du code qui compose mon application, ce n&rsquo;est pas l&rsquo;objectif. Si l&rsquo;on souhaite comprendre ce dernier, un peu de réverse engineering et le tour est joué (surtout que j&rsquo;ai commenté le code).</p>



<p class="wp-block-paragraph">Je n&rsquo;aborderai pas non plus la partie de durcissement des systèmes GNU Linux. Pourquoi ?</p>



<ol class="wp-block-list">
<li>Ce n&rsquo;est pas le sujet de ce billet</li>



<li>Je traite le sujet dans un de mes premiers articles que je ne partage que sur contact et échange</li>



<li>Je pars du principe que cela sera fait après déploiement du SE<sup data-fn="7c312e03-317c-474a-ab3e-448ddb4d3df3" class="fn"><a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3" id="7c312e03-317c-474a-ab3e-448ddb4d3df3-link">3</a></sup>.</li>
</ol>



<p class="wp-block-paragraph">L&rsquo;objectif est vraiment de comprendre ou du moins rappeler la structure d&rsquo;un système GNU quant à son arborescence d&rsquo;organisation de fichier. Et donc outre à mesure à comprendre pourquoi nous devons allouer plus ou moins d&rsquo;espace de stockage.</p>



<p class="wp-block-paragraph">Concernant l&rsquo;application que j&rsquo;ai développé, bien que je revienne sur ce point plus bas dans ce billet, cette dernière n&rsquo;est pas fonctionnelle sur les environnements GNU Linux du fait de la GUI<sup data-fn="957eb17c-7564-49a4-beda-d11cd897f8a8" class="fn"><a href="#957eb17c-7564-49a4-beda-d11cd897f8a8" id="957eb17c-7564-49a4-beda-d11cd897f8a8-link">4</a></sup>.</p>



<p class="wp-block-paragraph">Il est également important de souligné que cette application n&rsquo;est compatible qu&rsquo;avec la version 5.X de powershell. </p>



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



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Environnement Windows non obsolète</li>



<li><strong>Apps :&nbsp;</strong>Non Applicable</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5.X</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Si nous devons commencer par la base, il serait bon de se poser la question </p>



<p class="has-text-align-center wp-block-paragraph"><strong>« Comment est structurer un environnement GNU Linux ? »</strong></p>



<p class="has-text-align-left wp-block-paragraph">Contrairement à certaines connaissances que j&rsquo;ai pu fréquenter, oui c&rsquo;est un point important. Cela évite de faire n&rsquo;importe quoi et dans une outre mesure d&rsquo;apprendre quelques choses. (Toutes ressemblances avec des personnes existantes et purement fortuite).</p>



<p class="has-text-align-center wp-block-paragraph"><strong>T&rsquo;es un peu chafouin en ce moment non ? Tu ne voudrais pas ton petit suppositoire à la verveine ?</strong></p>



<p class="has-text-align-left wp-block-paragraph">Légèrement agacé avec une pointe de colère et donc de sarcasme il est vrai. L&rsquo;hypocrisie des uns fait le désespoir des autres. Mais OKLM comme disent les d&rsquo;jeuns je prends un sacré recul. Cependant, je suis partant pour la verveine mais pas en suppositoire, plus en pousse café 🙂 <a href="https://www.youtube.com/watch?v=s_aka1i0RD0&amp;list=RDs_aka1i0RD0&amp;start_radio=1">Et puis Monsieur, Madame, Mademoiselle, je suis bien fatigué&#8230; J&rsquo;en ai marre&#8230;</a></p>



<p class="wp-block-paragraph">Regardons alors de plus près l&rsquo;architecture n à n-1.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="546" height="570" src="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg" alt="" class="wp-image-3416" style="width:307px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg 546w, https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch-287x300.jpg 287w" sizes="auto, (max-width: 546px) 100vw, 546px" /></figure>
</div>


<p class="wp-block-paragraph">(Pas de panique je vais prendre le temps de décrire chaque répertoire).</p>



<p class="wp-block-paragraph">Nous avons le répertoire parent de notre arborescence, communément appelé « la Racine » (et non rien à voir avec l&rsquo;organisation de l&rsquo;ombre de Konoha dans Naruto [super référence&#8230;]) ou <strong>root</strong>. C&rsquo;est sous ce répertoire <strong>/</strong> que nous allons retrouver les répertoires qui organise notre SE.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3409_97e24c-b7 kt-accordion-has-14-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-pane3409_1e6061-7a"><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>/bin</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 class="wp-block-paragraph">Ce répertoire est l&rsquo;abréviation de <strong>binaries</strong>. Il est essentiel au bon fonctionnement du système puisque ce dernier va contenir l&rsquo;ensemble des commandes exécutables de bases.</p>



<p class="wp-block-paragraph">C&rsquo;est ici que nous retrouvons les programmes nécessaires au mode de restauration ainsi qu&rsquo;au démarrage du système. C&rsquo;est je pense l&rsquo;un des répertoire les plus important du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3409_4a9c15-d7"><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>/boot</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 class="wp-block-paragraph">Ce répertoire est réservé au rangement des chaussures afin d&rsquo;utiliser nos sockets&#8230; Ok je sors.</p>



<p class="wp-block-paragraph">Plus sérieusement, ce répertoire contient tout ce qui est nécessaire au démarrage du système. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pas de /boot ? Pas de démarrage&#8230;</strong></p>



<p class="has-text-align-left wp-block-paragraph">Ce dernier contient le kernel (noyau Linux), les fichiers d&rsquo;amorçage (bootloader pour ne pas dire GRUB<sup data-fn="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" class="fn"><a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link">5</a></sup> dans la majorité des cas) ainsi que l&rsquo;initramfs ou initrd (cela dépend) qui est notre « petit » système d&rsquo;exploitation temporaire. Il va sans dire que ce dernier est critique&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3409_cb4761-85"><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>/dev</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 class="wp-block-paragraph">Ce répertoire est l&rsquo;abréviation de <strong>devices</strong>. C&rsquo;est dans ce répertoire que nous allons retrouver l&rsquo;ensemble des fichiers spéciaux représentant les périphériques systèmes. </p>



<p class="has-text-align-center wp-block-paragraph">Si nous avions des doutes, sous Linux, <strong><em>Tout est fichiers</em></strong>.</p>



<p class="has-text-align-left wp-block-paragraph">Bref, c&rsquo;est ici que nous allons interagir avec nos médias de stockage, les périphériques tels que caméra, micro, audio etc&#8230; C&rsquo;est notre noyau qui gère son contenu.</p>



<p class="wp-block-paragraph">Ce n&rsquo;est ni plus ni moins que l&rsquo;interface entre notre système logique et notre système physique pour ne pas dire matériel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3409_def777-a5"><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>/etc</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 class="wp-block-paragraph">/etc, l&rsquo;un des dossiers les plus importants&#8230; C&rsquo;est dans ce dernier que nous allons retrouver l&rsquo;ensemble des fichiers de configuration du système. Il me semble de jadis ce que j&rsquo;ai écrit dans mes cours de licence (merci M. HSU) que c&rsquo;est l&rsquo;abréviation de <strong>et cetera</strong> (c&rsquo;était pour la minute <a href="https://www.youtube.com/watch?v=nWdUojwhJVo">Père castor</a>)</p>



<ul class="wp-block-list">
<li>Configurations globales du système</li>



<li>Paramètres de sécurité</li>



<li>Informations sur les utilisateurs</li>



<li>Configuration réseau</li>



<li>Configuration des services</li>
</ul>



<p class="wp-block-paragraph">Généralement, la modification des fichiers nécessite les droits d&rsquo;administrations. Il est généralement conseillé avant toutes altérations de faire une copie du fichier d&rsquo;origine 🙂</p>



<p class="has-text-align-center wp-block-paragraph">Généralement on se fait avoir une fois pas deux <strong>#bisous</strong></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3409_11bf63-4a"><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>/home</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 class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=6FLXqkL9MPM">E.T phone&#8230; HHHHH-OOOOOOOMMMMM-EEE&#8230;</a></p>



<p class="wp-block-paragraph">C&rsquo;est le répertoire utilisateur. C&rsquo;est dans ce dernier que les utilisateurs vont stocker leurs items, et c&rsquo;est également dans ce dernier que la configuration propre au profil de l&rsquo;utilisateur est stockée.</p>



<p class="wp-block-paragraph">Pour faire simple, c&rsquo;est un espace personnel limité par des permissions strictes pour chaque utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3409_ae88eb-cd"><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>/lib</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 class="wp-block-paragraph">Abréviation de <strong>librairie</strong>, ce répertoire va contenir l&rsquo;ensemble des bibliothèques partagées essentielles et nécessaires au fonctionnement de notre système et des exécutables stockés dans les répertoires <strong>/bin</strong> et <strong>/sbin</strong>.</p>



<p class="wp-block-paragraph">Si nous faisions la comparaison avec Windows, les fichiers .dll s&rsquo;appellent .so.</p>



<p class="wp-block-paragraph">Dans ce répertoire nous retrouvons également les modules du kernel. Ce répertoire est critique pour le système car lié au /bin.</p>



<p class="has-text-align-center wp-block-paragraph">Merci Capt&rsquo;ain Obvious !</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3409_83b8b1-28"><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>/media</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 class="wp-block-paragraph">L&rsquo;un des amalgames que nous pouvons souvent faire avec ce répertoire se fait avec le répertoire <strong>/dev</strong> et <strong>/mnt</strong>.</p>



<p class="wp-block-paragraph">Effectivement, le répertoire <strong>/media</strong> sert de point de montage automatique pour les périphériques amovibles. Si vous voyez genre les Usb-Key, CD/DVD, DD externe, Disquette, Carte SD etc&#8230; C&rsquo;est pourquoi nous ne retrouvons pas ces périphériques dans <strong>/dev</strong>.</p>



<p class="wp-block-paragraph">Le fait que le point de montage se fait automatiquement il n&rsquo;y a pas besoin de chercher du côté du répertoire <strong>/mnt</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3409_b55779-e4"><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>/mnt</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 class="wp-block-paragraph">L&rsquo;abréviation de <strong>mount</strong>. Ce répertoire est un point de montage temporaire pour monter manuellement des systèmes de fichiers.</p>



<p class="wp-block-paragraph">Il sert à monter un disque manuellement, monter un ISO, accéder à une partition de réparation.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3409_9ec501-3a"><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>/proc</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 class="wp-block-paragraph">C&rsquo;est un répertoire un peu particulier d&rsquo;abréviation <strong>processus</strong>. C&rsquo;est un système de fichiers virtuel qui est généré dynamiquement par le kernel.</p>



<p class="wp-block-paragraph">Ainsi, nous retrouvons :</p>



<ul class="wp-block-list">
<li>Les processus actifs</li>



<li>Les informations des ressources (CPU et RAM)</li>



<li>La configuration du kernel</li>
</ul>



<p class="wp-block-paragraph">Il est possible de modifier certains paramètres systèmes à chaud comme le réseau par exemple.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-10 kt-pane3409_1d05bd-93"><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>/sbin</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 class="wp-block-paragraph">De son abréviation <strong>system binaries</strong>, nous retrouvons les mêmes caractéristiques que le répertoire /bin à l&rsquo;exception que les commandes des exécutables présents dans le répertoire sont destinées principalement à l&rsquo;administration (utilisateur root).</p>



<p class="wp-block-paragraph">Ainsi les ressources présentes dans le répertoire <strong>/sbin</strong> :</p>



<ul class="wp-block-list">
<li>Permettre le démarrage du système</li>



<li>Gérer l&rsquo;administration des partitions et des disques</li>



<li>Administrer le réseau</li>



<li>Réaliser la maintenance et récupération</li>
</ul>



<p class="wp-block-paragraph">Les commandes étant sensibles, ces dernières ne doivent pas être accessible des utilisateurs. Uniquement des utilisateurs privilégiés.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-11 kt-pane3409_c96322-21"><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>/srv</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 class="wp-block-paragraph">De son petit nom <strong>service</strong>, ce répertoire va contenir les données des services fournis par le système.</p>



<p class="wp-block-paragraph">Il sert à stocker les fichiers spécifiques aux services réseau ou applications serveurs. Généralement chaque service à son propre sous-dossier.</p>



<p class="wp-block-paragraph">Les données présentes dans <strong>/srv</strong> sont considérées comme fixes. Dans le cas contraire il faudra se tourner vers le <strong>/var</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-12 kt-pane3409_b447db-5d"><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>/tmp</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 class="wp-block-paragraph">Le répertoire <strong>temporaire</strong> enfin. Comme son nom l&rsquo;indique il va contenir des ressources temporaires durant l&rsquo;exécution d&rsquo;un programme, d&rsquo;échange de données inter processus, voire de zone tampon durant l&rsquo;installation ou compilation d&rsquo;un programme.</p>



<p class="wp-block-paragraph">C&rsquo;est un répertoire magique, une zone grise. L&rsquo;avantage de ce répertoire se trouve dans la suppression des données à chaque redémarrage du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-14 kt-pane3409_f75fa3-11"><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>/var</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 class="wp-block-paragraph">Le dossier <strong>variable</strong>&#8230; Ce répertoire va contenir les données qui vont changer dans le temps contrairement aux fichiers statiques comme /usr, /bin, /srv.</p>



<p class="wp-block-paragraph">Ce répertoire est généralement utilisé pour stocker des fichiers générés par le système ou par les applications (site web par exemple). Toutefois, nous retrouvons également :</p>



<ul class="wp-block-list">
<li>Les journaux systèmes et services (logs)</li>



<li>Les files d&rsquo;impressions ou mails (spools)</li>



<li>Les BDDs<sup data-fn="2d347e21-a763-4bc2-ab40-e0ef607de630" class="fn"><a href="#2d347e21-a763-4bc2-ab40-e0ef607de630" id="2d347e21-a763-4bc2-ab40-e0ef607de630-link">6</a></sup></li>



<li>Les fichiers temporaires persistants</li>
</ul>



<p class="wp-block-paragraph">Attention car ce répertoire peut très vite grossir 🙂</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-13 kt-pane3409_955780-1c"><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>/usr</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 class="wp-block-paragraph">L&rsquo;un des répertoires importants du système mais pas non critique. Ce dernier est l&rsquo;abréviation de <strong>user</strong> et va contenir les logiciels installés par le système ou l&rsquo;administrateur.</p>



<p class="wp-block-paragraph">Une sous arborescence bien organisée est présente afin de garantir l&rsquo;accès aux programmes, bibliothèques et fichiers partagés pour l&rsquo;ensemble des utilisateurs :</p>



<ul class="wp-block-list">
<li><strong>/usr/bin :</strong> Programme accessible à tous les utilisateurs</li>



<li><strong>/usr/sbin :</strong> Programmes d&rsquo;administration</li>



<li><strong>/usr/lib :</strong> Bibliothèques partagées</li>



<li><strong>/usr/share :</strong> Fichiers partagés</li>



<li><strong>/usr/include :</strong> Fichiers header pour la compilation de logiciels</li>



<li><strong>/usr/local :</strong> Programmes installés manuellement</li>
</ul>



<p class="wp-block-paragraph">Je peux vous dire que plus d&rsquo;une fois je me suis mordu les doigts pour ne pas avoir bien provisionné ma partition et je me retrouve bloqué en plein update ou durant une installation&#8230;</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J&rsquo;en peux plus. C&rsquo;est que c&rsquo;est long comme retour aux bases&#8230; J&rsquo;espère ne pas avoir oublié de répertoire.</p>



<p class="wp-block-paragraph">L&rsquo;une des mauvaises pratiques lors du déploiement d&rsquo;un SE Linux est d&rsquo;allouer l&rsquo;ensemble de l&rsquo;espace disponible à <strong>/</strong>, de ce fait si par exemple je viens à blinder le <strong>/var/tmp</strong> ou <strong>/var/log</strong> mon système est à genoux. Donc sur un disque il convient de partitionner les répertoires.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Oui mais quels répertoires ?</strong></p>



<p class="wp-block-paragraph">En réponse à cette question, <a href="https://www.youtube.com/watch?v=EvoL-FvSPDg">je mets en 3/4 face et je réponds par un Uraken</a> des familles en sortant le guide de l&rsquo;ANSSI.</p>



<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="600" height="632" class="wp-image-1459" style="width: 600px;" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png 338w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part-285x300.png 285w" sizes="auto, (max-width: 600px) 100vw, 600px" /></td><td>Cela offre également une autre possibilité concernant la sécurité.<br><br>Au-delà d&rsquo;assurer le fonctionnement du système quant au potentiel risque de saturation de stockage, il est possible de définir des options sur les points de montage de nos répertoires.<br><br>Ainsi il est possible de limiter l&rsquo;accès au device ou l&rsquo;exécution de programme.<br><br>Je préconise également d&rsquo;ajouter le répertoire <strong>/var/log/audit</strong>. <br><br>Je ne rentre volontairement pas dans le détail car j&rsquo;explique ce point de recommandation (R12) dans mon billet concernant le durcissement d&rsquo;un système GNU Linux.</td></tr></tbody></table></figure>



<p class="has-text-align-center wp-block-paragraph"><strong>Ok pour ce qui est de la segmentation, mais du coup, quel doit être la répartition niveau stockage ?</strong></p>



<p class="wp-block-paragraph">C&rsquo;est plutôt simple. Encore une fois, il suffit de chercher un peu. Malheureusement il n&rsquo;y a pas de recommandation empirique. C&rsquo;est donc à nous de définir les seuils par répertoire en tenant compte des critères énoncés précédemment.</p>



<p class="wp-block-paragraph">Pour ma part cela donne :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Répertoires</strong></td><td class="has-text-align-center" data-align="center"><strong>% Minimum</strong></td><td class="has-text-align-center" data-align="center"><strong>% Maximum</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/boot</td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/usr</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/var</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">swap</td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/var/log</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/log/audit</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/opt</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/home</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/srv</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Voilà ce qui est pour la théorie. Comme ça me soule de ne pas savoir quel espace allouer pour 30 Gio, 40 Gio, 50 Gio de disque, j&rsquo;ai été contraint de faire une petite application en Powershell&#8230; Pourquoi changer une équipe qui gagne ?</p>



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



<p class="wp-block-paragraph">Je reste un puriste en termes de développement et je ne peux me passer de Windows Powershell ISE<sup data-fn="29a21fb4-e351-4d35-8f8b-3970b17ecbef" class="fn"><a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef" id="29a21fb4-e351-4d35-8f8b-3970b17ecbef-link">7</a></sup>. Je sais qu&rsquo;il existe mieux comme IDE<sup data-fn="2a0ff43d-b86a-4ec2-affb-823bcb64afdc" class="fn"><a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc" id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link">8</a></sup> (Visual Studio Code par exemple) mais je n&rsquo;arrive pas à me faire à l&rsquo;idée de quitter ISE&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Cela fait-il de moi un vieux réactionnaire ? Un dev de l&rsquo;ancien temps ?</strong></p>



<p class="wp-block-paragraph">Bref, je laisse cette question existentielle en suspens.</p>



<p class="wp-block-paragraph">Je me suis amusé pour une fois à réaliser une interface GUI<sup data-fn="f0557ebb-6968-4aca-a988-4463d1adb9db" class="fn"><a href="#f0557ebb-6968-4aca-a988-4463d1adb9db" id="f0557ebb-6968-4aca-a988-4463d1adb9db-link">9</a></sup> via WindowsForm. Moi l&rsquo;amoureux du CLI<sup data-fn="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" class="fn"><a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link">10</a></sup> je reconnais mettre amusé. Encore une fois <a href="https://www.youtube.com/watch?v=1SERx1KyECU&amp;list=RD1SERx1KyECU&amp;start_radio=1">je sais que je ne savais rien</a> et j&rsquo;ai donc encore appris.</p>



<p class="wp-block-paragraph">Réaliser une application GUI en plaçant les items au pixel c&rsquo;est marrant mais vite casse gueule. Cela demande une gymnastique d&rsquo;esprit qui ne me rebute pas.</p>



<p class="wp-block-paragraph">Il y a toutefois un bémol non négligeable à l&rsquo;utilisation de WindowsForm, cela ne permet pas l&rsquo;opérabilité multiplateforme. Logique puisque WindowsForm fait partie intégrante de Windows, donc pas possible de faire fonctionner ce dernier sous Linux.</p>



<p class="wp-block-paragraph">Il faudrait donc que je compose un mode de fonctionnement CLI pour assurer l&rsquo;opérabilité. Cela n&rsquo;est qu&rsquo;au final que le développement d&rsquo;une fonction d&rsquo;affichage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première version de mon application ne se base pas pour l&rsquo;instant sur un fichier de configuration ce qui implique que les seuils minimums et maximums sont défini en dur dans le code (en tant que constante global tout de même je ne suis pas un sauvage !).</td><td><img loading="lazy" decoding="async" width="550" height="388" class="wp-image-3431" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg 932w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-768x541.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">J&rsquo;offre également la possibilité de définir la taille minimum ou maximum à provisionner.</p>



<p class="wp-block-paragraph">Pour bien comprendre (c&rsquo;est un grand mot) je propose la courte vidéo de présentation de la version béta de mon app.</p>



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



<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="PROJET   Linux Partitions Calculator" width="720" height="405" src="https://www.youtube.com/embed/-pFmGdQvl3E?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>



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



<p class="has-text-align-center wp-block-paragraph"><a href="https://github.com/EGuillemard/GS_002_UNI_SYS_Storage">Miaou</a></p>



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



<p class="wp-block-paragraph">Qu&rsquo;il est bon de revenir aux bases. Sans cela, je pense que je n&rsquo;aurai pas eu l&rsquo;idée de faire du GUI en powershell depuis mon ISE. Il est vrai que cela permet également de revenir peut-être aux prémices de ce blog qui étaient :</p>



<ul class="wp-block-list">
<li>L&rsquo;aspect pédagogique</li>



<li>Aborder les bases</li>



<li>Réaliser des petits projets</li>



<li>Sortir des sentiers battus</li>
</ul>



<p class="wp-block-paragraph">Ainsi, je renoue avec certaines valeurs laissées de côté dans le cadre des derniers gros projets que j&rsquo;ai pu mener. Toutefois, je reste une tête de c*n à laisser transparaitre ma désinvolture, sarcasmes et autres tournures de phrases et expressions vitriolés 🙂 (Ce blog et mes articles restent un loisir personnel et cela m&rsquo;amuse d&rsquo;user de ma liberté d&rsquo;expression tout en tachant de rester respectueux).</p>



<p class="wp-block-paragraph">Bref, il est temps de clôturer ce billet et d&rsquo;attaquer d&rsquo;autres thématiques 🙂 </p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>J&rsquo;ai évalué et calculé mon incompétence, elle est à la hauteur de vos mensonges et de votre lâcheté. Un petit partitionnement de prime et de service ? Vous méritez bien convenablement un pâté lorrain en cadeau ?</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://www.debian.org/releases/stable/arm64/apcs03.en.html">Debian : Recommanded Partitioning</a></li>



<li><a href="https://help.ubuntu.com/community/DiskSpace">Ubuntu : DiskSpace</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="d0cf7aef-1d32-469c-80aa-165e012513eb"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#d0cf7aef-1d32-469c-80aa-165e012513eb-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="0a4dc23e-e493-4f49-8cdf-9a361464e536"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="7c312e03-317c-474a-ab3e-448ddb4d3df3"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="957eb17c-7564-49a4-beda-d11cd897f8a8"><strong>GUI :</strong> Graphical User Interface <a href="#957eb17c-7564-49a4-beda-d11cd897f8a8-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1"><strong>GRUB :</strong> GRand Unifier Bootloader <a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="2d347e21-a763-4bc2-ab40-e0ef607de630"><strong>BDD :</strong> Base De Données <a href="#2d347e21-a763-4bc2-ab40-e0ef607de630-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="29a21fb4-e351-4d35-8f8b-3970b17ecbef"><strong>ISE :</strong> Integrated Scripting Environment <a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc"><strong>IDE :</strong> Integraded Development Environment <a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f0557ebb-6968-4aca-a988-4463d1adb9db"><strong>GUI :</strong> Graphical User Interface <a href="#f0557ebb-6968-4aca-a988-4463d1adb9db-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5"><strong>CLI :</strong> Command Line Interface  <a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; PostgreSQL</title>
		<link>https://erwanguillemard.com/apps-postgresql/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 21:26:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[BDD]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3247</guid>

					<description><![CDATA[Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&#8217;enclos des éléphants. Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&rsquo;enclos des éléphants.</p>



<p class="wp-block-paragraph">Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD<sup data-fn="b793e32b-66d6-49b2-ab53-f36b018298f1" class="fn"><a href="#b793e32b-66d6-49b2-ab53-f36b018298f1" id="b793e32b-66d6-49b2-ab53-f36b018298f1-link">1</a></sup> PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce moteur puissant. Ne nous voilons pas la face, ce jour les grands acteurs de BDDs<sup data-fn="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" class="fn"><a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link">2</a></sup> proposent des versions communautaires qui sont limités en termes de volumétrie et de fonctionnalité. Pour jouir de l&rsquo;ensemble des fonctionnalités il faut passer à la caisse.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>$$$ Bonjour le bandit manchot $$$</strong></p>



<p class="wp-block-paragraph">Les bases de données étant de plus en plus volumineuse et l&rsquo;évolution que nous utilisateurs nous en faisons facilite auprès de ces mêmes éditeurs la mise à jour de leurs tarifications. C&rsquo;est de bonne guerre (ou pas). Ce « <strong>ou pas</strong> » laisse donc la voie à d&rsquo;autres alternatives. Plus simple, moins complexes et parfois plus puissante en s&rsquo;alignant sur le principe de la philosophie OpenSource.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Je laisse une version communautaire, tu passes à la caisse si tu veux un service d&rsquo;assistance ou de maintenance. </strong></p>



<p class="has-text-align-left wp-block-paragraph">Il y aura toujours chez certains éditeurs quelques fonctionnalités en moins. Toutefois, je pense que c&rsquo;est dans cette approche et la bonne et je réfléchis à adopter le même principe dans un projet de vie d&rsquo;une plus grande dimension.</p>



<p class="wp-block-paragraph">Bref, après cette <a href="https://www.youtube.com/watch?v=k7U4EfFltX4&amp;list=RDk7U4EfFltX4&amp;start_radio=1">marche de l&rsquo;éléphant</a> (sans prendre de LSD<sup data-fn="400bfed0-8737-41bd-8083-b5ec5af14458" class="fn"><a href="#400bfed0-8737-41bd-8083-b5ec5af14458" id="400bfed0-8737-41bd-8083-b5ec5af14458-link">3</a></sup> ou autres acides). Je me fais un petit guide sur PostreSQL 🙂</p>





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



<p class="wp-block-paragraph">Il me semble important une nouvelle fois de préciser que ce billet portera sur le déploiement d&rsquo;un environnement PostgreSQL dans sa dernière version stable à ce jour (release 18 en ce mois de grace Octobre 2025). Sur Windows, le déploiement ne m&rsquo;intéresse pas des masses. Par contre sur un système GNU/LINUX, j&rsquo;écris un <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><strong><em><span style="text-decoration: underline;">OUI</span></em></strong> </mark>majuscule (gras, italique, souligné rouge !).</p>



<p class="wp-block-paragraph">Bien que les chiffres ne soient pas réellement suivis, PostgreSQL estime la part d&rsquo;environnement de production d&rsquo;environ (<a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">lien</a>) :</p>



<ul class="wp-block-list">
<li>52 % l&rsquo;usage sur les systèmes GNU/LINUX</li>



<li>23% l&rsquo;usage sur les systèmes Windows</li>
</ul>



<p class="wp-block-paragraph">La raison de mon choix est que nous retrouvons un grand nombre d&rsquo;appliance qui utilise PostgreSQL dans des environnements GNU/UNIX. Donc en tant que SysAdmin il faut bien savoir se positionner 🙂 (franchement, quelle remarque de me*de&#8230;).</p>



<p class="wp-block-paragraph">Je considère que l&rsquo;environnement sera durci selon les recommandations de l&rsquo;ANSSI<sup data-fn="172c5b99-4041-4446-85b6-d02e927f1b6e" class="fn"><a href="#172c5b99-4041-4446-85b6-d02e927f1b6e" id="172c5b99-4041-4446-85b6-d02e927f1b6e-link">4</a></sup> concernant les systèmes GNU/LINUX et comme d&rsquo;accoutumé, je pars sur ma distribution RHEL favorite RockyLinux.</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.4 et version ultérieures</li>
</ul>
</li>



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



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Non applicable</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">L&rsquo;implémentation d&rsquo;un SGBD passe forcément par une réflexion de sa topologie. Nous ne balançons pas une application 1-tiers, on essaie à minima d&rsquo;adopter une architecture 2-Tiers. Soit 1 serveur Frontend et 1 serveur Backend.</p>



<p class="wp-block-paragraph">Pour des raisons qui sont évidentes (enfonçage de porte ouverte) une application publiée ne doit pas héberger la BDD. L&rsquo;application doit être en DMZ<sup data-fn="146573c3-30d5-479a-b375-824245002261" class="fn"><a href="#146573c3-30d5-479a-b375-824245002261" id="146573c3-30d5-479a-b375-824245002261-link">5</a></sup> et la BDD dans une autres bulles avec un contrôle des flux entrants et sortants interlans.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>M&rsquo;sieur? Et pour l&rsquo;identification des flux ? Pour l&rsquo;attribution des ressources ? Comment on fait ?</strong></p>



<p class="wp-block-paragraph">Donnez moi un <strong>R</strong>, un <strong>T</strong>, un <strong>F</strong> et un <strong>M</strong>&#8230; <strong>RTFM</strong><sup data-fn="8cf51c44-be31-4dbd-91c3-7dfca8006d40" class="fn"><a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40" id="8cf51c44-be31-4dbd-91c3-7dfca8006d40-link">6</a></sup> ! Il suffit encore une fois d&rsquo;avoir le courage de se palucher le wiki de l&rsquo;éditeur applicatif. Un peu d&rsquo;huile de coude n&rsquo;a jamais fait de mal.</p>



<p class="wp-block-paragraph">Une fois la topologie bien pensée, passons à l&rsquo;architecture de notre serveur BDD.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Comme tout SGBD déployé il convient au minima d&rsquo;implémenter la topologie ci-contre. Soit, un disque dédié au système UNIQUEMENT. Un disque dédié au stockage des données de notre SGBD et en dernier lieu un disque dédié au dump de nos BDDs avec une périodicité définie.<br><br>J&rsquo;ajouterai également un quatrième disque quant aux journaux de la BDDs et les journaux de transaction (les fameux transaction logs). Toutefois, ayant une petite infrastructure, je m&rsquo;octroie le luxe de laisser ces derniers dans le /var/log.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-3251" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_001_Macro.jpg" alt=""></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Hardware Requirements</h4>



<p class="wp-block-paragraph">Niveau des ressources là c&rsquo;est une autre histoire&#8230; Si la documentation officielle nous communique les ressources et interopérabilités avec les dépendances tierces, je n&rsquo;ai malheureusement pas trouvé d&rsquo;informations sur les ressources matérielles. Dans un sens logique car cela va dépendre de ce que nous souhaitons traiter comme données etc.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc décidé d&rsquo;appliquer de mon plein gré et non sous la contrainte de calquer les recommandations MariaDB (<a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">lien</a>). Toutefois, cela fait un peu beaucoup pour moi&#8230;</p>



<p class="wp-block-paragraph">Je partirai donc pour un minimum <strong>2 vCPU</strong> et <strong>4 Gio</strong> de <strong>RAM</strong>. Dans l&rsquo;idéal, je serai je pense sur du <strong>4 vCPU</strong> et <strong>8 Gio</strong> de RAM. Comme écrit plus haut, tout dépendra de ce que notre application va consommer en termes de traitement. Il faudra alors <em>raisonner en bon père de famille</em> (spéciale dédicasse) et ajuster les ressources afin d&rsquo;éviter la sur ou sous allocation.</p>



<p class="wp-block-paragraph">Côté réseau, la documentation nous indique que le port <strong>5432/tcp</strong> est le port de communication par défaut. Surprise, nous pouvons changer le port dans le fichier de configuration&#8230;</p>



<p class="wp-block-paragraph">Je pense qu&rsquo;avec le peu de base énoncée, nous pouvons passer à la pratique.</p>



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



<p class="wp-block-paragraph">Un dernier point pour faire une magnifique transition entre la théorie et cette partie. Il est à noter que les dépôts officiels des distributions contiennent une version de la solution PostgreSQL. Toutefois, il ne s&rsquo;agit généralement pas de la dernière version. Il est recommandé d&rsquo;ajouter le dépôt de l&rsquo;éditeur et de ne pas utiliser le dépôt système pour PostgreSQL.</p>



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



<p class="wp-block-paragraph">Franchement, je trouve là la démarche super-mega overcool de proposer un webwizard pour définir comment déployer PostgreSQL selon les différents OS<sup data-fn="93299765-13f1-4d26-b6e1-157c6dc967ca" class="fn"><a href="#93299765-13f1-4d26-b6e1-157c6dc967ca" id="93299765-13f1-4d26-b6e1-157c6dc967ca-link">7</a></sup> et distributions (nous noterons au passage un excellent usage de la figure de style hyperbolique) (<a href="https://www.postgresql.org/download/">lien</a>).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg" alt="" class="wp-image-3252" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-300x164.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-768x419.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard.jpg 1523w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Je ne vais pas copier bêtement le script proposé. Mais reprendre chacune des lignes. Ce que je trouve admirable, c&rsquo;est la simplicité du déploiement. Pas besoin d&rsquo;installer 10k de dépendance en amont et de configurer ces dernières. </p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_4a47c7-b1 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-pane3247_9174dd-7e"><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>1 &#8211; Ajout du repo</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 class="wp-block-paragraph">A partir du lien fournit par le webwizard installer le nouveau repo :</p>



<p class="wp-block-paragraph"></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-80"><code>$ sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="374" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg" alt="" class="wp-image-3256" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-300x110.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-768x281.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1536x562.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO.jpg 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_e9b6fd-28"><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>2 &#8211; Désactivation du package de la source de distribution</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 class="wp-block-paragraph">Comme indiqué précédemment, il convient de désactiver la version de postgreSQL contenu dans le repo par défaut. Ainsi, nous aurons une plus grande flexibilité dans le choix de version de nos composants.</p>



<p class="wp-block-paragraph">A noter que mon système étant durci j&rsquo;ai été contrait de réaliser l&rsquo;opération en tant que root.</p>



<p class="wp-block-paragraph"></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-81"><code># dnf -qy module disable postgresql</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="867" height="611" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg" alt="" class="wp-image-3258" style="width:597px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg 867w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-768x541.jpg 768w" sizes="auto, (max-width: 867px) 100vw, 867px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ded978-9c"><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>3 &#8211; Installation du Server PostgreSQL</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 class="wp-block-paragraph">Rien de plus simple, il suffit de faire une petite recherche par précaution puis une installation de notre package.</p>



<p class="wp-block-paragraph"></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-82"><code># dnf search postgresql18-server
# dnf install postgresql18-server</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg" alt="" class="wp-image-3259" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-300x66.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-768x168.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1536x336.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO.jpg 1904w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_998fe7-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>4 &#8211; Initialisation et 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 class="wp-block-paragraph">Comme tous SGBDs, il convient d&rsquo;initier la première installation. Puis de s&rsquo;assurer que le service va être lancer automatiquement au démarrage du système en cas de reboot.</p>



<p class="wp-block-paragraph">Pour conclure, le traditionnel démarrage de notre daemon.</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-83"><code># /usr/pgsql-18/bin/postgresql-18-setup initdb
# systemctl enable postgresql-18
# systemctl start postgresql-18</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="89" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg" alt="" class="wp-image-3260" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-300x26.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-768x67.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO.jpg 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Pour le fun, une petite vérification 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="368" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg" alt="" class="wp-image-3261" style="width:665px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-300x108.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-768x276.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO.jpg 1512w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Notre daemon PostgreSQL étant déployé, j&rsquo;arrive toujours à ce point d&rsquo;application des bonnes pratiques systèmes. C&rsquo;est là que ça peut être délicat si on se plante dans la configuration car cela peut mener à repartir de zéro. D&rsquo;où l&rsquo;importance de lire la documentation encore une fois.</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=B4WJk2G9g38">C&rsquo;est qu&rsquo;un éléphant ça trompe énormément !</a></p>



<p class="wp-block-paragraph">Et voilà comment on casse tout 😀</p>



<h3 class="wp-block-heading">Déplacement de la BDD Location</h3>



<p class="wp-block-paragraph">Si nous gardons la topologie mis en place ci-haut, il sera nécessaire de déplacer le répertoire data stocké sur <strong>/var/lib/pgsql/18/data</strong> vers notre répertoire <strong>/mnt/database/postgresql/data</strong> monté sur notre disque <strong>/dev/sdb</strong>.</p>



<p class="wp-block-paragraph">Je ne vais pas mentir, je me suis pris les pieds dans le tapis une fois et j&rsquo;ai dû restaurer ma VM. Toutefois, les étapes ci-dessous sont bien éprouvées et valide.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_981a8d-b1 kt-accordion-has-6-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-pane3247_3b8c7b-15"><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>1 &#8211; Arret du 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 class="wp-block-paragraph">La base de la base est donc d&rsquo;arrêter le service postgresql :</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-84"><code>$ sudo systemctl stop postgresql-18.service
$ sudo systemctl status postgresql-18.service</code></pre>



<p class="wp-block-paragraph">Il est primordiale de s&rsquo;assurer que le service ne tourne plus.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_bca34b-7a"><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>2 &#8211; Création de l&rsquo;architecture cible</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 class="wp-block-paragraph">Sur notre partition <strong>/dev/sdb1</strong> préalablement configurée et montée sur <strong>/mnt/database</strong>, nous allons créer et définir les droits et permissions pour autoriser notre compte postgres à accéder à ce dernier.</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-85"><code>$ sudo mkdir /mnt/database/postgresql
$ sudo mkdir /mnt/database/postgresql/pg_sock
$ sudo mkdir /mnt/database/postgresql/data
$ sudo chown postgres:postgres /mnt/database/postgresql
$ sudo chmod 755 /mnt/database
$ sudo chmod 700 -R /mnt/database/postgresql</code></pre>



<p class="wp-block-paragraph">Mais alors pourquoi 700 ? La base de donnée ainsi que l&rsquo;ensemble des fichiers de ressources doivent être accessible uniquement de l&rsquo;application par sécurité.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ecd500-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>3 &#8211; Déplacement des données</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 class="wp-block-paragraph">Comme j&rsquo;ai pris l&rsquo;habitude de faire comme pour MariaDB, je vais copier le contenu du répertoire data puis renommer la source afin d&rsquo;éviter tous dysfonctionnements.</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-86"><code>$ sudo rsync -av /var/lib/pgsql/18/data/ /mnt/database/postgresql/data/
$sudo mv /var/lib/pgsql/18/data /var/lib/pgsql/18/data.ori</code></pre>



<p class="wp-block-paragraph">Une erreur classique lors de l&rsquo;usage de la commande rsync reste l&rsquo;oublie du <strong>/</strong>. Cela entrainera la copie du répertoire et non de son contenu uniquement. En gros, ça va bégayer dans les chemins (../postgresql/data/data/&#8230;).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_9e61f4-e4"><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>4 &#8211; Modification de la configuration du 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 class="wp-block-paragraph">Le service est configuré pour démarrer le daemon sous <strong>/var/lib/psql/18</strong>. Pour prendre en charge le nouveau chemin, il faut modifier ce dernier. La philosophie et de surcharger la configuration.</p>



<p class="wp-block-paragraph">Créer le répertoire qui va contenir la surcharge de notre daemon psql :</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-87"><code>$ sudo mkdir -p /etc/systemd/system/postgresql-18.service.d</code></pre>



<p class="wp-block-paragraph">Créer un fichier de surcharge qui va contenir le chemin du répertoire data :</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-88"><code>$ sudo tee /etc/systemd/system/postgresql-18.service.d/override.conf &gt; /dev/null &lt;&lt;'EOF'
<strong>&#91;Service]
Environment="PGDATA=/mnt/database/postgresql/data/"
EOF</strong></code></pre>



<p class="wp-block-paragraph">Par acquis de conscience, j&rsquo;aime vérifier que le fichier est bien présent ainsi que le contenu de ce dernier.</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-89"><code>$ sudo cat /etc/systemd/system/postgresql-18.service.d/override.conf</code></pre>



<p class="wp-block-paragraph">Le daemon &lsquo;system&rsquo; a été altéré (puisque j&rsquo;ai ajouté une configuration) et donc ? Un petit reload des familles pour prendre en compte le changement et zou.</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-90"><code>$ sudo systemctl daemon-reload</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_cfaebc-a8"><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>5 &#8211; SELinux</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 class="wp-block-paragraph">Un étape un peu border avec la sécurité (comme un excès de Delirium un jeudi soir pour oublier une semaine compliqué).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="600" height="600" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png" alt="" class="wp-image-3270" style="width:180px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png 600w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-150x150.png 150w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois, il est important de noter un petit point et non des moindres sur notre fichier <strong>/etc/fstab.</strong> Il va être nécessaire d&rsquo;ajouter le contexte sur notre partition et de relabeliser notre point partition.</p>



<p class="wp-block-paragraph">Editons le fichier avec VIM, VI ou NANO puis modifier la ligne comme ci-dessous en ajoutant au niveau des droits <strong><em>defaults,context=system_u:object_r:postgresql_db_t:s0</em></strong></p>



<p class="wp-block-paragraph">Ce qui veut dire en SELinux :</p>



<ul class="wp-block-list">
<li><strong><em>Defaults :</em></strong> Activation des droits standards</li>



<li><strong><em>Context=</em></strong>
<ul class="wp-block-list">
<li><strong><em>system_u </em></strong>: Identité SELinux, sans impact concernant notre SGBD</li>



<li><strong><em>object_r </em></strong>: Rôle d&rsquo;objet de type fichier</li>



<li><strong><em>postgresql_db_t </em></strong>: Match avec le type de données PostgreSQL autorisé par SELinux. Ainsi, SELinux interdit à PostgreSQL d&rsquo;accéder à des fichiers qui ne sont pas dans le contexte.</li>



<li><strong><em>s0 </em></strong>: Le niveau de sécurité par défaut.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Il sera nécessaire de définir le bon contexte sur notre nouveau répertoire.</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-91"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_000ea0-1b"><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>6 &#8211; Démarrage du 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 class="wp-block-paragraph">Le moment de vérité.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Vais je vomir l&rsquo;ensemble de mes bières et commander une nouvelle tournée pour noyer mon échec ou commander une nouvelle tournée pour célébrer le succès de cette opération ? 🙂</strong></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-92"><code>$ sudo systemctl start postgresql-18
$ sudo systemctl status postgresql-18</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il faut noter que le service fonctionne. Néanmoins, il convient de se demander si nous pouvons requêter notre BDD à la suite de ce changement.</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-93"><code>$ sudo -u postgres psql -c "SELECT version();"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="134" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg" alt="" class="wp-image-3271" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData-300x66.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="wp-block-paragraph">Vérifions également que le chemin du PGDATA a bien été pris en compte.</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-94"><code>$ sudo -u postgres psql -c "SHOW data_directory;"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="94" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg" alt="" class="wp-image-3272" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData-300x47.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="has-text-align-center wp-block-paragraph">Ouf ça fonctionne 🙂</p>



<p class="wp-block-paragraph">Place à l&rsquo;étape suivante ! <a href="https://www.youtube.com/watch?v=zRcRtpgox0U">BA-BA-BAR POM POM POM POM</a></p>



<h3 class="wp-block-heading">Sécurisation &amp; Configuration</h3>



<p class="wp-block-paragraph">Nous revenons encore et toujours au même point. Qui dit données implique la sensibilité de ces dernières. Aujourd&rsquo;hui braquer une banque ne rapporte pas grand-chose. Le rapport bénéfices/risques n&rsquo;est pas bon&#8230; Mais braqué des données, utiliser ces dernières et les revendre apporte un bien meilleur rapport en termes de bénéfices / risques.</p>



<p class="wp-block-paragraph">Donc, je me retrousse les manches car je ne suis pas un manche !</p>



<p class="wp-block-paragraph">Si du côté <strong>MariaDB</strong> il existe le fameux <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">mysql_secure_installation</mark>, ce n&rsquo;est malheureusement pas le cas chez <strong>PostgreSQL</strong>.</p>



<p class="wp-block-paragraph">Il se pose alors de dresser un inventaire rapide des points que nous souhaitons sécuriser :</p>



<ol class="wp-block-list">
<li>Mot de passe du compte postgres</li>



<li>Restreindre l&rsquo;accès réseaux</li>



<li>Mettre en place une stratégie d&rsquo;authentification</li>



<li>Utiliser des algorithmes de chiffrement fort</li>



<li>Supprimer les BDDs inutiles</li>



<li>Droits sur les fichiers</li>



<li>SELinux</li>



<li>Firewall embarqué (même si je préfère le terme embedded)</li>



<li>Audit et Journaux d&rsquo;événements</li>
</ol>



<p class="wp-block-paragraph">Ca fait une petite tripoté n&rsquo;est-il pas ? Naturellement, certains des points ci-haut ont déjà été traité lors du déploiement et du changement d&#8217;emplacement de la base de données.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_ac7a8e-1e kt-accordion-has-9-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-pane3247_c547cc-2a"><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>1 &#8211; Password Account DB </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 class="wp-block-paragraph">Comme pour MariaDB (compte root), l&rsquo;utilisateur postgres ne possède pas de mot de passe. Il convient par sécurité de définir ce dernier afin qu&rsquo;il ne vienne une idée à un individu malveillant (comme un RSSI <sup data-fn="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" class="fn"><a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link">8</a></sup>lors d&rsquo;un audit ou pire un SysDBA<sup data-fn="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" class="fn"><a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link">9</a></sup>) de mettre sa truffe humide dans notre BDD.</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-95"><code>$ su - postgres
$ psql -c "alter user postgres with password '<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">MyP@ssw0rd</mark></strong>'"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="181" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg" alt="" class="wp-image-3276" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-768x135.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user.jpg 1435w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Il est important de faire un petit <strong><em>clear de l&rsquo;historique</em></strong> de frappe. Un mot de passe en clair c&rsquo;est pas cool. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_7f1d29-93"><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>2 &#8211; Network Restrictions</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 class="wp-block-paragraph">Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>.</p>



<p class="wp-block-paragraph">Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p class="has-text-align-center wp-block-paragraph">Recherchez la section CONNECTIONS AND AUTHENTIFICATION.</p>



<p class="wp-block-paragraph">Se pose alors la question, depuis où je peux consulter ma BDDs et sur quel port ? Personnellement, le port je le laisse par défaut soit 5432/tcp. Toutefois, la source, il est bien de spécifier le subnet ou les adresses IPs qui sont autorisé à se connecter à notre SGBD. Naturellement, la valeur &lsquo;*&rsquo; est proscrite.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="903" height="295" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg" alt="" class="wp-image-3285" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-300x98.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-768x251.jpg 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>
</div>


<p class="wp-block-paragraph">Ce paramétrage va de pair avec la configuration de notre UTM<sup data-fn="5b9359c6-adcf-4f72-9501-604602846dc7" class="fn"><a href="#5b9359c6-adcf-4f72-9501-604602846dc7" id="5b9359c6-adcf-4f72-9501-604602846dc7-link">10</a></sup> embedded (cf le point plus bas).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_0e912b-42"><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>3 &#8211; Authentification Policies</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 class="wp-block-paragraph">On va changer de fichier. L&rsquo;objectif est de définir <strong>qui</strong> va se connecter à <strong>quoi</strong>, <strong>comment</strong> et depuis<strong> où</strong>.</p>



<p class="wp-block-paragraph">Direction <strong>/mnt/database/postgresql/data/pg_hba.conf</strong></p>



<p class="wp-block-paragraph">La logique de lecture est la suivante TYPE correspond à la nature de l&rsquo;authentification (local? hôte ?) pour quelle DATABASE (all ? replication ? db_test ?) pour quel USER (all ? r-one ?) depuis quelle ADDRESS (127.0.0.1/32 ? 0.0.0.0/0 ? 10.36.16.0/24 ?) et par quel METHOD (peer ? scram-sha-256? MD5?).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="865" height="465" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg" alt="" class="wp-image-3277" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg 865w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-300x161.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-768x413.jpg 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>
</div>


<p class="wp-block-paragraph">Il est certain qu&rsquo;il faut limiter l&rsquo;usage au maximum du all comme du masque 0.0.0.0/0. Toutefois, il n&rsquo;y a pas de base les paramètres « implicites » de refus des connexions. C&rsquo;est donc à implémenter (dernières lignes de la capture d&rsquo;écran).</p>



<p class="wp-block-paragraph">On sauvegarde, puis on reload le service.</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-96"><code>$ sudo systemctl reload postgresql-18</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_28b64d-f5"><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>4 &#8211; Suite de chiffrement</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 class="wp-block-paragraph">Toujours dans le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p class="wp-block-paragraph">Recherchez la section CONNECTIONS AND AUTHENTIFICATION et activez l&rsquo;algorithme de chiffrement <strong>scram-sha-256</strong>. Le <strong>MD5</strong>, nous passons notre tour hein ? Autant allez aux champignons sans capotes, c&rsquo;est du pareil au même.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="861" height="124" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg" alt="" class="wp-image-3284" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg 861w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-300x43.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-768x111.jpg 768w" sizes="auto, (max-width: 861px) 100vw, 861px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_398349-d5"><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>5 &#8211; Nettoyage des BDDs inutiles</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 class="wp-block-paragraph">Il est important de lister les bases présentes sur notre SGBD et de supprimer les bases qui ne servent à rien.</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-97"><code>$ su - postgres  -c "\l"
$ psql

postgres=#\l
postgres=# DROP DATABASE NAME_BDD;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="300" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg" alt="" class="wp-image-3283" style="width:672px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-768x225.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD.jpg 1278w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Attention : Il ne faut en aucun cas supprimer les bases template0 et template1. Ces dernières permettent (pour la 1) de générer les futurs BDDs) et (pour la 0) de regénérer la BDD de modèle.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_3f7584-a2"><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>6 &#8211; Permissions et ACLs</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 class="wp-block-paragraph">Comme expliqué ci haut et pour des raisons évidentes. L&rsquo;accès aux données doivent être accessible uniquement du compte utilisateur postgres et root. Pas de quoi foutez milles éléphants&#8230;</p>



<p class="wp-block-paragraph">Je glisse toutefois les commandes.</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-98"><code>$ sudo chown -R postgres:postgres /mnt/database/postgresql/data
$ sudo chmod 700 /mnt/database/postgresql/data</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3247_596968-8b"><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>7 &#8211; SELinux &lt;3</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 class="wp-block-paragraph">Nous retrouvons la commande saisie ci-haut si nous avons modifié le database location.</p>



<p class="wp-block-paragraph">Ainsi nous définissons le contexte de fichier de type <strong>postgresql_db_t </strong>à l&rsquo;ensemble des éléments qui sont situer sous <strong>/mnt/database/postgresql</strong>. Puis on restore le contexte.</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-99"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3247_481508-49"><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>8 &#8211; Firewall</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 class="wp-block-paragraph">Avant c&rsquo;était iptables maintenant c&rsquo;est firewalld ou ufw. Personnellement je reste sur la configuration de firewalld.</p>



<p class="wp-block-paragraph">Il convient d&rsquo;autoriser les flux 5432/tcp dans notre firewall si des connexions se font depuis un autre réseau ou une autre machine.</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-100"><code>$ sudo firewall-cmd --permanent --add-service=postgresql
$ sudo firewall-cmd --reload</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="916" height="104" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg" alt="" class="wp-image-3278" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg 916w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-300x34.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-768x87.jpg 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>
</div>


<p class="wp-block-paragraph">Cela étant, il serait également plus précis de filtrer les connexions entrantes sur un réseau ou une adresse ip uniquement sur le port 5432/tcp.</p>



<p class="wp-block-paragraph">J&rsquo;assume cette configuration du fait de mon UTM en amont qui filtre l&rsquo;ensemble des flux inter-lans.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3247_2ab698-4d"><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>9 &#8211; Logs &amp; Audits</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 class="wp-block-paragraph">Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</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-101"><code># vim /mnt/database/postgresql/data/postgresql.conf</code></pre>



<p class="wp-block-paragraph">Se rendre ensuite dans la section REPORTING AND LOGGING. Puis vérifiez que la configuration suivante est active.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Activation de <strong>logging_collector</strong> sur <strong>on</strong> afin de récupérer les erreurs sous la forme json ou csv.<br><br>L&#8217;emplacement où va être stocké les journaux. Par défaut celui-ci se trouve dans le répertoire log. Il faudra renseigner si l&#8217;emplacement est différent le chemin absolu, le chemin relatif si c&rsquo;est un cluster.<br><strong>log_directory = &lsquo;log&rsquo;</strong><br><br>Le nom du fichier, par défaut ce dernier est sous le format <strong>postgresql-%Y-%m-%d_%H%M%S.log</strong>.<br><strong>log_filename = &lsquo;postgresql-%a.log&rsquo;</strong><br><br>Activer la journalisation pour l&rsquo;ensemble des événements de connexion et de déconnexion.<br><strong>log_connections = on<br>log_disconnections = on</strong><br><br>En guise de traitement des logs, nous choisirons ddl pour avoir les définitions des commandes utilisés. Attention, l&rsquo;usage de all peut être dangereux vis à vis des ressources.<br><strong>log_statement = &lsquo;ddl&rsquo;</strong></td><td><img loading="lazy" decoding="async" width="550" height="598" class="wp-image-3279" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg 607w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits-276x300.jpg 276w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois les modifications apportées, n&rsquo;oubliez pas que notre serveur PostgreSQL à besoin d&rsquo;être redé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 wp-elements-102"><code>$ sudo systemctl restart postgresql-18</code></pre>



<p class="wp-block-paragraph">Pour une configuration spécifique comme la gestion de la mémoire allouée, les fonctionnalités et j&rsquo;en passe. Je pense qu&rsquo;il est inutile d&rsquo;aborder cela dans ce billet.</p>



<p class="wp-block-paragraph">Pourquoi ? Parce que cet aspect-là et intrinsèquement lié aux dépendances des applications qui nécessite le SGBD PostgreSQL.</p>



<h3 class="wp-block-heading">Premiers Pas</h3>



<p class="wp-block-paragraph">Cette sous partie vise plus à entrevoir les commandes de bases pour instancier une BDD dans le cadre de déploiement d&rsquo;une application (spoiler Odoo par exemple ?).</p>



<p class="wp-block-paragraph">Je n&rsquo;ai pas la prétention de réinventer la roue, il existe la documentation pour cela et je n&rsquo;ai pas non plus la prétention de devenir SysDBA. J&rsquo;ai juste envie de faire les choses bien et surtout en suivant la doctrine des 3S, Simple, Standard et Sécurisé (14 ans d&rsquo;ESN<sup data-fn="d2a363b8-1043-4f02-8054-3cb17bef0b81" class="fn"><a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81" id="d2a363b8-1043-4f02-8054-3cb17bef0b81-link">11</a></sup> ça vous forge un homme !).</p>



<h4 class="wp-block-heading">Création d&rsquo;un user</h4>



<p class="wp-block-paragraph">La création d&rsquo;un utilisateur suit un paradigme différent de MariaDB. La finesse de l&rsquo;application du contexte d&rsquo;un utilisateur se fera dans le fichier <strong>pg_hba.conf</strong>.</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-103"><code>$ psql -U postgres

postgres=# CREATE USER user_odoo WITH PASSWORD 'MyPassw0rd';</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="789" height="74" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg" alt="" class="wp-image-3308" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg 789w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-768x72.jpg 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></figure>
</div>


<h4 class="wp-block-heading">Création d&rsquo;une BDD</h4>



<p class="wp-block-paragraph">La création d&rsquo;une BDD nécessite qu&rsquo;un utilisateur (de la SGBD naturellement) ait le privilège <strong>CREATEDB</strong> ou d&rsquo;utiliser un compte <strong>super utilisateur</strong>. Cela parait logique mais pas pour tout le monde. La documentation nous rappelle que la création d&rsquo;une nouvelle base de données sera effectué en réalisant un clone de la BDD template1 (si, le truc qui ne fallait pas supprimer).</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-104"><code>postgres=# CREATE DATABASE bdd_odoo;</code></pre>



<p class="wp-block-paragraph">Toutefois, nous pouvons allez plus loin en définissant le propriétaire de la BDD, le jeu de caractère de la BDD ainsi que la collation locale afin de faciliter le tri des chaines. Par exemple :</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-105"><code>postgres=# CREATE DATABASE bdd_odoo_18
			WITH OWNER user_odoo
			ENCODING 'UTF8'
			LC_COLLATE 'fr_FR.UTF-8'
			LC_CTYPE 'fr_FR.UTF-8'
			TEMPLATE template0;</code></pre>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> ARTUNG <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> Bicyclette et petit vélo !</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Il n&rsquo;est pas impossible que vous tombiez sur une erreur de ce type « <em>invalid LC_COLLATE locale name</em>« . Cela signifie que tu vivras ta vie sans aucun soucis. (Tes vraiment sûre ?)<br>En gros, il manque le fichier de mappage de caractère au niveau système. Soit il n&rsquo;est pas présent, soit il n&rsquo;est pas généré.</td><td><img loading="lazy" decoding="async" width="550" height="182" class="wp-image-3309" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg 617w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage-300x99.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Afin de vérifier si ce dernier est présent :</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-106"><code>$ sudo locale -a | grep fr</code></pre>



<p class="wp-block-paragraph">Si cela ne retourne rien c&rsquo;est que le packet ne doit pas être installé. Alors installons le vin diou !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-3-background-color has-text-color has-background has-link-color wp-elements-107"><code>$ sudo dnf install glibc-langpack-fr
$ sudo locale -a | grep fr</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="868" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg" alt="" class="wp-image-3310" style="width:722px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-300x254.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-768x651.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage.jpg 1033w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Surprise le fichier de mappage est présent ! Si nous rejouons la requête, cela fonctionne.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="281" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg" alt="" class="wp-image-3311" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-300x82.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-768x211.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate.jpg 1466w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading">Attribution des privilèges et rôles</h4>



<p class="wp-block-paragraph">Comme tous systèmes de base de données, un incontournable reste la notion de rôle et de privilège. </p>



<p class="wp-block-paragraph">Dans la pratique, il convient et je sais que j&rsquo;enfonce une porte ouverte d&rsquo;adopter la bonne pratique de créer des rôles et d&rsquo;affecter les rôles aux utilisateurs. Un rôle sur la BDD en modification, en lecture, superutilisateur ect. </p>



<p class="wp-block-paragraph">Ainsi et c&rsquo;est d&rsquo;une logique implacable, si modification il doit avoir, je ne modifierai <span style="text-decoration: underline;"><strong>QUE</strong></span> le rôle et non utilisateur par utilisateur. MALINX le LYNX&#8230;</p>



<h5 class="wp-block-heading">Rôles</h5>



<p class="wp-block-paragraph">Par défaut, nous retrouvons :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center">SUPERUSER</td><td>Accès total à tout le serveur</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEDB</td><td>Peut créer des bases de données</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEROLE</td><td>Peut créer, modifier ou supprimer d&rsquo;autres rôles</td></tr><tr><td class="has-text-align-center" data-align="center">INHERIT</td><td>Hérite des privilèges des rôles dont il est membre (activé par défaut)</td></tr><tr><td class="has-text-align-center" data-align="center">LOGIN</td><td>Peut se connecter à PostgreSQL</td></tr><tr><td class="has-text-align-center" data-align="center">REPLICATION</td><td>Peut initier des connexions de réplication</td></tr><tr><td class="has-text-align-center" data-align="center">BYPASSRLS</td><td>Ignore les politiques de sécurité par lignes</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Toujours dans le spoil (parce que <a href="https://www.youtube.com/watch?v=Txz9toiMFnE">je suis un mec underground moi. MOUMOUNIGAN !</a>) je vais créer un rôle pour ODOO qui permettra uniquement de se connecter, de créer une bdd avec un mot de passe.</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-108"><code>postgres=# CREATE ROLE r_odoo LOGIN CREATEDB;</code></pre>



<p class="wp-block-paragraph">Pour attribuer le rôle à un utilisateur (en prenant toujours le cas ODOO avec notre role r_odoo et user_odoo) :</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-109"><code>postgres=# GRANT r_odoo TO user_odoo;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="835" height="246" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg" alt="" class="wp-image-3312" style="width:652px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg 835w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-768x226.jpg 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>
</div>


<h5 class="wp-block-heading">Privilèges</h5>



<p class="wp-block-paragraph">La notion de privilèges que ce soit sur la BDD, les tables où les schémas suivent le principe de SQL. Ainsi il suffira d&rsquo;user des commandes GRANT accompagner de :</p>



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



<li>USAGE</li>



<li>SELECT ON ALL</li>



<li>SELECT, INSERT, UPDATE, DELETE</li>



<li>ALTER</li>



<li>DROP</li>



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



<p class="wp-block-paragraph">Il est important de prendre en compte que le propriétaire de la BDD <span style="text-decoration: underline;"><strong>a tous les droits</strong></span>.</p>



<p class="wp-block-paragraph">Toujours dans notre exemple ODOO, il n&rsquo;y aura donc pas de privilèges à appliquer.</p>



<h2 class="wp-block-heading">PostgreSQL Client</h2>



<p class="wp-block-paragraph">Il existe un outil que j&rsquo;ai découvert à travers un case chez VEEAM pour un problème de protection O365 du nom de pgAdmin. Cette solution officielle est l&rsquo;outil graphique pour administrer PostrgreSQL.</p>



<p class="wp-block-paragraph">Je pense important de présenter cette dernière car dans le cas où nous ne nous serions pas <strong><em>SQL native language</em></strong> ou <strong><em>seconde langue</em></strong>. Cela nous permettrait de bien comprendre certains dysfonctionnements ou structures.</p>



<p class="wp-block-paragraph">L&rsquo;installation n&rsquo;est pas en soi bien complexe&#8230; Ma grand-mère y arriverait sans difficulté. Toutefois, je glisse le tips&#8230;</p>


<div class="kb-gallery-wrap-id-3247_8318b5-7d alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3247_8318b5-7d kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" width="526" height="415" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-id="3294" class="wp-image-3294 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg 526w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 526px) 100vw, 526px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" width="520" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-id="3295" class="wp-image-3295 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin-300x238.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" width="523" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-id="3296" class="wp-image-3296 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg 523w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 523px) 100vw, 523px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" width="522" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-id="3297" class="wp-image-3297 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" width="524" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-id="3298" class="wp-image-3298 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg 524w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 524px) 100vw, 524px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" width="522" height="410" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-id="3299" class="wp-image-3299 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" width="520" height="411" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-id="3300" class="wp-image-3300 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" width="783" height="626" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-id="3301" class="wp-image-3301 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg 783w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-300x240.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-768x614.jpg 768w" sizes="auto, (max-width: 783px) 100vw, 783px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Certains pourrait dire, oui c&rsquo;est un PHPMyAdmin. Oui c&rsquo;est un fait. C&rsquo;est une IHM<sup data-fn="67016ea4-128a-4e54-8e78-994f2692832d" class="fn"><a href="#67016ea4-128a-4e54-8e78-994f2692832d" id="67016ea4-128a-4e54-8e78-994f2692832d-link">12</a></sup> en GUI<sup data-fn="91045dd7-1d19-4afb-9e40-c5064450683b" class="fn"><a href="#91045dd7-1d19-4afb-9e40-c5064450683b" id="91045dd7-1d19-4afb-9e40-c5064450683b-link">13</a></sup> pour faciliter l&rsquo;expérience quotidienne.</p>



<p class="wp-block-paragraph">Pour se connecter, il suffira de renseigner les informations de connexion et de s&rsquo;assurer au préalable que la politique de communication est bien présente sur notre UTM concernant les flux interlans. Sans oublier de vérifier :</p>



<ul class="wp-block-list">
<li>La configuration du fichier pg_hba.conf est compliante</li>



<li>Les adresses d&rsquo;écoutes dans le fichier postgresql.conf ne sont pas restreinte cas localhost et que le bind d&rsquo;interface est bien configuré. (Le bind c&rsquo;est l&rsquo;ip de l&rsquo;interface du serveur, pas l&rsquo;adresse ip du client&#8230; Je dis ça parce que je vous vois venir hein !)</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"><img loading="lazy" decoding="async" width="550" height="434" class="wp-image-3303" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg 727w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion-300x237.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="252" class="wp-image-3313" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg 1068w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-300x137.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-1024x469.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-768x352.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Et si nous jetions un coup d&rsquo;œil dans le viseur pour observer nos logs voir si on voit notre <a href="https://www.youtube.com/watch?v=6xb898sQtu8&amp;list=RD6xb898sQtu8&amp;start_radio=1">pachyderm</a> numérique ?</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-110"><code>$ sudo tail -f /mnt/database/postgresql/data/log/postgresql-Wed.log</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="161" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg" alt="" class="wp-image-3304" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-300x47.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-768x121.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1536x242.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion.jpg 1693w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Impeccable. Tout fonctionne 🙂</p>



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



<p class="wp-block-paragraph">Ce billet revient aux prémices des premiers articles rédigés il y a maintenant quasiment deux ans. Quelques choses de simple qui vise à jouer les aides mémoires de ma cafetière qui commence à s&rsquo;effriter.</p>



<p class="wp-block-paragraph">Je ne tenais pas à me lancer dans un benchmark de « <em><strong>Est ce que l&rsquo;otarie et plus fort que l&rsquo;éléphant ?</strong></em> » cela ne m&rsquo;intéresse pas le moindre du monde. Toutefois et comme j&rsquo;ai pu l&rsquo;aborder en avant propos, le tournant des éditeurs vers la solution PostgreSQL mérite de s&rsquo;intéresser à cette dernière.</p>



<ul class="wp-block-list">
<li>VEEAM enchaine sa rupture technologique avec Windows (SE<sup data-fn="7604995b-87f0-4797-9ee8-4a7d54d21f02" class="fn"><a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02" id="7604995b-87f0-4797-9ee8-4a7d54d21f02-link">14</a></sup> et/ou MSSQL) pour RHEL et PostgreSQL</li>



<li>ODOO qui reste dans la philosophie du libre</li>



<li>La Société Générale (faut bien renflouer les caisses après le passage de Jérôme KERVIEL&#8230; Ok, la blague est mauvaise, mais il fallait la faire. Trop tentante).</li>



<li>Patrick BALKANY pour gérer son patrimoine non déclaré. Ah non autant pour moi c&rsquo;est une fake news&#8230; Que je suis naïf 🙂</li>
</ul>



<p class="wp-block-paragraph">Au delà des deux derniers points douteux, il est bien je pense de se garder deux SGBDs relationnels sous le coude les solutions MariaDB et PostgreSQL. L&rsquo;implémentation de la couche de sécurité relève d&rsquo;un défi parfois mais reste nécessaire et plus qu&rsquo;indispensable de nos jours.</p>



<p class="wp-block-paragraph">Il manque toutefois un point que je n&rsquo;ai pas développé ici. La possibilité de sauvegarder une base de manière périodique. J&rsquo;avais traité le sujet pour MariaDB à la suite d&rsquo;une connerie de ma part un vendredi aprem sur l&rsquo;environnement de production. Je pense qu&rsquo;il serait bien de reprendre ce projet et de l&rsquo;adapter pour PostgreSQL 🙂</p>



<p class="wp-block-paragraph">Ca fait un sujet supplémentaire à traiter d&rsquo;ici la fin d&rsquo;année. Mais surtout, le levé de voile ayant été fait un poil plus tôt ce billet est le tremplin pour l&rsquo;implémentation d&rsquo;ODOO comme mon ERP à venir.</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Egaré dans la base de données infernale, le sysadmin se nomme R-ONE. A la recherche du datalocation, le problème s&rsquo;appelle la durcification. Avec la solution VEEAM, il a pu rollback super vite.</em> Dérivant à dos d&rsquo;éléphant<em>, R-ONE arrivera toujours dans l&rsquo;étang&#8230; (faut bien se mouiller un peu qu&rsquo;ils disaient les anciens)</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">PostgreSQL Secteur par OS</a></li>



<li><a href="https://www.postgresql.org/files/documentation/pdf/18/postgresql-18-A4.pdf">PostgreSQL &#8211; Main Apps Guide</a></li>



<li><a href="https://www.postgresql.org/download/">PostgreSQL &#8211; Download</a></li>



<li><a href="https://www.pgadmin.org/download/">PGAdmin &#8211; Download</a></li>



<li><a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">MariaDB &#8211; Hardware Requirements</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="b793e32b-66d6-49b2-ab53-f36b018298f1"><strong>SGBD :</strong> Système de Gestion de Base de Données <a href="#b793e32b-66d6-49b2-ab53-f36b018298f1-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2"><strong>BDD : </strong>Base De Données <a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="400bfed0-8737-41bd-8083-b5ec5af14458"><strong>LSD :</strong> <strong> </strong>LySergique Diéthylamide <a href="#400bfed0-8737-41bd-8083-b5ec5af14458-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="172c5b99-4041-4446-85b6-d02e927f1b6e"><strong>ANSSI</strong> <strong>:</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#172c5b99-4041-4446-85b6-d02e927f1b6e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="146573c3-30d5-479a-b375-824245002261"><strong>DMZ :</strong> Demilitarized Zone <a href="#146573c3-30d5-479a-b375-824245002261-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="8cf51c44-be31-4dbd-91c3-7dfca8006d40"><strong>RTFM :</strong> Read The Fuck*ng Manual <a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="93299765-13f1-4d26-b6e1-157c6dc967ca"><strong>OS :</strong> Operating System <a href="#93299765-13f1-4d26-b6e1-157c6dc967ca-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d"><strong>RSSI </strong>: Responsable Sécurité des Systèmes d&rsquo;Informations <a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d"><strong>SysDBA :</strong> Administrateur des Systèmes de Bases de Données <a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="5b9359c6-adcf-4f72-9501-604602846dc7"><strong>UTM : </strong>Unified threat management <a href="#5b9359c6-adcf-4f72-9501-604602846dc7-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2a363b8-1043-4f02-8054-3cb17bef0b81"><strong>ESN :</strong> Entreprise des Services Numériques <a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="67016ea4-128a-4e54-8e78-994f2692832d"><strong>IHM :</strong> Interface Homme Machine <a href="#67016ea4-128a-4e54-8e78-994f2692832d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="91045dd7-1d19-4afb-9e40-c5064450683b"><strong>GUI :</strong> Graphical User Interface <a href="#91045dd7-1d19-4afb-9e40-c5064450683b-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="7604995b-87f0-4797-9ee8-4a7d54d21f02"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:51:25 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3089</guid>

					<description><![CDATA[Toc Toc Toc ? Il y a quelqu&#8217;un ? C&#8217;est moi Borgniol&#8230; Après 3 mois d&#8217;absence et de retrait vis à vis du dernier article, j&#8217;ai pris la décision de faire une pause. Des contextes complexes m&#8217;ont menés à devenir un homme fatigué, à deux doigts du break. Mais ne nous attardons pas sur ce...]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center wp-block-paragraph">Toc Toc Toc ? Il y a quelqu&rsquo;un ? C&rsquo;est moi Borgniol&#8230;</p>



<p class="wp-block-paragraph">Après 3 mois d&rsquo;absence et de retrait vis à vis du dernier article, j&rsquo;ai pris la décision de faire une pause. Des contextes complexes m&rsquo;ont menés à devenir <a href="https://www.youtube.com/watch?v=TbHgzj5-YdA&amp;ab_channel=STUDIOCANALFrance">un homme fatigué, à deux doigts du break</a>. Mais ne nous attardons pas sur ce point si petit soit il mais sans le négliger non plus.</p>



<p class="wp-block-paragraph">Bref, en parallèle du projet précédent Green Ray, dans ma fièvre créative j&rsquo;ai conçu sur la même période une autre application. J&rsquo;ai toujours à l&rsquo;esprit cette même pudeur de présenter mes travaux, vis à vis des solutions déjà présente sur le marché ou des regards critiques de mes pairs.</p>



<p class="wp-block-paragraph">J&rsquo;ai rêvé depuis des nombreuses années d&rsquo;une solution qui permettrai de suivre dans le temps l&rsquo;évolution d&rsquo;un SI en terme de ressource dans un environnement virtualisé VMWare. Je sais encore une fois que ce rêve n&rsquo;est que la prolongation de la vision de mon prédécesseur. Ce dernier avait pensé et développé un tableau de bord dans un tableur pour définir le seuil de consommation d&rsquo;un environnement clustérisé VMWare et de définir la charge critique des ressources dans un fonctionnement normal et dégradé. Il avait également poussé le curseur jusqu&rsquo;à dissocier les grandes familles des ressources virtuelles.</p>



<p class="wp-block-paragraph">La vie d&rsquo;une entreprise vous connaissez ? <a href="https://www.youtube.com/watch?v=nLU5pgSxqNU&amp;list=RDnLU5pgSxqNU&amp;start_radio=1&amp;ab_channel=RTSArchives">Ca s&rsquo;en va et ca revient</a> (ou pas&#8230;). Vous comprenez qu&rsquo;il a quitté l&rsquo;entreprise, emportant avec lui la solution qu&rsquo;il avait développé sur son temps personnel.</p>



<p class="wp-block-paragraph">Je me suis donc inspiré de ces réflexions et ai poussé plus loin le curseur jusqu&rsquo;aux serveurs virtuelles, datastores etc. De ce contexte est né <strong>SS_043</strong> ou <strong>Dream Nebula</strong>, concrétisant l&rsquo;accomplissement d&rsquo;un projet de 3 ans. Mon application vient répondre à la problématique.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Comment garantir le capacity planning d&rsquo;un système d&rsquo;information virtualisé sous VMWare dans son fonctionnement normal et dégradé dans le temps tout en garantissant une vision la plus précise de chaque type d&rsquo;environnement ainsi qu&rsquo;une synthèse des bulles métiers ou clients à des fins de facilitation de refacturation interne ou externe des ressources consommées.</em></strong></p>



<p class="wp-block-paragraph">Encore une bien vaste problématique qui pourrait faire le sujet d&rsquo;une fin de cycle de cinquième année. 🙂</p>



<p class="wp-block-paragraph">Les premières versions pour répondre aux attentes se basait sur les RVTools et les données qui en étaient retournées. Ainsi il m&rsquo;était donc facile de marcher dans les pas de mon prédécesseurs et d&rsquo;integrer et manipuler les données dans un tableau xlsxm.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>XLSXM tien donc ?</strong></p>



<p class="wp-block-paragraph">Oui. Je rappel que je souhaite avoir une traçabilité dans le temps. Donc pas besoin de sortir de Saint-Cyr pour savoir que cela va se traiter par le biais de MACRO en VB. (Normalement avec juste les termes tableurs, MACRO et VB nous SACHONS que cela ne fonctionnera pas dans le temps en terme de maintient de la solution). Et bien spoiler, la première solution aura tenue un an et demi. A la fin cela ne ressemblait plus à grand chose et beaucoup d&rsquo;options automatisées étaient faites manuellement.</p>



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



<p class="wp-block-paragraph">Il y a bien des raisons et je vais les expliquer :</p>



<ul class="wp-block-list">
<li>La mise à jour des composants VMWares (vSphere et vCenter) ajoute ou modifie l&rsquo;ordre des colonnes. Donc il est nécessaire de réadapter l&rsquo;ensemble des formules dans le tableur</li>



<li>Les mises à jour du framework .NET et Windows rendent obsolètes certaines fonctionnalités au sein d&rsquo;excel. Retour case développement dans les MACRO</li>



<li>Certaines lignes sautent et donc cela décalent toutes les autres lignes</li>
</ul>



<p class="wp-block-paragraph">C&rsquo;est à partir des points précédents que Dream Nebula ou SS_043 est né 🙂</p>



<p class="wp-block-paragraph">Mon projet se base sur une technologie, VMWare et son usage des tags. Toutefois et à des fins d&rsquo;efficience, je me base sur VEEAMOne pour l&rsquo;attribution des tags VMWares. Je vous laisse si nécessaire vous référer à l&rsquo;article déjà présent sur le sujet. J&rsquo;insiste, l&rsquo;usage de VEEAMOne est optionnel.</p>





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



<p class="wp-block-paragraph">Attention, bis repetita en approche&#8230;</p>



<p class="wp-block-paragraph">Il est important de comprendre que ce billet ne rentrera pas dans le détail technique et ce pour des raisons évidentes de savoir faire et de protection intellectuelle. Le code source est disponible sur GitHub mais ne sera pas en libre accès.&nbsp;<strong>Ah ouai et pourquoi donc ?</strong></p>



<p class="wp-block-paragraph">Comme j’ai pu le mentionner dans un&nbsp;<a href="https://erwanguillemard.com/projet-passerelle-veeamone-itop/">article précédent</a>&nbsp;je suis satisfait de ce que j’ai réussi à livrer et à créer. J’ai passé un bon nombre d’heure de recherche et de développement à concevoir la solution ainsi que la lecture des différentes documentations. Contrairement à d’autres projets je suis satisfait de la qualité du code produit et de l’architecture de ce dernier.</p>



<p class="wp-block-paragraph">Ce qui m’amène au point, dois je commercialiser ce dernier ou le laisser à la disposition de tous ? Mon cœur peine à se décider… Je souhaite valoriser mon travail de recherche…</p>



<p class="wp-block-paragraph">Bref, si votre curiosité est toujours suscitée je pense que le reste de l’article devrait être satisfaite. Dans le cas contraire, je vous laisse exécuter la combinaison&nbsp;<strong>Ctrl+F4</strong>.</p>



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



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Windows Server 2k19 et version ultérieures ou Windows 11</li>



<li><strong>Apps :&nbsp;</strong>VCSA version 7 ou plus</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et superieur</li>



<li>PowerBI (optionnel)</li>



<li>ODBC drivers (SQLite3)</li>



<li>VEEAMOne version 12 ou plus (optionnel) </li>
</ul>
</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 1 : Théorie</a>
<ul class="wp-block-list">
<li>Définir l’expression du besoin et aborder le cahier des charges attendu. Ce qui implique l’architecture de l’application, du code. Les solutions retenues ainsi que les notions de sécurité</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/">Partie 2 : Pratique</a>
<ul class="wp-block-list">
<li>Guide de déploiement de la solution et paramétrage de cette dernière.</li>



<li><mark><em><s>Oups, un mot de passe ? On échange avant ?</s></em>&nbsp;</mark><strong>#bisous</strong></li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/">Partie 3 : Démonstration</a>
<ul class="wp-block-list">
<li>Faire une présentation de la solution dans les différents modes qui ont été développés.</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Le mot de la fin</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Moi j&rsquo;ai la lèvre humide et je sais la science, de perdre au fond d&rsquo;un terminal ISE l&rsquo;antique conscience. Je sèche tous les pleurs sur mes KPIs triomphants, et fais rire les DSIs du rire du DEVOps</p>
<cite>Erwan GUILLEMARD refondu de <em><a href="https://www.youtube.com/watch?v=3LY2y-x92CA&amp;ab_channel=L%C3%A9oFerr%C3%A9">Charles BAUDELAIRE</a></em></cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://techdocs.broadcom.com/us/en/vmware-cis/vcf/power-cli/latest/powercli.html">VMWare &#8211; PowerCLI</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET – Green Ray, VEEAM Reporting</title>
		<link>https://erwanguillemard.com/projet-green-ray-veeam-reporting/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 13 Apr 2025 18:28:21 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAM]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=2988</guid>

					<description><![CDATA[Après un an d&#8217;attente, me voilà prêt à présenter le résultat de mes travaux dans ce billet. Pourquoi un an ? Je pensais et pense toujours qu&#8217;il est difficile de présenter une solution sans expliquer préalablement sur quels produits et solutions mon application s&#8217;appuie&#8230; Une fois n&#8217;est pas coutume, je me réfère aux saintes écritures...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après un an d&rsquo;attente, me voilà prêt à présenter le résultat de mes travaux dans ce billet. Pourquoi un an ? Je pensais et pense toujours qu&rsquo;il est difficile de présenter une solution sans expliquer préalablement sur quels produits et solutions mon application s&rsquo;appuie&#8230;</p>



<p class="wp-block-paragraph">Une fois n&rsquo;est pas coutume, je me réfère aux saintes écritures</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Et moi, je te dis que tu es Pierre, et que sur cette pierre je bâtirai mon Église, et que les portes du séjour des morts ne prévaudront point contre elle.</em></p>
<cite>Matthieu, 16:13:18</cite></blockquote>



<p class="wp-block-paragraph">De ce verset, je bâti donc le mien</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Et moi, je te dis que tu es SS_034, et que sur cette application je bâtirai mes KPIs, et que les défaillances des jobs de protection ne prévaudront point contre elle.</em></p>
<cite>Le rédacteur de ce billet</cite></blockquote>



<p class="wp-block-paragraph">Ne voyez pas dans cette reformulation une quelconque provocation de ma part ou quelques pensées négatives quant à mon sarcasme et ironie qui m&rsquo;habite. J&rsquo;ai une éducation des plus classiques dans l&rsquo;ordre mariste. Passons.</p>



<p class="wp-block-paragraph">Enfin, vous comprendrez mieux je pense l&rsquo;allusion à la rédaction des articles précédents sur les différents produits VEEAM puisque mon application s&rsquo;appuie sur ces derniers. Cela à représenter un travail personnel titanesque en dehors de mon activité professionnelle&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais c&rsquo;est quoi ton application SS_034 ou Green Ray ? Et ça sert à quoi ? Quel rapport avec les produits VEEAM ?</strong></p>



<p class="wp-block-paragraph">Avant de répondre à l&rsquo;ensemble des questions, la problématique à laquelle j&rsquo;ai été confronté prends son origine courant mars 2023, dans mon environnement professionnel.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Comment s&rsquo;assurer de l&rsquo;état des mécanismes de protection des systèmes d&rsquo;informations quotidien fournit par les produits VEEAM et établir à partir de ces données des indicateurs de performance afin de s&rsquo;assurer du bon respect des engagements contractuels interne ou externe.</em>    </strong></p>



<p class="wp-block-paragraph">C&rsquo;est marrant car je dirai que cette problématique conviendrait pour un mémoire de fin de cycle de 5 année. 🙂</p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> Spoiler</strong>, j&rsquo;ai non seulement trouvé une solution à cette problématique mais ce dernier a pris une tournure inattendue au cours de ces deux dernières années.</p>



<p class="wp-block-paragraph"><strong>Hé banane, nous nous en doutons sinon tu n&rsquo;aurais pas pondu un article&#8230; Mouai, bà je suis certains qu&rsquo;il existe déjà des applications ou fonctionnalités internes ou externes à VEEAM qui permet de faire ça ? Tu as réinventé la roue&#8230; Encore un article p*te à clic&#8230;</strong></p>



<p class="wp-block-paragraph">C&rsquo;est vrai que l&rsquo;argumentaire se tiens, toutefois pouvez vous me sortir les statistiques par jobs ou par organisations sur un mois précis ? Sur 13 mois glissant ? Déduire une tendance ? Allez y je vous regarde 🙂</p>



<p class="wp-block-paragraph">Donc pour répondre aux 3 questions précédemment énoncées :</p>



<ul class="wp-block-list">
<li>En tant que MSP<sup data-fn="11686542-5715-4e20-969a-5cdb194875ff" class="fn"><a href="#11686542-5715-4e20-969a-5cdb194875ff" id="11686542-5715-4e20-969a-5cdb194875ff-link">1</a></sup> dans le milieu professionnel, l&rsquo;usage des produits VCC<sup data-fn="92323b67-b45b-408c-8fac-a724d7ed02e1" class="fn"><a href="#92323b67-b45b-408c-8fac-a724d7ed02e1" id="92323b67-b45b-408c-8fac-a724d7ed02e1-link">2</a></sup>, VSPC<sup data-fn="a38a8437-b0a8-4ade-973b-c2b6d616d957" class="fn"><a href="#a38a8437-b0a8-4ade-973b-c2b6d616d957" id="a38a8437-b0a8-4ade-973b-c2b6d616d957-link">3</a></sup> pour administrer et gérer les différents serveurs de sauvegarde VBR<sup data-fn="f0776cc3-c9f7-4336-bf91-3ae744f36c9c" class="fn"><a href="#f0776cc3-c9f7-4336-bf91-3ae744f36c9c" id="f0776cc3-c9f7-4336-bf91-3ae744f36c9c-link">4</a></sup> ou VB MO365<sup data-fn="728dfc79-57bc-4ca5-9b67-18fad8c6fadd" class="fn"><a href="#728dfc79-57bc-4ca5-9b67-18fad8c6fadd" id="728dfc79-57bc-4ca5-9b67-18fad8c6fadd-link">5</a></sup>, il est logique que je me concentre sur les solutions de l&rsquo;éditeur VEEAM. De plus VEEAM s&rsquo;inscrit depuis la <a href="https://www.veeam.com/blog/fr/leader-gartner-magic-quadrant.html">5 années consécutives</a> comme le leader de la sauvegarde sur le marché.</li>



<li>L&rsquo;application développée par mes soins vient collecter, traiter et présenter les données quotidiennes des jobs de sauvegardes tout en garantissant la flexibilité de la solution et la plus grande sécurité possible</li>



<li>Le nom du projet est SS_034_TOOLS_Backup-Reporting (toujours ma nomenclature personnelle <strong>SystemScript</strong> numéro <strong>34</strong>). Mes proches m&rsquo;ont fait remarquer à maintes reprises que le nom est difficilement commercialisable. C&rsquo;est pourquoi Green Ray est plus adapté. En raison d&rsquo;un relevé quotidien des outils VEEAM d&rsquo;un vert caractéristique, je me suis dit que cela revenait à <a href="https://www.youtube.com/watch?v=8AcbSv-FfJ0&amp;ab_channel=WilliamShellerVEVO">guetter le dernier rayon vert du soir</a> 🙂</li>
</ul>



<p class="has-text-align-center wp-block-paragraph"><strong>Tu dis difficilement commercialisable ?</strong> <em>Je reviendrai plus tard sur ce point.</em></p>





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



<p class="wp-block-paragraph">Il est important de comprendre que ce billet ne rentrera pas dans le détail technique et ce pour des raisons évidentes de savoir faire et de protection intellectuelle. Le code source est disponible sur GitHub mais ne sera pas en libre accès.&nbsp;<strong>Ah ouai et pourquoi donc ?</strong></p>



<p class="wp-block-paragraph">Comme j&rsquo;ai pu le mentionner dans un <a href="https://erwanguillemard.com/projet-passerelle-veeamone-itop/">article précédent</a> je suis satisfait de ce que j&rsquo;ai réussi à livrer et à créer. J&rsquo;ai passé un bon nombre d&rsquo;heure de recherche et de développement à concevoir la solution ainsi que la lecture des différentes documentations. Contrairement à d&rsquo;autres projets je suis satisfait de la qualité du code produit et de l&rsquo;architecture de ce dernier.</p>



<p class="wp-block-paragraph">Ce qui m&rsquo;amène au point, dois je commercialiser ce dernier ou le laisser à la disposition de tous ? Mon cœur peine à se décider&#8230; Je souhaite valoriser mon travail de recherche&#8230;</p>



<p class="wp-block-paragraph">Bref, si votre curiosité est toujours suscitée je pense que le reste de l&rsquo;article devrait être satisfaite. Dans le cas contraire, je vous laisse exécuter la combinaison <strong>Ctrl+F4</strong>. </p>



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



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Windows Server 2k19 et version ultérieures ou Windows 11</li>



<li><strong>Apps :&nbsp;</strong>VSPC version 7 ou plus</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et ultérieures</li>



<li>PowerBI (optionnel)</li>



<li>ODBC drivers (SQLite3)</li>
</ul>
</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting-partie-1-theorie/">Partie 1 : Théorie</a>
<ul class="wp-block-list">
<li>Définir l&rsquo;expression du besoin et aborder le cahier des charges attendu. Ce qui implique l&rsquo;architecture de l&rsquo;application, du code. Les solutions retenues ainsi que les notions de sécurité</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting-partie-2-pratique/">Partie 2 : Pratique</a>
<ul class="wp-block-list">
<li>Guide de déploiement de la solution et paramétrage de cette dernière.</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><em><s>Oups, un mot de passe ? On échange avant ?</s></em> </mark><strong>#bisous</strong></li>
</ul>
</li>



<li>Partie 3 : Démonstration
<ul class="wp-block-list">
<li>Faire une présentation de la solution dans les deux modes qui ont été développés.  </li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Bien, difficile de conclure un projet sur lequel je reste assez nébuleux (mais pas opaque, je tiens à la nuance). Certes il y a la théorie et je garde le guide d&rsquo;installation dans sa culotte de chasteté, mais la démonstration fait le taf non ? 🙂</p>



<p class="wp-block-paragraph">Je vois dans cette solution un bon moyen d&rsquo;assister les RSSIs<sup data-fn="b95106c9-785f-4f51-b34e-3c03333fe855" class="fn"><a href="#b95106c9-785f-4f51-b34e-3c03333fe855" id="b95106c9-785f-4f51-b34e-3c03333fe855-link">6</a></sup>, DSIs<sup data-fn="b2786152-1f87-47e8-8a28-5972898c8603" class="fn"><a href="#b2786152-1f87-47e8-8a28-5972898c8603" id="b2786152-1f87-47e8-8a28-5972898c8603-link">7</a></sup> qu&rsquo;ils soient internalisés ou non. Cela permet de montrer du concret au DG<sup data-fn="a3dd87fb-6a5a-4a42-a687-4d4cc5987cdc" class="fn"><a href="#a3dd87fb-6a5a-4a42-a687-4d4cc5987cdc" id="a3dd87fb-6a5a-4a42-a687-4d4cc5987cdc-link">8</a></sup>, DAF<sup data-fn="1721ce52-7980-4395-9564-0ae6b7a2198e" class="fn"><a href="#1721ce52-7980-4395-9564-0ae6b7a2198e" id="1721ce52-7980-4395-9564-0ae6b7a2198e-link">9</a></sup> ou PDG<sup data-fn="b66ce7ae-6091-4047-ac97-8f2722f359e9" class="fn"><a href="#b66ce7ae-6091-4047-ac97-8f2722f359e9" id="b66ce7ae-6091-4047-ac97-8f2722f359e9-link">10</a></sup> quant au travail de longue haleine réalisé par les équipes (oui, on ne va pas se mentir pour le commun des utilisateurs nous sommes désagréables et nous passons nos journées à boire des cafés en nous tirant sur le noeud&#8230; Sans oublier les cabinets de recrutement qui trouve normal de nous proposer un salaire confortable de 30-35k€ annuel). Plus sérieusement, cela permet à la direction d&rsquo;accorder un crédit et de la confiance à ses collaborateurs et d&rsquo;avoir ainsi une bonne vision de la sécurité de son entreprise.</p>



<p class="wp-block-paragraph">J&rsquo;ai malheureusement trop vu de société externalisée ou équipe interne faire preuve de laxisme ou pire maquiller les rapports de sauvegarde et ce à l&rsquo;insu de leur client ou employeur/repsonbale&#8230; Mais bon, c&rsquo;est triste d&rsquo;écrire ces mots. <em>La fin justifie les moyens</em>&#8230; C&rsquo;est qu&rsquo;il faut la décrocher cette prime annuelle&#8230;</p>



<p class="wp-block-paragraph">Je ne peux donc qu&rsquo;encourager encore une fois les DAF, DSI, DG ou PDG <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">de réclamer</mark></strong> les indicateurs des jobs de protection journalier, hebdomadaire, mensuel et annuel. Même si vous ne comprenez pas grand chose, cela reste des chiffres et il est important de savoir pourquoi certaines fois cela n&rsquo;a pas fonctionné et comment les équipes ont traité le dysfonctionnement. Et il faut faire preuve à certain moment de fermeté et dans d&rsquo;autres cas être indulgent. Il n&rsquo;est pas aisé de garder une main de fer dans un gant de velours.</p>



<p class="wp-block-paragraph">De plus, ces métriques jouent un rôle important auprès de votre assurance en cas de sinistre informatique. En plus je suis quasiment certains qu&rsquo;une police d&rsquo;assurance cybersécurité a été souscrit. Le risque zéro n&rsquo;existant pas, si vous arrivez à prouver que votre sauvegarde tiens la route et fait l&rsquo;objet d&rsquo;un point de suivi régulier cela devrait faciliter l&rsquo;indemnisation du sinistre.</p>



<p class="wp-block-paragraph">Si nous revenons plus à même du projet <em>Green Ray</em>, la flexibilité de l&rsquo;application permettant d&rsquo;interfacer n&rsquo;importe quelle solution de reporting (puisque que basé sur une BDD<sup data-fn="591af98b-59ee-4ce6-94dc-cf81b933aa08" class="fn"><a href="#591af98b-59ee-4ce6-94dc-cf81b933aa08" id="591af98b-59ee-4ce6-94dc-cf81b933aa08-link">11</a></sup>) répond au niveau et compétence de chaque RSI ou DSI. La possibilité d&rsquo;activer ou non le mode debug facilite la correction d&rsquo;erreur comme le contrôle dans un fichier de log.</p>



<p class="wp-block-paragraph">Bien que pour l&rsquo;instant l&rsquo;application ne prend en compte que les jobs de protection de type Backup, BackupCopy et Replication ainsi que les jobs de protection pour Microsoft O365, l&rsquo;application a été pensée pour s&rsquo;adapter assez rapidement que ce soit aux différents niveaux, de l&rsquo;acquisition des données à leurs restitutions en passant par leurs traitements. Si ce n&rsquo;est pas évolutif à quoi bon ? Egalement le fait qu&rsquo;elle puisse traiter plusieurs organisations permets de répondre à un besoin de fournisseur de service et de faciliter la tâche d&rsquo;un Responsable des Services Hébergés par exemple &lt;3 (A la limite du narcissisme non ? C&rsquo;est inquiétant).</p>



<p class="wp-block-paragraph">Le seul regret que j&rsquo;ai pour l&rsquo;instant en ce mois de Mars 2025 reste que le code est écrit en Powershell et non en C#, C/C++ ou VB .NET (PS c&rsquo;est en .NET non ? 🙂 ). Je pourrais me lancer dans un programme en C/C++ mais pour le coup je suis rouillé. Il serait pas mal d&rsquo;incorporer le rendu directement dans VEEAM (VEEAM One ou dans la VSPC) mais le produit ne doit pas être ouvert pour réaliser ce type d&rsquo;opération (et heureusement).</p>



<p class="wp-block-paragraph">La version béta 2.0 (en dehors de la factorisation du mode service pour éviter la redondance de code) est stable. Je sais qu&rsquo;il reste des optimisations possibles et de potentiel modules à développer, mais ça l&rsquo;avenir nous le dira si oui ou non je vais investir de nouveau du temps 🙂 En toutes circonstances je suis bien loin de la version 1.0 à manipuler des CSVs dans un fichier XLSX avec des formules à rallonges !</p>



<p class="wp-block-paragraph">Le mot de la fin</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Mes PKIs ils sont super ! Quand on les refreshent ils sortent. On peut acquisitionner à Quimper ou à Chalon-Sur-Saone. Ils ont l&rsquo;option&#8230; sécurisantes. Qui résonnent dans mon bureau-eau-eau&#8230; </em></p>
<cite>Erwan GUILLEMARD <em>refondu de <a href="https://www.youtube.com/watch?v=UvQ4x9_e1oE&amp;ab_channel=ArneVinzon-Topic">Arne VINZON</a></em></cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://www.veeam.com/blog/fr/leader-gartner-magic-quadrant.html">VEEAM : Leader Gartner</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="11686542-5715-4e20-969a-5cdb194875ff"><strong>MSP</strong> : Managed Services Providers <a href="#11686542-5715-4e20-969a-5cdb194875ff-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="92323b67-b45b-408c-8fac-a724d7ed02e1"><strong>VCC</strong> : VEEAM Cloud Connect <a href="#92323b67-b45b-408c-8fac-a724d7ed02e1-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="a38a8437-b0a8-4ade-973b-c2b6d616d957"><strong>VSPC</strong> : VEEAM Service Provider Console <a href="#a38a8437-b0a8-4ade-973b-c2b6d616d957-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="f0776cc3-c9f7-4336-bf91-3ae744f36c9c"><strong>VBR</strong> : VEEAM Backup et Replication <a href="#f0776cc3-c9f7-4336-bf91-3ae744f36c9c-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="728dfc79-57bc-4ca5-9b67-18fad8c6fadd"><strong>VB MO365</strong> :  VEEAM Backup for Microsoft 365 <a href="#728dfc79-57bc-4ca5-9b67-18fad8c6fadd-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="b95106c9-785f-4f51-b34e-3c03333fe855"><strong>RSSI :</strong> Responsable Sécurité des Systèmes d&rsquo;Informations <a href="#b95106c9-785f-4f51-b34e-3c03333fe855-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="b2786152-1f87-47e8-8a28-5972898c8603"><strong>DSI :</strong> Directeur des Systèmes d&rsquo;Informations <a href="#b2786152-1f87-47e8-8a28-5972898c8603-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="a3dd87fb-6a5a-4a42-a687-4d4cc5987cdc"><strong>DG :</strong> Directeur Général <a href="#a3dd87fb-6a5a-4a42-a687-4d4cc5987cdc-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="1721ce52-7980-4395-9564-0ae6b7a2198e"><strong>DAF :</strong> Directeur Administratif et Financier <a href="#1721ce52-7980-4395-9564-0ae6b7a2198e-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="b66ce7ae-6091-4047-ac97-8f2722f359e9"><strong>PDG :</strong> Président Directeur Général <a href="#b66ce7ae-6091-4047-ac97-8f2722f359e9-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="591af98b-59ee-4ce6-94dc-cf81b933aa08"><strong>BDD :</strong> Base De Données <a href="#591af98b-59ee-4ce6-94dc-cf81b933aa08-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
