Auto-update blog content from Obsidian: 2025-05-26 18:02:57
All checks were successful
Deploy / Deploy (push) Successful in 4s
@ -9,11 +9,11 @@ menu:
|
|||||||
params:
|
params:
|
||||||
icon: user
|
icon: user
|
||||||
---
|
---
|
||||||
Salut ! Moi c'est Etienne, j'adore l'**automatisation** et je suis un amateur de projets **homelab**. Je suis un expert Linux et travaille comme **Senior Cloud DevOps Engineer** chez Capgemini.
|
Salut ! Moi c'est Etienne, passionné d'**automatisation** et de **homelab**. Je travaille comme **Senior Cloud DevOps Engineer** chez Capgemini.
|
||||||
|
|
||||||
Motivé par la passion, j'aime explorer de nouvelles technologie, comprendre comment elles fonctionnement et les expérimenter chez moi, juste pour le plaisir. Mon lab est passé d'un simple espace de bidouille à un véritable terrain de jeu pour expérimenter la virtualisation, l'orchestration de conteneurs, le réseau, et bien plus encore.
|
Motivé par la passion, j'aime explorer de nouvelles technologie, comprendre comment elles fonctionnement et les expérimenter chez moi, juste pour le plaisir. Mon lab est passé d'un simple espace de bidouille à un véritable terrain de jeu pour expérimenter la virtualisation, l'orchestration de conteneurs, le réseau, et bien plus encore.
|
||||||
|
|
||||||
Ce blog est ma façon de documenter ce que je construis, casse (volontairement !), répare et surtout, ce que j'**apprends**. C'est une référence personnelle, mais aussi un moyen de partager avec la communauté, de m’open source, au cas où quelqu'un d'autre suivrait le même chemin et trouverait mon expérience utile.
|
Ce blog est ma façon de documenter ce que je construis, répare, casse (volontairement !) et surtout, ce que j'**apprends**. C'est une référence personnelle, mais aussi un moyen de partager avec la communauté, je m’open source, au cas où quelqu'un d'autre suivrait le même chemin et trouverait mon expérience utile.
|
||||||
|
|
||||||
Même si je suis français, J'écris mes notes personnelles en anglais pour perfectionner l'utilisation de cette langue, mais j’essaye tout de même de les traduire dans ma langue maternelle.
|
Même si je suis français, J'écris mes notes personnelles en anglais pour perfectionner l'utilisation de cette langue, mais j’essaye tout de même de les traduire dans ma langue maternelle.
|
||||||
|
|
||||||
|
@ -9,12 +9,12 @@ menu:
|
|||||||
params:
|
params:
|
||||||
icon: user
|
icon: user
|
||||||
---
|
---
|
||||||
Hi! I'm Etienne, an **automation** lover and **homelab** projects enthusiast. I am a Linux SME and work as a **Senior Cloud DevOps Engineer** at Capgemini.
|
Hi! I'm Etienne, an **automation** lover and **homelab** enthusiast. I work as a **Senior Cloud DevOps Engineer** at Capgemini.
|
||||||
|
|
||||||
Driven by passion, I enjoy exploring new technologies, understanding how they work and experiment those at home, just for the joy of it. My lab has grown from a simple tinkering space into a full playground for experimenting with virtualization, container orchestration, networking, and much more.
|
Driven by passion, I enjoy exploring new technologies, understanding how they work and experiment those at home, just for the joy of it. My lab has grown from a simple tinkering space into a full playground for experimenting with virtualization, container orchestration, networking, and much more.
|
||||||
|
|
||||||
This blog is my way of documenting what I build, break (on purpose!), fix, and above all, **learn**. It’s a personal reference, but also a way to give back to the community, I open source myself, in case someone else is on a similar path and finds value in my experience.
|
This blog is my way of documenting what I build, fix, break (on purpose!), and above all, **learn**. It’s a personal reference, but also a way to give back to the community, I open source myself, in case someone else is on a similar path and finds value in my experience.
|
||||||
|
|
||||||
Even though I'm French, I write my personal notes in English to perfect my use of this language, but I still try to translate them into my mother tongue.
|
Even though I'm French, I write my personal notes in English to perfect my use of this language. But I still try to translate them into my mother tongue.
|
||||||
|
|
||||||
If you're working on something cool, have questions, or want to bring new ideas on the table, **feel free to reach out**!
|
If you're working on something cool, have questions, or want to bring new ideas on the table, **feel free to reach out**!
|
||||||
|
9
content/page/categories/index.fr.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Catégories
|
||||||
|
slug: categories
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
weight: 40
|
||||||
|
params:
|
||||||
|
icon: categories
|
||||||
|
---
|
9
content/page/categories/index.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Categories
|
||||||
|
slug: categories
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
weight: 40
|
||||||
|
params:
|
||||||
|
icon: categories
|
||||||
|
---
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Bienvenue dans mon Homelab
|
title: Bienvenue dans mon Homelab
|
||||||
layout: page
|
layout: page
|
||||||
description: L'histoire derrière mon projet de homelab, d'un Raspberry Pi à un mini datacenter, où j'expérimente Proxmox, Kubernetes, l'automatisation et plus encore.
|
description: L'histoire derrière mon projet de homelab, d'un Raspberry Pi à un micro datacenter, où j'expérimente Proxmox, Kubernetes, l'automatisation et plus encore.
|
||||||
showToc: true
|
showToc: true
|
||||||
menu:
|
menu:
|
||||||
main:
|
main:
|
||||||
@ -18,16 +18,16 @@ En 2015, je suis passé à un Raspberry Pi 2, à la recherche de meilleures perf
|
|||||||
|
|
||||||
En 2018, le besoin de plus de RAM m'a conduit à un Raspberry Pi 3, me permettant d'exécuter encore plus d'applications. Mes trois petites machines fonctionnaient harmonieusement ensemble, dans un bordel bien ordonné.
|
En 2018, le besoin de plus de RAM m'a conduit à un Raspberry Pi 3, me permettant d'exécuter encore plus d'applications. Mes trois petites machines fonctionnaient harmonieusement ensemble, dans un bordel bien ordonné.
|
||||||
|
|
||||||
Enfin, en 2019, mon nouveau travail m'a fait expérimenter la virtualisation, avec les machines virtuelles et surtout Docker. Je voulais essayer ça à la maison, et je suis passé a la vitesse supérieure avec un mini-PC compact mais assez puissant qui a posé les bases de mon homelab.
|
Enfin, en 2019, mon nouveau travail m'a fait découvrir la virtualisation, avec les machines virtuelles et surtout Docker. Je voulais essayer ça à la maison, et je suis passé a la vitesse supérieure avec un mini-PC compact mais assez puissant qui a posé les bases de mon homelab.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Pourquoi un Homelab ?
|
## Pourquoi un Homelab ?
|
||||||
|
|
||||||
Je voulais mon propre terrain de jeu, un espace où je pouvais construire mais aussi casser des choses sans risques, apprendre à les réparer et mieux comprendre leur fonctionnement.
|
Je voulais mon propre terrain de jeu, un espace où je pouvais monter mais aussi casser des choses en toute sécurité, apprendre à les réparer et mieux comprendre leur fonctionnement.
|
||||||
|
|
||||||
Mon unique serveur était génial, mais tester quoi que ce soit de risqué dessus était devenu problématique. Il exécutait des services critiques comme la domotique ou le DNS, lorsqu'il était en panne, tout était en panne. Le serveur était devenu indispensable, et croyez-moi, ne pas avoir de lumières ni d'internet était un incident majeur pour ma famille. Plus aussi fun.
|
Mon unique serveur était génial, mais tester quoi que ce soit de risqué dessus était devenu problématique. Il exécutait des services critiques comme la domotique ou le DNS, et croyez-moi, ne pas avoir de lumières ni d'internet était un incident majeur pour ma famille. Le serveur était devenu indispensable. Lorsqu'il était en panne, tout était en panne. Plus aussi fun.
|
||||||
|
|
||||||
Le premier grand défi que je me suis lancé a été de créer un cluster Kubernetes. Bien sûr, j'aurais pu en exécuter un sur un seul nœud, mais à quoi bon un cluster avec un seul nœud ? On pourrait dire qu'utiliser Kubernetes pour contrôler mes volets est overkill, et vous auriez raison. Mais ce n'était pas le sujet.
|
Le premier grand défi que je me suis lancé a été de créer un cluster Kubernetes. Bien sûr, je pouvais en exécuter un sur un seul nœud, mais à quoi bon un cluster avec un seul nœud ? On pourrait dire qu'utiliser Kubernetes pour contrôler mes volets est excessif, et vous auriez raison. Mais ce n'était pas le sujet.
|
||||||
|
|
||||||
Je voulais aussi créer de nouvelles machines virtuelles à volonté, les reconstruire de zéro et appliquer les principes de l'Infrastructure as Code. J'aurais pu faire tout cela dans le cloud, mais je voulais un contrôle total.
|
Je voulais aussi créer de nouvelles machines virtuelles à volonté, les reconstruire de zéro et appliquer les principes de l'Infrastructure as Code. J'aurais pu faire tout cela dans le cloud, mais je voulais un contrôle total.
|
||||||
|
|
||||||
@ -43,17 +43,17 @@ Cela impliquait :
|
|||||||
- **Haute disponibilité** : Trois nœuds pour garantir qu'aucun point de défaillance ne puisse tout interrompre.
|
- **Haute disponibilité** : Trois nœuds pour garantir qu'aucun point de défaillance ne puisse tout interrompre.
|
||||||
- **Stockage distribué** : Redondance des données entre les nœuds, non seulement pour garantir la disponibilité, mais aussi pour apprendre le fonctionnement des systèmes de stockage d'entreprise.
|
- **Stockage distribué** : Redondance des données entre les nœuds, non seulement pour garantir la disponibilité, mais aussi pour apprendre le fonctionnement des systèmes de stockage d'entreprise.
|
||||||
- **Segmentation du réseau** : Plusieurs VLAN pour imiter les topologies de réseau réelles, isoler les services et pratiquer la mise en réseau avancée.
|
- **Segmentation du réseau** : Plusieurs VLAN pour imiter les topologies de réseau réelles, isoler les services et pratiquer la mise en réseau avancée.
|
||||||
|
|
||||||
|
En résumé, je souhaitais construire un mini datacenter dans un placard.
|
||||||
### Contraintes
|
### Contraintes
|
||||||
|
|
||||||
Bien sûr, la réalité ne correspond pas toujours aux ambitions. Voici ce à quoi je me suis heurté :
|
Bien sûr, la réalité ne correspond pas toujours aux ambitions. Voici ce à quoi je me suis heurté :
|
||||||
- **Espace** : Mon lab devait tenir dans un petit espace de service cachée au milieu de mon appartement. Pas vraiment une salle de serveurs.
|
- **Espace** : Mon labo devait tenir dans une petite armoire de service cachée au milieu de mon appartement. Pas vraiment une salle de serveurs.
|
||||||
- **Bruit** : Le silence était crucial. Ce n'était pas un endroit caché dans un garage ou un sous-sol, mais en plein cœur de notre espace de vie.
|
- **Bruit** : Le silence était crucial. Ce n'était pas un endroit caché dans un garage ou un sous-sol, mais en plein cœur de notre espace de vie.
|
||||||
- **Consommation électrique** : Fonctionnant 24/7, la consommation électrique devait être maîtrisée. Je ne pouvais pas me permettre de tripler ma facture d'électricité juste pour bricoler des machines virtuelles.
|
- **Consommation électrique** : Fonctionnant 24/7, la consommation électrique devait être maîtrisée. Je ne pouvais pas me permettre de tripler ma facture d'électricité juste pour bricoler des machines virtuelles.
|
||||||
- **Budget** : Je n'allais pas dépenser des milliers d'euros pour du matériel professionnel. L'équilibre résidait dans la recherche d'un équipement d'occasion fiable et abordable.
|
- **Budget** : Je n'allais pas dépenser des milliers d'euros pour du matériel professionnel. L'équilibre résidait dans la recherche d'un équipement d'occasion fiable et abordable.
|
||||||
- **Température** : Franchement, je n'y avais pas pensé… Les mini-PC ne chauffent pas beaucoup, mais le matériel réseau ? C'est une autre histoire. Leçon apprise.
|
- **Température** : Franchement, je n'y avais pas pensé… Les mini-PC ne chauffent pas beaucoup, mais le matériel réseau ? C'est une autre histoire. Leçon apprise.
|
||||||
|
|
||||||
En un mot, je souhaitais construire un mini datacenter dans un placard.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Présentation de l'Infrastructure
|
## Présentation de l'Infrastructure
|
||||||
@ -87,8 +87,9 @@ Voici les spec de mes nœuds :
|
|||||||
| **NIC** | 1Gbps (+ 2.5Gbps) | 1Gbps + 2.5Gbps | 1Gbps + 2.5Gbps |
|
| **NIC** | 1Gbps (+ 2.5Gbps) | 1Gbps + 2.5Gbps | 1Gbps + 2.5Gbps |
|
||||||
| **M.2** | 2 | 1 | 1 |
|
| **M.2** | 2 | 1 | 1 |
|
||||||
| **2,5"** | 2 | 2 | 1 |
|
| **2,5"** | 2 | 2 | 1 |
|
||||||
|
| | | | |
|
||||||
|
|
||||||
Chaque nœud a la même configuration de disque : un SSD de 256 Go dans la baie 2,5" pour le système d’exploitation et un disque NVMe de 1 To pour le stockage des données.
|
Chaque nœud a la même configuration de disque : un SSD de 256 Go dans la baie 2,5 pouces pour le système d’exploitation et un disque NVMe de 1 To pour le stockage des données.
|
||||||
### Réseau
|
### Réseau
|
||||||
|
|
||||||
Pour le réseau, j’avais deux objectifs principaux : implémenter des VLAN pour la segmentation du réseau et gérer mon pare-feu pour un contrôle plus précis. Mes nœuds étant équipés de cartes réseau 2,5 Gbit/s, j’avais besoin de switchs capables de gérer ces débits, ainsi que de quelques ports Power over Ethernet (PoE) pour mon antenne Zigbee et ses futures fonctionnalités.
|
Pour le réseau, j’avais deux objectifs principaux : implémenter des VLAN pour la segmentation du réseau et gérer mon pare-feu pour un contrôle plus précis. Mes nœuds étant équipés de cartes réseau 2,5 Gbit/s, j’avais besoin de switchs capables de gérer ces débits, ainsi que de quelques ports Power over Ethernet (PoE) pour mon antenne Zigbee et ses futures fonctionnalités.
|
||||||
@ -122,9 +123,8 @@ La meilleure solution que j'ai trouvée a été de percer deux trous de 40 mm a
|
|||||||
|
|
||||||
Voici à quoi ça ressemble :
|
Voici à quoi ça ressemble :
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||

