Update docs and rename domain suffix

The commit message should be:

``` Translate docs to French and update domain examples

Change the example domain from lab.home.arnodo.fr to taila5ad8.ts.net
and convert documentation to French. Remove LXC container configuration
that was not being used. ```

This message captures the key changes: 1. Translation of documentation
to French 2. Update of domain examples throughout the codebase 3.
Removal of unused LXC container configuration

The changes warrant a body since there are multiple related but distinct
changes being made. The message follows the Git commit style guidelines,
using imperative mood and keeping the first line under 50 characters.
This commit is contained in:
darnodo
2025-07-03 19:59:02 +02:00
parent 7cd93ba978
commit 90b49eee17
5 changed files with 363 additions and 540 deletions

290
README.md
View File

@@ -2,70 +2,262 @@
## Description ## Description
This repository contains Infrastructure as Code (IaC) configurations for a home lab environment. It uses Terraform to provision virtual machines on Proxmox VE. The initial configuration of the VMs, including the installation and activation of Tailscale, is handled automatically by Cloud-Init. 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.
## Usage ## Fonctionnalités
### Prerequisites - 🚀 **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
- Terraform installed on your local machine. ## Structure du projet
- A Proxmox VE instance up and running.
- A Tailscale account and an authentication key.
### Proxmox Setup ```
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
```
For Terraform to interact with your Proxmox environment, you must create a dedicated user with specific, limited permissions. ## Prérequis
1. **Create a role (`TerraformProv`) with the necessary privileges:** - **Terraform** : Version récente installée
```bash - **Proxmox VE** : Serveur opérationnel avec API activée
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" - **Templates VM** : Templates configurés avec les tags appropriés
``` - **Tailscale** : Compte avec clé d'authentification
- **SSH** : Clés SSH configurées
2. **Create a dedicated user (`terraform@pve`):** ## Configuration initiale
```bash
pveum user add terraform@pve --password <your_secure_password>
pveum acl modify / -user terraform@pve -role TerraformProv
```
3. **Generate an API token for the user:** ### 1. Proxmox VE
```bash
pveum user token add terraform@pve terraform -expire 0 -privsep 0
```
Securely store the generated token ID and secret, as you will need them to authenticate Terraform.
### Provisioning Infrastructure Créer un utilisateur dédié avec les permissions nécessaires :
1. **Clone this repository** to your local machine. ```bash
# 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"
2. **Navigate to the production environment directory:** # Créer l'utilisateur
```bash pveum user add terraform@pve --password <mot_de_passe_securise>
cd iac-homelab/terraform/prod pveum acl modify / -user terraform@pve -role TerraformProv
```
3. **Create a `terraform.tfvars` file.** You can copy the example file to get started: # Générer le token API
```bash pveum user token add terraform@pve terraform -expire 0 -privsep 0
cp terraform.tfvars.example terraform.tfvars ```
```
Edit this file to include your Proxmox API credentials and your Tailscale authentication key.
4. **Initialize Terraform:** ### 2. Templates VM
```bash
terraform init
```
5. **Plan and apply the changes:** Créer des templates sur Proxmox avec les tags suivants :
```bash
terraform plan
terraform apply
```
Terraform will show you a plan of the resources to be created. If you agree, confirm the apply.
### Configuration via Cloud-Init | OS | Tags requis |
|---|---|
| Ubuntu | `["ubuntu", "template"]` |
| Debian | `["debian", "template"]` |
| Alpine | `["alpine", "template"]` |
| Rocky | `["rocky", "template"]` |
| CentOS | `["centos", "template"]` |
The configuration of virtual machines is handled automatically on the first boot by Cloud-Init. The Terraform configuration injects a script that performs the following actions: ## Déploiement
- Updates and upgrades all system packages. ### 1. Configuration
- Installs the Tailscale agent.
- Connects the new machine to your Tailscale network using the `tailscale_auth_key` you provided.
Once `terraform apply` is complete, your new virtual machines will automatically appear in your Tailscale admin console shortly after they boot up. ```bash
# 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 :
```hcl
# 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
```bash
# Initialisation
terraform init
# Vérification
terraform plan
# Déploiement
terraform apply
```
## Configuration des VMs
### Options de base
```hcl
"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
```hcl
"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
```bash
# 1. Ajouter la configuration dans terraform.tfvars
# 2. Appliquer les changements
terraform apply
```
### Supprimer une VM
```bash
# 1. Retirer la configuration de terraform.tfvars
# 2. Appliquer les changements
terraform apply
```
### Modifier une VM
```bash
# 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
```bash
# 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
- 📚 [Documentation Terraform Proxmox Provider](https://registry.terraform.io/providers/bpg/proxmox/latest/docs)
- 🔧 [Proxmox VE Documentation](https://pve.proxmox.com/wiki/Main_Page)
- 🌐 [Tailscale Documentation](https://tailscale.com/kb/)

View File

@@ -1,196 +0,0 @@
# Fichier: terraform/prod/lxc-containers.tf
# Description: Déploiement des conteneurs LXC sur Proxmox
# Status: Préparatoire - À développer selon les besoins
# NOTE: Ce fichier est préparé pour le futur déploiement de conteneurs LXC
# Il n'est pas encore fonctionnel et servira de base pour le développement
# 1. Récupération des templates LXC disponibles
# data "proxmox_virtual_environment_container_templates" "lxc_templates" {
# node_name = var.target_node
# }
# 2. Mapping des templates LXC par distribution
# locals {
# # Distributions LXC supportées
# supported_lxc_distros = toset(["ubuntu", "debian", "alpine", "centos"])
#
# # Map des templates LXC par distribution (à implémenter)
# lxc_template_map = {
# # Structure exemple :
# # "ubuntu" = "ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
# # "debian" = "debian-11-standard_11.0-1_amd64.tar.gz"
# # "alpine" = "alpine-3.14-default_20210623_amd64.tar.xz"
# }
# }
# 3. Création des conteneurs LXC
# resource "proxmox_virtual_environment_container" "lxc_containers" {
# for_each = var.lxc_containers
#
# # Configuration de base
# node_name = var.target_node
# vm_id = each.value.vm_id
#
# # Configuration du conteneur
# description = "LXC Container: ${each.key}"
# tags = concat(["terraform-managed", "lxc"], each.value.tags)
#
# # Configuration système
# unprivileged = lookup(each.value, "unprivileged", true)
# on_boot = lookup(each.value, "on_boot", true)
# started = lookup(each.value, "started", true)
#
# # Configuration OS
# operating_system {
# template_file_id = each.value.template
# type = lookup(each.value, "os_type", "ubuntu")
# }
#
# # Configuration CPU et mémoire
# cpu {
# cores = each.value.cores
# }
#
# memory {
# dedicated = each.value.memory
# swap = lookup(each.value, "swap", 512)
# }
#
# # Configuration réseau
# network_interface {
# name = "eth0"
# bridge = lookup(each.value, "network_bridge", "vmbr0")
# enabled = true
# firewall = lookup(each.value, "firewall", false)
# }
#
# # Configuration stockage
# disk {
# datastore_id = lookup(each.value, "datastore", "local-lvm")
# size = each.value.disk_gb
# }
#
# # Configuration d'initialisation
# initialization {
# hostname = "${each.key}.${var.domain_suffix}"
#
# ip_config {
# ipv4 {
# address = "${each.value.ip}/${lookup(each.value, "netmask", "24")}"
# gateway = each.value.gateway
# }
# }
#
# dns {
# servers = lookup(each.value, "dns_servers", ["8.8.8.8", "8.8.4.4"])
# }
#
# user_account {
# keys = [file(var.admin_ssh_public_key_path)]
# }
# }
# }
# 4. Outputs pour les conteneurs LXC
# output "lxc_info" {
# description = "Informations des conteneurs LXC créés"
# value = {
# for k, v in proxmox_virtual_environment_container.lxc_containers : k => {
# id = v.id
# name = v.hostname
# node = v.node_name
# ip = var.lxc_containers[k].ip
# status = v.status
# }
# }
# }
# ===== SECTION COMMENTÉE - EXEMPLES DE CONFIGURATION =====
# Exemple de configuration pour les variables LXC (à ajouter dans variables.tf) :
# variable "lxc_containers" {
# description = "Configuration des conteneurs LXC à déployer"
# type = map(object({
# # Configuration de base
# vm_id = number
# template = string
# cores = number
# memory = number
# disk_gb = number
# ip = string
# gateway = string
#
# # Configuration optionnelle
# os_type = optional(string, "ubuntu")
# netmask = optional(string, "24")
# datastore = optional(string, "local-lvm")
# network_bridge = optional(string, "vmbr0")
# unprivileged = optional(bool, true)
# on_boot = optional(bool, true)
# started = optional(bool, true)
# firewall = optional(bool, false)
# swap = optional(number, 512)
# dns_servers = optional(list(string), ["8.8.8.8", "8.8.4.4"])
# tags = optional(list(string), [])
# }))
# default = {}
# }
# Exemple de configuration dans terraform.tfvars :
# lxc_containers = {
# "web-proxy" = {
# vm_id = 200
# template = "ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
# cores = 1
# memory = 1024
# disk_gb = 8
# ip = "192.168.1.200"
# gateway = "192.168.1.254"
# tags = ["proxy", "nginx"]
# }
#
# "monitoring-light" = {
# vm_id = 201
# template = "alpine-3.14-default_20210623_amd64.tar.xz"
# cores = 1
# memory = 512
# disk_gb = 4
# ip = "192.168.1.201"
# gateway = "192.168.1.254"
# tags = ["monitoring", "lightweight"]
# }
# }
# ===== AVANTAGES DES LXC =====
#
# 1. Consommation réduite de ressources par rapport aux VMs
# 2. Démarrage plus rapide
# 3. Idéal pour les services légers (reverse proxy, monitoring, etc.)
# 4. Partage du kernel avec l'hôte = meilleure efficacité
# 5. Isolation suffisante pour la plupart des cas d'usage homelab
#
# ===== QUAND UTILISER LXC VS VM =====
#
# Utiliser LXC pour :
# - Services web légers (nginx, apache)
# - Outils de monitoring légers
# - Reverse proxy
# - Services de fichiers simples
# - Environnements de développement
#
# Utiliser VM pour :
# - Services nécessitant un kernel spécifique
# - Applications nécessitant une isolation forte
# - Kubernetes nodes
# - Bases de données critiques
# - Services Windows
# ===== TODO POUR ACTIVATION =====
#
# Pour activer ce fichier :
# 1. Décommenter le code ci-dessus
# 2. Ajouter la variable lxc_containers dans variables.tf
# 3. Configurer les templates LXC disponibles
# 4. Tester avec un conteneur simple
# 5. Documenter les templates disponibles

View File

@@ -1,100 +1,41 @@
# Terraform Configuration - Production Environment # Terraform Configuration - Production Environment
Ce dossier contient la configuration Terraform pour déployer l'infrastructure du homelab sur Proxmox. Ce dossier contient la configuration Terraform pour déployer l'infrastructure du homelab sur Proxmox VE.
## Structure des fichiers ## Structure des fichiers
### Fichiers principaux - **`01-virtual-machines.tf`** - Configuration et déploiement des machines virtuelles
- **`02-cloud-init.tf`** - Configuration Cloud-Init pour l'initialisation automatique des VMs
- **`virtual-machines.tf`** - Configuration et déploiement des machines virtuelles
- **`lxc-containers.tf`** - Configuration des conteneurs LXC (préparatoire)
- **`providers.tf`** - Configuration des providers Terraform - **`providers.tf`** - Configuration des providers Terraform
- **`variables.tf`** - Définition des variables - **`variables.tf`** - Définition des variables
- **`terraform.tfvars`** - Valeurs des variables (à personnaliser) - **`terraform.tfvars`** - Valeurs des variables (à personnaliser)
- **`inventory.tf`** - Génération de l'inventaire Ansible - **`terraform.tfvars.example`** - Exemple de configuration
### Dossier templates ## Configuration rapide
- **`cloud-init.yaml.tpl`** - Template de configuration Cloud-Init pour les VMs
- **`inventory.tpl`** - Template pour générer l'inventaire Ansible
## Déploiement des VMs
### Configuration de base
Les VMs sont configurées dans le fichier `terraform.tfvars` sous la variable `virtual_machines` :
```hcl
virtual_machines = {
"nom-vm" = {
os = "debian" # OS du template à utiliser
cores = 2 # Nombre de CPU cores
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 = ["monitoring"] # Tags pour l'organisation
packages = ["curl", "vim"] # Packages à installer
}
}
```
### Options avancées
Chaque VM peut avoir des configurations optionnelles :
```hcl
"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" # Type de CPU (défaut: host)
datastore = "local-lvm" # Datastore Proxmox
network_bridge = "vmbr0" # Bridge réseau
username = "admin" # Utilisateur (défaut: damien)
post_install_commands = ["apt update"] # Commandes post-installation
# Disques supplémentaires
additional_disks = [
{
interface = "scsi1"
datastore = "local-lvm"
size = 100
}
]
}
```
## Templates supportés
Les templates doivent être présents sur Proxmox avec les tags appropriés :
- **ubuntu** - Ubuntu Server (tag: `ubuntu`, `template`)
- **debian** - Debian (tag: `debian`, `template`)
- **alpine** - Alpine Linux (tag: `alpine`, `template`)
- **rocky** - Rocky Linux (tag: `rocky`, `template`)
- **centos** - CentOS (tag: `centos`, `template`)
## Utilisation
### 1. Prérequis ### 1. Prérequis
- Terraform installé - Terraform installé
- Accès à l'API Proxmox - Accès à l'API Proxmox VE
- Templates VM configurés sur Proxmox - Templates VM configurés sur Proxmox avec les tags appropriés
- Clés SSH configurées - Clés SSH configurées
- Compte Tailscale avec une clé d'authentification
### 2. Configuration ### 2. Configuration
1. Copier `terraform.tfvars.example` vers `terraform.tfvars` ```bash
2. Personnaliser les valeurs dans `terraform.tfvars` # Copier le fichier d'exemple
3. Vérifier les chemins des clés SSH cp terraform.tfvars.example terraform.tfvars
# Éditer avec vos valeurs
vim terraform.tfvars
```
Variables importantes à configurer :
- `proxmox_url` : URL de votre serveur Proxmox
- `proxmox_api_token` : Token d'API Proxmox
- `tailscale_auth_key` : Clé d'authentification Tailscale
- `virtual_machines` : Configuration de vos VMs
### 3. Déploiement ### 3. Déploiement
@@ -102,122 +43,98 @@ Les templates doivent être présents sur Proxmox avec les tags appropriés :
# Initialisation # Initialisation
terraform init terraform init
# Planification # Vérification
terraform plan terraform plan
# Application # Déploiement
terraform apply terraform apply
``` ```
### 4. Vérification ## Configuration des VMs
```bash Les VMs sont configurées dans `terraform.tfvars` :
# Liste des ressources
terraform state list
# Informations des VMs ```hcl
terraform output vm_info virtual_machines = {
"monitoring" = {
os = "debian"
cores = 2
memory = 4096
disk_gb = 30
ip = "192.168.1.161"
gateway = "192.168.1.254"
tags = ["monitoring"]
}
}
``` ```
## Intégration Ansible ### Options disponibles
L'inventaire Ansible est généré automatiquement dans `../../ansible/inventory/hosts.ini`. - **os** : Template à utiliser (ubuntu, debian, alpine, rocky, centos)
- **cores** : Nombre de cœurs CPU
- **memory** : RAM en MB
- **disk_gb** : Taille du disque principal en GB
- **ip** : Adresse IP statique
- **gateway** : Passerelle réseau
- **tags** : Tags pour l'organisation
- **additional_disks** : Disques supplémentaires (optionnel)
- **username** : Utilisateur de la VM (optionnel, défaut: root)
### Groupes générés automatiquement ## Templates requis
- **Par OS** : `ubuntu`, `debian`, `alpine`, etc. Les templates doivent être présents sur Proxmox avec les tags correspondants :
- **Par tags** : groupes basés sur les tags des VMs
- **Par pattern de nom** : `monitoring`, `web`, `database`, `kubernetes`
### Utilisation avec Ansible | OS | Tags requis |
|---|---|
| Ubuntu | `["ubuntu", "template"]` |
| Debian | `["debian", "template"]` |
| Alpine | `["alpine", "template"]` |
| Rocky | `["rocky", "template"]` |
| CentOS | `["centos", "template"]` |
```bash ## Fonctionnalités automatiques
# Test de connectivité
ansible all -i inventory/hosts.ini -m ping
# Playbook sur un groupe - **Cloud-Init** : Configuration automatique des VMs au premier démarrage
ansible-playbook -i inventory/hosts.ini playbooks/common.yml --limit monitoring - **Tailscale** : Installation et connexion automatique au réseau Tailscale
``` - **SSH** : Configuration des clés SSH pour l'accès sécurisé
- **QEMU Guest Agent** : Installation automatique pour une meilleure intégration
## Conteneurs LXC (Futur)
Le fichier `lxc-containers.tf` est préparé pour le déploiement de conteneurs LXC.
Il n'est pas encore fonctionnel mais servira de base pour le développement futur.
### Avantages des LXC
- Consommation réduite de ressources
- Démarrage plus rapide
- Idéal pour les services légers
### Cas d'usage recommandés
**LXC pour :**
- Reverse proxy (nginx)
- Monitoring léger
- Services web simples
- Environnements de développement
**VM pour :**
- Kubernetes nodes
- Bases de données critiques
- Services nécessitant une isolation forte
- Applications avec besoins kernel spécifiques
## Maintenance ## Maintenance
### Mise à jour des VMs ### Ajouter une VM
```bash 1. Ajouter la configuration dans `terraform.tfvars`
# Modifier terraform.tfvars 2. Exécuter `terraform apply`
# Puis appliquer les changements
terraform plan
terraform apply
```
### Suppression d'une VM ### Supprimer une VM
```bash 1. Retirer la configuration de `terraform.tfvars`
# Retirer la VM de terraform.tfvars 2. Exécuter `terraform apply`
# Puis appliquer
terraform apply
```
### Sauvegarde de l'état ### Modifier une VM
```bash 1. Modifier la configuration dans `terraform.tfvars`
# Sauvegarde manuelle 2. Exécuter `terraform plan` pour voir les changements
cp terraform.tfstate terraform.tfstate.backup.$(date +%Y%m%d) 3. Exécuter `terraform apply`
```
## Dépannage ## Dépannage
### Problèmes courants ### Problèmes courants
1. **Template non trouvé** : Vérifier que le template existe sur Proxmox avec les bons tags - **Template non trouvé** : Vérifier les tags sur Proxmox
2. **IP déjà utilisée** : Vérifier les conflits d'adresses IP - **IP déjà utilisée** : Vérifier les conflits d'adresses
3. **Clé SSH** : Vérifier le chemin vers la clé publique SSH - **Erreur SSH** : Vérifier le chemin de la clé publique
- **Tailscale** : Vérifier la validité de la clé d'authentification
### Logs utiles ### Logs détaillés
```bash ```bash
# Logs Terraform détaillés
TF_LOG=DEBUG terraform apply TF_LOG=DEBUG terraform apply
# État des ressources
terraform show
``` ```
## Sécurité ## Sécurité
- Les clés SSH privées ne sont jamais stockées dans le code - Authentification par clés SSH uniquement
- Les tokens API sont dans des variables d'environnement - Connexion sécurisée via Tailscale
- Les VMs sont configurées avec des utilisateurs non-root - Isolation réseau des VMs
- SSH par mot de passe est désactivé - Tokens API sécurisés
## Support
Pour toute question ou problème, consulter :
- Documentation Terraform Proxmox Provider
- Logs Proxmox (`/var/log/pveproxy/`)
- État Terraform (`terraform show`)

