---
title: Debian 13
description: Guide pas à pas pour installer Debian 13 sur un serveur maison et configurer l'accès SSH, les paquets essentiels et un système de base prêt à l'emploi.
---


:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

[Debian 13 « Trixie »](https://www.debian.org/) est le fondement sur lequel repose tout ce guide. C'est une distribution Linux simple, stable et sans surprise. Et pour un homelab c'est précisément l'intérêt : les versions des paquets restent figées pendant toute la durée de vie de la version, les correctifs de sécurité continuent d'arriver pendant environ cinq ans en comptant la LTS, si bien que la machine tourne des années au lieu d'exiger d'être réinstallée tous les quelques mois.

L'autre raison, c'est qu'il ne vous donnera aucune limite, il ne vous enfermera jamais. Les systèmes clés en main comme Unraid, TrueNAS ou le DSM de Synology posent leur propre couche par-dessus, et le jour où vous avez besoin de quelque chose que leur interface n'expose pas, vous serez coincé ou devrez bricoler autour. Debian n'est qu'un serveur : vous installez ce que vous voulez, où vous voulez, et rien n'est caché derrière l'interface de quelqu'un d'autre. C'est exactement ce que la plupart des projets auto-hébergés visent en premier, leurs docs vous donnent donc des commandes `apt` qui fonctionnent telles quelles, et n'importe quel message d'erreur collé dans un moteur de recherche a déjà des années de réponses derrière lui. Une installation minimale est assez légère pour laisser la quasi intégralité de la RAM et du CPU à tous les délires que vous installerez dessus.

![picture](/img/serveex/server.svg)

## Installation

::note{icon="" to="/general/linux/cli-basics"}
📋 __Prérequis :__ tout ce qui suit se déroule dans un terminal, vous devez donc être à l'aise avec les bases : se déplacer avec `cd`, lister avec `ls`, modifier un fichier avec `nano`, et lire ce qu'une commande vous dit quand elle échoue. Si tout ceci est nouveau pour vous, commencez par les **bases de la ligne de commande** et revenez ensuite.
::

### Réglages du BIOS

Appuyez sur :kbd{value="Del"} ou :kbd{value="F2"} juste après l'allumage de votre machine afin d'ouvrir le setup du BIOS (l'écran de démarrage indique généralement quelle touche c'est). La plupart des machines ont aussi un menu de démarrage ponctuel, souvent :kbd{value="F12"}, :kbd{value="F11"} ou :kbd{value="F8"}, qui permet de démarrer sur la clé USB une seule fois sans toucher à l'ordre de démarrage permanent. Debian documente la procédure générale dans son [manuel d'installation](https://www.debian.org/releases/forky/amd64/ch03s06.fr.html), et voici ce qui compte avant d'installer :

- **Mode de démarrage.** Préférez l'UEFI natif. Il est nécessaire que l'installateur démarre dans le *même* mode que celui dans lequel vous comptez faire tourner le serveur, parce que l'UEFI utilise un partitionnement GPT alors que le BIOS legacy (et l'UEFI en mode CSM) utilise une table de partitions DOS. Une incohérence installe le bootloader au mauvais endroit. Attention sur les machines multiboot : le mode de démarrage par défaut des périphériques amovibles n'est souvent pas celui utilisé pour les disques internes.
- **Le Secure Boot** peut rester activé. Debian fournit un chargeur shim signé par Microsoft, il démarre donc très bien tel quel.
- **Le mode SATA** doit être `AHCI`, pas `RAID` / Intel RST, sinon Linux risque de ne pas voir vos disques du tout. Changer ce réglage après avoir installé un autre OS sur le même disque empêchera cet OS de démarrer, réglez-le donc avant de commencer.
- **La restauration après coupure de courant**, pour que le serveur redémarre tout seul après une coupure au lieu d'attendre que quelqu'un appuie sur le bouton. Le réglage se trouve dans *Power Management*, *APM Configuration* ou *Advanced* selon la carte, sous un nom du genre *Restore on AC Power Loss*, *AC Power Recovery*, *After Power Failure*, *AC Back Function* ou *S0 state*. Mettez-le sur **Power On**, pas sur *Last State*, qui laisserait la machine éteinte si la coupure l'a surprise pendant un arrêt.
- **Le Wake on LAN**, si vous voulez pouvoir allumer la machine à distance plutôt que d'appuyer physiquement sur le bouton. Même menu *Power Management* : mettez *Wake on LAN*, *Power On By PCI-E/PCI* ou *Resume by PCI-E Device* sur **Enabled**, puis désactivez *ErP* / *EuP Ready* et *Deep Sleep* / *Deep Sx*, qui coupent l'alimentation de la carte réseau une fois la machine éteinte et la rendraient sourde au magic packet. Debian doit aussi dire à la carte d'écouter, voir [Pour aller plus loin](#pour-aller-plus-loin).
- **La virtualisation** (`VT-x` / `AMD-V`, plus `VT-d` pour le passthrough) ne coûte rien à activer maintenant et évite un aller-retour dans le BIOS le jour où vous voudrez faire tourner une VM. Docker lui-même n'en a pas besoin sous Linux.