|
|
||||||
|
|
||||||
---
|
---
|
||||||
## Stack Logicielle
|
## Stack Logicielle
|
||||||
@ -183,8 +183,7 @@ Cette configuration de proxy à deux couches centralise la gestion des certifica
|
|||||||
Pour un accès distant sécurisé, j'ai configuré **WireGuard** sur OPNsense. Ce VPN léger fournit une connectivité chiffrée à mon lab où que je sois, permettant ainsi de gérer tous mes services sans les exposer directement à Internet.
|
Pour un accès distant sécurisé, j'ai configuré **WireGuard** sur OPNsense. Ce VPN léger fournit une connectivité chiffrée à mon lab où que je sois, permettant ainsi de gérer tous mes services sans les exposer directement à Internet.
|
||||||
#### Schéma Réseau
|
#### Schéma Réseau
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Application
|
### Application
|
||||||
|
|
||||||
Plongeons dans la partie fun ! Ce qui a commencé comme une modeste configuration destinée à répondre à quelques besoins personnels s'est rapidement transformé en un écosystème complet de services open source, chacun répondant à un besoin spécifique ou simplement à la curiosité.
|
Plongeons dans la partie fun ! Ce qui a commencé comme une modeste configuration destinée à répondre à quelques besoins personnels s'est rapidement transformé en un écosystème complet de services open source, chacun répondant à un besoin spécifique ou simplement à la curiosité.
|
||||||
|
@ -18,14 +18,14 @@ In 2015, I upgraded to a Raspberry Pi 2, seeking better performance to run multi
|
|||||||
|
|
||||||
By 2018, the need for more RAM led me to a Raspberry Pi 3, allowing me to run even more applications. My 3 little machines were running happily together, in a quite ordered mess.
|
By 2018, the need for more RAM led me to a Raspberry Pi 3, allowing me to run even more applications. My 3 little machines were running happily together, in a quite ordered mess.
|
||||||
|
|
||||||
Finally, in 2019, my new job made me experiment the virtualization, with virtual machines and above all Docker. I wanted to try that at home, I took a significant step forward with a compact yet quite powerful headless mini PC that laid the foundation of my homelab.
|
Finally, in 2019, my new job made me discover the virtualization, with virtual machines and above all Docker. I wanted to try that at home, I took a significant step forward with a compact yet quite powerful headless mini PC that laid the foundation of my homelab.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Why a Homelab ?
|
## Why a Homelab ?
|
||||||
|
|
||||||
I wanted my own playground, a space where I could build but also safely break things, learn to fix them, and gain a deeper understanding of how they work.
|
I wanted my own playground, a space where I could build but also safely break things, learn to fix them, and gain a deeper understanding of how they work.
|
||||||
|
|
||||||
My single server was great, but testing anything risky on it became a problem. It was running critical services like home automation or DNS, when it was down, everything was down. The server had become indispensable, and believe me, having no lights or internet is a major incident in my family. Not so fun anymore.
|
My single server was great, but testing anything risky on it became a problem. It was running critical services like home automation or DNS, and believe me, having no lights or internet is a major incident in my family. The server had become indispensable. When it was down, everything was down. Not so fun anymore.
|
||||||
|
|
||||||
The first big challenge I set for myself was building a Kubernetes cluster. Sure, I could run one on a single node, but what’s the point of a cluster with only one node? You could argue that running Kubernetes to control my shutters is overkill, and you’d be right. But that wasn’t the point.
|
The first big challenge I set for myself was building a Kubernetes cluster. Sure, I could run one on a single node, but what’s the point of a cluster with only one node? You could argue that running Kubernetes to control my shutters is overkill, and you’d be right. But that wasn’t the point.
|
||||||
|
|
||||||
@ -43,6 +43,8 @@ That meant:
|
|||||||
- **High Availability:** Three nodes to ensure that no single point of failure would bring everything down.
|
- **High Availability:** Three nodes to ensure that no single point of failure would bring everything down.
|
||||||
- **Distributed Storage:** Data redundancy across nodes, not just for uptime but also to learn how enterprise-grade storage systems work.
|
- **Distributed Storage:** Data redundancy across nodes, not just for uptime but also to learn how enterprise-grade storage systems work.
|
||||||
- **Network Segmentation:** Multiple VLANs to mimic real-world network topologies, isolate services, and practice advanced networking.
|
- **Network Segmentation:** Multiple VLANs to mimic real-world network topologies, isolate services, and practice advanced networking.
|
||||||
|
|
||||||
|
Basically, I wanted to build a tiny datacenter in a closet.
|
||||||
### Constraints
|
### Constraints
|
||||||
|
|
||||||
Of course, reality doesn’t always align with ambitions. Here’s what I was up against:
|
Of course, reality doesn’t always align with ambitions. Here’s what I was up against:
|
||||||
@ -52,8 +54,6 @@ Of course, reality doesn’t always align with ambitions. Here’s what I was up
|
|||||||
- **Budget:** I wasn’t going to drop thousands on enterprise-grade hardware. The balance was finding reliable, second-hand gear that wouldn’t break the bank.
|
- **Budget:** I wasn’t going to drop thousands on enterprise-grade hardware. The balance was finding reliable, second-hand gear that wouldn’t break the bank.
|
||||||
- **Temperature**: I’m not gonna lie, I hadn't thought of it... Mini PCs don’t generate much heat, but network gear? That’s a different story. Lesson learned.
|
- **Temperature**: I’m not gonna lie, I hadn't thought of it... Mini PCs don’t generate much heat, but network gear? That’s a different story. Lesson learned.
|
||||||
|
|
||||||
In a nutshell, I wanted to build a tiny datacenter in a closet.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
## Infrastructure Overview
|
## Infrastructure Overview
|
||||||
|
|
||||||
@ -121,10 +121,8 @@ Inside the rack, I also added two 80mm fans to help with airflow. To keep everyt
|
|||||||
|
|
||||||
Here what is look like:
|
Here what is look like:
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
## Software Stack
|
## Software Stack
|
||||||
@ -184,7 +182,7 @@ This two-layer proxy setup centralizes SSL certificate management in **Caddy** w
|
|||||||
For secure remote access, I configured **WireGuard** on OPNsense. This lightweight VPN provides encrypted connectivity to my lab from anywhere, allowing management of all my services without exposing them all directly to the internet.
|
For secure remote access, I configured **WireGuard** on OPNsense. This lightweight VPN provides encrypted connectivity to my lab from anywhere, allowing management of all my services without exposing them all directly to the internet.
|
||||||
#### Network Diagram
|
#### Network Diagram
|
||||||
|
|
||||||