View File

@@ -11,7 +11,7 @@
############################# #############################
# URL de votre serveur Proxmox (REQUIS) # URL de votre serveur Proxmox (REQUIS)
proxmox_url = "https://pve01.lab.home.arnodo.fr:8006" proxmox_url = "https://pve01.taila5ad8.ts.net:8006"
# Token API Proxmox (REQUIS - À configurer dans Proxmox) # Token API Proxmox (REQUIS - À configurer dans Proxmox)
# Créer dans : Datacenter -> Permissions -> API Tokens # Créer dans : Datacenter -> Permissions -> API Tokens
@@ -25,7 +25,7 @@ target_node = "pve01"
############################# #############################
# Suffixe de domaine pour les VMs # Suffixe de domaine pour les VMs
domain_suffix = "lab.home.arnodo.fr" domain_suffix = "taila5ad8.ts.net"
############################# #############################
# Configuration SSH # Configuration SSH
@@ -37,143 +37,60 @@ admin_ssh_public_key_path = "~/.ssh/keys/id_rsa.pub"
# Utilisateur par défaut sur les VMs # Utilisateur par défaut sur les VMs
default_vm_user = "damien" default_vm_user = "damien"
#############################
# Configuration Tailscale
#############################
# Clé d'authentification Tailscale pour enregistrer les VMs
tailscale_auth_key = "tskey-auth-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
############################# #############################
# Machines virtuelles # Machines virtuelles
############################# #############################
virtual_machines = { virtual_machines = {
# Exemple VM de monitoring # Exemple VM de monitoring
"vision" = { "monitoring" = {
os = "debian" os = "debian"
cores = 2 cores = 2
memory = 4096 memory = 4096
disk_gb = 30 disk_gb = 30
ip = "192.168.1.161" ip = "192.168.1.161"
gateway = "192.168.1.254" gateway = "192.168.1.254"
tags = ["monitoring", "grafana"] tags = ["monitoring"]
} }
# Exemples d'autres VMs (décommentez et adaptez selon vos besoins) # Exemple serveur web
"webserver" = {
os = "ubuntu"
cores = 2
memory = 2048
disk_gb = 20
ip = "192.168.1.162"
gateway = "192.168.1.254"
tags = ["web", "nginx"]
}
# # Serveur web # Exemple base de données avec disque supplémentaire
# "webserver" = { "database" = {
# os = "ubuntu" os = "debian"
# cores = 2 cores = 4
# memory = 2048 memory = 8192
# disk_gb = 20 disk_gb = 50
# ip = "192.168.1.162" ip = "192.168.1.163"
# gateway = "192.168.1.254" gateway = "192.168.1.254"
# tags = ["web", "nginx"] tags = ["database", "postgresql"]
# }
# # Base de données additional_disks = [
# "database" = { {
# os = "debian" interface = "scsi1"
# cores = 4 datastore = "local-lvm"
# memory = 8192 size = 100
# disk_gb = 50 }
# ip = "192.168.1.163" ]
# gateway = "192.168.1.254" }
# tags = ["database", "postgresql"]
#
# # Disque supplémentaire pour les données
# additional_disks = [
# {
# interface = "scsi1"
# datastore = "local-lvm"
# size = 100
# }
# ]
# }
# # Node Kubernetes master
# "k8s-master" = {
# os = "ubuntu"
# cores = 4
# memory = 4096
# disk_gb = 40
# ip = "192.168.1.170"
# gateway = "192.168.1.254"
# tags = ["kubernetes", "master"]
# }
# # Node Kubernetes worker
# "k8s-worker1" = {
# os = "ubuntu"
# cores = 4
# memory = 8192
# disk_gb = 60
# ip = "192.168.1.171"
# gateway = "192.168.1.254"
# tags = ["kubernetes", "worker"]
# }
# # Serveur de fichiers/NAS
# "fileserver" = {
# os = "debian"
# cores = 2
# memory = 4096
# disk_gb = 40
# ip = "192.168.1.180"
# gateway = "192.168.1.254"
# tags = ["storage", "nas"]
#
# # Multiples disques pour le stockage
# additional_disks = [
# {
# interface = "scsi1"
# datastore = "local-lvm"
# size = 500
# },
# {
# interface = "scsi2"
# datastore = "local-lvm"
# size = 500
# }
# ]
# }
# # VM de développement
# "devbox" = {
# os = "ubuntu"
# cores = 4
# memory = 8192
# disk_gb = 80
# ip = "192.168.1.190"
# gateway = "192.168.1.254"
# tags = ["development", "docker"]
# }
} }
#############################
# Conteneurs LXC (Futur)
#############################
# Configuration préparée pour les conteneurs LXC
# Actuellement désactivée - sera implémentée dans une future version
# lxc_containers = {
# # Exemple proxy léger
# "nginx-proxy" = {
# vm_id = 200
# template = "ubuntu-20.04-standard"
# cores = 1
# memory = 1024
# disk_gb = 8
# ip = "192.168.1.200"
# gateway = "192.168.1.254"
# tags = ["proxy", "nginx"]
# }
# }
#############################
# Maintien compatibilité (deprecated)
#############################
# Ancienne variable - sera supprimée dans une future version
# Utilisez virtual_machines à la place
monitoring_vms = {}
############################# #############################
# Notes de configuration # Notes de configuration
############################# #############################
@@ -185,15 +102,8 @@ monitoring_vms = {}
# - Template Rocky avec tags : ["rocky", "template"] # - Template Rocky avec tags : ["rocky", "template"]
# - Template CentOS avec tags : ["centos", "template"] # - Template CentOS avec tags : ["centos", "template"]
# Réseau recommandé :
# - VLAN/Bridge : vmbr0
# - Plage IP : 192.168.1.0/24
# - Passerelle : 192.168.1.254
# - DNS : 8.8.8.8, 8.8.4.4 (ou votre DNS local)
# Ressources recommandées par type de service : # Ressources recommandées par type de service :
# - Monitoring : 2 CPU, 4GB RAM, 30GB disque # - Monitoring : 2 CPU, 4GB RAM, 30GB disque
# - Web server : 2 CPU, 2GB RAM, 20GB disque # - Web server : 2 CPU, 2GB RAM, 20GB disque
# - Database : 4 CPU, 8GB RAM, 50GB+ disque # - Database : 4+ CPU, 8GB+ RAM, 50GB+ disque
# - Kubernetes : 4 CPU, 4GB+ RAM, 40GB+ disque # - Kubernetes : 4+ CPU, 4GB+ RAM, 40GB+ disque
# - Development : 4 CPU, 8GB RAM, 80GB disque

View File

@@ -30,9 +30,9 @@ variable "admin_ssh_public_key_path" {
} }
variable "domain_suffix" { variable "domain_suffix" {
description = "Suffixe de domaine pour les VMs (ex: lab.home.arnodo.fr)" description = "Suffixe de domaine pour les VMs (ex: taila5ad8.ts.net)"
type = string type = string
default = "lab.home.arnodo.fr" default = "taila5ad8.ts.net"
} }
variable "default_vm_user" { variable "default_vm_user" {