Ce document contient les livrables issus de la phase de design du homelab. On doit se poser les bonnes questions pour répondre efficacement au besoin de départ, à savoir, disposer d’un environnement où l’on peut déployer rapidement des serveurs prêt à l’emploi pour divers cas d’usage. La conception est susceptible de changer au fur et à mesure des travaux, cette page est donc susceptible d’évoluer (mise à jour de l’inventaire, ajout de services/fonctionnalités, …)
Une évolution est prévue afin d’intégrer un environnement Windows également. Ce projet est en accessible dans la catégorie
Homelab Windows
1. Le hardware
Cette section est susceptible d’évoluer avec le temps. Des évolutions peuvent être appliquées avec l’acquisition de plus de compute pour améliorer les performances et la résilience ainsi que la mise en place d’un système de stockage plus adapté comme un NAS.
Pour mettre en place ce homelab, il nous faut un appareil qui dispose de suffisamment de compute soit au moins 32Go de RAM et 16vCPU ainsi qu’un minimum d’espace disque soit 1To. De plus, cette machine va être disponible tout le temps 24h/24 7j/7, il est donc important de prendre une solution qui ne consomme pas trop d’énergie.
| Date | Compute | Stockage | Niveau de maturité |
|---|---|---|---|
| 11/04/2025 | 1 node - E3B Mini PC (32Go RAM, 16 vCPU, 512Go SSD) | 1 node - E3B Mini PC (512Go SSD) | 1 🐟 |
2. Les environnements
Le homelab va être divisé en deux sous-réseaux principaux. Le premier ayant pour objectif d’héberger les divers services utiles au bon fonctionnement du homelab. Le second sera dédié au déploiement et à l’utilisation des VMs et containers pour les tests futurs de technologie, OS, etc.
| Nom | Description | Adressage |
|---|---|---|
| Core | Environnement de base du homelab (prod) | 192.168.100.0/24 |
| VMS | Environnement de déploiement des VMs (sandbox) | 192.168.200.0/24 |
3. Les services
Pour disposer d’un environnement fonctionnel et confortable, nous avons besoin de différents services que l’on va détailler dans les sous-sections suivantes.
3.1. Firewall
Il s’agit de la seule VM qui aura une interface réseau directement sur mon réseau local (interface WAN d’un point de vue Firewall) et de ce fait, obtiendra une IP en 192.168.1.0/24. L’objectif est de gérer les autorisations concernant les communications entrantes et sortantes au niveau du homelab. Le choix technique se portera sur la solution pfSense.
3.2. Serveur DNS
Le DNS va nous permettre d’utiliser les noms associés à nos VM plutôt que les IP avec deux zones DNS .homelab (DNS interne du homelab) ainsi que ng-hl.com (le domaine qui portera les services exposés sur mon réseau local). Le choix technique se portera sur la solution bind9.
3.3. Machine d’administration centrale
Cette VM sera le point d’entrée vers les ressources du homelab. L’objectif est d’avoir une machine en frontal juste derrière le firewall avec un accès SSH ouvert depuis le WAN (mon réseau local) accessible à certaines IP. Cette machine pourra faire office de rebond et pourra héberger un certain nombre d’outils.
3.4. Serveur de gestion des configuration
Ce service va nous permettre de déployer les configurations des OS que nous déployons. Les actions seront initialisées manuellement dans un premier temps puis nous pourrons intégrer l’outil au sein d’une pipeline via Gitlab-CI plus tard. Le choix technique se portera sur la solution Ansible.
3.5. Coffre fort numérique
Le coffre-fort numérique va nous permettre de stocker divers mots de passe et secrets. Le choix technique se portera sur VaultWarden, solution alternative et open source à BitWarden.
3.6. Serveur de versionning
Le serveur de versionning permettra la centralisation des différents éléments relatifs à notre infrastructure notamment concernant l’infrastructure as code avec OpenTofu et Ansible. De plus, cette VM ouvre la possibilité d’automatiser nos déploiements futurs de VM via les runners et les fonctionnalités de la CI/CD. Le choix technique se portera sur la solution Gitlab-ce.
3.7. Stack d’observabilité
L’objectif est de disposer d’outils nous permettant de monitorer et de superviser les OS et les services grâce à la collecte des métriques ainsi qu’à l’alerting. Le choix technique se portera sur la “suite” Prometheus/Grafana.
3.8. Dashboard central
Afin de faciliter l’administration du homelab et l’utilisation des différents services, nous allons mettre en place un dashboard moderne et confortable afin d’inventorier l’intégralité des services mis à disposition au sein du homelab. Le choix technique se portera sur Homepage
4. Schéma réseau physique