|

|
||||||
### Application
|
### Application
|
||||||
|
|
||||||
Let's dive into the fun part! What started as a modest setup meant to serve a few personal needs quickly turned into a full ecosystem of open source services, each solving a specific need or just satisfying curiosity.
|
Let's dive into the fun part! What started as a modest setup meant to serve a few personal needs quickly turned into a full ecosystem of open source services, each solving a specific need or just satisfying curiosity.
|
||||||
|
9
content/page/tags/index.fr.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Mots Clés
|
||||||
|
slug: tags
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
weight: 50
|
||||||
|
params:
|
||||||
|
icon: tag
|
||||||
|
---
|
9
content/page/tags/index.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Tags
|
||||||
|
slug: tags
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
weight: 50
|
||||||
|
params:
|
||||||
|
icon: tag
|
||||||
|
---
|
@ -55,7 +55,7 @@ L'idée est simple :
|
|||||||
6. La deuxième Gitea Action génère les pages web statiques tout en mettant à jour Hugo si nécessaire.
|
6. La deuxième Gitea Action génère les pages web statiques tout en mettant à jour Hugo si nécessaire.
|
||||||
7. Le blog est maintenant mis à jour (celui que vous lisez).
|
7. Le blog est maintenant mis à jour (celui que vous lisez).
|
||||||
|
|
||||||
De cette façon, je n'ai plus besoin de copier manuellement de fichiers ni de gérer les déploiements. Tout se déroule, de l'écriture de Markdown dans Obsidian au déploiement complet du site web.
|
De cette façon, je n'ai plus besoin de copier manuellement de fichiers ni de déclencher de déploiements. Tout se déroule comme prévu, de l'écriture de Markdown dans Obsidian au déploiement complet du site web.
|
||||||
|
|
||||||
---
|
---
|
||||||
## ⚙️ Implémentation
|
## ⚙️ Implémentation
|
||||||
@ -96,18 +96,17 @@ container:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Le runner apparaît dans `Administration Area`, sous `Actions`>`Runners`. Pour obtenir le token d'enrôlement , on clique sur le bouton `Create new Runner`
|
Le runner apparaît dans `Administration Area`, sous `Actions`>`Runners`. Pour obtenir le token d'enrôlement , on clique sur le bouton `Create new Runner`
|
||||||

