VMs Debian sous Proxmox
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
- Préparer Proxmox : Créer un utilisateur et un token API pour que Vagrant puisse interagir avec le serveur.
- 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.
- Configurer le client Windows : Installer Vagrant et le plugin Proxmox.
- Écrire le
Vagrantfile: Le fichier de configuration qui décrit nos VMs. - 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.
-
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.
- Dans l'interface web de Proxmox, allez dans
-
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.
- Allez dans
-
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.
- Allez dans
-
Ajouter les Permissions :
- Allez dans
Datacenter->Permissions->Add->User Permission. - Path :
/(pour donner accès à tout le Datacenter) ou un chemin plus restrictif comme/vmsou/pool/nom_du_pool. - User : Sélectionnez
vagrant-api-user!vagrant-token. - Role :
VagrantRole.
- Allez dans
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
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.
-
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.
-
Importer l'image dans Proxmox :
- Dans l'interface de Proxmox, ouvrez un shell de votre nœud (
_node_->Shell). - Utilisez
scpou une autre méthode pour transférer le fichier.qcow2té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.
- General : Donnez un nom, par exemple
- 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 fichierdebian-13-genericcloud-amd64.qcow2que vous avez transféré. - Allez dans l'onglet
Cloud-Init.- User :
vagrant(c'est l'utilisateur par défaut que Vagrant attend). - Password : Mettez un mot de passe temporaire (ex:
vagrant). - SSH public key : Collez la clé publique de Vagrant. Vous pouvez la trouver ici : https://raw.githubusercontent.com/hashicorp/vagrant/main/keys/vagrant.pub
- User :
- Retournez dans l'onglet
Optionsde la VM, double-cliquez surCloud-Init Driveet cochezRegenerate Image. - Faites un clic droit sur la VM dans la liste de gauche et choisissez
Convert to template.
- Dans l'interface de Proxmox, ouvrez un shell de votre nœud (
Vous avez maintenant un modèle template-debian prêt à être cloné.
Étape 3 : Configurer le client Windows
-
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
-
Téléchargez et installez la dernière version de Vagrant pour Windows depuis le site officiel : https://www.vagrantup.com/downloads
Pour télécharger une ancienne version de Vagrant (si besoin)
-
Redémarrez votre ordinateur après l'installation.
- Installez Vagrant à l'aide de Winget (Winget est installé par défaut depuis Windows 11),
à l'aide de la commande :
-
Installer le plugin Proxmox :
- Ouvrez une invite de commandes PowerShell ou
cmd.exeen tant qu'administrateur. - Exécutez la commande :
vagrant plugin install vagrant-proxmox
- Ouvrez une invite de commandes PowerShell ou
É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.
-
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.
-
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
-
Ouvrez une session PowerShell dans le dossier de votre projet (
C:\vagrant-proxmox). -
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" -
Lancez la création des VMs :
vagrant upou
vagrant up --provider=proxmoxVagrant va maintenant se connecter à votre Proxmox, cloner le modèle
template-debiantrois fois, configurer chaque VM et la démarrer. -
Vérifier l'état :
vagrant statusVous devriez voir vos trois VMs (
debian-1,debian-2,debian-3) en étatrunning. -
Se connecter à une VM :
vagrant ssh debian-1Vous êtes maintenant connecté en SSH à votre première VM !
-
Détruire toutes les VMs : Quand vous avez terminé, vous pouvez tout nettoyer avec une seule commande :
vagrant destroy -fCela 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.