4. Schéma réseau logique

5. Priorisation
## 5.1 Infrastructure VM-Factory
Afin de disposer rapidement d’un homelab fonctionnel avec le minimum de services requis, nous allons définir différents niveaux de maturité avec les mises en place des différents services qui y sont associées.
| Niveau | Description | Services | Déploiement |
|---|---|---|---|
| 🐟 | Le homelab est fonctionnel, il est possible de déployer des VMs préconfigurées à la main via des templates. | Firewall, DNS, machine d’administration | Template de VM sur Proxmox |
| 🐬 | Le déploiement des VM est uniforme et automatisé. La machine de rebond centralisée peut communiquer avec l’entièreté des machines. Le nom de domaine ng-hl.com est en place pour gérer l’exposition des services vers l’extérieur. Un renouvellement automatique du certificat via ACME est également fonctionnel. La stack d’observabilité est en place. | Gitlab-ce, , Ansible, PKI, certificat wildcard, acme, Prometheus, Grafana, AlertManager | Template de VM sur Proxmox avec OpenTofu et Ansible dans une pipeline Gitlab CI/CD |
| 🐳 | Le dashboard Homepage prêt à l’emploi avec une évolution dynamique. Renforcement de la sécurité avec l’adoption du 0 trust au sein du homelab. | PKI interne, Homepage, notifications (Discord ?) | Image préconfigurée sur Proxmox avec OpenTofu et Ansible dans une pipeline Gitlab CI/CD |
6. Todo lists
6.1. 🐟
- Niveau 1
- Installation de Proxmox VE
- Configuration de Proxmox VE
- Création de l’utilisateur d’administration
- Mise en place des bons dépôts pour les mises à jour
- Mise en place de la sauvegarde déportée
- Configuration des interfaces vmbr1 et vmbr2
- Tester le bon fonctionnement
- Installation de pfSense
- Importer l’ISO de pfSense
- Configurer la VM avec trois interfaces (vmbr0, vmbr1 et vmbr2)
- Installer l’OS via l’ISO
- Rendre disponible l’interface d’administration depuis le WAN (réseau local)
- Créer un template de Debian 12
- Importer l’ISO de Debian 12
- Installer l’OS avec les éléments suivants
- Nom : debian12-template.homelab
- Disque : LVM partitionnement manuel
- Service : openssh-server
- Utilisateur : Création de l’utilisateur d’administration
- Authentification : Intégrer la clé SSH publique de l’utilisateur de la machine de gestion centralisée
- Utilisateur : Création de l’utilisateur ansible (groupe sudo)
- Authentification : Intégrer la clé SSH publique de l’utilisateur ansible
- Réseau : Configuration statique 192.168.100.11/24
- Tester le bon fonctionnement avec le déploiement d’une VM de test
- Convertir en tant que template
- Créer un template de RockyLinux 9
- Importer l’ISO de RockyLinux 9
- Installer l’OS avec les éléments suivants
- Nom : rocky9-template.homelab
- Disque : LVM partitionnement manuel
- Service : openssh-server
- Utilisateur : Création de l’utilisateur d’administration
- Authentification : Intégrer la clé SSH publique de l’utilisateur de la machine de gestion centralisée
- Utilisateur : Création de l’utilisateur ansible
- Authentification : Intégrer la clé SSH publique de l’utilisateur ansible
- Réseau : Configuration statique 192.168.100.12/24
- Tester le bon fonctionnement avec le déploiement d’une VM de test
- Convertir en tant que template
- Installation du DNS (Bind9)
- Mise en place de l’OS via les templates
- Activer la sauvegarde depuis Proxmox
- Modifications mineures de l’OS (changement du hostname, configuration réseau)
- Installation de bind9
- Configuration de la zone DNS et du forwarder
- Configuration de la zone DNS inverse
- Tests
- Création de la machine d’administration centrale
admin-core- Mise en place de l’OS via les templates
- Activer la sauvegarde depuis Proxmox
- Modifications mineures de l’OS (changement du hostname, configuration réseau)
- Modification de la configuration du résolveur DNS pour admin-core
- Test de la résolution interne depuis admin-core
- Test de la résolution externe depuis admin-core
- Importer les clés privées SSH utilisées au sein du homelab
- Modification du FW (accès SSH depuis le WAN uniquement sur cette VM)
6.2. 🐬
- Niveau 2
-
Mise en place de Ansible
- Mise en place de l’OS via les templates
- Activer la sauvegarde depuis Proxmox
- Modifications mineures de l’OS (changement du hostname, configuration réseau)
- Intégration sur admin-core (alias ssh)
- Installation de Ansible (via pipx)
- Configuration de Ansible
- Intégration des hôtes déjà existants
- Installer le paquet python3
- Tester le bon fonctionnement des exécutions Ansible
- Gestion de l’adresse IP temporaire pour les nouvelles VM
- Convertir les actions manuelles de configurations mineures avec Ansible (intégrer les actions de la section Sécurisation -> Templates / VM, voir plus bas)
- Ajouter un linter
- Tester le bon fonctionnement
-
Sécurisation
- pfSense
- Activer le HTTPS
- Activer le renouvellement automatique du certificat TLS
- Ajout de l’entrée DNS pfsense.ng-hl.com
- Installation du module acme
- Configuration de l’Account Key acme
- Configuration du certificate acme
- Test avec le staging acme
- Faire un snapshot avec le passage en production
- Test avec la production acme
- Mise en place du HTTPS avec le certificat nouvellement créé
- Vérification des autres services + forcer un renouvellement via acme depuis pfSense et depuis acme-core
- Proxmox VE
- Activer le HTTPS
- Activer le renouvellement automatique du certificat TLS
- Ajout de l’entrée DNS pve.ng-hl.com
- Création de l’account ACME sur Proxmox VE
- Création du plugin ACME de type DNS
- Demande de certificat via ACME depuis Proxmox VE
- Templates / VM
- Durcissement de SSH
- Désactivation de l’accès root en direct via SSH
- Accès par clé uniquement
- Mise en place de fail2ban
- Mise en place de nftables
- Configuration de base (ping et ssh depuis admin-core)
- Durcissement de SSH
- pfSense
-
Mise en place de Gitlab
- Mise en place de l’OS via les templates
- Configuration de l’OS via Ansible
- Installation de Gitlab CE
- Configuration de base de Gitlab CE
- Configuration du HTTPS avec le certificat *.ng-hl.com
- Configuration du renouvellement automatique du certificat
- Tester le renouvellement du certificat (forcer)
- Création d’un compte administrateur nominatif
- Création du groupe core
- Création du projet core/ansible et versionner le code existant
- Création du projet core/deploy
- Configuration l’utilisateur ngobert
- Créer la paire de clé SSH pour l’utilisation de Git
- Stocker la pare de clé SSH au niveau du coffre-fort
-
OpenTofu
- Créer le projet core/OpenTofu
- Intégration du provider Proxmox
- Création d’une VM
- Suppression d’une VM
- Récupérer les informations pour avoir un inventaire dynamique
-
Nom de domaine
- Réserver un nom de domaine (CloudFlare)
- Générer le certificat wildcard *.ng-hl.com
- Gérer le renouvellement automatique avec acme.sh
-
Append : Coffre fort (Vaultwarden)
- Mise en place de l’OS via les templates
- Configuration de l’OS via Ansible ou manuellement suivant l’exécution de la tâche
- Installation de Vaultwarden
- Configuration de Vaultwarden
- Test d’utilisation
- Stockage des éléments critiques
- PKI
- Clés SSH
- Attribuer des mots de passe uniques (utilisateur ngobert, root et pfSense)
- Intégration avec Gitlab CI
- Tests
-
Certificat wildcard *.ng-hl.com
- Réservation du nom de domaine
- Création du certificat
- Automatisation du renouvellement du certificat
- Configuration de acme + test de renouvellement forcé
- Script de déploiement du nouveau certificat (indexé sur la liste des services exposés)
- Test de bout en bout
-
Pipeline CI/CD “vm-factory”
- Proxmox VE
- Création d’un utilisateur dédié
opentofu-deploy - Application des droits nécessaires
- Génération du token
- Création d’un utilisateur dédié
- OpenTofu
- Création des fichiers nécessaires pour le déploiements
- variables.tf
- provider.tf
- main.tf
- Création des fichiers nécessaires pour le déploiements
- Proxmox VE
-
6.3. 🐳
- Niveau 3
- Stack d’observabilité Prometheus / Grafana / AlertManager
- Ajout des entrées DNS
- reverseproxysup-core.homelab rps-core.homelab (CNAME) supervision-core.homelab (CNAME)
- prometheus-core.homelab
- grafan-core.homelab
- alertmanager-core.homelab am-core.homelab (CNAME)
- supervision.ng-hl.com prometheus.ng-hl.com (CNAME) grafana.ng-hl.com (CNAME) alertmanager.ng-hl.com (CNAME)
- Rôle de déploiement Ansible reverse-proxy-sup
- Reverse Proxy Sup (rps)
- Mise en place du serveur prometheus-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- nginx
- Installation et configuration
- Lier avec acme-deploy.sh depuis acme-core
- Connexion SSH en root via la clé SSH
id_acme - Rajout de la target
rps-core - Rajout de la commande de reload du daemon nginx
- Connexion SSH en root via la clé SSH
- Déployer le certificat et la privkey du certificat wildcard
- Tester un renouvellement
- Créer les vHosts
- supervision.conf
- Configuration du TLS avec le certificat wildcard
- prometheus.conf
- grafana.conf
- alertmanager.conf
- supervision.conf
- Ouvrir les flux via nftables
- Ouvrir le flux depuis l’extérieur via pfSense
- Fiche d’exploitaiton nginx
- Prometheus
- Mise en place du serveur prometheus-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Podman
- Installation et configuration
- Création du volume prometheus-data
- Déploiement de Prometheus
- Prise en compte de la configuration de Prometheus
- Mise à jour de la configuration nftables (accès port 9090 et forwarder sur podman0)
- Test de la persistence de la données
- Validation de la remontée de métriques Node Exporter
- Intégration d’un hôte de test
- Création d’un rôle Ansible “prometheus-clients”
- Intégration de tous les serveurs existants
- Création d’une matrice pour les services sur les serveurs
- Intégration de la supervision pour l’état des services (daemons) via Blackbox Exporter
- Surveillance de l’exposition du port associé via Node Exporter
- Rédiger une fiche d’exploitation
- Grafana
- Mise en place du serveur grafana-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Podman
- Installation et configuration
- Création du volume grafana-data
- Déploiement de Grafana
- Prise en compte de la datasource Prometheus
- Prise en compte du dashboard Node Exporter
- Prise en compte du dashboard Blackbox Exporter
- Mise à jour de la configuration nftables (accès port 3000 et forwarder sur podman0)
- Test de la persistence de la données
- Validation du dashboard Node Exporter
- Rédiger une ficher d’exploitation
- AlertManager
- Mise en place du serveur alertmanager-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Podman
- Installation et configuration
- Création du volume alertmanager-data
- Déploiement de AlertManager
- Configuration du template de mail
- Node Exporter
- Blackbox Exporter
- Test KO
- Test retour OK
- Mise en place du self-check
- Installation de pushgateway
- Validation de l’envoi de la métrique
- Mise en place du cron pour pousser la métrique
supervision_selfcheck - Création de la rule
selfcheck-rules.yml - Création du template de mail
- Test
- Rédiger une fiche d’exploitation
- Ajout des entrées DNS
- [ ] PKI Interne
- Netbox
- Mise en place du serveur netbox-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Installation de la stack Netbox
- PostgreSQL
- Installation de PostgreSQL
- Création de la DB
- Création de l’utilisation de la DB
- Installation de Redis
- Netbox
- Installation
- Création de l’utilisateur système pour netbox
- Modification de la configuration
- Gunicorn
- Installation
- Configuration
- uWSGI
- Installation
- Configuration
- nginx
- Installation
- Configuration
- Mise en place du TLS
- PostgreSQL
- Rédiger une fiche d’exploitation
- Intégrer l’existant
- IPAM
- Virtualisation
- Rédiger une fiche d’exploitation
- Gitlab CI/CD “vm-factory”
- Lien avec Prometheus
- Lien avec Grafana
- Lien avec NetBox
- Lien avec Homepage
- Rédiger une fiche d’exploitation
- Homepage
- Mise en place du serveur homepage-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Création du volume Docker
- Déploiement via docker-compose
- Mise en place du TLS
- Exposition via homepage.ng-hl.com
- Evolution dynamique avec la CI/CD “vm-factory”
- ELK
- Mise en place du serveur elk-core
- Intégration au niveau de la sauvegarde Proxmox VE
- Configuration de l’OS avec Ansible
- Installation de ELK
- Elastic Search
- Installation
- Configuration
- Mise en place du TLS : elastic.ng-hl.com
- Ficher d’exploitation
- Kibana
- Installation
- Configuration
- Mise en place du TLS kibana.ng-hl.com
- Fiche d’exploitation
- Logstash
- Installation
- Configuration
- Installation de Filebeat
- Configuration de Filebeat
- Mise en place du TLS kibana.ng-hl.com
- Fiche d’exploitation
- Elastic Search
- Consul
- Wazuh
- Infrastructure secondaire sous K8s
- Stack d’observabilité Prometheus / Grafana / AlertManager
6.4. Level 4 (WIP)
- Architecture 0 trust
- Flux de la stack d’observabilité
- Surveillance des ports exposés sur le réseau homelab
6.5. Projets annexes
- Hébergement d’un model IA
- Mise en place du serveur ollama-vms
- Configuration de l’OS via Ansible
- Podman
- Installation et configuration
- Création du volume ollama-data
- Déploiement de la stack Ollama + Open-webui
- Création du fichier docker-compose.yml
- Déploiement de ollama
- Création du volume ollama_data
- Déploiement de open-webui
- Création du volume open-webui_data
- Mise à jour de la configuration nftables (accès port 443 et forwarder sur podman0)
- Test de la persistence de la données
- Validation du dashboard Node Exporter
- Intégrer l’observabilité sur les performances du model IA
- Rédiger une fiche d’exploitation
- Podman
- Agents IA
- Équipe de développement d’agents IA
- Serveur crewai-vms
- Création du serveur
- Configuration via Ansible
- Installation de crewai via python uv
- Configuration de crewai
- Création du dépôt dev-ia sur Gitlab
- Provisionnement sur ChatGPT
- Configuration des prompts (1 chef d’équipe, 1 développeur, 1 testeur, 1 rédacteur de documentation)
- Serveur crewai-vms
- Équipe de développement d’agents IA
7. Inventaire
| Hostname | IP | OS | Hostname exposé |
|---|---|---|---|
| pfsense-core.homelab | 192.168.100.254 | Debian 12.10 | |
| dns-core.homelab | 192.168.100.253 | Debian 12.10 | |
| admin-core.homelab | 192.168.100.252 | Debian 12.10 | |
| pki-core.homelab | 192.168.100.251 | Debian 12.10 | |
| ansible-core.homelab | 192.168.100.250 | Debian 12.10 | |
| acme-core.homelab | 192.168.100.248 | Debian 12.10 | |
| vaultwarden-core.homelab | 192.168.100.249 | Debian 12.10 | vaultwarden-core.ng-hl.com vaultwarden.ng-hl.com (CNAME) |
| gitlab-core.homelab | 192.168.100.247 | Debian 12.10 | gitlab-core.ng-hl.com gitlab.ng-hl.com (CNAME) |
| opentofu-core.homelab | 192.168.100.246 | Debian 12.10 | |
| prometheus-core.homelab | 192.168.100.245 | Debian 12.10 | prometheus-core.ng-hl.com prometheus.ng-hl.com (CNAME) |
| grafana-core.homelab | 192.168.100.244 | Debian 12.10 | grafana-core.ng-hl.com grafana.ng-hl.com (CNAME) |
| alertmanager-core.homelab am-core.homelab (CNAME) | 192.168.100.243 | Debian 12.10 | alertmanager-core.ng-hl.com alertmanager.ng-hl.com (CNAME) |
| reverseproxysup-core.homelab rps-core.homelab (CNAME) | 192.168.100.242 | Debian 12.10 | supervision-core.ng-hl.com supervision.ng-hl.com (CNAME) |
| mail-core.homelab | 192.168.100.241 | Debian 12.10 | |
| ansibledev-core.homelab | 192.168.100.11 | Debian 12.10 | |
| debian12-template-core.homelab | 192.168.100.10 | Debian 12.10 |