Projet

Général

Profil

Présentation personnelle et projet de stage

Je suis Nicolas Schmauch
Je suis un étudiant en Licence Pro ADSILLH (Administration et Développement de Systèmes Informatiques à base de Logiciels Libres et Hybrides).
Je suis en stage avec Yoan Gabriel (4 mois de stage du 30 mars au 31 juillet 2026).

Rapport

Jour 1: Lundi 30 mars 2026

Notre travail consiste à mettre à jour l’ancienne architecture vers une nouvelle, basée sur Debian Trixie stable, avec un hyperviseur permettant de gérer différentes machines virtuelles (une VM par service).

SCHEMA

Nous avons tout d’abord dû choisir un hyperviseur parmi les différentes solutions open source :

Caractéristique Incus (Mode VM) KVM/QEMU + libvirt Canonical LXD (Mode VM) Xen Project
Moteur QEMU / KVM QEMU / KVM QEMU / KVM Xen Hypervisor
Installation Debian 13 Native apt install incus Native apt install libvirt-daemon Via Snap snap install lxd Native apt install xen-hypervisor
RAM Très faible (~50 Mo) Faible (~100 Mo) Moyen (~200 Mo) Élevé (minimum 1024 Mo)
Déploiement OS Images Cloud et Manuel Manuel (Fichiers ISO) Images Cloud et Manuel Manuel (ISO ou debootstrap)
Sauvegardes / Snapshots Intégrés (incus snapshot / export) Manuels (virsh snapshot-create) Intégrés (lxc snapshot) Complexes (via LVM)
Score global / 5 5 / 5 4 / 5 3 / 5 1 / 5

sources :
https://linuxcontainers.org
https://libvirt.org
https://canonical.com/lxd
https://xenproject.org/resources

https://wiki.debian.org/Incus
https://wiki.debian.org/KVM
https://wiki.debian.org/QEMU
https://wiki.debian.org/libvirt
https://wiki.debian.org/Xen/InstallBootConfig
https://wiki.xenproject.org/wiki/Tuning_Xen_for_Performance

https://dev.to/rosgluk/linux-virtualization-solutions-a-complete-comparison-guide-196g
https://www.siberoloji.com/how-to-install-and-configure-lxd-on-debian-12

Nous avons ensuite calculé les ressources nécessaires pour savoir si le serveur a besoin d’une amélioration de ses ressources ou non :

Service RAM minimum RAM recommandée CPU minimum CPU recommandé
Apache 512 MB 1–4 GB 1 core 2+ cores
Nginx 512 MB 1 GB 1 core 2+ cores
Laravel 1 GB 2+ GB 1 core 2+ cores
Redmine 512 MB 1–2 GB 1 core 2 cores
Forgejo 512 MB 2 GB 1 core 2+ cores
NextCloud 512 MB 2 GB 1 core 2+ cores
total 3.5 GB 9-13+ GB 6 cores 12+ cores

sources :
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
https://docs.nginx.com/nginx-agent/technical-specifications
https://kinsta.com/fr/blog/installer-nginx
https://www.hostragons.com/fr/blog/exigences-dhebergement-pour-les-applications-laravel
https://redmine1click.com/requirements
https://blog.stephane-robert.info/docs/services/devops/forgejo/installation
https://docs.nextcloud.com/server/stable/admin_manual/installation/system_requirements.html

Critère clé Caddy Nginx Proxy Manager (NPM) Traefik
Consommation Mémoire (RAM) Très léger Lourd Léger
Automatisation SSL Natif, Zéro config Bouton dans l'interface Demande une config YAML
Adaptation à un réseau de VM Fichier texte très lisible Routage IP via interface Usine à gaz sans Docker
Facilité de prise en main Syntaxe minimaliste Interface web complète Courbe d'apprentissage rude
Score global / 5 4 / 5 3 / 5 1 / 5

sources :
https://kx.cloudingenium.com/en/caddy-reverse-proxy-automatic-https-zero-config-ssl-guide/
https://caddyserver.com/docs/quick-starts/reverse-proxy
https://caddyserver.com/docs/

https://stackoverflow.com/questions/63077100/how-much-memory-and-cpu-nginx-and-nodejs-in-each-container-needs
https://nginxproxymanager.com/

https://community.traefik.io/t/traefik-performance-lags-behind-nginx-and-caddy/28919
https://doc.traefik.io/traefik/routing/overview/

https://www.reddit.com/r/selfhosted/comments/1odh46j/nginx_vs_caddy_vs_traefik_benchmark_results/

Jour 2: Mardi 31 mars 2026

Mail pour Alexander :

Bonjour Alexander,

Nous sommes les nouveaux stagiaires ADSILLH.
Pour le projet du nouveau serveur, on a fait des comparatifs (Yoan et moi), pour la nouvelle architecture et on propose :