::note
Si vous êtes en dual boot avec Windows, désactivez son *démarrage rapide* : il laisse le système de fichiers dans un état que Linux peut corrompre, et Windows Update aime bien le réactiver en douce.
::

### Télécharger l'ISO et créer clé USB Bootable

::steps{level="4"}
#### Télécharger l'image netinst

Récupérez l'image **netinst** `amd64` sur [debian.org](https://www.debian.org/download.fr.html). Elle fait environ 700 Mo et récupère le reste des paquets sur le réseau pendant l'installation, ce qui est exactement ce qu'on veut sur un serveur branché en ethernet : vous obtenez des paquets à jour au lieu d'installer depuis un instantané vieux de plusieurs mois puis de tout mettre à jour derrière. Les images DVD complètes n'ont de sens que si la machine n'a pas de réseau pendant l'installation.

#### Créer une clée bootable avec Rufus

Sous Windows, utilisez [Rufus](https://rufus.ie/) (portable, aucune installation nécessaire). Branchez une clé USB de 2 Go ou plus, en gardant en tête qu'**elle sera entièrement effacée**, puis :

- **Périphérique** : votre clé USB. Vérifiez la capacité deux fois, Sinon Rufus écrira sans rechigner sur le mauvais disque si vous le laissez faire.
- **Type de démarrage** : `SÉLECTION`, puis choisissez l'ISO Debian que vous venez de télécharger.
- **Schéma de partition** : il doit correspondre au mode de démarrage réglé dans le BIOS plus haut. `GPT` pour l'UEFI, `MBR` uniquement si vous restez en legacy/CSM. Le champ système de destination suit automatiquement.
- Laissez les options de formatage par défaut, puis cliquez sur `DÉMARRER`. Si Rufus demande comment écrire l'image, gardez le *mode image ISO* recommandé.

![Rufus configuré pour écrire l'ISO Debian](/img/serveex/install/rufus.png)

_Capture issue de [DEV Community](https://dev.to/devops2808/how-to-create-bootable-usb-installer-for-debian-12-4f66)._

L'écriture prend quelques minutes.

#### Terminé !
::

### Installer Debian

Démarrez sur la clé USB (menu de démarrage ponctuel vu dans la section BIOS) et choisissez **Install**, l'installateur en mode texte. L'objectif ici est un serveur minimal et headless : pas de bureau, pas de session graphique, rien d'autre qu'un shell joignable en SSH. L'écran et le clavier que vous utilisez en ce moment ne servent que pour cette installation, après quoi la machine tourne à l'aveugle dans un coin. Le [guide d'installation officiel](https://www.debian.org/releases/trixie/amd64/ch06s03.fr.html) documente chaque écran.

![Menu de démarrage de l'installateur Debian, Install sélectionné](/img/serveex/install/debian-install-boot.png)

::steps{level="4"}
#### Langue, pays, clavier

Rien de particulier. La disposition du clavier est celle sur laquelle vous tapez physiquement, ce qui est facile à rater si vous avez choisi l'anglais mais tapez en AZERTY, alors soyez vigilant.

#### Réseau et nom de machine

Une connexion filaire se configure toute seule en DHCP. Quand il demande un **nom de machine**, donnez-lui un vrai nom (`serveex`, `nas`...), vous le verrez dans chaque invite SSH ensuite. Le **domaine** peut rester vide, ou être réglé sur quelque chose comme `lan` si vous en utilisez déjà un à la maison.

![Écran du nom de machine de l'installateur Debian](/img/serveex/install/debian-install-hostname.png)

#### Mot de passe root et compte utilisateur

Laissez le **mot de passe root vide**. Debian désactive alors le compte root, installe `sudo` et y place votre utilisateur, ce qui est le comportement le plus sûr et vous épargne une étape de configuration plus tard.

Créez ensuite votre utilisateur : nom complet, identifiant, mot de passe. C'est le compte avec lequel vous vous connecterez en SSH. Évitez `admin` comme identifiant, il est réservé sur Debian et l'installateur le refusera.

#### Horloge

Confirmez le fuseau horaire deviné à partir de votre pays.

#### Partitionnement

*Assisté, utiliser un disque entier* sur le disque système, puis *Tout dans une seule partition*, ce qui vous donne un gros `/` plus une partition de swap. Des partitions `/home` ou `/var` séparées n'apportent pas grand-chose ici et garantissent surtout que l'une se remplit pendant que les autres restent à moitié vides. Ne prenez LVM que si vous savez déjà que vous voulez des snapshots ou agrandir des volumes plus tard. Vos disques de données ne sont pas touchés à ce stade, vous les monterez ensuite.

Terminez avec *Terminer le partitionnement et appliquer les changements*, puis confirmez avec *Oui* : c'est le point de non-retour pour ce disque.

![Schéma de partitionnement de l'installateur Debian, tout dans une seule partition](/img/serveex/install/debian-install-partition.png)

::tip{icon="" to="/general/linux/filesystem"}
✨ __Astuce :__ ce qui vit réellement sur cette unique partition, et pourquoi `/srv/docker` est l'endroit où ce guide place chaque stack, est traité dans **dossiers et partitions**.
::

#### Miroir et sondages

Répondez *Non* à *Faut-il analyser un autre média d'installation ?*, tout le reste vient du réseau. Pour le miroir, prenez-en un dans votre pays, ou `deb.debian.org` qui route automatiquement vers un miroir proche, et laissez le champ du proxy HTTP vide sauf si vous en avez réellement un. Le concours de popularité (statistiques anonymes sur les paquets) est oui ou non, sans conséquence.

#### Sélection des logiciels (tasksel)

L'écran qui décide vraiment si votre serveur reste minimal. Décochez **tout**, en particulier `Environnement de bureau Debian` et `GNOME`, cochés par défaut, qui embarqueraient des gigaoctets de paquets plus une session graphique que vous n'afficherez jamais. Gardez exactement deux cases : **`serveur SSH`**, votre seule porte d'entrée à partir de maintenant, et **`utilitaires usuels du système`**, que la suite de ce guide suppose installés.

::warning
Les cases se cochent et se décochent avec :kbd{value="Space"}, jamais :kbd{value="Enter"}. :kbd{value="Enter"} valide tout l'écran et passe à la suite, appuyer dessus sur la ligne du bureau installe donc GNOME au lieu de le retirer, et vous vous retrouvez avec un serveur graphique à dépouiller à la main. Utilisez :kbd{value="Tab"} pour atteindre `Continuer` une fois que les deux cases ci-dessus sont les seules cochées.
::

![Sélection des logiciels de l'installateur Debian avec seulement serveur SSH et utilitaires usuels cochés](/img/serveex/install/debian-install-tasksel.png)

#### GRUB

Installez-le sur le disque que vous venez de partitionner (`/dev/sda`, `/dev/nvme0n1`...), pas sur une partition.

![L'installateur Debian demandant sur quel périphérique installer le chargeur GRUB](/img/serveex/install/debian-install-grub.png)

#### Terminé !
::

::note
Avant de redémarrer, prenez une minute pour donner au serveur une **adresse fixe** dans votre routeur. Tout ce qui suit pointe dessus : vos raccourcis SSH, le reverse proxy, les favoris vers chaque service. Si cette adresse n'est pas fixée, lorsqu'elle changera elle cassera tout.

La bonne méthode est une réservation DHCP, qui lie l'adresse à l'adresse MAC du serveur tout en laissant la box gérer l'adressage. Voir [NAT & DHCP](/general/networking/nat).
::

_Captures de l'installateur issues du [howtoforge.com](https://www.howtoforge.com/tutorial/debian-minimal-server/)._

### Se connecter en SSH

Le serveur n'a plus besoin d'écran ni de clavier à partir de maintenant, tout passe par SSH. Ces étapes vous apprennent à vous logger sur votre serveur, puis s'assurent que personne d'autre ne le peut.

::steps{level="4"}
#### Se connecter depuis une autre machine

Retirez la clé USB et redémarrez. L'adresse à utiliser est celle que vous avez fixée dans la box juste avant, `192.168.1.42` dans les exemples ci-dessous.

Tout ce qui suit se passe depuis une autre machine de votre réseau local, pas sur le serveur. Windows et macOS embarquent tous les deux un client SSH, il n'y a donc rien à installer : ouvrez **PowerShell** sous Windows, ou **Terminal** sous macOS, et tapez la même commande.

```bash [Terminal]
ssh utilisateur@192.168.1.42
```

La première connexion vous demande de confirmer l'empreinte du serveur, c'est normal, répondez `yes`. Elle est stockée dans `~/.ssh/known_hosts` et la question ne reviendra plus.

::note
Si la connexion est refusée, la case `serveur SSH` a probablement été laissée décochée à l'écran tasksel. Rebranchez un écran, connectez-vous en local en tapant votre nom d'utilisateur puis votre mot de passe, et lancez `sudo apt install openssh-server`. N'oubliez pas de vous dé-logger en tapant `exit`.
::


#### Se connecter avec une clé SSH plutôt que par mot de passe

Les mots de passe en SSH sont vulnérables aux attaques par brute force, et en taper un à chaque connexion devient vite pénible. Les clés SSH permettent d'autoriser une machine à se logger sans mot de passe à votre serveur.

Toujours sur l'autre machine, générez une clé.

```bash [Terminal]
ssh-keygen -t ed25519
```

Appuyez sur :kbd{value="Enter"} pour accepter le chemin par défaut, et mettez une passphrase (elle protège le fichier de clé lui-même, votre système la retiendra après le premier déverrouillage). Il s'agit ensuite de transmettre la clée publique à votre serveur. A noter que Windows n'a pas de `ssh-copy-id`, nous pousserons donc la clé manuellement dans ce cas :

::code-group
```bash [macOS]
ssh-copy-id utilisateur@192.168.1.42
```

```bash [Windows]
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh utilisateur@192.168.1.42 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```

```bash [Linux]
ssh-copy-id utilisateur@192.168.1.42
```
::

Votre serveur demande votre mot de passe une dernière fois. Reconnectez-vous pour vérifier qu'il ne le demande plus :

```bash [Terminal]
ssh utilisateur@192.168.1.42
```

#### Refermer la porte derrière vous

Une fois la clé fonctionnelle, coupez les connexions par mot de passe (et l'accès root direct si root existe). Sur le serveur :

```bash [Terminal]
sudo nano /etc/ssh/sshd_config.d/hardening.conf
```

```properties [hardening.conf]
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
```

Un fichier dans `sshd_config.d/` est lu par-dessus la configuration principale, vos changements survivent donc à une mise à jour de paquet qui réécrirait `/etc/ssh/sshd_config`. Appliquez :

```bash [Terminal]
sudo systemctl restart ssh
```

::warning
Gardez votre session SSH actuelle ouverte pendant le test. Ouvrez un **second** terminal et reconnectez-vous : si la clé ne fonctionne plus, la session restée ouverte est votre porte de secours pour corriger la configuration. Si vous la fermez avant d'avoir vérifié et une faute de frappe vous enferme en dehors de votre propre serveur, avec l'écran et le clavier comme seul recours.
::

::note
La porte est maintenant fermée pour toutes les autres machines aussi, y compris la prochaine depuis laquelle vous voudrez vous connecter. Pour en enregistrer une nouvelle, remettez `PasswordAuthentication yes` dans `hardening.conf`, redémarrez SSH, refaites les deux étapes de clé ci-dessus depuis cette machine, puis remettez `no` et redémarrez SSH une dernière fois.
::

#### Terminé !
::

### Réveiller le serveur à distance

Une machine qui tourne 24h/24 pour deux heures d'utilisation réelle consomme, fait tourner des ventilateurs et use des disques pour rien. Le Wake on LAN permet de l'éteindre proprement quand vous avez fini et de la rallumer en quelques secondes sans vous déplacer : la carte réseau reste alimentée en veille, à l'écoute d'un broadcast bien précis (le *magic packet*) contenant l'adresse MAC du serveur, et allume la machine dès qu'elle le voit. Pratique pour une cible de sauvegarde dont vous n'avez besoin que la nuit, ou un serveur multimédia que personne ne regarde dans la journée.

Deux conditions avant de commencer : la machine doit être en ethernet filaire, les cartes WiFi ne gèrent presque jamais ça, et le paquet doit être envoyé depuis le même réseau local, à moins d'utiliser une app spécifique et des règles de redirection via le routeur. La partie BIOS a été traitée dans [Réglages du BIOS](#réglages-du-bios), voici la partie Debian.

::steps{level="4"}
#### Trouver l'interface et son adresse MAC

```bash [Terminal]
ip -br link
```

Vous obtenez quelque chose comme `enp1s0  UP  aa:bb:cc:dd:ee:ff`. Gardez les deux : le nom de l'interface pour les commandes ci-dessous, l'adresse MAC pour la machine qui enverra le paquet.

#### Vérifier que la carte le gère

```bash [Terminal]
sudo apt install ethtool
sudo ethtool enp1s0 | grep -i wake
```

La réponse ressemble à `Supports Wake-on: pumbg` puis `Wake-on: d`. La lettre qui compte est **g**, pour magic packet. Si la ligne *Supports* ne la contient pas, la carte ne sait pas le faire et il n'y a rien à configurer. `Wake-on: d` signifie simplement désactivé, ce que l'étape suivante corrige.

#### L'activer

```bash [Terminal]
sudo ethtool -s enp1s0 wol g
```

Relancez la vérification, `Wake-on` devrait maintenant être à `g`. Ce réglage est réinitialisé à chaque démarrage, il faut donc le réappliquer automatiquement.

#### Le faire survivre aux redémarrages

```bash [Terminal]
sudo nano /etc/systemd/system/wol.service
```

```ini [wol.service]
[Unit]
Description=Enable Wake on LAN

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp1s0 wol g

[Install]
WantedBy=basic.target
```

```bash [Terminal]
sudo systemctl daemon-reload
sudo systemctl enable --now wol.service
```

#### Le réveiller

Éteignez le serveur avec `sudo poweroff`, puis envoyez le magic packet depuis une autre machine du réseau. Sur macOS et Linux, le paquet `wakeonlan` le fait en une commande :

```bash [Terminal]
wakeonlan aa:bb:cc:dd:ee:ff
```

Windows n'a pas d'émetteur intégré, la solution la plus simple là-bas est une application mobile : n'importe laquelle des applications *Wake on LAN* gratuites prend l'adresse MAC et fonctionne de la même façon. Le serveur devrait démarrer en quelques secondes.

#### Terminé !
::

::note
Le réveiller depuis l'extérieur est une autre histoire, et passer par un VPN n'aide pas si ce VPN tourne sur le serveur lui-même : le tunnel est coupé tant que la machine est éteinte. La solution est de rediriger un port UDP sur la box (7 ou 9, les ports Wake on LAN habituels) vers le serveur, puis d'envoyer le paquet sur votre adresse publique depuis une application qui sait le faire, [WolOn](https://wolon.app/) par exemple. La [règle NAT](/general/networking/nat) est toute simple, `UDP 9` depuis l'extérieur vers `192.168.1.42:9` à l'intérieur. La box doit encore savoir associer cette IP à la bonne adresse MAC pendant que la machine est éteinte, et c'est pour ça que certaines exposent une entrée ARP statique, ou un bouton Wake on LAN à elles qui vous épargne complètement la redirection de port. Vérifiez d'abord votre box.
::

### Garder le système à jour

Debian ne se met pas à jour tout seul. Tous les mois environ, ou quand vous y pensez, quatre commandes en SSH :

::steps{level="4"}
#### Rafraîchir la liste des paquets

```bash [Terminal]
sudo apt update
```

Rien n'est installé à ce stade, `apt` demande seulement aux miroirs ce qui est disponible et vous dit combien de paquets sont en retard.

#### Appliquer les mises à jour

```bash [Terminal]
sudo apt full-upgrade
```

`full-upgrade` est préféré au simple `upgrade` parce qu'il accepte de retirer un paquet quand c'est le prix à payer pour en faire avancer un autre, ce qui arrive sur un serveur qui vit des années. Lisez le résumé avant de répondre oui, il liste exactement ce qui est supprimé.

#### Nettoyer derrière elles

```bash [Terminal]
sudo apt autoremove --purge
```

Chaque mise à jour de noyau laisse le précédent installé, et `/boot` est une petite partition qui finit par se remplir et casser la mise à jour suivante. Faites-le à chaque fois, pas de temps en temps. `--purge` supprime aussi les fichiers de configuration des paquets retirés.

#### Redémarrer si le noyau a bougé

```bash [Terminal]
sudo reboot
```

Une mise à jour du noyau ou de la libc ne prend effet qu'après un redémarrage. Tout le reste s'applique immédiatement, ce n'est donc nécessaire que quand la mise à jour a touché l'un des deux, et ça vaut la peine de le planifier à un moment où rien ne dépend de la machine.

#### Terminé !
::

::tip
Si vous n'avez pas besoin de surveiller ce qui se passe, les trois premières étapes tiennent sur une ligne, `&&` interrompant la chaîne dès que l'une d'elles échoue :

```bash [Terminal]
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove --purge -y
```

`-y` répond oui à toutes les questions, y compris le jour où une mise à jour propose de retirer quelque chose que vous auriez préféré garder, réservez-le donc aux tournées de routine. Ajoutez `&& sudo reboot` pour évacuer aussi le redémarrage.
::

Pour les correctifs de sécurité sans avoir à y penser, `sudo apt install unattended-upgrades` puis `sudo dpkg-reconfigure -plow unattended-upgrades` les applique tout seul chaque nuit. À noter que tout ceci ne couvre que le système : vos conteneurs se mettent à jour séparément, depuis Dockge.

### Pour aller plus loin

- [Tout savoir sur l'accès à distance à la console (SSH)](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys)
- Optionnel - [Client UPS en cas de coupure de courant](https://www.sindastra.de/p/2078/how-to-connect-linux-server-to-synology-ups-server) / [et aussi ici](https://www.reddit.com/r/synology/comments/gtkjam/use_synology_nas_as_ups_server_to_safely_power/)

::tip{icon="" to="/general/linux/handy-tools"}
✨ __Astuce :__ une poignée d'outils en ligne de commande à ajouter par-dessus une installation minimale, `btop`, `duf`, `ufw` et quelques autres, sont traités dans **outils CLI pratiques**.
::