|

|
||||||
|
|
||||||
### Étape 3 : Configurer les Gitea Actions pour le dépôt Obsidian
|
### Étape 3 : Configurer les Gitea Actions pour le dépôt Obsidian
|
||||||
|
|
||||||
J'ai d'abord activé les Gitea Actions. Celles-ci sont désactivées par défaut. Cochez la case `Enable Repository Actions` dans les paramètres de ce dépôt.
|
J'ai d'abord activé les Gitea Actions. Celles-ci sont désactivées par défaut. Cochez la case `Enable Repository Actions` dans les paramètres de ce dépôt.
|
||||||
|
|
||||||
J'ai créé un nouveau PAT (Personal Access Token) avec autorisation RW sur les dépôts.
|
J'ai créé un nouveau PAT (Personal Access Token) avec autorisation RW sur les dépôts.
|
||||||

|

|
||||||
|
|
||||||
J'ai ajouté le token comme secret `REPO_TOKEN` dans le dépôt.
|
J'ai ajouté le token comme secret `REPO_TOKEN` dans le dépôt.
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
J'ai dû créer le workflow qui lancera un conteneur et effectuera les opérations suivantes :
|
J'ai dû créer le workflow qui lancera un conteneur et effectuera les opérations suivantes :
|
||||||
1. Lorsque je crée/met à jour des fichiers du dossier `Blog`
|
1. Lorsque je crée/met à jour des fichiers du dossier `Blog`
|
||||||
@ -166,7 +165,7 @@ jobs:
|
|||||||
git push -u origin main
|
git push -u origin main
|
||||||
```
|
```
|
||||||
|
|
||||||
Obsidian utilise des liens de type wiki pour les images, comme `![[nom_image.png]]`, ce qui n'est pas compatible avec Hugo par défaut. Voici comment j'ai automatisé une solution de contournement dans un workflow Gitea Actions :
|
Obsidian utilise des liens de type wiki pour les images, comme ``, ce qui n'est pas compatible avec Hugo par défaut. Voici comment j'ai automatisé une solution de contournement dans un workflow Gitea Actions :
|
||||||
- Je trouve toutes les références d'images utilisées dans des fichiers `.md`.
|
- Je trouve toutes les références d'images utilisées dans des fichiers `.md`.
|
||||||
- Pour chaque image référencée, je mets à jour le lien dans les fichiers `.md` correspondants, comme ``.
|
- Pour chaque image référencée, je mets à jour le lien dans les fichiers `.md` correspondants, comme ``.
|
||||||
- Je copie ensuite ces images utilisées dans le répertoire statique du blog en remplaçant les espaces par des underscores.
|
- Je copie ensuite ces images utilisées dans le répertoire statique du blog en remplaçant les espaces par des underscores.
|
||||||
|
@ -95,18 +95,17 @@ container:
|
|||||||
```
|
```
|
||||||
|
|
||||||
The runner appears in the `Administration Area`, under `Actions`>`Runners`. To obtain the registration token, click on the `Create new Runner` button
|
The runner appears in the `Administration Area`, under `Actions`>`Runners`. To obtain the registration token, click on the `Create new Runner` button
|
||||||

