Présentation personnelle et projet de stage¶
Je suis Yoan Gabriel
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 du 30 Mars 2026 au 31 Juillet 2026 avec comme coéquipier Nicolas Schmauch.
Projet Refonte de l'infrastructure¶
Jour 1 (30 mars 2026) :¶
Nous avons un projet de refonte d’architecture qui va se baser sur un hyperviseur qui va stocker les différents services dans différentes VM.
| 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
https://dolys.fr/forums/topic/tuto-dinstallation-et-doptimisation-de-nextcloud-avec-nextcloud-office-collabora-online-sur-yunohost
Nous avons comparé les différents proxys pour savoir lequel répond au mieux à notre besoin :
| 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 (31 mars 2026) :¶
J'ai rédigé un mail avec Nicolas pour Alexander concernant les choix de solution :
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 (1 avril 2026) :¶
Alexander nous a posé des questions en retour :
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 ?
Nous avons répondu à ces questions :
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
J'ai regardé comment fonctionne Incus et testé les différentes commandes. Je me suis fait une liste de commandes de base pour Incus :
| Commande | Description |
| incus admin init | Initialisation interactive |
| incus admin init --minimal | Initialisation rapide minimale |
| incus image list images: | Liste les images disponibles |
| incus launch images:debian/12 <nom> | Crée et démarre un conteneur |
| incus launch images:debian/12 <nom> --vm | Crée et démarre une VM |
| incus copy <source> <destination> | Copie un conteneur |
| incus list | Liste toutes les instances |
| incus info <nom> | Détails d'une instance |
| incus start/stop/restart <nom> | Démarre / Arrête / Redémarre |
| incus delete <nom> | Supprime une instance |
| incus delete <nom> --force | Supprime même si active |
| incus launch ... --config limits.cpu=1 --config limits.memory=192MiB | Lance avec limites |
| incus config show <nom> | Affiche la config |
| incus config set <nom> limits.memory=128MiB | Modifie une config |
| incus config device override <nom> root size=30GiB | Redimensionne le disque VM |
| incus exec <nom> -- bash | Shell interactif |
| incus exec <nom> -- <commande> | Exécuter une commande |
| incus file pull <nom>/chemin/fichier . | Récupère un fichier |
| incus file push <fichier> <nom>/chemin/ | Envoie un fichier |
| incus snapshot create <nom> <snap-name> | Crée un snapshot |
| incus snapshot list <nom> | Liste les snapshots |
| incus snapshot restore <nom> <snap-name> | Restaure un snapshot |
| incus snapshot delete <nom> <snap-name> | Supprime un snapshot |
| incus info <nom> | Affiche aussi les snapshots |
J’ai commencé à tester Caddy (reverse proxy), ainsi que son installation et sa première configuration :
Instalation de caddy :
sudo apt update sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
Configuration de base de Caddy pour avoir du HTTPS :
sudo vim /etc/caddy/Caddyfile
ip ou FQDN {
# Chemin du site
root * /var/www/site
# Activer les pages statiques
file_server
}
Si on veut un site dynamique en PHP, on ajoute cette ligne dans la config :
ip ou FQDN {
...
# Utiliser PHP-FPM
php_fastcgi unix//run/php/php-fpm.sock
}
Si on veut ajouter des logs de Caddy, toujours dans la conf :
ip ou FQDN {
...
log {
output file /var/log/caddy/access.log { # Chemin du log
roll_size 1gb # Taille maximale avant renouvellement
roll_keep 5 # Nombre de fichiers log conservés
roll_keep_for 720h # # Durée de conservation
}
}
}
Nous avons une mission de wifi réseaux :
| SCHEMA |
|---|
|
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
flash l'os PostMarketOS sur le telephone PinePhone
Jour 4 (2 avril 2026) :¶
On a commencé à installer le serveur sous Debian 13.
À un moment, il nous demande de partitionner le disque :
| 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) |
On a continué la mission du Wi-Fi :
Configuration du routeur OpenWrt One pour se connecter au réseau Wi-Fi du téléphone
Création d’un hotspot connecté à Internet via le téléphone
Crée un hotspot via le routeur qui prend le relai:
apk update
apk add relayd luci-proto-relay
Jour 5 (3 avril 2026) :¶
Jour 6 (7 avril 2026) :¶