iac-homelab

Description

Ce repository contient l'Infrastructure as Code (IaC) pour un environnement de homelab. Il utilise Terraform pour provisionner des machines virtuelles sur Proxmox VE avec une configuration automatique via Cloud-Init et une intégration Tailscale.

Fonctionnalités

  • 🚀 Déploiement automatisé : Création de VMs via Terraform
  • 🔧 Configuration automatique : Initialisation via Cloud-Init
  • 🌐 Réseau sécurisé : Connexion automatique à Tailscale
  • 📦 Templates multiples : Support Ubuntu, Debian, Alpine, Rocky, CentOS
  • 🏷️ Organisation : Système de tags pour classifier les VMs

Structure du projet

iac-homelab/
├── README.md
├── terraform/
│   └── prod/
│       ├── 01-virtual-machines.tf    # Configuration des VMs
│       ├── 02-cloud-init.tf          # Configuration Cloud-Init
│       ├── providers.tf              # Providers Terraform
│       ├── variables.tf              # Variables
│       ├── terraform.tfvars          # Configuration personnalisée
│       └── terraform.tfvars.example  # Exemple de configuration
└── cloud-init/
    └── user-data.yml.tftpl          # Template Cloud-Init

Prérequis

  • Terraform : Version récente installée
  • Proxmox VE : Serveur opérationnel avec API activée
  • Templates VM : Templates configurés avec les tags appropriés
  • Tailscale : Compte avec clé d'authentification
  • SSH : Clés SSH configurées

Configuration initiale

1. Proxmox VE

Créer un utilisateur dédié avec les permissions nécessaires :

# Créer le rôle
pveum role add TerraformProv -privs "Datastore.Allocate Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Console VM.Migrate VM.Monitor VM.PowerMgmt SDN.Use"

# Créer l'utilisateur
pveum user add terraform@pve --password <mot_de_passe_securise>
pveum acl modify / -user terraform@pve -role TerraformProv

# Générer le token API
pveum user token add terraform@pve terraform -expire 0 -privsep 0

2. Templates VM

Créer des templates sur Proxmox avec les tags suivants :

OS Tags requis
Ubuntu ["ubuntu", "template"]
Debian ["debian", "template"]
Alpine ["alpine", "template"]
Rocky ["rocky", "template"]
CentOS ["centos", "template"]

Déploiement

1. Configuration

# Cloner le repository
git clone <repository-url>
cd iac-homelab/terraform/prod

# Copier le fichier d'exemple
cp terraform.tfvars.example terraform.tfvars

# Éditer avec vos valeurs
vim terraform.tfvars

2. Variables importantes

Dans terraform.tfvars, configurer :

# Proxmox
proxmox_url = "https://pve01.taila5ad8.ts.net:8006"
proxmox_api_token = "terraform@pve!terraform=<token>"

# Tailscale
tailscale_auth_key = "tskey-auth-<votre-cle>"

# SSH
admin_ssh_public_key_path = "~/.ssh/id_rsa.pub"

# VMs
virtual_machines = {
  "monitoring" = {
    os       = "debian"
    cores    = 2
    memory   = 4096
    disk_gb  = 30
    ip       = "192.168.1.161"
    gateway  = "192.168.1.254"
    tags     = ["monitoring"]
  }
}

3. Déploiement

# Initialisation
terraform init

# Vérification
terraform plan

# Déploiement
terraform apply

Configuration des VMs

Options de base

"nom-vm" = {
  os       = "debian"        # Template à utiliser
  cores    = 2               # Nombre de cœurs CPU
  memory   = 4096            # RAM en MB
  disk_gb  = 30              # Taille du disque en GB
  ip       = "192.168.1.100" # Adresse IP statique
  gateway  = "192.168.1.254" # Passerelle réseau
  tags     = ["web"]         # Tags pour l'organisation
}

Options avancées

"nom-vm-avancee" = {
  # Configuration de base
  os       = "ubuntu"
  cores    = 4
  memory   = 8192
  disk_gb  = 50
  ip       = "192.168.1.101"
  gateway  = "192.168.1.254"
  
  # Options avancées
  cpu_type       = "host"
  datastore      = "local-lvm"
  network_bridge = "vmbr0"
  username       = "admin"
  
  # Disques supplémentaires
  additional_disks = [
    {
      interface = "scsi1"
      datastore = "local-lvm"
      size      = 100
    }
  ]
}

Fonctionnalités automatiques

Cloud-Init

Chaque VM est automatiquement configurée avec :

  • Installation des packages de base
  • Configuration de l'utilisateur et des clés SSH
  • Installation du QEMU Guest Agent
  • Configuration du hostname

Tailscale

Installation et connexion automatique :

  • Téléchargement et installation de Tailscale
  • Connexion au réseau avec la clé d'authentification
  • Configuration du hostname sur le réseau

Maintenance

Ajouter une VM

# 1. Ajouter la configuration dans terraform.tfvars
# 2. Appliquer les changements
terraform apply

Supprimer une VM

# 1. Retirer la configuration de terraform.tfvars
# 2. Appliquer les changements
terraform apply

Modifier une VM

# 1. Modifier la configuration dans terraform.tfvars
# 2. Vérifier les changements
terraform plan
# 3. Appliquer
terraform apply

Sécurité

  • Authentification par tokens API
  • Connexion SSH par clés uniquement
  • Réseau sécurisé via Tailscale
  • Isolation des VMs
  • Permissions minimales sur Proxmox

Dépannage

Problèmes courants

Problème Solution
Template non trouvé Vérifier les tags sur Proxmox
IP déjà utilisée Vérifier les conflits d'adresses
Erreur SSH Vérifier le chemin de la clé publique
Tailscale Vérifier la validité de la clé d'authentification

Logs détaillés

# Logs Terraform détaillés
TF_LOG=DEBUG terraform apply

# État des ressources
terraform show

# Liste des ressources
terraform state list

Ressources recommandées

Type de service CPU RAM Disque
Monitoring 2 4GB 30GB
Web server 2 2GB 20GB
Database 4+ 8GB+ 50GB+
Kubernetes 4+ 4GB+ 40GB+

Support

Description
This repository contains Infrastructure as Code (IaC) configurations for a home lab environment.
Readme 209 KiB
Languages
HCL 100%