Hyperviseur : Incus (Mode VM), car il offre la consommation RAM la plus faible, s'installe nativement sur Debian et la gestion des snapshots et plus simple qu'avec KVM.
Reverse Proxy : Caddy, car très léger et automatise à 100% la gestion des certificats SSL avec Let's Encrypt. Il est plus adapté que Traefik ou Nginx Proxy Manager pour des VM fixes.

Voici nos comparatifs : https://projets.cohabit.fr/redmine/projects/accueil/wiki/Nicolas_Schmauch_2

Schmauch Nicolas

Jour 3: Mercredi 01 avril 2026

La réponse d'Alexander :

Du coup, les questions qui restent en suspens sont :
Il faut que cela gère le raid logiciel (1 ou 5).
Quelle technologie sont supportées pour les containers ?
Et les Snapshots ou image des VM sont-elles exportables dans un format qui est géré par la plupart des hyperviseurs en cas de soucis ?

Notre réponse :

Incus est compatible avec le raid logiciel (1 ou 5), il ne gère pas le matériel directement, il faut juste lui indiquer d'utiliser le volume créé.
Incus utilise des conteneurs système (LXC) et il gère Docker soit en l'installant à l'intérieur d'une VM/conteneur (mode nesting), soit en lançant des images Docker (images OCI).
Les VM Incus sont basées sur QEMU et sont exportées au format QCOW2 ou Raw. Donc c'est compatible avec la plupart des hyperviseurs comme Proxmox, KVM, VirtualBox, VMware, etc.

Conteneur + dir = Dossier 
VM QEMU + dir = raw
VM QEMU + lvm = qcow2

Commande Incus :
incus launch images:debian/13 ma-vm-debian --vm : Lance un VM Debian 13
incus remote add docker https://docker.io --protocol=oci : Pour ajouter le dépôt Docker Hub
incus launch docker:nginx mon-nginx : Lance l'image nginx

incus list : Voir toutes les instances
incus stop mon-instance : Arrête une instance
incus start mon-instance : Démarrer une instance
incus restart mon-instance : Redémarrer une instance

incus delete mon-instance : Supprimer une instance arrêtée
incus delete mon-instance --force : Forcer l'arrêt et la suppression

incus snapshot create mon-instance mon-snap1 : Créer un snapshot de l'instance
--stateful pour sauvegarder la RAM à chaud

fonctionne que si migration.stateful=true est activé, pour l'activer :
incus config set mon-instance migration.stateful=true

incus snapshot list mon-instance : Voir toutes les snapshots d'une instances

incus snapshot create mon-instance mon-snap1 --reuse
--reuse supprime l'ancien mon-snap1 et recréer un nouveau avec le même nom

incus snapshot restore mon-instance mon-snap1 : Restore un snapshot pour une instance
Recommandé d'arrêter l'instance avec incus stop avant de restaurer

incus snapshot delete mon-instance mon-snap1 : Supprimer un snapshot

incus launch images:debian/13 ma-vm --vm -c limits.cpu=4 -c limits.memory=8GiB -d root,size=50GiB : -c (la config) -d (le disque)

Modifier les ressources d'une instance déjà existante :
incus config set mon-instance limits.memory 4GiB : Modifier la RAM
incus config set mon-instance limits.memory.swap false : Désactiver le swap
incus config set mon-instance limits.cpu 2 : Alloue 2 coeurs cpu
incus config set mon-instance limits.cpu.allowance 50% : Bride la puissance des coeurs à 50% d'utilisation

incus config show mon-instance : Voir la config d'une instance

Jour 4: Jeudi 02 avril 2026

