Le Streaming est Cassé III : Les Fondations (OS, Docker et « Jour Un »)
Maintenant que nous avons notre matériel, nous pouvons commencer par la configuration système de notre serveur. Le MiniPC que j’ai acheté était livré avec Windows installé. Il est également possible d’utiliser le système de Microsoft pour ce que nous voulons, mais c’est un gaspillage ridicule de performances et d’énergie.
Un Home Server robuste n’est pas un ordinateur de bureau qui reste allumé toute la journée : c’est un système dédié. Nous allons construire les fondations logicielles à partir de zéro, transformant le mini PC en une infrastructure de niveau entreprise, prête à fonctionner 24h/24 et 7j/7 sans intervention humaine.
Choisir et Configurer le Système d’Exploitation
Mais… pourquoi pas Windows ? Windows consomme environ 2 Go à 4 Go de RAM rien que pour exister et faire tourner son interface graphique. Sur notre N100, c’est du gaspillage, comme je l’ai dit, c’est jeter les performances à la poubelle. De plus, Docker sur Windows (via WSL2) ajoute une couche de virtualisation qui peut impacter les performances d’E/S et du réseau.
N’utilisez pas Windows. Oubliez cette merde.
Ici, nous pouvons utiliser n’importe quel Linux… sans interface. Un serveur n’a pas besoin de souris, de fenêtres ou de fonds d’écran.
Nous allons installer Ubuntu Server sans interface graphique. Le serveur sera contrôlé à 100% via le terminal (SSH) depuis votre PC principal. Cela garantit que chaque cycle CPU et chaque mégaoctet de RAM est dédié à ce qui compte : vos services.
Bien sûr, installer Ubuntu à partir de zéro ajoutera quelques couches de complexité (pas trop). Mettre à jour les dépôts, installer les dépendances, configurer les permissions utilisateur, éditer les fichiers système… C’est là que les choses peuvent mal tourner et que des erreurs apparaissent, vous coûtant cher des mois plus tard.
Pour cela, j’ai créé un petit script qui automatisera toutes ces configurations initiales. Le code est auto-explicatif.
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (sudo ./install.sh)"
exit 1
fi
REAL_USER=$SUDO_USER
if [ -z "$REAL_USER" ]; then
echo "Could not detect sudo user. Exiting."
exit 1
fi
USER_UID=$(id -u $REAL_USER)
USER_GID=$(id -g $REAL_USER)
USER_HOME=$(getent passwd $REAL_USER | cut -d: -f6)
BASE_DIR="$USER_HOME/EmuleVision"
echo "Starting installation for user: $REAL_USER"
echo "Base Directory: $BASE_DIR"
apt update && apt upgrade -y
apt install -y curl gnupg ca-certificates lsb-release cifs-utils samba vim git net-tools intel-media-va-driver-non-free libmfx1 vainfo
if ! command -v docker &> /dev/null; then
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
usermod -aG docker $REAL_USER
fi
usermod -aG render $REAL_USER
usermod -aG video $REAL_USER
mkdir -p $BASE_DIR/{downloads/torrents,media/{movies,tv,manga},books}
mkdir -p $BASE_DIR/Settings/{Qbittorrent,Prowlarr,Sonarr,Radarr,Jellyfin,Gluetun,Portainer,Homepage,Scrutiny,AdGuard,Kaizoku,Kavita,CalibreWeb,Filebrowser}
chown -R $REAL_USER:$REAL_USER $BASE_DIR
chmod -R 775 $BASE_DIR
cat <<EOF >> /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sysctl -p
sed -r -i.orig 's/#?DNSStubListener=yes/DNSStubListener=no/g' /etc/systemd/resolved.conf
sed -r -i 's/#?DNS=/DNS=1.1.1.1 8.8.8.8/g' /etc/systemd/resolved.conf
rm -f /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved
cat <<EOF >> /etc/samba/smb.conf
[EmuleVision]
path = $BASE_DIR
writeable = yes
guest ok = no
create mask = 0775
directory mask = 0775
valid users = $REAL_USER
force user = $REAL_USER
EOF
echo "Set SMB password for $REAL_USER:"
smbpasswd -a $REAL_USER
systemctl restart smbd
TZ=$(timedatectl show -p Timezone --value)
cat <<EOF > $BASE_DIR/.env
PUID=$USER_UID
PGID=$USER_GID
TZ=$TZ
VPN_USER=vpn_username_here
VPN_PASS=vpn_password_here
EOF
chown $REAL_USER:$REAL_USER $BASE_DIR/.env
echo "Installation complete."
echo "1. Edit $BASE_DIR/.env with your VPN credentials."
echo "2. Place your docker-compose.yml in $BASE_DIR."
echo "3. Reboot the system."
Que fait le script ?
Docker Natif. Installe le Docker Engine directement depuis la source officielle, garantissant la version la plus récente et la plus sécurisée, sans dépendre des paquets obsolètes de la distribution. Essayer de faire cela sur Windows avec WSL, c’est chercher des ennuis.
Pilotes Intel QuickSync. Ubuntu Server est livré avec des pilotes génériques, ce qui affectera directement les performances de notre N100 pour le transcodage vidéo. Le script installe le paquet intel-media-va-driver-non-free et configure les permissions de rendu (groupe render), garantissant que Jellyfin a un accès direct au matériel.
Suppression d’IPv6. Plus tard, je me concentrerai spécifiquement sur la partie sécurité, puisque dans mon cas j’ai choisi de protéger mon homeserver avec un VPN. C’est optionnel, mais cela garantit la confidentialité de votre serveur, surtout si vous prévoyez d’« acquérir » des films ou des séries par des méthodes alternatives. Le script désactive IPv6 directement dans le noyau Linux (sysctl.conf). Ainsi, ni Docker, ni le VPN, ni qBittorrent ne peuvent utiliser IPv6, éliminant physiquement tout risque de fuite. Rappelez-vous, les fuites d’IP via IPv6 sont la première cause d’échec de sécurité dans les VPN domestiques.
Création des Dossiers et Structure Initiale. Le script crée l’arborescence de dossiers
/data/mediaet/data/downloadsavec les bonnes permissions utilisateur (PUID/PGID). Si cela est mal fait maintenant, les Hardlinks (copies instantanées sans dupliquer l’espace) échoueront. Nous parlerons davantage de ce type de copie dans le prochain article.
Avec cela, notre serveur est prêt, sécurisé et optimisé en 2 minutes !

