Introduction#
La création d’un template de machine virtuelle (VM) utilisant cloud-init est la méthode de référence pour automatiser le déploiement d’instances sur Proxmox VE.
L’objectif principal de cloud-init est de permettre la personnalisation et la configuration automatique d’une machine virtuelle lors de son tout premier démarrage. Au lieu de déployer manuellement chaque système d’exploitation, vous partez d’une “image système générique” (souvent appelée cloud image). Grâce à un disque de configuration dédié, cloud-init va injecter dynamiquement lors du premier boot les paramètres essentiels tels que :
- La configuration réseau (IP statique ou DHCP);
- La création d’un utilisateur et l’injection d’une clé SSH pour un accès sécurisé;
Cette approche permet de gagner un temps précieux, d’éviter les erreurs de configuration manuelles et de garantir une base saine et identique pour toutes vos futures machines virtuelles.
Téléchargement image système (Debian 13)#
Pour commencer, accédez au terminal de votre serveur Proxmox (via SSH ou via l’interface Web).
Il est recommandé de stocker vos images systèmes dans le répertoire /var/lib/vz/template/qemu. Bien que le dossier /var/lib/vz/template/iso existe, le dossier qemu est spécifiquement dédié aux images disques de machines virtuelles. Si celui-ci n’existe pas nous allons le créer.
Bash# Création du répertoire de stockage des templates QEMU
mkdir /var/lib/vz/template/qemu
# Se déplacer dans le répertoire de stockage des templates QEMU
cd /var/lib/vz/template/qemu
Nous allons nous appuyer sur une image cloud Qemu de Debian 13 dans ce guide : Images Cloud Debian Trixie

# Télécharger la dernière image Debian 13 (trixie) au format Cloud dans ce répertoire
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2
Les images cloud “Generic” de Debian incluent nativement le QEMU Guest Agent. Lors de la création de la VM, nous veillerons à activer cette option, car elle permet à Proxmox d’interagir avec le système d’exploitation (pour obtenir l’adresse IP, synchroniser l’heure ou effectuer des arrêts propres).
Créer une machine virtuelle#
Nous allons créer une machine virtuelle vierge qui servira de base à notre template. Pour ce faire, nous utiliserons la commande qm (QEMU/KVM Virtual Machine Manager).
Bashqm create 108 --name debian-13-cloud-template \
--memory 1024 \
--net0 virtio,bridge=vmbr0\
--scsihw virtio-scsi-pci \
--serial0 socket \
--vga std \
--agent 1 \
--ostype l26
Détails des paramètres :
- 108 : L’identifiant unique (VMID) de votre machine.
- –name : Le nom convivial de la machine.
- –memory : La quantité de RAM allouée (en Mo).
- –net0 : Définit le modèle de carte réseau (virtio pour la performance) et le bridge utilisé.
- –scsihw virtio-scsi-pci : Utilise un contrôleur paravirtualisé SCSI, idéal pour les performances disque.
- –serial0 socket : Indispensable pour accéder à la console de la VM via l’interface web (xterm.js).
- –vga std : Définit le type de carte graphique virtuelle.
- –agent 1 : Indispensable. Active l’agent QEMU. Il permet à Proxmox de connaître l’adresse IP de la VM et de gérer correctement son arrêt/redémarrage.
- –ostype l26 : Spécifie que nous installons une distribution Linux 2.6/3.x/4.x+, ce qui permet à Proxmox d’optimiser certains paramètres de virtualisation.
Vous pouvez vérifier que la VM a bien été créée avec la commande suivante :
Bashqm list

Importation de l’image système en tant que disque#
Une fois la VM créée, nous devons importer l’image .qcow2 dans votre espace de stockage Proxmox pour qu’elle devienne le disque système de notre VM.
Importation du disque#
Nous utilisons la commande qm importdisk. Remplacez local-lvm par le nom de votre stockage si vous utilisez un autre nom (ex: ceph, zfs-pool, etc.).
Bashqm importdisk 108 debian-13-generic-amd64.qcow2 local-lvm
Cette opération va créer un volume nommé vm-108-disk-0 (ou similaire) dans votre stockage cible.

Attachement du disque à la VM#
Une fois importé, le disque est présent mais n’est pas encore “branché” sur la VM. Nous devons l’attacher au contrôleur paravirtualisé SCSI et le définir comme lecteur d’amorçage principale lorsque la VM démarre (Le disque système) :
Bash# Attache le disque importé au contrôleur SCSI de la VM
qm set 108 --scsi0 local-lvm:vm-108-disk-0
# Définit ce disque comme lecteur d'amorçage prioritaire
qm set 108 --boot c --bootdisk scsi0


