<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>sauvegarde - Tag - Jordan Chapuy - Blog d'un développeur passionné ❤️</title><link>https://jordanchapuy.com/tags/backup/</link><description>sauvegarde - 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/backup/" 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></channel></rss>