PS : J’ai appelé ce projet EmuleVision. Changez-le comme vous voulez.
Configurer une IP Statique (La Bonne Façon)
Notre serveur a besoin d’une IP Statique, c’est évident. Si l’IP change à chaque redémarrage, notre télévision perdra la référence vers notre serveur à chaque changement d’IP effectué par le DHCP du routeur. Il y a deux façons de faire cela : la mauvaise façon et la bonne façon.
La mauvaise façon. Définir une IP statique uniquement sur l’OS. En gros, cela signifierait configurer l’IP statique dans le fichier réseau d’Ubuntu (netplan). Cela fonctionne bien jusqu’à ce que vous changiez de routeur ou emmeniez votre serveur dans une autre maison. Ensuite, vous devrez connecter un clavier et un HDMI pour le reconfigurer manuellement. Rappelez-vous : nous ne voulons pas d’interface graphique sur notre serveur.
La bonne façon. Nous changeons la configuration de Réservation DHCP/ Bail Statique directement sur le routeur, sans toucher à notre OS. Nous configurons le routeur pour qu’il attribue toujours la même IP (par exemple, 192.168.1.50) à l’adresse MAC du serveur. Ainsi, le serveur reste en mode « Automatique » (DHCP). Si vous changez de réseau, il récupère une nouvelle IP et fonctionne immédiatement. La gestion est centralisée sur le routeur.
Pour Résumer
Après l’installation physique (seulement câbles d’alimentation et réseau) et l’OS, le flux de travail est chirurgical :
Accédez au routeur et découvrez l’IP que le serveur a obtenue. Avec cela, nous identifions l’adresse MAC de notre MiniPC.
Attribuez une IP statique (ou une autre que vous voulez) sur le routeur (Bail Statique).
Accédez-y via SSH (
ssh utilisateur@ip) depuis votre ordinateur principal.Exécutez le script
install.sh.Redémarrez pour appliquer les verrouillages du noyau et les pilotes.
Dans le prochain article, nous aborderons la confidentialité et la sécurité du serveur. C’est optionnel, mais comme on dit, chaque chien connaît sa propre queue. En d’autres termes, protégez votre serveur !
