<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>auto-hébergement - Tag - Jordan Chapuy - Blog d'un développeur passionné ❤️</title><link>https://jordanchapuy.com/tags/auto-h%C3%A9bergement/</link><description>auto-hébergement - Tag - Jordan Chapuy - Blog d'un développeur passionné ❤️</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Thu, 25 Jun 2026 17:16:41 +0200</lastBuildDate><atom:link href="https://jordanchapuy.com/tags/auto-h%C3%A9bergement/" rel="self" type="application/rss+xml"/><item><title>Maintenir et réinstaller son Homelab Proxmox avec Ansible sans tout refaire à la main</title><link>https://jordanchapuy.com/posts/2026/06/maintenir-et-reinstaller-son-homelab-proxmox-avec-ansible-sans-tout-refaire-a-la-main/</link><pubDate>Thu, 25 Jun 2026 17:16:41 +0200</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2026/06/maintenir-et-reinstaller-son-homelab-proxmox-avec-ansible-sans-tout-refaire-a-la-main/</guid><description><![CDATA[<p>Dans mon <a href="https://jordanchapuy.com/posts/2026/03/mon-petit-homelab-proxmox-domotique-home-assistant/" rel="">précédent article sur mon homelab Proxmox</a>, je racontais comment j&rsquo;avais installé un mini PC pour héberger quelques services à la maison. Rien de très extravagant : Proxmox comme hyperviseur, des VM et des LXC, Home Assistant, n8n, un peu de réseau, un peu de Linux, et pas mal d&rsquo;expérimentations.</p>
<p>Depuis, j&rsquo;ai avancé sur un point important : les sauvegardes. Mes VM et mes containers sont sauvegardés avec un Proxmox Backup Server (PBS) distant. C&rsquo;est déjà très rassurant. Si un LXC se casse la figure, je peux le restaurer. Si une VM part en vrille après une mise à jour douteuse, pareil. Si c&rsquo;est moi qui provoque une catastrophe (le plus probable, c&rsquo;est souvent un problème interface-clavier :)), je peux rollback aussi.</p>
<p>Mais il me restait une question un peu moins confortable : et Proxmox lui-même ? <strong>Comment je restaure l&rsquo;hôte</strong> ?</p>
<p>Parce que si le SSD de mon mini PC me lâche complètement, je peux réinstaller Proxmox, restaurer mes containers, et repartir. En théorie. Sauf qu&rsquo;entre les deux, il y a tout ce que j&rsquo;ai configuré sur l&rsquo;hôte : le firewall, fail2ban, le durcissement SSH, les optimisations pour limiter les écritures sur le SSD, les jobs de backup, les services désactivés parce qu&rsquo;ils ne me servent à rien&hellip;</p>
<p>Bref, tout ce que l&rsquo;on fait une fois <a href="https://jordanchapuy.com/posts/2026/03/securite-longevite-et-sobriete-ce-que-je-configure-juste-apres-l-installation-de-proxmox/" rel="">juste après l&rsquo;installation de Proxmox</a> et que l&rsquo;on oublie ensuite. Jusqu&rsquo;au jour où il faut le refaire. Et là, on se retrouve à lâcher un &ldquo;oh merde&rdquo; et plus si affinités avec les noms d&rsquo;oiseaux.</p>
<h2 id="le-vrai-problème--reconstruire-la-configuration">Le vrai problème : reconstruire la configuration</h2>
<p>Dans mon cas, on parle d&rsquo;un homelab personnel. Je n&rsquo;ai ni baie de stockage, serveurs en cluster, ou redondance des disque. J&rsquo;ai un simple mini PC, un SSD, des backups, et néanmoins l&rsquo;envie de dormir tranquille sans transformer mon salon en datacenter.</p>
<p>Le scénario qui m&rsquo;intéresse est donc assez simple : si demain je dois repartir d&rsquo;une installation Proxmox propre, comment je reconstruis ma configuration sans passer une soirée à cliquer partout dans l&rsquo;interface web et à relire mes propres notes ? <em>(si elles existent, et si elles sont à jour)</em></p>
<p>J&rsquo;ai d&rsquo;abord pensé à des solutions assez naturelles. Versionner quelques fichiers de configuration dans Git. Sauvegarder tout <code>/etc/pve</code>. Écrire des scripts shell pour rejouer certaines étapes. Toutes ces pistes peuvent marcher, mais elles me semblaient vite fragiles ou incomplètes.</p>
<p>Versionner <code>/etc/pve</code>, par exemple, donne une photo intéressante de l&rsquo;état de l&rsquo;hôte Proxmox, mais ce n&rsquo;est pas forcément une recette de reconstruction. Un fichier de configuration n&rsquo;explique pas toujours dans quel ordre appliquer les choses, ni quels paquets installer, ni quels services relancer. Et un script shell peut vite devenir une suite de commandes qui marche le jour où on l&rsquo;écrit, puis que l&rsquo;on n&rsquo;ose plus toucher six mois plus tard.</p>
<p>En fouillant un peu, je suis retombé sur <strong>Ansible</strong>. Je connaissais de loin, sans l&rsquo;avoir vraiment utilisé. Ça ressemblait exactement à ce qu&rsquo;il me fallait : décrire l&rsquo;état souhaité de mon serveur, versionner cette description, puis pouvoir la rejouer quand j&rsquo;en ai besoin. Bon. On va commencer à joeur avec.</p>
<h2 id="ce-quansible-mapporte-dans-un-homelab">Ce qu&rsquo;Ansible m&rsquo;apporte dans un homelab</h2>
<p>Ansible sert à <strong>automatiser la configuration et l&rsquo;administration de machines</strong>. On écrit des fichiers YAML qui décrivent des tâches : installer un paquet, copier un fichier, créer un utilisateur, modifier une configuration, démarrer un service, lancer une commande, etc.</p>
<p>La force, ce n&rsquo;est pas seulement d&rsquo;automatiser. Des scripts peuvent déjà le faire. Ce qui m&rsquo;intéresse surtout, c&rsquo;est l&rsquo;idée d&rsquo;<strong>idempotence</strong>.</p>
<p>Dit simplement, <strong>une tâche idempotente peut être exécutée plusieurs fois sans empiler les effets de bord</strong>. Si je dis à Ansible &ldquo;le paquet fail2ban doit être installé&rdquo;, il ne va pas tenter de l&rsquo;installer encore et encore comme si c&rsquo;était la première fois. Il vérifie l&rsquo;état actuel, puis agit seulement si nécessaire. Si je dis &ldquo;ce fichier doit contenir cette configuration&rdquo;, il peut détecter s&rsquo;il y a un changement à appliquer.</p>
<p>C&rsquo;est bête, mais ça change beaucoup de choses. Je peux relancer mon playbook après une petite modification sans avoir peur de casser tout le reste. Je peux faire évoluer ma configuration par morceaux. Je peux relire l&rsquo;historique Git pour comprendre pourquoi j&rsquo;ai changé une règle de firewall ou modifié une option SSH. Et surtout, je peux relancer l&rsquo;ensemble si je dois reconstruire mon serveur de zéro. Et ça, c&rsquo;est génial.</p>
<p>Pour un homelab, c&rsquo;est très confortable. On bidouille, on apprend, on teste. Mais à force de petits changements, le serveur finit par contenir beaucoup de décisions implicites. Ansible m&rsquo;aide à les rendre explicites et les versionner.</p>
<h2 id="ce-que-jai-commencé-à-versionner">Ce que j&rsquo;ai commencé à versionner</h2>
<p>Mon objectif n&rsquo;était pas de faire &ldquo;du Ansible pour faire du Ansible&rdquo;. Je voulais d&rsquo;abord couvrir les réglages que je n&rsquo;avais pas envie de refaire à la main en cas de réinstallation.</p>
<p>J&rsquo;ai donc commencé par la base Proxmox : les règles firewall, les IP sets, les security groups, la configuration des backups, le stockage PBS distant, les paquets installés sur l&rsquo;hôte, les services à activer ou désactiver. J&rsquo;ai aussi ajouté des réglages autour de la sécurité : fail2ban, SSH, nouvel utilisateur d&rsquo;administration, certaines permissions.</p>
<p>Ensuite, j&rsquo;ai ajouté les optimisations que j&rsquo;avais déjà identifiées pour mon mini PC. Par exemple la configuration de <code>journald</code> et <code>rrdcached</code> pour réduire les écritures inutiles, la désactivation de services dont je n&rsquo;ai pas besoin dans mon contexte comme la haute disponibilité, le bluetooth, le wifi, etc.</p>
<p>J&rsquo;ai de plus en plus aimé Ansible, alors j&rsquo;ai continué en m&rsquo;intéressant à l&rsquo;intérieur des containers LXC / VM. Oui, ils sont normalement &ldquo;protégés des catastrophes&rdquo; grâce aux backups sur PBS. Mais prenons un cas d&rsquo;usage concret qui arrive souvent : la modification d&rsquo;un fichier de conf. Qui a envie de faire un rollback de tout le container juste pour revenir en arrière sur ce fichier ? Moi, clairement pas. C&rsquo;est pour cela que j&rsquo;avais d&rsquo;ailleurs commencé à utiliser <a href="https://jordanchapuy.com/posts/2026/05/comment-versionner-home-assistant-avec-git-pour-annuler-une-erreur-rapidement/" rel="">git pour annuler rapidement une erreur Home Assistant</a>.</p>
<p>Le petit bonus que j&rsquo;ai trouvé en cours de route, c&rsquo;est que je ne suis même pas obligé d&rsquo;ouvrir le SSH sur chaque container si je ne veux pas : je peux indiquer à Ansible de passer par l&rsquo;hôte Proxmox et utiliser <code>pct</code> pour agir dans le container. Mon petit côté parano sur la sécurité aime bien ça.</p>
<h2 id="reconstruire-maintenir-lancer-des-tâches">Reconstruire, maintenir, lancer des tâches</h2>
<p>Au départ, je pensais surtout &ldquo;plan post-apocalyptique&rdquo; : le SSD meurt, je réinstalle Proxmox, je lance Ansible, puis je restaure mes VM et LXC depuis PBS. C&rsquo;est déjà une très bonne raison de faire l&rsquo;effort. Mais à l&rsquo;usage, j&rsquo;ai découvert des intérêts qui vont au-delà. Ansible devient aussi <strong>mon outil du quotidien</strong>.</p>
<p>Si je veux modifier la configuration de Caddy, je la modifie dans Ansible, je l&rsquo;applique sur mon serveur et je versionne. Quand je veux ajouter une règle sur le firewall, même chose. Dans la plupart des cas, je n&rsquo;agis plus directement sur le serveur ou sur l&rsquo;interface.</p>
<p>Et puis, il y a le côté <em><strong>tâches</strong></em> que j&rsquo;aime bien avec Ansible. Quand je modifie la configuration d&rsquo;un service, il faut souvent le redémarrer pour que la modification soit prise en compte. Avec Ansible, c&rsquo;est facile et intelligent : la configuration sera copiée puis le service sera redémarré uniquement s&rsquo;il y a une différence entre la nouvelle et ancienne configuration (vous vous souvenez, l&rsquo;idempotence).</p>
<p>Un autre cas d&rsquo;usage que j&rsquo;aime bien, je démarre et arrête des services via Ansible. C&rsquo;est agréable. Une seule commande me suffit pour lancer un playbook Ansible plutôt que de passer par l&rsquo;interface et le terminal pour démarrer un LXC, attendre qu&rsquo;il soit prêt, lancer un container docker puis lancer un second container qui dépend du premier.</p>
<h2 id="à-quoi-ça-ressemble-concrètement-">À quoi ça ressemble concrètement ?</h2>
<p>Un <strong>playbook</strong> Ansible est une suite de tâches. Pour donner une idée, voici un exemple simple :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Configurer la base de mon hote Proxmox</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="l">proxmox</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">become</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">tasks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Installer fail2ban</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.apt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">fail2ban</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l">present</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">update_cache</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Copier la configuration SSH</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.copy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">src</span><span class="p">:</span><span class="w"> </span><span class="l">files/sshd_config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">dest</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/ssh/sshd_config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">owner</span><span class="p">:</span><span class="w"> </span><span class="l">root</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="l">root</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;0644&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">notify</span><span class="p">:</span><span class="w"> </span><span class="l">Redemarrer ssh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">S&#39;assurer que fail2ban est actif</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.service</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">fail2ban</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l">started</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">handlers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Redemarrer ssh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.service</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">ssh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l">restarted</span><span class="w">
</span></span></span></code></pre></div><p>On lit ça presque comme une checklist : installer fail2ban, copier la configuration SSH, vérifier que le service tourne. Le <code>handler</code> permet de redémarrer SSH uniquement si le fichier de configuration a changé. C&rsquo;est le genre de détail qui évite de faire des actions inutiles.</p>
<p>J&rsquo;ai petit à petit créé des playbook pour chaque sujet. J&rsquo;ai essayé de garder une logique <strong>modulaire</strong> et <strong>unitaire</strong> : règles firewall (par container), SSH, backups, optimisations, paquets, containers, services. Ça rend l&rsquo;ensemble plus facile à relire et à faire évoluer. Si demain je veux modifier uniquement Caddy ou ajouter une règle firewall, je sais où aller. Si j&rsquo;ai besoin d&rsquo;utiliser un playbook au sein d&rsquo;un autre, je peux.</p>
<p>Il existe aussi des <strong>collections Ansible</strong>, c&rsquo;est-à-dire des ensembles de modules qui apportent de nouvelles fonctionnalités pour nos playbook. J&rsquo;ai notamment regardé la collection <a href="https://galaxy.ansible.com/ui/repo/published/community/proxmox/" target="_blank" rel="noopener noreffer">community.proxmox</a>, qui ajoute des possibilités orientées Proxmox. C&rsquo;est pratique pour éviter de tout piloter à coup de commandes shell, en particulier sur des sujets comme le firewall où ça m&rsquo;a bien aidé.</p>
<p>Et on peut aller plus loin. Ansible propose par exemple un système de variable glboale ou par host, des variables chiffrés grâce à Ansible Vault, l&rsquo;affichage d&rsquo;informations, l&rsquo;exécution d&rsquo;étapes conditionnés à un résultat précédant, un input de l&rsquo;utilisateur, etc.</p>
<h2 id="pourquoi-pas-terraform-">Pourquoi pas Terraform ?</h2>
<p>Pendant mes recherches, je suis aussi retombé sur <strong>Terraform</strong>. Les deux outils sont souvent cités ensemble et ils peuvent être complémentaires. Terraform est très fort pour <strong>provisionner de l&rsquo;infrastructure</strong> : déclarer des ressources, créer des machines, gérer leur cycle de vie. Ansible est plutôt orienté configuration : installer, modifier, maintenir ce qui tourne sur les machines.</p>
<p>Sur un setup plus ambitieux, un combo Terraform + Ansible pourrait avoir du sens. Terraform pour créer les VM/LXC, Ansible pour les configurer ensuite.</p>
<p>Dans mon cas, ça me semblait trop. J&rsquo;ai un mini PC, quelques services, et surtout un besoin d&rsquo;apprendre sans empiler les couches trop vite. Terraform aurait ajouté un outil, un état à gérer, une logique supplémentaire. Pour l&rsquo;instant, Ansible couvre très bien mon besoin.</p>
<p>C&rsquo;est aussi une décision importante dans un homelab : accepter de ne pas reproduire une infrastructure d&rsquo;entreprise miniature ou d&rsquo;ajouter de la complexité inutile. Sauf si l&rsquo;objectif est d&rsquo;apprendre Terraform, évidemment, le homelab reste un bon terrain d&rsquo;expérimentation.</p>
<h2 id="bref">Bref</h2>
<p>J&rsquo;ai commencé à utiliser Ansible pour une raison très concrète : je ne voulais pas que la configuration de mon hôte Proxmox repose uniquement sur ma mémoire, quelques notes, et l&rsquo;espoir que rien ne casse.</p>
<p>Mes VM et mes LXC sont sauvegardés avec PBS, mais ça ne suffit pas à reconstruire proprement tout le contexte autour. Le firewall, fail2ban, les optimisations, les jobs de backup, &hellip; tout ça fait partie de mon serveur. Ansible me permet de transformer cette configuration en quelque chose de <strong>versionné</strong>, <strong>rejouable</strong> et <strong>progressivement améliorable</strong>.</p>
<p>Pour mon usage, c&rsquo;est un bon compromis : assez simple à prendre en main, assez puissant pour éviter les scripts fragiles, et suffisamment lisible pour que mon futur moi le comprenne toujours.</p>
<p>Et finalement, c&rsquo;est peut-être ça le vrai bénéfice : préparer la panne, oui, mais surtout <strong>rendre la maintenance quotidienne plus facile</strong>. La réinstallation complète arrivera peut-être un jour. En attendant, chaque petite évolution devient une occasion de laisser une trace claire.</p>
]]></description></item><item><title>Comment versionner Home Assistant avec Git pour annuler une erreur rapidement</title><link>https://jordanchapuy.com/posts/2026/05/comment-versionner-home-assistant-avec-git-pour-annuler-une-erreur-rapidement/</link><pubDate>Tue, 05 May 2026 18:34:18 +0200</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2026/05/comment-versionner-home-assistant-avec-git-pour-annuler-une-erreur-rapidement/</guid><description><![CDATA[<p>J&rsquo;ai Home Assistant dans une VM sur Proxmox. Donc, sur le papier, je suis déjà tranquille : j&rsquo;ai configuré Proxmox pour avoir des backups réguliers de toutes mes machines virtuelles et containers LXC.</p>
<p>Mais dans la pratique, quand on bidouille Home Assistant, on touche souvent plein de fichiers YAML. Une automation par ici, un script par-là, un template capteur, un package custom&hellip; et parfois on casse quelque chose.</p>
<p>Le backup complet est utile en cas de gros incident, mais pour &ldquo;annuler juste cette modif de fichier&rdquo;, c&rsquo;est un peu l&rsquo;équivalent de sortir un char d&rsquo;assaut. C&rsquo;est exactement là où Git devient très pratique : versionner finement la configuration, commit par commit, et revenir en arrière sans avoir à rollback la totalité de la VM via un backup.</p>
<h2 id="backup-vm-et-versionning-fichier--ce-nest-pas-le-même-besoin">Backup VM et versionning fichier : ce n&rsquo;est pas le même besoin</h2>
<p>Le backup Proxmox protège bien l&rsquo;infrastructure : panne, corruption, catastrophe, migration. D&rsquo;ailleurs, je parle du backup de Proxmox, mais ce serait la même chose pour quelqu&rsquo;un qui ferait ses backups via Home Assistant directement.</p>
<p>Git, lui, protège le quotidien :</p>
<ul>
<li>&ldquo;J&rsquo;ai modifié <code>sensors.yaml</code>, maintenant plus rien ne se déclenche.&rdquo;</li>
<li>&ldquo;Mon nouveau template Jinja passe, mais le résultat est faux.&rdquo;</li>
<li>&ldquo;J&rsquo;ai testé une config vite fait, je veux revenir à l&rsquo;état d&rsquo;hier.&rdquo;</li>
</ul>
<p>Dans ces cas-là, restaurer une sauvegarde complète est disproportionné. Avec Git, on peut juste comparer, annuler ou restaurer les fichiers concernés.</p>
<p>Les deux se complètent très bien : backup global + historique précis des changements.</p>
<h2 id="quoi-versionner-dans-home-assistant-et-quoi-ignorer">Quoi versionner dans Home Assistant (et quoi ignorer)</h2>
<p>De mon côté, je versionne surtout les fichiers de configuration &ldquo;métier&rdquo; :</p>
<ul>
<li><code>configuration.yaml</code></li>
<li><code>automations.yaml</code></li>
<li><code>scripts.yaml</code></li>
<li><code>scenes.yaml</code></li>
<li>le dossier <code>packages</code> customs</li>
<li>le dossier <code>templates</code> customs</li>
</ul>
<p>Et j&rsquo;exclus le reste quand ce n&rsquo;est pas utile à versionner :</p>
<ul>
<li>secrets</li>
<li>bases de données</li>
<li>logs</li>
<li>fichiers temporaires/cache</li>
</ul>
<p>C&rsquo;est le moment où il faut être un peu plus rigoureux pour éviter des problèmes futurs. L&rsquo;idée est simple : garder un repo propre, lisible, utile pour revenir en arrière rapidement.</p>
<p>Deux règles simples :</p>
<ol>
<li><strong>Ne jamais versionner les secrets</strong> (<code>secrets.yaml</code>, tokens, credentials, etc.).</li>
<li>Exclure les fichiers volumineux ou très verbeux (DB, logs, temporaires).</li>
</ol>
<p>De toute manière, avant chaque commit, je vérifie les fichiers qui vont être versionnés. S&rsquo;il y en a un nouveau qui passe au travers de mon gitignore, je modifie mes règles pour l&rsquo;exclure.</p>
<h2 id="mise-en-place--workflow-simple-et-efficace">Mise en place : workflow simple et efficace</h2>
<p>Je reste volontairement sur un setup simple, sans sur-ingénierie.</p>
<h3 id="ajouter-laddon-studio-code-server">Ajouter l&rsquo;addon Studio Code Server</h3>
<p>Sur Home Assistant, j&rsquo;installe l&rsquo;addon <strong>Studio Code Server</strong>. Il apporte un environnement pratique pour éditer les fichiers de config (c&rsquo;est mieux que File Editor), et en plus, il permet d&rsquo;avoir accès à Git et au terminal.</p>
<h3 id="générer-une-clé-ssh-depuis-home-assistant">Générer une clé SSH depuis Home Assistant</h3>
<p>Depuis le terminal de l&rsquo;addon, je génère une clé SSH dédiée à ce besoin. L&rsquo;objectif : permettre à Home Assistant de pull et push vers GitHub sans mot de passe.</p>
<h3 id="créer-le-repository-github">Créer le repository GitHub</h3>
<p>Je crée un repo, a priori privé. Ensuite, dans les settings du repo, j&rsquo;ajoute la clé publique de Home Assistant dans <strong>Deploy keys</strong>.</p>
<p>Pourquoi une deploy key plutôt qu&rsquo;une clé perso classique ? Parce que ça limite l&rsquo;accès à <strong>ce seul repo</strong>. C&rsquo;est plus propre et plus sécurisé que d&rsquo;ouvrir l&rsquo;accès à tout mon compte. Technique du moindre privilège !</p>
<h3 id="initialiser-git-dans-le-dossier-de-configuration">Initialiser Git dans le dossier de configuration</h3>
<p>Dans le dossier de config Home Assistant (souvent <code>/config</code>), j&rsquo;initialise le repo et je lie le remote :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git init
</span></span><span class="line"><span class="cl">git remote add origin git@github.com:UTILISATEUR/NOM_DU_REPO.git
</span></span><span class="line"><span class="cl">git fetch origin
</span></span><span class="line"><span class="cl">git checkout -b main origin/main <span class="o">||</span> git checkout -b main
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;Add: initial configuration&#34;</span>
</span></span><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></div><p>Le <code>checkout</code> avec fallback permet de gérer les deux cas :</p>
<ul>
<li>repo déjà initialisé avec un commit (README, .gitignore, etc.)</li>
<li>repo vide</li>
</ul>
<h2 id="utilisation-au-quotidien">Utilisation au quotidien</h2>
<p>Maintenant que tout ça est en place, mon flux est très simple :</p>
<ol>
<li>Je modifie une automation ou un script.</li>
<li>Je teste dans Home Assistant.</li>
<li>Si c&rsquo;est bon : <code>git add</code>, <code>git commit</code>, <code>git push</code>.</li>
<li>Si ça casse : je regarde le diff, je corrige, je discard.</li>
</ol>
<p>Je passe d&rsquo;un mode &ldquo;je croise les doigts&rdquo; à un mode &ldquo;je peux expérimenter sans peur&rdquo;. Et c&rsquo;est souvent là que ça change tout : on ose mieux itérer, parce qu&rsquo;on sait revenir proprement.</p>
<hr>
<h1 id="bref">Bref</h1>
<p>Si tu as déjà des backups Proxmox, tu as une très bonne base. Mais pour le quotidien Home Assistant, Git apporte une finesse que le backup VM ne donne pas. Pas besoin d&rsquo;une grosse usine : un repo, une clé SSH, un <code>.gitignore</code> et des commits réguliers.</p>
<p>La vraie question devient ensuite &ldquo;comment faire évoluer sereinement sa maison dans le temps ?&rdquo; plutôt que de perdre du temps à retrouver des configurations qui marchaient avant :)</p>
]]></description></item><item><title>Sécurité, longévité et sobriété : ce que je configure juste après l'installation de Proxmox</title><link>https://jordanchapuy.com/posts/2026/03/securite-longevite-et-sobriete-ce-que-je-configure-juste-apres-l-installation-de-proxmox/</link><pubDate>Sat, 28 Mar 2026 20:04:24 +0100</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2026/03/securite-longevite-et-sobriete-ce-que-je-configure-juste-apres-l-installation-de-proxmox/</guid><description><![CDATA[<p><a href="https://jordanchapuy.com/posts/2026/03/mon-petit-homelab-proxmox-domotique-home-assistant/" target="_blank" rel="noopener noreffer">Installer Proxmox ne prend que 10 minutes</a>, mais le préparer pour qu&rsquo;il dure des années sans craindre des intrusions ou la perte des données demande un peu plus d&rsquo;attention. Avant de me jeter sur Home Assistant pour jouer avec la domotique, j&rsquo;ai voulu approfondir plusieurs thématiques pour être serein.</p>
<p>La <strong>sécurité</strong> pour dormir tranquillement sur mes deux oreilles (ou une seule si on dort de côté :)), la <strong>longévité</strong> pour que le matériel souffle un maximum de bougies et que le serveur reste stable, et la <strong>sobriété</strong> pour diminuer autant que possible l&rsquo;énergie consommée.</p>
<p>C&rsquo;est autour de ces trois piliers que j&rsquo;ai construits ma feuille de route « Post Install Proxmox ». Je la partage, et je détaillerais certaines parties dans des futurs articles dédiés.</p>
<h1 id="la-sécurité">La sécurité</h1>
<blockquote>
<p><em>Contre l’intrusion, des remparts tu dresseras.</em> — Yoda, maître DevSecOps dans une galaxie lointaine.</p>
</blockquote>
<p>Je n&rsquo;ai pas envie de m&rsquo;inquiéter alors que mon serveur va tourner potentiellement 24 heures sur 24 et sans ma présence. Je veux <strong>minimiser le risque</strong> et la <strong>surface d&rsquo;attaque</strong>. Pour cela, je vais appliquer plusieurs principes de sécurité :</p>
<ul>
<li>Le <strong>moindre privilège</strong>. Par défaut, aucun droit. Je donne le minimum nécessaire.</li>
<li>Le <strong>zero trust</strong>. Par défaut, pas de confiance. Même si ça vient de l&rsquo;intérieur (réseau local), je veux authentifier.</li>
<li>La <strong>multiplication des couches de défense</strong>. Rien n&rsquo;est infaillible. Je veux plusieurs niveaux de sécurité.</li>
</ul>
<h2 id="mettre-à-jour-proxmox">Mettre à jour Proxmox</h2>
<p>Tout d&rsquo;abord, <strong>on maintient à jour nos outils</strong> et Proxmox ne déroge pas à la règle. Je vais le faire tout de suite après l&rsquo;installation. Pour la première fois, c’est un peu particulier et je m&rsquo;appuie sur un script de la communauté.</p>
<p>Pourquoi un script ? Pour effectuer au passage quelques configurations nécessaires. Je veux par exemple désactiver le support entreprise et des services comme la haute disponibilité et ceph qui ne me sont pas utile pour mon serveur single-code.</p>
<p>Ce script vient d’un <a href="https://community-scripts.org/" target="_blank" rel="noopener noreffer">site communautaire</a> et on peut en trouver un tas d’autres pour ajouter facilement des containers ou addon, faites-y un tour ! Pour notre cas, on a simplement à taper une commande et se laisser guider par les questions :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">bash -c <span class="s2">&#34;</span><span class="k">$(</span>curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh<span class="k">)</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p>S’il y a une erreur sur les repositories, on peut regarder la <a href="https://pve.proxmox.com/wiki/Package_Repositories" target="_blank" rel="noopener noreffer">documentation</a> pour modifier un fichier de configuration à la main.</p>
<p>Note : Attention avec les scripts, on ne fait pas confiance aveuglément. On regarde d’où ça vient, on regarde le code.</p>
<h2 id="microcode-update">Microcode Update</h2>
<p>Un processeur aussi se met à jour, même si c&rsquo;est souvent transparent avec des systèmes plus friendly. Les mises à jour nous intéressent car elles corrigent des <strong>bugs</strong>, améliorent la <strong>performance</strong> et la <strong>sécurité</strong>. Avec mon N100, il faut regarder du côté de Intel. On peut aussi passer par un script de la communauté qui gère Intel et AMD.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">bash -c <span class="s2">&#34;</span><span class="k">$(</span>curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/microcode.sh<span class="k">)</span><span class="s2">&#34;</span>
</span></span></code></pre></div><h2 id="firewall">Firewall</h2>
<p>Le pare-feu est essentiel pour <strong>fermer un maximum de porte d&rsquo;entrée</strong>s. Je vais l&rsquo;activer pour commencer, puis mettre une politique <code>Input DROP</code> par défaut - rien n&rsquo;est autorisé à entrer, le DROP étant au passage silencieux (le demandeur aura un timeout, mais il ne sait pas si c&rsquo;est parce qu&rsquo;il n&rsquo;y a personne ou s’il est rejeté).</p>
<p>J&rsquo;ai cependant besoin du port 22 pour SSH et du port 8006 pour accéder à l&rsquo;interface Web de Proxmox. Ces deux ports sont sensibles, ils correspondent à de l&rsquo;admin. Je vais les ouvrir mais avec des restrictions sur les IPs : je veux <strong>uniquement mon réseau local</strong>, j&rsquo;ai même envie de pousser plus loin, je vais restreindre uniquement à l&rsquo;IP de <strong>mon ordinateur personnel</strong>.</p>
<p>Ce sera la même logique pour les autres services, <strong>c&rsquo;est fermé par défaut</strong> et s’ils ont besoin d&rsquo;ouvrir des ports, ce sera sur mon réseau local voire limité à certains appareils. Il y a d&rsquo;ailleurs très peu de chance que j&rsquo;ouvre à l&rsquo;extérieur (à internet) un port, ce sera vraiment si le monde extérieur a besoin d&rsquo;y accéder.</p>
<p>Si c&rsquo;est seulement moi ou mon foyer qui veut accéder depuis l&rsquo;extérieur, je privilégierai des solutions plus sécurisées qui ne nécessite pas d&rsquo;ouvrir des ports. Par exemple, <code>tailscale</code> que l’on verra ensemble juste après.</p>
<p>Attention, il faut ajouter les règles pour autoriser nos IPs sur les ports concernés avant d’activer le firewall global, sinon on peut risquer de se retrouver bloquer à l’extérieur. (Proxmox empêche normalement cela en local, mais on ne sait jamais, et on n’est pas à l’abri que cela change sur une future version).</p>
<p>Au passage, je parlais du pare-feu de Proxmox mais je vérifie aussi comment est configuré ma box FAI : j’active le firewall si ce n’est pas le cas, et je n’ouvre a priori aucun port.</p>
<h2 id="second-admin">Second admin</h2>
<p>À cette étape, il y a déjà un utilisateur qui existe sur Proxmox et sur l’environnement Linux : root. Je pourrais tout faire avec, sans problème, mais je vais tout de même <strong>créer un second utilisateur</strong> que j’utiliserais pour me connecter plutôt que de passer par root. Attention, il faut le faire sur Proxmox ET sur le système, puis donner les privilèges.</p>
<p>D’un point de vue sécurité, on s’ajoute une barrière. L’utilisateur root a les pleins pouvoirs, on peut faire une mauvaise manipulation sans le vouloir ou exécuter un script malveillant. En passant par un autre utilisateur, <strong>on sera obligé d&rsquo;élever explicitement les privilèges</strong> (sudo) lorsqu&rsquo;il y en a besoin. On sera donc plus conscient de nos actions. Chaque élévation de privilège est en plus inscrit dans les logs, on pourra tracer.</p>
<p>On va aussi pouvoir mieux se protéger des tentatives d’intrusions extérieurs. Cet utilisateur est connu de tous, on pourra lui i<strong>nterdire l’accès SSH</strong>. Notre second admin, lui est inconnu. Il faudra trouver le couple username + pwd. Tant qu’à faire, je prendrais au passage un username qu’on ne peut pas déduire en me connaissant.</p>
<h2 id="lauthentification-multifacteur">L&rsquo;authentification multifacteur</h2>
<p>Un mot de passe, c&rsquo;est bien. J&rsquo;ai d&rsquo;ailleurs opté pour des mots de passe avec une très <strong>grande entropie</strong>. (Les password de longueur 8 avec caractères spéciaux, chiffres, maj/min, c’est nul)</p>
<p>Une authentification à multiples facteurs, c&rsquo;est encore mieux. Proxmox propose nativement depuis son interface la possibilité d&rsquo;<strong>activer le 2FA sur un utilisateur</strong>. Je vais le faire tout de suite, pour root et mon second admin.</p>
<h2 id="durcir-le-ssh">Durcir le SSH</h2>
<p>Le SSH, c&rsquo;est très puissant et donc très dangereux si quelqu&rsquo;un arrive à se connecter avec, il peut arriver à prendre le contrôle de notre machine. C’est aussi la porte d’entrée principale vers notre serveur, et il doit y avoir d’innombrable robots qui scannent internet en continu pour se connecter via SSH à des machines. Ça me semble vitale de durcir les règles et de ne pas me reposer sur celles générées par défaut.</p>
<p>Je ne veux <strong>pas de connexion via l’utilisateur root</strong> et je veux forcer l’utilisation des <strong>clés SSH</strong> (désactivation de l’authentification par password), par exemple. <strong>Changer le port</strong> par défaut (22) est une option à envisager pour rendre la tâche un peu plus difficile.</p>
<h2 id="bannir-automatiquement-des-ips">Bannir automatiquement des IPs</h2>
<p>Je commence à avoir plusieurs couches de sécurité, c&rsquo;est bien. Pour autant, je n&rsquo;empêche pas un bourrin de toquer en continu à mes portes avec des scripts automatiques ou des robots. C’est là qu’un système de bannissement par IP pourrait être intéressant.</p>
<p>S’il y a plusieurs échecs de connexions, je veux <strong>empêcher cette personne de recommencer</strong>. <code>Fail2ban</code> est très efficace pour cela. Je l’installe avec <code>apt install fail2ban</code> et je configure les prisons pour protéger mes services <code>sshd</code> et <code>proxmox</code>.</p>
<h2 id="le-piège-de-lipv6">Le piège de l’IPV6</h2>
<p>J&rsquo;ai grandi avec un Internet qui avait des IPV4 (et aussi des modem bruyants, mais ça c&rsquo;est autre chose :)). Nos box FAI avaient un bouclier, le NAT, pour rendre par défaut nos appareils inaccessibles depuis le monde extérieur. Aujourd&rsquo;hui, on a de l’IPV6 et nos box peuvent en attribuer à nos machines&hellip; et celles-ci peuvent être publiques.</p>
<p>Dit plus explicitement, <strong>tout internet peut venir parler directement à une machine ayant une adresse IPV6 publique</strong>. Il y a largement assez d’adresse pour attribuer une IPV6 à chaque PC, objets connectés, ou tout autre appareil en ayant besoin.</p>
<p>Pour réduire la surface d’attaque et l’exposition, je coupe l’IPV6 sur mon serveur. Je ne l’activerais que si nécessaire, voire uniquement pour la/les machines virtuelles qui en auraient besoin.</p>
<h2 id="accès-à-distance-sécurisé">Accès à distance sécurisé</h2>
<p>Avec toutes mes configurations actuelles, j&rsquo;ai mis énormément de barrières pour empêcher un accès depuis l&rsquo;extérieur. Mais si je veux moi-même y accéder sans être sur mon réseau local ? Premièrement, <strong>j&rsquo;y réfléchirai</strong>. Je me dis que l&rsquo;administration de mon serveur est plutôt une tâche que je ferais de chez moi, donc sur mon réseau <strong>local</strong>.</p>
<p>Mais si j&rsquo;ai quand même envie de le faire ? Ou si j&rsquo;ai envie d&rsquo;accéder à des services depuis l&rsquo;extérieur ? Comme Home Assistant pour la domotique, ça pourrait faire sens. Historiquement, on ouvrait des ports sur notre box, mais <strong>ce n&rsquo;est pas l&rsquo;option la plus sécurisée aujourd&rsquo;hui</strong>.</p>
<p>Je vais préférer passer par <code>Tailscale</code> qui ne nécessite aucune ouverture de port et ne rends pas mon serveur davantage sur internet. Je l’installe dans un container LXC si je veux isoler au maximum, ou directement sur l’hôte.</p>
<p>J&rsquo;ai vu aussi qu&rsquo;il y avait la possibilité de configurer un serveur <code>WireGuard</code> sur certaines box FAI, ça me semble être une alternative intéressante pour accéder à notre réseau local de manière sécurisée et sans augmenter la visibilité de notre serveur.</p>
<h2 id="nginx-reverse-proxy">nginx reverse proxy</h2>
<p>Quand on commence à avoir plusieurs services et qu’on a envie de partager l’accès à ses proches, l’ajout d’un reverse proxy est une option intéressante. On pourra avoir des adresses nommées, mais surtout, on aura <strong>une seule porte d’entrée</strong> et un seul port ouvert. Elle sera d’ailleurs sécurisée même si les services derrière ne le sont pas.</p>
<p>On peut également en profiter pour <strong>ajouter des règles globales</strong> (c’est notre point d’entrée, donc tous les services en profiteront) comme forcer le HTTPS et le 2FA partout. Un autre avantage : on <strong>cache l’architecture</strong> de notre serveur. On voit d’abord nginx, sans savoir ce qu’il y a derrière.</p>
<h2 id="certificat-valide">Certificat valide</h2>
<p>L’alerte <em>« Votre connexion n’est pas privée / sécurisée »</em> que le navigateur affiche quand on accède à l’interface web, c’est chiant non ? Oui, et ce n&rsquo;est pas qu&rsquo;esthétique.</p>
<p>J’ai envie d’ajouter un certificat valide pour <strong>garantir une connexion chiffrée</strong> entre mon navigateur et le service. On aura la capacité de voir s’il y a une tentative d’attaque de type <em>« Man-in-the-Middle »</em>, et puis, ce n’est pas très bon de s’habituer à ignorer des alertes de sécurité :)</p>
<p>Plusieurs options en fonction de notre configuration : via <code>Let’s Encrypt</code> avec un nom de domaine, via le reverse proxy, ou via <code>Tailscale MagicDNS</code>.</p>
<h2 id="vlan">VLAN</h2>
<p>Je n’ai <strong>pas la même confiance</strong> et la même exposition entre tous mes services et appareils (ex: mon PC, un service ouvert sur internet, ma console, des objets connectés, ….). Je ne veux pas qu’<strong>un appareil compromis</strong> sur mon réseau local puisse <strong>accéder à tout le reste</strong> de mon réseau.</p>
<p>En fonction de cette configuration d’appareils/services, je peux avoir envie de <strong>compartimenter au niveau du réseau en créant plusieurs VLANs</strong>. Par exemple, un VLAN IOT pour les objets connectés qui ont besoin d’accéder à leur cloud propriétaire douteux / auquel on a peu de confiance. Un VLAN pour les appareils sensibles. Un autre VLAN pour les services exposés sur internet, qui ne pourront pas rebondir sur les appareils sensibles s’il y a une intrusion.</p>
<h1 id="la-longévité">La longévité</h1>
<blockquote>
<p><em>Un serveur n&rsquo;est jamais en retard, ni en avance d&rsquo;ailleurs. Il est toujours là quand on a besoin de lui.</em> — Gandalf le Gris, mage du temps depuis 1970.</p>
</blockquote>
<p>J&rsquo;ai envie que mon serveur dure le plus longtemps possible. D&rsquo;une part en chouchoutant le plus possible chaque composant matériel pour <strong>allonger sa durée de vie</strong> ; je veux donc limiter au mieux l&rsquo;usure. Et d&rsquo;autre part en réglant les problèmes avant que le serveur ne tombe pour <strong>maximiser son uptime</strong> ; je veux donc être prévenu avant que les catastrophes arrivent.</p>
<p>Le SSD est le <strong>maillon faible</strong> de notre serveur. C&rsquo;est le composant qui peut s’user le plus vite et sur lequel on peut drastiquement réduire ou accélérer la chute. Pire encore si le stockage se fait sur une clé USB ou une carte SD (Raspberry Pi). Avec Proxmox et nos services, on va potentiellement <strong>écrire très fréquemment</strong>. C’est pour cela que la plupart de mes points ci-dessous se concentrent sur la réduction d&rsquo;écriture.</p>
<h2 id="faire-tampon-avec-la-ram">Faire tampon avec la RAM</h2>
<p>Certains services et particulièrement les logs vont écrire <strong>très fréquemment de toutes petites données</strong> sur le SSD. J&rsquo;ai envie de préserver mon disque en regroupant ces données dans de plus gros paquets en mémoire (une sorte de <strong>tampon</strong> / <strong>buffer</strong>) pour les écrire plus tard en une fois. On pourrait imaginer écrire toutes les heures ou toutes les six heures par exemple.</p>
<p>Attention à un effet de bord : s&rsquo;il y a une coupure de courant brutale, les logs en tampon seront <strong>perdus</strong>. Il faut l&rsquo;avoir en tête quand on choisit cette option et la fréquence d&rsquo;écriture du tampon.</p>
<p>Certains services peuvent être configurés nativement pour faire tampon, comme <code>RRDCached</code> pour les graphiques/statistiques de Proxmox. Et pour ceux qui ne proposent pas cette possibilité, on peut se servir de <code>tmpfs</code>, <code>Log2Ram</code>, ou <code>Folder2Ram</code>. On peut aller encore plus loin en regardant du côté du paramètre <code>commit</code> sur <code>/etc/fstab</code>.</p>
<h2 id="diminuer-la-quantité-de-logs">Diminuer la quantité de logs</h2>
<p>En plus de les grouper par paquets, on peut aussi tout simplement réduire les logs à écrire. Certains ne m&rsquo;intéressent pas (comme <code>High Availability</code> et <code>Corosync</code>, potentiellement aussi le datetime des accès fichier avec <code>noatime</code> / <code>relatime</code> dans <code>/etc/fstab</code>), je vais donc simplement les <strong>désactiver</strong>. D&rsquo;autres sont utiles mais trop bavards, je peux adapter la <strong>verbosité</strong> pour garder uniquement l&rsquo;essentiel (journald, fail2ban, smartd, &hellip;).</p>
<p>Je peux aussi diminuer la profondeur de <strong>l’historique</strong> en ne gardant par exemple que 7 jours plutôt que 30. Sur <code>journald</code>, on a deux paramètres intéressants : la durée max et la taille max.</p>
<h2 id="swap">SWAP</h2>
<p>Un système peut utiliser <strong>de l’espace sur le disque</strong> lorsqu’il n’y a <strong>pas assez de RAM disponible</strong>. En fonction de notre quantité de RAM et de l’usage de notre PC, on peut configurer à quel point le système va recourir au SWAP. De mon côté, j’ai envie de limiter au maximum son usage pour préserver le SSD, sachant que j’ai 16Go de RAM et très peu de services, eux-mêmes souvent en IDLE.</p>
<p>On peut régler ça avec le paramètre <code>swappiness</code> (agressivité du SWAP) dans <code>/etc/sysctl.conf</code>. C’est souvent à 60 par défaut, je peux le diminuer à 10 pour fortement limiter le SWAP. Il est conseillé de ne pas totalement couper le SWAP si on veut éviter un plantage (ex: un pic de consommation de RAM par une VM).</p>
<h2 id="compresser-la-ram">Compresser la RAM</h2>
<p>Et si on n’est parfois court en RAM et qu’on veut éviter le SWAP (ou en supplément) ? On peut installer et configurer <code>zRam</code> pour compresser une portion de notre RAM. C’est intéressant car avec un bon processeur, c’est toujours plus rapide que du SWAP sur SSD, et ça évite des écritures.</p>
<p>A priori, je n’en ai pas besoin avec mon contexte, tout comme le SWAP. Mais c’est une option intéressante à avoir en tête.</p>
<h2 id="trim">TRIM</h2>
<p>C’est normalement actif par défaut, mais autant en être sûr. Je vais vérifier que <strong>le service TRIM est bien actif</strong> sur Proxmox afin de faire le ménage sur les blocs à supprimer. Attention à également bien rendre possible le TRIM dans les options de disque de <strong>chaque future VM</strong> (option <code>discard</code> pour que l’ordre de nettoyage soit bien transmis à l’hôte).</p>
<h2 id="déporter-vers-un-autre-disque">Déporter vers un autre disque</h2>
<p>Je parle beaucoup d&rsquo;écriture sur le SSD depuis le début, mais ce n&rsquo;est pas obligatoire. On peut avoir un second disque interne (SSD ou HDD), ou un disque externe en USB, ou même du stockage distant type NAS ou cloud. Et pourquoi pas un mix de tout ça.</p>
<p>Avec ce type de configuration, j&rsquo;ai envie de préserver mon SSD principal qui contient le système en <strong>déportant des données</strong> de type logs, stats et backups <strong>sur un autre disque</strong>. Ce qui ne m’empêche pas d&rsquo;optimiser les écritures de ses autres disques ; c&rsquo;est <strong>complémentaire</strong>.</p>
<h2 id="monitoring-température">Monitoring température</h2>
<p>Quittons l&rsquo;univers des SSD pour aller vers le processeur, un autre composant que l&rsquo;on peut préserver. Son ennemi principal est la température, ou plus précisément, une <strong>température trop élevée</strong> ; chaque processeur ayant ses propres limites. J&rsquo;ai envie de surveiller cette valeur pour agir avant que le composant n&rsquo;encaisse trop.</p>
<p>Ce n&rsquo;est pas visible par défaut sur Proxmox, je vais donc installer <code>lm-sensors</code> pour obtenir des informations sur la température, et ajouter des valeurs dans un graphique pour suivre l’évolution dans le temps.</p>
<p>Et si jamais la température est trop élevée ? Je vais vérifier s’il y a un usage trop intensif, si le ventilateur tourne assez vite et assez tôt, s’il est temps de dépoussiérer l’intérieur du boîtier, et si un changement de pâte thermique devient nécessaire.</p>
<h2 id="alertes">Alertes</h2>
<p>Autant d’un point de vue de la longévité (matériel et uptime) que de la sécurité, j’ai envie d’<strong>être alerté</strong> s’il y a un problème (<strong>et même avant</strong> qu’il y ait ce problème lorsque c’est possible). Je ne serai pas toujours devant la page du dashboard, ni devant les logs. Je préfère être automatiquement prévenu.</p>
<p>Proxmox, propose un système d’alertes par envoi d’emails ou par notifications (via Gotify par exemple, ou webhooks) pour certains événements critiques (échec de sauvegarde, santé des disques, saturation d’espace, …). Si j’ai envie d’avoir d’autres alertes, je devrais regarder du côté du service concerné (ex: <code>Fail2Ban</code> le propose) ou créer moi-même un <code>cron</code> pour surveiller un événement (ex: la température).</p>
<h2 id="backups">Backups</h2>
<p>Une catastrophe arrivera forcément un jour, c’est <strong>impossible de l’éviter</strong>. Il me faut donc une stratégie de <strong>récupération des données</strong> pour ce jour là. Je n&rsquo;ai pas envie de tout recommencer à la main si mon disque principal rend l&rsquo;âme. J&rsquo;ai donc envie d&rsquo;avoir une sauvegarde de l’hôte (la configuration même de Proxmox), et des containers/VMs.</p>
<p>Pour l’hôte, il est recommandé de sauvegarder les fichiers de configuration et refaire une installation propre. Pour les containers/VMs, on a deux solutions : créer des archives compressées ou utiliser Proxmox Backup Server qui a l’avantage de générer des sauvegardes incrémentielles.</p>
<p>Pour être serein sur le stockage des backups, on peut s’appuyer sur <strong>la stratégie « 3-2-1 »</strong> : 3 backups, sur 2 supports différents, dont 1 hors de chez nous.</p>
<h2 id="redémarrer-après-une-coupure-de-courant">Redémarrer après une coupure de courant</h2>
<p>Un dernier élément sur la longévité, pour garantir un meilleur uptime sans intervention manuelle. Il peut y avoir des coupures d&rsquo;électricité chez soi, et plus fréquemment des micros coupures. Elles durent moins d&rsquo;une seconde mais c’est suffisant pour que le serveur s&rsquo;éteigne.</p>
<p>Pour un <strong>redémarrage automatique</strong>, je vais paramétrer le BIOS : il faut chercher une option qui se nomme <code>Restore on AC/Power Loss</code>, <code>AC Power Recovery</code>, <code>After Power Loss</code>, etc.</p>
<h1 id="la-sobriété">La sobriété</h1>
<blockquote>
<p><em>On m&rsquo;a dit &ldquo;coupe ce qui est inutile&rdquo;. J&rsquo;ai commencé par le Bluetooth, puis l&rsquo;USB, puis la RAM. À la fin, j&rsquo;ai même coupé le courant. C’est le premier serveur au monde qui fonctionne uniquement à la force de la pensée.</em> — Perceval de Galles, chevalier des trucs à enlever.</p>
</blockquote>
<p>Afin de réduire l’impact du serveur, je vais effectuer quelques derniers réglages. Globalement si quelque chose est purement inutile, je vais peut-être avoir envie de le virer ; ça économisera l&rsquo;énergie (sobriété), et ça réduira peut-être aussi au passage l&rsquo;usure matérielle (longévité) et/ou la surface d’attaque (sécurité). Un bon bonus quoi.</p>
<p>J’insiste sur le côté purement inutile. Je me renseigne avant pour m’assurer que ne soit pas essentiel pour la sécurité ou la stabilité du système.</p>
<h2 id="optimiser-la-consommation-du-processeur">Optimiser la consommation du processeur</h2>
<p>Encore le BIOS, eh oui, ça regorge de configurations intéressantes. Dans un objectif de sobriété, j’ai repéré plusieurs changements autour du processeur pour grappiller quelques Watts : par exemple <code>turbo mode</code>, limites de consommation en Watt <code>PL1/PL2</code>, sommeil profond avec les <code>C-State</code>.</p>
<h2 id="désactiver-linutile">Désactiver l’inutile</h2>
<p>On a potentiellement déjà désactivé certains services inutiles pour préserver le SSD (<code>cluster</code>, <code>high availability</code>), mais ce peut aussi être pour des raisons d’économie. On a de quoi allonger la liste. Je vais regarder du côté du Bluetooth, WiFi, des ports USB non utilisés, de la carte son, de l’éclairage LED/RGB, etc.</p>
<p>À explorer : l’outil <code>powertop</code> pour configurer du matériel en économie d’énergie.</p>
<h2 id="éteindre-le-serveur">Éteindre le serveur</h2>
<p>Et si Perceval avait raison, et que le max de la sobriété était d’éteindre le serveur ? Selon notre usage et nos services, <strong>c’est envisageable</strong>. Quelques idées :</p>
<ul>
<li>Si on est plutôt en mode bidouille et services utilisés ponctuellement en étant chez soi, on peut l’allumer uniquement pendant qu’on l’utilise.</li>
<li>Si on en a besoin régulièrement ou à l’extérieur mais qu’il y a tout de même des plages d’inactivités (ex: la nuit), on peut programmer son extinction.</li>
<li>Si on a une prise connectée contrôlable à distance, on pourrait l’allumer sur demande puis l’éteindre à nouveau.</li>
</ul>
<p>Rien ne nous oblige à avoir 100% d&rsquo;uptime ! Chaque contexte est différent.</p>
<h2 id="matériel-doccasion">Matériel d’occasion</h2>
<p>Je termine par une action qu&rsquo;on peut faire dès le début : <strong>éviter d&rsquo;acheter du neuf</strong>. Je peux recycler un vieux PC pour créer mon Homelab en fouillant dans les cartons de matos que l&rsquo;on a chez soi ou chez des proches.</p>
<p>Et sinon je peux acheter d&rsquo;occasion. C&rsquo;est ce que j&rsquo;ai fait en trouvant un vendeur proche de chez moi - même pas besoin de livraison :)</p>
]]></description></item><item><title>Mon petit homelab avec Proxmox</title><link>https://jordanchapuy.com/posts/2026/03/mon-petit-homelab-proxmox-domotique-home-assistant/</link><pubDate>Fri, 20 Mar 2026 15:52:00 +0100</pubDate><author>Auteur</author><guid>https://jordanchapuy.com/posts/2026/03/mon-petit-homelab-proxmox-domotique-home-assistant/</guid><description><![CDATA[<p>Mon hobby du moment, c’est la création d’un <strong>homelab</strong>. C’est tout récent et j’aime déjà beaucoup car ça me fait bidouiller, apprendre de nouvelles choses, retourner sur des concepts très basiques de gestion de réseau, firewall, du Linux, etc. Et à la fin, ça m’aide pour expérimenter, automatiser et même pour interagir avec le monde physique (via la domotique).</p>
<p>D’accord c’est bien cool tout ça, mais c’est quoi un homelab ? Grossièrement, c’est une petite <strong>infrastructure</strong> informatique, un serveur que l’on va installer chez soi pour héberger des services. Il y a un côté <strong>bac à sable</strong> et <strong>apprentissage</strong> très sympa là-dedans. (Et encore, je dis petit, mais sur les communautés, je vois parfois des personnes qui sortent l’artillerie lourde chez eux !).</p>
<p>On peut imaginer <strong>héberger des services</strong> comme Nextcloud, Pi-hole, Plex, n8n, Home Assistant, etc. C’est assez large : je peux reprendre le contrôle sur mes <strong>données</strong>, <strong>expérimenter</strong> rapidement, faire de la domotique, <strong>automatiser</strong>. Un peu ce qui me passe par la tête au final.</p>
<p>L’envie m’est venu en discutant avec un ami, Antoine. Ça faisait déjà un moment qu&rsquo;il m&rsquo;en parlait de temps en temps. Et puis un jour on est rentré un peu plus dans le détail du comment. Ce qui m&rsquo;a accroché sur le moment, c&rsquo;était sa facilité à ajouter/supprimer des services et à tout compartimenter.</p>
<p>Dans le même temps, IKEA venait de lancer sa nouvelle gamme <strong>domotique</strong> compatible avec les protocoles Matter et Thread. Une raison supplémentaire pour me lancer dans l&rsquo;aventure.</p>
<h1 id="linfrastructure">L’infrastructure</h1>
<p>Avant tout, il me fallait une machine pour créer le serveur. J&rsquo;ai d&rsquo;abord fouillé dans mes cartons pour voir si j&rsquo;avais du vieux matos à recycler. Pas de chance, ce qu&rsquo;il me restait était beaucoup trop vieux. Donc j&rsquo;ai fouillé Leboncoin et j&rsquo;ai fini par trouver un voisin qui m&rsquo;a vendu un mini PC idéal. La machine avait servi seulement 15 heures en tant que secours de son noeud Ethereum.</p>
<p>Pour s&rsquo;amuser avec son premier homelab, pas besoin d&rsquo;une bête de compétition ; un ancien PC ou un Raspberry Pi suffit. J&rsquo;ai fait le choix de partir sur un <strong>mini PC avec un processeur N100</strong>. Mon besoin était d&rsquo;avoir quelque chose de très <strong>économe</strong> en énergie et de <strong>durable</strong> dans le temps. 16Go de RAM pour être tranquille et un SSD avec un « vrai NVMe » (pas caché derrière du SATA) pour garantir la rapidité.</p>
<p>Côté domotique, j&rsquo;avais déjà le nécessaire sans le savoir. Certains objets parlent en wi-fi, mais la plupart utilisent des <strong>protocoles radio</strong> (Thread, Zigbee, …). Il faut donc un appareil capable d&rsquo;émettre et de diffuser sur ce protocole, et qui fera l&rsquo;intermédiaire sur notre réseau local. On appelle ça un routeur de bordure.</p>
<p>Ça peut être une clé USB qui fait office d&rsquo;antenne ou un boîtier propriétaire qui vient avec d&rsquo;autres objets (Philips, IKEA, …). Ou, et c’était mon cas, certains appareils connectés des GAFAM (Apple TV, Google TV Streamer, HomePod, Alexa, …) qui sont déjà compatible avec Thread et Matter.</p>
<h1 id="le-système">Le système</h1>
<p>C&rsquo;est ici que j&rsquo;étais le plus sur le cul quand j&rsquo;ai découvert le système du serveur d’Antoine : <strong>Proxmox</strong>. C’est un <strong>hyperviseur</strong> de type 1 (« bare metal », installé directement sur la machine comme on pourrait installer un Windows) basé sur Linux/Debian. Cela permet de créer et gérer facilement un ensemble de machines virtuelles et de containers. C’est puissant pour <strong>virtualiser</strong> et <strong>isoler</strong> un ensemble de différents services et systèmes sur une même machine.</p>
<p>Une autre de ses forces, c&rsquo;est son <strong>interface web</strong>. On peut gérer notre serveur en SSH, mais aussi via une GUI puisque Proxmox peut être piloté depuis n’importe quel navigateur. Gestion du firewall, installation d’une nouvelle VM, gestion des ressources… une fois que le système est installé, on peut ranger cette machine dans un coin et on n&rsquo;y accédera depuis n&rsquo;importe quel autre PC.</p>
<p>En parlant de l&rsquo;installation, elle est facile :</p>
<ul>
<li>On récupère <strong>l’ISO</strong> sur <a href="https://www.proxmox.com/en/downloads" target="_blank" rel="noopener noreffer">https://www.proxmox.com/en/downloads</a>.</li>
<li>On créé une <strong>clé USB bootable</strong> avec l’ISO (en ligne de commande ou avec un outil comme Balena Etcher).</li>
<li>On la branche sur le PC puis on le démarre.</li>
<li>Quelques vérifications à faire dans le <strong>BIOS</strong> (on martèle la touche Suuuuuuuupr.) : l’ordre de boot et l’activation de la virtualisation. Parfois, il peut être nécessaire de désactiver le Secure Boot.</li>
<li>On se laisse guider par l’installation graphique de Proxmox. La plupart du temps, on garde ce qui est inscrit par défaut. On voudra par contre <strong>fixer l’adresse IP</strong>, car elle nous servira pour accéder à l’interface web.</li>
<li>À la fin de l’installation, on redémarre, on accède au BIOS pour quelques derniers changements (ordre de boot des périphériques, ordre de boot du nvme, secure boot réactivé). On sauvegarde et on laisse Proxmox démarrer.</li>
<li>On peut maintenant y accéder sur <strong>https://&lt;ip_renseignée&gt;:8006</strong> !</li>
</ul>
<p>J’ajoute quelques conseils qui peuvent aider :</p>
<ul>
<li>On vérifie les options du <strong>Firewall</strong> sur la box de notre FAI. Surtout sur les Freebox qui ont un Firewall IPV6 désactivé par défaut, et qui peuvent adresser une IPV6 publique à notre serveur. Le serveur devient alors accessible à tout internet, et ça, on n’en a peut-être pas envie.</li>
<li>On fait un checksum une fois l’ISO téléchargé pour vérifier la bonne intégrité du fichier.</li>
<li>On utilise une bonne clé USB. S’il y a une erreur pendant l’installation (type &ldquo;package failed during install&rdquo;), c&rsquo;est probablement parce que la clé est naze. J’ai recommencé trois fois à cause de ça :)</li>
<li>On fixe un <strong>bail</strong> sur notre box FAI pour que l’IP de notre serveur reste identique.</li>
</ul>
<p>On a donc une première base de homelab pour jouer ! Les prochaines étapes (et probablement articles) ? Prendre un peu de temps à configurer et sécuriser notre serveur, puis ajouter nos premiers services/systèmes.</p>
]]></description></item></channel></rss>