|

|
||||||
|
|
||||||
### Step 3: Set up Gitea Actions for Obsidian Repository
|
### Step 3: Set up Gitea Actions for Obsidian Repository
|
||||||
|
|
||||||
First I enabled the Gitea Actions, this is disabled by default, tick the box `Enable Repository Actions` in the settings for that repository
|
First I enabled the Gitea Actions, this is disabled by default, tick the box `Enable Repository Actions` in the settings for that repository
|
||||||
|
|
||||||
I created a new PAT (Personal Access Token) with RW permission on the repositories
|
I created a new PAT (Personal Access Token) with RW permission on the repositories
|
||||||

|

|
||||||
|
|
||||||
I added this token as secret `REPO_TOKEN` in the repository
|
I added this token as secret `REPO_TOKEN` in the repository
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
I needed to create the workflow that will spin-up a container and do the following:
|
I needed to create the workflow that will spin-up a container and do the following:
|
||||||
1. When I push new/updated files in the `Blog` folder
|
1. When I push new/updated files in the `Blog` folder
|
||||||
@ -165,7 +164,7 @@ jobs:
|
|||||||
git push -u origin main
|
git push -u origin main
|
||||||
```
|
```
|
||||||
|
|
||||||
Obsidian uses wiki-style links for images, like `![[image name.png]]`, which isn't compatible with Hugo out of the box. Here's how I automated a workaround in a Gitea Actions workflow:
|
Obsidian uses wiki-style links for images, like ``, which isn't compatible with Hugo out of the box. Here's how I automated a workaround in a Gitea Actions workflow:
|
||||||
- I find all used image references in `.md` files.
|
- I find all used image references in `.md` files.
|
||||||
- For each referenced image, I update the link in relevant `.md` files like ``.
|
- For each referenced image, I update the link in relevant `.md` files like ``.
|
||||||
- I then copy those used images to the blog's static directory while replacing white-spaces by underscores.
|
- I then copy those used images to the blog's static directory while replacing white-spaces by underscores.
|
||||||
|
@ -31,7 +31,7 @@ Tout d'abord, nous devons télécharger une image compatible cloud-init. Bien qu
|
|||||||
Trouvez des images compatibles cloud dans le [Guide des images OpenStack](https://docs.openstack.org/image-guide/obtain-images.html).
|
Trouvez des images compatibles cloud dans le [Guide des images OpenStack](https://docs.openstack.org/image-guide/obtain-images.html).
|
||||||
|
|
||||||
Dans Proxmox, accédez à **Storage > ISO Images > Upload** pour uploader l'image téléchargée.
|
Dans Proxmox, accédez à **Storage > ISO Images > Upload** pour uploader l'image téléchargée.
|
||||||

|

|
||||||
## Créer la VM
|
## Créer la VM
|
||||||
|
|
||||||
Ensuite, on crée une VM en utilisant la ligne de commande (CLI) depuis le nœud Proxmox avec la commande suivantes :
|
Ensuite, on crée une VM en utilisant la ligne de commande (CLI) depuis le nœud Proxmox avec la commande suivantes :
|
||||||
|
@ -31,8 +31,7 @@ First, we need to download an image with cloud-init support. Although Rocky Linu
|
|||||||
Find cloud-ready images from the [OpenStack Image Guide](https://docs.openstack.org/image-guide/obtain-images.html).
|
Find cloud-ready images from the [OpenStack Image Guide](https://docs.openstack.org/image-guide/obtain-images.html).
|
||||||
|
|
||||||
In Proxmox, navigate to **Storage > ISO Images > Upload** to upload the downloaded image.
|
In Proxmox, navigate to **Storage > ISO Images > Upload** to upload the downloaded image.
|
||||||

|

|
||||||
|
|
||||||
## Create the VM
|
## Create the VM
|
||||||
|
|
||||||
Next, we create the VM using the command line interface (CLI) from the Proxmox node with the following command:
|
Next, we create the VM using the command line interface (CLI) from the Proxmox node with the following command:
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
title: Random post
|
|
||||||
description:
|
|
||||||
date: 2025-05-25
|
|
||||||
draft: false
|
|
||||||
tags:
|
|
||||||
categories:
|
|
||||||
---
|
|
||||||
|
|
||||||
Hi there, how are you ?
|
|
||||||
|
|
||||||
I'm
|
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |