Aller au contenu principal

VMs Debian sous Proxmox

remarque

Créer des VMs identiques sur Proxmox avec Vagrant depuis un client Windows est une excellente pratique pour l'automatisation, mais le processus est un peu plus complexe qu'avec VirtualBox, car il nécessite une configuration spécifique sur Proxmox et l'utilisation d'un plugin Vagrant.

Vue d'ensemble de la méthode

  1. Préparer Proxmox : Créer un utilisateur et un token API pour que Vagrant puisse interagir avec le serveur.
  2. Créer un modèle (template) de VM Debian 13 : C'est l'étape la plus importante. Vagrant va cloner ce modèle pour créer les VMs. Nous utiliserons une image cloud-init pour une configuration automatisée.
  3. Configurer le client Windows : Installer Vagrant et le plugin Proxmox.
  4. Écrire le Vagrantfile : Le fichier de configuration qui décrit nos VMs.
  5. Lancer Vagrant : Créer et gérer les VMs avec quelques commandes.

Étape 1 : Préparer le serveur Proxmox

Vagrant a besoin de se connecter à l'API de Proxmox.

Pour cela, nous allons créer un utilisateur dédié avec des permissions limitées et un token d'API.

  1. Créer un Rôle :

    • Dans l'interface web de Proxmox, allez dans Datacenter -> Permissions -> Roles -> Create.
    • Nom : VagrantRole
    • Cochez les privilèges : VM.Audit, VM.Console, VM.PowerMgmt, VM.Snapshot. C'est suffisant pour créer, démarrer et détruire des VMs.
  2. Créer un Utilisateur API :

    • Allez dans Datacenter -> Permissions -> Users -> Add.
    • Nom : vagrant-api-user
    • Realm : Proxmox VE authentication server
    • Décochez la case Enable. Cet utilisateur ne servira qu'à l'API.
  3. Créer un Token API :

    • Allez dans Datacenter -> Permissions -> API Tokens.
    • Cliquez sur Add.
    • User : vagrant-api-user
    • Token ID : Donnez-lui un nom, par exemple vagrant-token.
    • COPIEZ ET GARDEZ PRÉCIEUSEMENT LA "CLÉ SECRÈTE" (SECRET KEY). Elle ne sera plus affichée après. C'est le mot de passe de votre token.
  4. Ajouter les Permissions :

    • Allez dans Datacenter -> Permissions -> Add -> User Permission.
    • Path : / (pour donner accès à tout le Datacenter) ou un chemin plus restrictif comme /vms ou /pool/nom_du_pool.
    • User : Sélectionnez vagrant-api-user!vagrant-token.
    • Role : VagrantRole.

Votre Proxmox est maintenant prêt à recevoir des commandes de Vagrant.


Étape 2 : Créer un template de VM Debian

  • Créez une VM 'serveur' à partir du fichier .iso de la Debian
  • Installez le serveur SSH
  • Installez 'sudo'
  • Convertissez cette VM en template de VM nommé 'template-debian'
Créer un template de VM avec un fichier .qcow2
remarque

Il n'existe pas de "box" Vagrant toute faite pour Proxmox.

Voici une autre méthode pour créer un modèle de VM dans Proxmox, à partir d'un fichier .qcow2. L'image cloud-init (qcow2) de Debian est parfaite pour cela.

  1. Télécharger l'image Cloud-Init :

    • Allez sur la page de téléchargement de Debian : https://www.debian.org/distrib/
    • Dans la partie Utiliser une image pour l’informatique dématérialisée, sous votre fournisseur OpenStack, aux formats qcow2, cherchez une image "cloud" pour la version actuelle (version 13 "Trixie").

      Vous trouverez un fichier comme debian-13-genericcloud-amd64.qcow2.

    • Téléchargez ce fichier sur votre ordinateur.
  2. Importer l'image dans Proxmox :

    • Dans l'interface de Proxmox, ouvrez un shell de votre nœud (_node_ -> Shell).
    • Utilisez scp ou une autre méthode pour transférer le fichier .qcow2 téléchargé sur le serveur Proxmox (par exemple dans /var/lib/vz/template/iso/).
    • Créez une nouvelle VM dans l'interface web (Create VM).
      • General : Donnez un nom, par exemple template-debian.
      • OS : Ne mettez rien.
      • System : q35, BIOS: OVMF (UEFI).
      • Disks : Supprimez le disque dur créé par défaut.
      • CPU : 1 vCore, 1 Socket.
      • Memory : 1024 MiB.
      • Network : vmbr0 (votre bridge).
      • Confirm : Cochez la case pour ne pas démarrer la VM après création.
    • Ne démarrez pas la VM.
    • Sélectionnez la VM nouvellement créée, allez dans l'onglet Hardware.
    • Cliquez sur Add -> Disk.
    • Dans le menu déroulant, sélectionnez Import disk. Choisissez le fichier debian-13-genericcloud-amd64.qcow2 que vous avez transféré.
    • Allez dans l'onglet Cloud-Init.
    • Retournez dans l'onglet Options de la VM, double-cliquez sur Cloud-Init Drive et cochez Regenerate Image.
    • Faites un clic droit sur la VM dans la liste de gauche et choisissez Convert to template.

Vous avez maintenant un modèle template-debian prêt à être cloné.


Étape 3 : Configurer le client Windows

  1. Installer Vagrant :

    • Installez Vagrant à l'aide de Winget (Winget est installé par défaut depuis Windows 11), à l'aide de la commande :
      winget install Vagrant

    ou

  2. Installer le plugin Proxmox :

    • Ouvrez une invite de commandes PowerShell ou cmd.exe en tant qu'administrateur.
    • Exécutez la commande :
      vagrant plugin install vagrant-proxmox

Étape 4 : Écrire le Vagrantfile

Créez un nouveau dossier pour votre projet (par exemple C:\vagrant-proxmox). Dans ce dossier, créez un fichier nommé Vagrantfile (sans extension) avec le contenu suivant.

Conseil de sécurité : Ne mettez jamais votre clé secrète directement dans le fichier. Utilisez une variable d'environnement.

  1. Définir la variable d'environnement dans PowerShell :

    $env:PROXMOX_API_TOKEN = "votre_clé_secrète_très_longue_et_complexe"

    Vous devrez faire cela à chaque nouvelle session PowerShell, ou l'ajouter de manière permanente à votre environnement Windows.

  2. Contenu du Vagrantfile :

    # -*- mode: ruby -*-
    # vi: set ft=ruby :

    # Nombre de VMs à créer
    N = 3

    Vagrant.configure("2") do |config|
    # La box est "dummy" car le plugin Proxmox ne l'utilise pas,
    # il utilise le template sur le serveur Proxmox.
    config.vm.box = "dummy"

    # Boucle pour créer N VMs
    (1..N).each do |i|
    config.vm.define "debian-#{i}" do |subconfig|
    # Configuration spécifique au fournisseur Proxmox
    subconfig.vm.provider :proxmox do |proxmox|

    # --- Configuration de la connexion à l'API Proxmox ---
    proxmox.endpoint = 'https://<IP_DE_VOTRE_PROXMOX>:8006/api2/json'
    proxmox.user_name = 'vagrant-api-user!vagrant-token'
    # Récupère la clé secrète depuis la variable d'environnement
    proxmox.password = ENV['PROXMOX_API_TOKEN']

    # --- Configuration de la VM ---
    proxmox.node = '<NOM_DU_NŒUD_PROXMOX>' # ex: pve
    proxmox.template = 'template-debian' # Le nom du template créé à l'étape 2

    # Options de la VM
    proxmox.vm_name_prefix = 'vagrant-debian-'
    proxmox.vm_id = "100#{i}" # Doit être unique et dans la plage de VMs de Proxmox

    # Ressources
    proxmox.cores = 1
    proxmox.memory = 1024

    # Réseau (assurez-vous que vmbr0 est le bon bridge)
    proxmox.config = {
    'net0' => 'virtio,bridge=vmbr0'
    }

    # Configuration SSH pour que Vagrant puisse se connecter
    proxmox.ssh_username = 'vagrant'
    # La clé privée est automatiquement gérée par Vagrant
    proxmox.ssh_private_key_path = '~/.vagrant.d/insecure_private_key'
    end

    # Provisioning : s'assure que sudo et openssh-server sont bien installés
    # (Normalement ils le sont déjà sur les images cloud, mais c'est une bonne pratique)
    subconfig.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y sudo openssh-server
    echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant
    SHELL
    end
    end
    end

Personnalisez les valeurs suivantes :

  • <IP_DE_VOTRE_PROXMOX> : L'adresse IP de votre serveur Proxmox.
  • <NOM_DU_NŒUD_PROXMOX> : Le nom de votre nœud Proxmox (visible dans l'interface, ex: pve).
  • vm_id : Assurez-vous que les IDs (1001, 1002, 1003...) sont disponibles et n'entrent pas en conflit avec vos VMs existantes.

Étape 5 : Lancer Vagrant

  1. Ouvrez une session PowerShell dans le dossier de votre projet (C:\vagrant-proxmox).

  2. Définissez la variable d'environnement si ce n'est pas déjà fait :

    $env:PROXMOX_API_TOKEN = "votre_clé_secrète_très_longue_et_complexe"
  3. Lancez la création des VMs :

    vagrant up 

    ou

    vagrant up --provider=proxmox

    Vagrant va maintenant se connecter à votre Proxmox, cloner le modèle template-debian trois fois, configurer chaque VM et la démarrer.

  4. Vérifier l'état :

    vagrant status

    Vous devriez voir vos trois VMs (debian-1, debian-2, debian-3) en état running.

  5. Se connecter à une VM :

    vagrant ssh debian-1

    Vous êtes maintenant connecté en SSH à votre première VM !

  6. Détruire toutes les VMs : Quand vous avez terminé, vous pouvez tout nettoyer avec une seule commande :

    vagrant destroy -f

    Cela supprimera les 3 VMs de votre serveur Proxmox.

Vous avez maintenant un workflow reproductible pour déployer des environnements complets sur Proxmox directement depuis votre machine Windows.