Ajout du disque Cloud-init#
À ce stade, notre machine virtuelle dispose d’un disque système, mais elle est “aveugle”, elle ne connaît pas son mot de passe, ses clés SSH ou sa configuration réseau.
C’est ici qu’intervient Cloud-init. Nous devons ajouter un “disque” spécial à la VM qui contiendra les instructions de configuration personnalisées que Proxmox générera pour chaque instance.
Ajout d’un lecteur Cloud-init sur l’interface IDE2#
Bashqm set 108 --ide2 local-lvm:cloudinit
- –ide2 : Il est recommandé d’utiliser l’interface IDE pour ce disque spécifique, car elle est universellement reconnue par tous les systèmes d’exploitation au démarrage, garantissant que cloud-init puisse lire sa configuration dès le premier instant.
- Au premier démarrage, la VM montera ce disque, lira les fichiers de configuration (User, mot de passe, réseau, clés SSH) et appliquera ces paramètres automatiquement.
Une fois cette commande exécutée, vous verrez apparaître un nouveau périphérique dans la section Hardware de votre VM sur l’interface Proxmox, sous le nom de CloudInit Drive.

Conversion de la VM en template#
Maintenant que votre VM 108 est configurée, nous la transformons en template.
Bashqm template 108
La bonne pratique (Recommandée) : Ne modifiez jamais votre template. Si vous devez faire une mise à jour, effectuez un clone du template, modifiez le clone, puis supprimez l’ancien template pour le remplacer par le nouveau.
Configuration des variables Cloud-Init#
Bien que nous soyons sur un template, il est judicieux de configurer l’onglet Cloud-Init. Il ne faut pas le voir comme une configuration “active”, mais comme la définition d’un héritage de base pour toutes vos futures machines.
Toutes les informations renseignées ici seront automatiquement transmises à chaque nouveau clone.
Stratégie d’héritage :
- Ce que vous “héritez” (à configurer sur la VM Template) : Les paramètres universels qui ne changent jamais d’une VM à l’autre (ex: votre clé SSH publique pour accéder à vos serveurs, vos serveurs DNS, ou le nom de l’utilisateur par défaut).
- Ce que vous “spécifiez” (à configurer sur la VM Clonée) : Les paramètres uniques qui doivent varier pour chaque machine (ex: la configuration IP statique).
Procédure :
- Dans l’interface Web, sélectionnez votre Template 108.
- Allez dans l’onglet Cloud-Init.
- Remplissez les champs souhaités (User, SSH Key, etc…).
- Cliquez sur le bouton
Regenerate Image. Cela “compile” vos choix d’héritage. À chaque fois que vous clonerez ce template, le système héritera automatiquement de cette base, vous évitant de ressaisir ces informations à chaque déploiement.
Cloner des VM depuis le template#
Une fois le template prêt, le déploiement de nouvelles machines virtuelles devient instantané. Depuis l’interface Web, effectuez un clic droit sur votre template 108 et choisissez Clone.
Paramètres de clonage
- Nom : Choisissez un nom explicite pour votre nouvelle VM.
- Mode de clonage :
- Full clone : Crée une copie complète et totalement indépendante. C’est plus lourd en espace disque, mais idéal pour une isolation maximale.
- Linked clone : Crée une “instantané” (snapshot) lié au template. C’est extrêmement rapide et très peu gourmand en espace. Attention : le clone dépendra du template, vous ne pourrez donc pas supprimer le template sans supprimer le clone.

Post-clonage : Ajustements finaux#
Une fois le clone créé, il reste deux étapes essentielles avant le premier démarrage :
Configuration réseau et identité#
Allez dans l’onglet Cloud-Init de la VM clonée. C’est ici que vous définissez les paramètres unique comme la configuration réseau (IP statique si nécessaire). Dans cette section cloud-init il est recommandé d’utilisé une clé SSH en cas d’authentification via SSH (par défaut l’image cloud Debian ne supporte pas authentification par mot de passe via SSH) en indiquant la clé SSH publique.
Créer des clées SSH avec OpenSSH
Une fois votre configuration cloud-init saisi, il vous faudra regenérer l’image pour prendre en compte la configuration, cliqué sur le lien Regenerate Image.


Redimensionnement du disque#
Par défaut, le disque sera à la taille de l’image initiale (3 Go). Pour l’augmenter :
- Allez dans l’onglet Hardware du clone.
- Sélectionnez le Hard Disk, puis cliquez sur
Disk Action>Resize. - Ajoutez la valeur souhaitée (ex: +20 pour ajouter 20 Go).

Premier démarrage#
Démarrez la VM et connectez-vous avec les identifiants configurés. Vérifiez que tout est opérationnel :
Bash# Vérifier l'adresse IP attribuée
ip addr
# Vérifier que le disque a bien pris en compte l'espace supplémentaire
df -h

Conclusion#
Votre infrastructure est désormais équipée d’un système de déploiement agile et standardisé. En utilisant ce template Cloud-Init, vous avez transformé une tâche répétitive et chronophage en une opération quasi-instantanée.
Cependant, ce template n’est qu’une première étape. Si vous souhaitez aller plus loin et automatiser la configuration interne de vos serveurs (installation de services, déploiement d’applications, mises à jour), il est fortement recommandé d’intégrer des outils de gestion de configuration comme Ansible, Terraform ou Puppet.
En couplant votre template Proxmox avec ces outils, vous passez d’une gestion manuelle à une approche “Infrastructure as Code” (IaC), où votre environnement complet peut être recréé, déployé et mis à jour de manière totalement automatisée et prévisible.