Partition Taille Point de montage Rôle
1 512 Mo /boot/efi Pour le démarre en UEFI
2 1 Go /boot Pour le boot Debian
3 8 Go swap Sécurité si la RAM sature (à voir car jsp si c'est vraiment utile car on a 32go)
4 50 Go / (Racine) Le Debian de l'hyperviseur, Incus et logs
5 940 Go Aucun Espace brut (Ne pas formater car on initialisera avec Incus en ZFS)

code sim : 7826
id : user
mdp : 147147

Flash l'os OpenWrt stable sur le routeur OpenWrt One :
https://firmware-selector.openwrt.org/?version=25.12.2&target=mediatek%2Ffilogic&id=openwrt_one
Se brancher avec le cable RJ45 au routeur en mode NOR, puis aller à l’adresse http://192.168.1.1
Ensuite, flasher la nouvelle version et décocher "keep settings" pour le reset.
Après cela, attendre que l’opération se termine, puis redémarrer en mode NAND pour pouvoir le configurer.

Flash l'os PostMarketOS sur la carte sd du PinePhone :
https://postmarketos.org/install/
Flash sur la carte sd l'image de postmarketos avec bmaptool ou avec balenaEtcher.

Pour router les paquets entre les interfaces :
sudo sysctl -w net.ipv4.ip_forward=1
Pour le rendre permanent :
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

Pour mettre le PinePhone en hotspot, il faut le faire graphiquement avec le bouton et activer les données cellulaires et aussi "Mobile Data On".

Jour 5: Vendredi 03 avril 2026

Jour 6: Lundi 06 avril 2026

Férié

Jour 7: Mardi 07 avril 2026

Jour 8: Mercredi 08 avril 2026

Jour 9: Jeudi 09 avril 2026

Jour 10: Vendredi 10 avril 2026

Jour 11: Lundi 13 avril 2026

Jour 12: Mardi 14 avril 2026

Jour 13: Mercredi 15 avril 2026

Jour 14: Jeudi 16 avril 2026

Jour 15: Vendredi 17 avril 2026

Jour 16: Lundi 20 avril 2026

Jour 17: Mardi 21 avril 2026

Jour 18: Mercredi 22 avril 2026

Jour 19: Jeudi 23 avril 2026

Jour 20: Vendredi 24 avril 2026

Jour 21: Lundi 27 avril 2026

Jour 22: Mardi 28 avril 2026

Jour 23: Mercredi 29 avril 2026

Jour 24: Jeudi 30 avril 2026

Jour 25: Vendredi 01 mai 2026

Férié

Jour 26: Lundi 04 mai 2026

Jour 27: Mardi 05 mai 2026

Jour 28: Mercredi 06 mai 2026

Jour 29: Jeudi 07 mai 2026

Jour 30: Vendredi 08 mai 2026

Férié

Jour 31: Lundi 11 mai 2026

Jour 32: Mardi 12 mai 2026

Jour 33: Mercredi 13 mai 2026

Jour 34: Jeudi 14 mai 2026

Férié

Jour 35: Vendredi 15 mai 2026

Jour 36: Lundi 18 mai 2026

Jour 37: Mardi 19 mai 2026

Jour 38: Mercredi 20 mai 2026

Jour 39: Jeudi 21 mai 2026

Jour 40: Vendredi 22 mai 2026

Jour 41: Lundi 25 mai 2026

Férié

Jour 42: Mardi 26 mai 2026

Jour 43: Mercredi 27 mai 2026

Jour 44: Jeudi 28 mai 2026

Jour 45: Vendredi 29 mai 2026

Jour 46: Lundi 01 juin 2026

Jour 47: Mardi 02 juin 2026

Jour 48: Mercredi 03 juin 2026

Jour 49: Jeudi 04 juin 2026

Jour 50: Vendredi 05 juin 2026

Jour 51: Lundi 08 juin 2026

Jour 52: Mardi 09 juin 2026

Jour 53: Mercredi 10 juin 2026

Jour 54: Jeudi 11 juin 2026

Jour 55: Vendredi 12 juin 2026

Jour 56: Lundi 15 juin 2026

Jour 57: Mardi 16 juin 2026

Jour 58: Mercredi 17 juin 2026

Jour 59: Jeudi 18 juin 2026

Jour 60: Vendredi 19 juin 2026

Jour 61: Lundi 22 juin 2026

Jour 62: Mardi 23 juin 2026

Jour 63: Mercredi 24 juin 2026

Jour 64: Jeudi 25 juin 2026

Jour 65: Vendredi 26 juin 2026

Jour 66: Lundi 29 juin 2026

Jour 67: Mardi 30 juin 2026

Jour 68: Mercredi 01 juillet 2026

Jour 69: Jeudi 02 juillet 2026

Jour 70: Vendredi 03 juillet 2026

Jour 71: Lundi 06 juillet 2026

Jour 72: Mardi 07 juillet 2026

Jour 73: Mercredi 08 juillet 2026

Jour 74: Jeudi 09 juillet 2026

Jour 75: Vendredi 10 juillet 2026

Jour 76: Lundi 13 juillet 2026

Jour 77: Mardi 14 juillet 2026

Férié

Jour 78: Mercredi 15 juillet 2026

Jour 79: Jeudi 16 juillet 2026

Jour 80: Vendredi 17 juillet 2026

Jour 81: Lundi 20 juillet 2026

Jour 82: Mardi 21 juillet 2026

Jour 83: Mercredi 22 juillet 2026

Jour 84: Jeudi 23 juillet 2026

Jour 85: Vendredi 24 juillet 2026

Jour 86: Lundi 27 juillet 2026

Jour 87: Mardi 28 juillet 2026

Jour 88: Mercredi 29 juillet 2026

Jour 89: Jeudi 30 juillet 2026

Jour 90: Vendredi 31 juillet 2026