Mirror the French docs onto the English structure

This commit is contained in:
Djeex
2026-09-05 16:55:39 +02:00
parent 86f04ed794
commit 1894ac7ead
74 changed files with 6322 additions and 1588 deletions
+318 -44
View File
@@ -1,72 +1,346 @@
---
title: Debian 13
description: Guide pas à pas pour installer Debian 13 sur un serveur et configurer l'accès SSH, les paquets essentiels et un système de base prêt à l'emploi.
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
::note
🎯 __Objectif :__ Installer Debian 13 et les dépendances principales pour avoir un OS pret à l'emploi, joignable en SSH.
::
[Debian 13 « Trixie »](https://www.debian.org/) est la base sur laquelle repose tout ce guide. C'est un Linux simple, ennuyeux et stable, 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 de demander une reconstruction tous les quelques mois.
L'autre raison, c'est qu'il ne vous gêne pas. Les systèmes clés en main comme Unraid, TrueNAS ou le DSM de Synology posent leur propre couche par-dessus Docker, et le jour où vous avez besoin de quelque chose que leur interface n'expose pas, vous êtes coincé à 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. Ça se trouve être aussi 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, Docker publie un dépôt Debian officiel, 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 presque toute la RAM et le CPU d'un petit N100 à vos conteneurs.
![picture](/img/serveex/server.svg)
## Installation
1. [Paramètrage BIOS](https://www.debian.org/releases/stable/amd64/ch03s06.fr.html#bios-setup)
2. [Téléchargement de l'image Debian 13](https://www.debian.org/download.fr.html)
3. [USB bootable (Rufus)](https://dev.to/devops2808/how-to-create-bootable-usb-installer-for-debian-12-4f66)
4. [Installer Debian et configurer SSH](https://www.howtoforge.com/tutorial/debian-minimal-server/)
5. Installer sudo et ajouter un utilisateur au groupe sudo, pour les privilèges administrateurs
Se connecter en root :
```bash [Terminal]
su -
```
mettre son mot de passe puis taper :
```bash [Terminal]
apt install sudo
```
Ajouter l'utilisateur au groupe sudo :
```bash [Terminal]
adduser <nomdutilisateur> sudo
```
::note{icon="" to="/general/linux/cli-basics"}
📋 __Prérequis :__ tout ce qui suit se passe dans un terminal, vous devriez 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 ça est nouveau pour vous, commencez par les **bases de la ligne de commande** et revenez ensuite.
::
La prochaine fois que l'utilisateur se connectera, il pourra utiliser la commande `sudo` et ainsi executer des commandes avec les privilèges administrateurs.
### Réglages du BIOS
6. [Tout savoir sur la connexion à distance à la console (SSH)](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys)
7. Optionnel - [UPS client en cas de coupure](https://www.sindastra.de/p/2078/how-to-connect-linux-server-to-synology-ups-server) / [et aussi](https://www.reddit.com/r/synology/comments/gtkjam/use_synology_nas_as_ups_server_to_safely_power/)
8. Optionnel - Réveil en cas de coupure de courant -> régler le BIOS S0 state
9. Optionnel - [Réveiller le serveur à distance (WoW - WoL)](https://dev.to/zakery1369/enable-wake-on-lan-on-debian-4ljd)
Appuyez sur :kbd{value="Del"} ou :kbd{value="F2"} juste après l'allumage pour ouvrir le setup du firmware (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 :
## CLI apps à avoir près de soi
Quelques app que vous utiliserez forcément à un moment donné, autant les installer dès le départ
- **Mode de démarrage.** Préférez l'UEFI natif. L'important est 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, et une incohérence installe le chargeur de démarrage 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 revienne 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'aller la voir. 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 l'écrire sur une clé USB
::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.
#### L'écrire avec Rufus
Sous Windows, écrivez-la avec [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, Rufus écrit volontiers 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 [ce guide de clé USB bootable sur 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.
#### 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 box. Tout ce qui suit pointe dessus : vos raccourcis SSH, le reverse proxy, les favoris vers chaque service. Sur un simple bail DHCP cette adresse finit par changer toute seule et tout casse d'un coup.
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) pour savoir où la trouver dans l'interface de votre box.
::
_Captures de l'installateur issues du [guide de serveur Debian minimal de howtoforge.com](https://www.howtoforge.com/tutorial/debian-minimal-server/)._
### Se connecter en SSH
Le serveur n'a plus d'écran à partir de maintenant, tout passe par SSH. Ces étapes vous font entrer, 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 réservé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 [email protected]
```
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 pas.
::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 et lancez `sudo apt install openssh-server`.
::
L'écran et le clavier ne servent plus à rien. Débranchez-les, la machine peut aller vivre dans son coin.
#### Se connecter par clé plutôt que par mot de passe
Les mots de passe en SSH se font attaquer par force brute dès que le port est joignable depuis l'extérieur, et en taper un à chaque connexion devient vite pénible. Toujours sur l'autre machine, générez une clé si vous n'en avez pas déjà une :
```bash [Terminal]
sudo apt update
sudo apt upgrade
sudo apt install nano btop ranger git duf neofetch samba cifs-utils tree unzip
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). Copiez ensuite la moitié publique sur le serveur. Windows n'a pas de `ssh-copy-id`, il pousse donc la clé à travers la connexion :
::code-group
```bash [macOS]
ssh-copy-id [email protected]
```
```bash [Windows]
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```
En plus :
```bash [Linux]
ssh-copy-id [email protected]
```
::
- [gping](https://www.linode.com/docs/guides/how-to-use-gping-on-linux/) - Outil graphique de ping
- [lazydocker](https://github.com/jesseduffield/lazydocker) - Gestion de conteneurs docker en CLI
Il demande votre mot de passe une dernière fois. Reconnectez-vous pour vérifier qu'il ne le demande plus :
## Fonctions utiles
### Pare-feu
```bash [Terminal]
ssh [email protected]
```
- [ufw](https://www.zenarmor.com/docs/network-security-tutorials/how-to-set-up-a-firewall-with-ufw-on-debian)
- [Firewalld](https://linuxcapable.com/how-to-install-firewalld-on-debian-linux/)
#### Refermer la porte derrière vous
### Partage Samba (accès à un disque réseau distant)
Une fois la clé fonctionnelle, coupez les connexions par mot de passe et l'accès root direct. Sur le serveur :
- [Créer et accéder à un partage Samba](/fr/general/networking/samba)
```bash [Terminal]
sudo nano /etc/ssh/sshd_config.d/hardening.conf
```
```properties [hardening.conf]
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
```
### Transfert de fichier via rsync
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 rsync -avhHSP /source /destination
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. Fermez-la avant d'avoir vérifié et une faute de frappe vous enferme 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 laisser entrer 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, puisqu'un broadcast ne traverse pas un 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/)
Ajoutez ` --exclude @eaDir`{lang=shell} si la source est un NAS Synology
::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**.
::
+78 -61
View File
@@ -3,86 +3,87 @@ title: Docker
description: Installer Docker et Dockge sur Debian pour déployer et gérer des services auto-hébergés avec de simples stacks de conteneurs.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Docker
Docker, pour installer des services déployables en quelques secondes, et les manager en quelques commandes/clics.
Chaque application de ce guide, [Jellyfin](/serveex/media/jellyfin), [Vaultwarden](/serveex/apps/vaultwarden), [Immich](/serveex/cloud/immich), pour n'en citer que quelques-unes, arrive avec sa propre liste de dépendances, sa propre version de Python ou de Node, ses propres bizarreries. Installer tout ça directement sur Debian fonctionne un moment, jusqu'à ce que deux applications réclament une version différente de la même bibliothèque, ou qu'en désinstaller une laisse des fichiers éparpillés dans le système sans moyen propre de revenir en arrière.
::note
🎯 __Objectifs :__
Un **conteneur** contourne le problème : il empaquette une application avec tout ce dont elle a besoin pour tourner, isolée du reste du système et de tous les autres conteneurs. En démarrer un ne touche pas aux paquets de Debian, et le supprimer tient en une commande qui ne laisse rien derrière. Ce n'est pas non plus une machine virtuelle, il n'y a pas de second système d'exploitation à démarrer ni de ressources à réserver à l'avance : un conteneur partage le noyau de l'hôte et démarre en une seconde environ, en n'utilisant que la RAM et le CPU dont l'application à l'intérieur a réellement besoin.
- Installer [Docker](https://www.docker.com/)
- Installer [Dockge](https://github.com/louislam/dockge) pour manager les stacks
- Installer [Watchtower](https://github.com/containrrr/watchtower) pour mettre à jour les conteneurs
::
**Docker** est l'outil qui construit, démarre et gère ces conteneurs. Pointez-le sur une *image*, un instantané prêt à l'emploi d'une application maintenu par ses développeurs, et il la télécharge et la lance en une commande. Tout le reste de Serveex est bâti dessus : chaque application à partir d'ici est un conteneur Docker, ou une poignée de conteneurs qui travaillent ensemble.
![picture](/img/serveex/docker.svg)
## Installer docker
Installez les repo Docker et la clé GPG
## Installer Docker
::steps{level="3"}
### Ajouter le dépôt Docker et la clé GPG
```bash [Terminal]
# Add Docker's official GPG key:
# Ajoute la clé GPG officielle de Docker :
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Ajoute le dépôt aux sources Apt :
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
```
Installez les package
### Installer les paquets
```bash [Terminal]
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Et voilà !
**Plus d'options** [Installer docker pour Debian 12](https://docs.docker.com/engine/install/debian/)
### Terminé !
::
**Plus d'options :** [Installer Docker pour Debian 13](https://docs.docker.com/engine/install/debian/)
::note
Dans toute la suite, on part du principe que les stacks sont installées dans le dossier `/docker`, créé grace à la commande :
```bash [Terminal]
sudo mkdir /docker
```
À partir d'ici, nous partons du principe que les stacks sont installées dans le dossier `/srv/docker`, créé avec la commande :
```bash [Terminal]
sudo mkdir /srv/docker
```
::
## Installer [dockge](https://github.com/louislam/dockge) pour gérer et déployer les conteneurs
[Dockge](https://github.com/louislam/dockge) est un outil web permettant de créer, configurer, lancer et gérer des conteneurs pour Docker. C'est une interface simple, intuitive, qui est plus légère et plus facile pour les débutants que d'utiliser docker en CLI ou Portainer.
## Installer [Dockge](https://github.com/louislam/dockge) pour gérer et déployer les conteneurs
[Dockge](https://github.com/louislam/dockge) est un outil web pour créer, configurer, lancer et gérer des conteneurs Docker. C'est une interface simple et intuitive, plus légère et plus abordable pour un débutant que la ligne de commande ou Portainer.
![picture](/img/serveex/dockge.png)
### Configuration
Plan des fichiers que nous allons modifier :
::file-tree
---
label: Structure de fichiers que nous allons créer
tree:
/:
- srv:
- docker:
- dockge:
- compose.yml
---
::
```text [Arborescence]
root
└── docker
└── dockge
└── compose.yml
```
Créez le dossier de la stack :
::steps{level="4"}
#### Créer le dossier de la stack
```bash [Terminal]
cd /docker
cd /srv/docker
sudo mkdir dockge
```
Puis créez le fichier `compose.yml` dans ce dossier avec l'outil nano que vous avez installé préalablement (dans les outils CLI)
#### Créer le fichier compose
```bash [Terminal]
cd /docker/dockge
cd /srv/docker/dockge
sudo nano compose.yml
```
Appuyer sur `i` pour rentrer en modif et copiez-collez ceci.
Collez ce qui suit :
```yaml [compose.yaml]
---
@@ -92,39 +93,46 @@ services:
restart: unless-stopped
container_name: dockge
ports:
- 3555:5001 # Le port joignable depuis le LAN sera 3555
- 3555:5001 # le port accessible sur le réseau local sera 3555
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /docker/dockge/data:/app/data
- /docker:/docker
- /srv/docker/dockge/data:/app/data
- /srv/docker:/srv/docker
environment:
- DOCKGE_STACKS_DIR=/docker
- DOCKGE_STACKS_DIR=/srv/docker
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Pour lancer le conteneur, tapez :
#### Lancer le conteneur
```bash [Terminal]
cd /docker/dockge
cd /srv/docker/dockge
sudo docker compose up -d
```
Une fois lancé, tapez dans votre navigateur `http://ipduserveur:3555` et vous tomberez sur la page de login.
Plus d'info sur [dockge et comment l'utiliser](https://github.com/louislam/dockge)
Allez ensuite sur `http://ipdevotreserveur:3555` dans votre navigateur pour accéder à la page de connexion.
Et voilà, vous avez installé docker et un outil facile pour manager vos conteneurs !
Plus d'infos sur [Dockge et son utilisation](https://github.com/louislam/dockge)
## [Watchtower](https://watchtower.nickfedor.com/), pour mettre à jour automatiquement les conteneurs
Watchtower est un conteneur qui permet de vérifier les mise à jour et d'installer les nouvelles images sans effort, en ajoutant un simple label dans les fichiers `compose.yml` de vos conteneurs.
#### Terminé !
::
Et voilà ! Docker et un outil pour gérer facilement vos conteneurs sont prêts !
## [Watchtower](https://watchtower.nickfedor.com/), pour mettre à jour les conteneurs automatiquement
Watchtower est un conteneur qui vérifie les mises à jour et récupère les nouvelles images automatiquement, simplement en ajoutant un label dans les fichiers `compose.yml` de vos conteneurs.
### Configuration
::steps{level="4"}
#### Créer la stack
- Ouvrez Dockge dans votre navigateur
- Cliquez sur `compose`
- Nommez la stack `watchtower`
- Copiez collez la configuration ci-dessous à la place de la configuration par défaut dans Dockge
- Collez la configuration ci-dessous dans la zone de configuration par défaut de Dockge
```yaml [compose.yaml]
---
@@ -138,10 +146,10 @@ services:
environment:
- TZ=Europe/Paris
- WATCHTOWER_SCHEDULE=${SCHEDULE}
- WATCHTOWER_LABEL_ENABLE=true # watchtower scan tous les conteneurs qui ont le label com.centurylinklabs.watchtower.enable=true
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_REMOVE_VOLUMES=true
#Notifications Discord - décommenter si utilisé
# Notifications Discord - décommentez si utilisées
#- WATCHTOWER_NOTIFICATIONS=slack
#- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
#- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL}
@@ -149,24 +157,33 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
```
Puis remplissez les données ci-dessous dans l'encart ".env" de Dockge
#### Renseigner vos variables d'environnement
Remplissez la section `.env` dans Dockge avec ce qui suit :
```properties [.env]
SCHEDULE=
WH_URL=
```
| Propriété | Valeur | Exemples |
|-------------------------|---------------------------------------------------------------------|----------------------------------------------|
| `SCHEDULE`{lang=properties} | Format cron | `0 0 6 * * *` (tous les jours à 6h du matin) |
| `WH_URL`{lang=properties} | URL du webhook de votre serveur Discord - ajouter `/slack` à la fin | `https://serveurdiscord/valeur/slack` |
| Propriété | Valeur | Exemples |
|----------------|--------------------------------------------------------------------|----------------------------------------------|
| `SCHEDULE` | Format cron | `0 0 6 * * *` (tous les jours à 6h) |
| `WH_URL` | L'URL de votre webhook Discord, ajoutez `/slack` à la fin | `https://votreserveurdiscord/webhook/slack` |
Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci à vos conteneurs dans leur compose.yml :
#### Activer Watchtower sur les autres conteneurs
Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci à leur `compose.yml` :
```yaml [compose.yaml]
---
labels:
- com.centurylinklabs.watchtower.enable=true
- com.centurylinklabs.watchtower.enable=true
```
Puis relancez les stacks modifiés. Et voilà, vous avez une bonne carcasse pour commencer à installer les services qui vous plaisent !
Redémarrez ensuite les stacks modifiées.
#### Terminé !
::
Et c'est tout ! Vous avez maintenant une base solide pour commencer à déployer les services que vous voulez !
+249
View File
@@ -0,0 +1,249 @@
---
title: Wireguard
description: Installer et configurer WireGuard VPN pour accéder à votre homelab de n'importe où et connecter tous vos appareils à votre réseau privé.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
## Introduction
L'utilisation d'un VPN permet d'accéder à distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une manière propre de sécuriser l'accès à la console SSH, plutot que d'exposer le port sur internet. C'est pouvoir se connecter à son réseau où que l'on soit, de maniere sécurisée, et de faire dialoguer des machines qui sont sur des réseaux différents.
Ici nous utiliserons [Wireguard](https://www.wireguard.com/), un serveur VPN sécurisé et très performant, à l'aide des conteneurs :
- [wg-easy](https://github.com/wg-easy/wg-easy) pour le serveur, qui propose une interface web très simple pour controler les connexions et télécharger les fichiers de conf (notamment par QR code pour les téléphones)
- [Wireguard](https://docs.linuxserver.io/images/docker-wireguard/?h=wireguard) pour les clients linux
Il existe aussi des clients Windows, MacOS, iOS et Android.
Le principe est le suivant :
- Sur internet, n'importe qui peut contacter n'importe quel box internet et donc essayer de contacter n'importe quel serveur exposé.
- Votre serveur est sur votre réseau local. Il est accessible depuis le réseau local mais pas depuis internet, mis à part les services exposés (comme nous l'avons fait avec Dockge). Pour accéder aux ressources non exposées, vous devez être connecté sur le meme réseau que votre serveur et donc etre chez vous. De plus, vous devez laisser ouvert les ports utilisés par vos services à travers le pare feu de votre serveur.
- Nous souhaitons ici au contraire, depuis n'importe où, pouvoir accéder de maniere securisée aux services non exposés sur internet du serveur, comme la console SSH qui permet de se connecter à la machine par exemple.
- Nous souhaitons aussi accéder aux services d'autres serveurs, et par exemple relier de maniere sécurisée deux instances de Dockge pour tout controler depuis la meme interface.
Pour cela nous allons créer un **réseau privé virtuel**, ou VPN, c'est à dire un tunnel sécurisé auquel personne n'a accès à part les machines que vous relierez entre elles. Elles feront partie d'un nouveau réseau et pourront dialoguer entre elle comme dans un réseau local.
D'autre part, vous pourrez ajouter votre téléphone, un ordinateur portable ou n'importe quel appareil au réseau pour pouvoir utiliser vos ressources depuis vos appareils quotidiens, où que vous soyiez.
![picture](/img/serveex/vpn.svg)
Dans cette illustration, la machine 1 est sur deux réseaux :
- son réseau local (tous les appareils liés à la box, avec une adresse IP du type `192.168.x.x ` donc ici la machine 1 et la machine 2)
- le réseau du VPN (tous les appareils reliés au VPN, avec une seconde adresse IP du type `10.8.x.x` donc ici la machine 1 et 4)
On peut aussi faire en sorte que les machines reliées au réseau virtuel partagent les acces à leur réseau local. Ici nous ne le ferons pas, pour des raisons de sécurité, et de complexité en terme de sous-réseau (si les deux machines distantes ont des machines locales qui utilisent la meme adresse IP locale, par exemple `192.168.1.1`, cela posera des conflits).
Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront dialoguer entre elle depuis ce réseau. Elles ne pourront pas dialoguer avec une machine situées sur un autre réseau local et non reliée au VPN.
## Côté serveur
::note
📋 __A vérifier au préalable :__
- Vérifiez si le port `51820 UDP` estlibre sur votre serveur, et bien routé dans le NAT de la box `Source 51820 UDP -> Destination 51820 UDP -> Serveur`. En effet, votre serveur étant derrière votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connecté à votre VPN.
- Vérifiez aussi que le port `51821 TCP` est libre sur le serveur pour accéder à la web ui.
::
::warning
__Attention__: Si votre IP n'est pas fixe, vous devez avoir un nom de domaine redirigeant vers l'IP à jour à l'aide d'un [DynDNS](https://en.wikipedia.org/wiki/Dynamic_DNS). Si votre opérateur internet utilise un [CGNAT](https://en.wikipedia.org/wiki/Carrier-grade_NAT), vous êtes cuit. Vous devrez utiliser un VPS externe pour ce tuto, et y connecter votre serveur comme client.
::
Structure des dossiers
```text [Arborescence]
root
└── docker
└── wg-easy
├── config
│ └── etc_wireguard
├── compose.yaml
└── .env
```
Ouvrez Dockge, cliquez sur `compose` et nommez la stack `wg_easy`.
Copiez la configuration suivante :
```yaml [compose.yaml]
---
services:
wg-easy:
environment:
- INSECURE=true
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- ./etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
```
::tip{icon=""}
✨ __Astuce :__
- Vous pouvez personnaliser le port de wireguard et de la webui au lieu des ports par défaut.
- Ajoutez le label de watchtower afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
wg-easy:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Puis déployez la stack et connectez vous via le web en local sur `http://ipduserveur:51821`
::caution
En cas d'échec, vérifiez les règles du pare-feu.
::
Une fois connecté, la webui vous guidera :
- Pour créer votre compte et mot de passe d'accès
- Pour configurer l'host à utiliser dans les fichiers de conf : utilisez l'IP publique de votre box internet (ou de votre VPS), ou le nom de domaine redirigeant vers l'IP de votre box, le cas écheant.
Une fois fait:
- Cliquez sur *« Administrator »* > *« Admin Panel »* > *« Config »*
- Modifiez `Allowed IPs` en remplaçant `0.0.0.0/24` par `10.8.0.0/24`. Cela signifie que seules les requêtes IP de `10.8.0.1` à `10.8.0.255` seront redirigées dans le tunnel (split tunneling), laissant ainsi à l'appareil la possibilité d'etre connecté à d'autres tunnels, et à accéder à internet par lui meme. Si vous voulez tout rediriger dans le tunnel, y compris l'acces à internet, laissez `0.0.0.0/24`.
- Supprimez l'IPv6, cela n'apportera que des problèmes.
### Recuperation des fichiers de conf
Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host :
- Connectez vous via le web en local sur `http://ipduserveur:51821`
- Créez un client
- Modifiez le client en cliquant sur l'icone d'édition
- Modifiez `Server Allowed IPs` en ajoutant `10.8.0.0/24`. Cela signifie que le serveur laissera vos clients accéder à toutes les IP `10.8.0.1` à `10.8.0.255` connectées à lui, et donc laissera les clients dialoguer entre eux si nécessaire. Si vous voulez laisser vos clients accéder à tous les appareils réseau connectés autour de votre serveur en local, mettez `0.0.0.0`, à condition de l'avoir fait précédemment dans la configuration générale.
- (facultatif) Si votre client est un serveur qui doit être connecté en permanence, modifiez `Advanced` > `Persistent Keep Alive` en mettant `25`.
- Sauvegardez
- Téléchargez le fichier de conf
- Renommez le en `wg0.conf`. (Si ce n'est pas le premier, incrémentez: `wg1.conf`, etc...)
## Sur le serveur client
---
::note
Nous partons du principe que le serveur client est un serveur linux avec Docker installé
::
Structure des dossiers
```text [Arborescence]
root
└── docker
└── wireguard
└── config
│ └── wg_confs
└── compose.yaml
```
Creez le dossier `/srv/docker/wireguard/config/wg_confs`.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo mkdir -p /srv/docker/wireguard/config/wg_confs
```
Créez le fichier `wg0.conf`
```bash [Terminal]
sudo nano /srv/docker/wireguard/config/wg_confs/wg0.conf
```
Copiez-collez le contenu du `wg0.conf` que vous avez téléchargé, puis enregistrez avec :kbd{value="Ctrl+O"} et :kbd{value="Entrée"}, et quittez avec :kbd{value="Ctrl+X"}.
::tip{icon=""}
✨ __Astuce :__ Un autre moyen est de transférer le fichier par sftp dans le dossier `/home/nomdutilisateur` puis de le copier dans le bon dossier :
```bash [Terminal]
sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs
```
::
Creez le `compose.yaml` dans `/srv/docker/wireguard `:
```bash [Terminal]
sudo nano /srv/docker/wireguard/compose.yaml
```
Copiez la configuration ci-dessous
```yaml [compose.yaml]
---
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
network_mode: host
cap_add:
- NET_ADMIN
- SYS_MODULE #optional
environment:
- TZ=Europe/Paris
volumes:
- /srv/docker/wireguard/config:/config
- /lib/modules:/lib/modules #optional
restart: unless-stopped
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Lancez le conteneur :
```bash [Terminal]
cd /srv/docker/wireguard
sudo docker compose up -d
```
::note
A répéter pour chaque client
::
## Autres appareils
- **Téléphone :** installer wireguard et scanner le QR code via le webui (http://ipduserveur:51821)
- **PC :** Installer wireguard client et mettre directement le fichier de conf téléchargé via le webui
::warning
__Attention :__ Si des machines clientes sont sur le meme réseau local que le serveur (derriere la box), éditez le fichier `wg0.conf` uploadé sur cette machine en changeant avec l'adresse locale du serveur : `Endpoint = ipduserveur:51820`{lang=properties}
::
Et voilà ce que cela peut donner !
![picture](/img/serveex/wireguard.svg)
@@ -3,24 +3,14 @@ title: SWAG
description: Configurer SWAG comme reverse proxy avec SSL automatique, exposer vos services en toute sécurité et activer le blocage géographique sur votre homelab.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# SWAG
::note
🎯 __Objectifs :__
- Installer Swag
- Activer le SSL
- Accéder au tableau de bord
- Configurer le blocage régional
- Exposer Dockge
::
[Swag](https://docs.linuxserver.io/general/swag/) est le noyau de ce homelab. C'est un reverse proxy puissant qui permet d'exposer des services sur le net via un ou des noms de domaines, en se chargeant de l'émission des certificats SSL (pour garder des connexions chiffrées), du routage des requêtes et de la sécurisation des accès (par authent HTTP ou par SSO comme Authelia ou Authentik). Toute la doc nécessaire se [situe ici](https://docs.linuxserver.io/general/swag).
::warning
SWAG n'a pour utilité que l'exposition de vos services sur internet. C'est à dire, y accéder via une url publique du type `https://service.mondomaine.fr`. Si vous ne souhaitez pas exposer vos services et plutôt utiliser systématiquement un VPN pour vous connecter à vos services à distance, vous pouvez directement aller [par ici](/fr/serveex/security/wireguard).
SWAG n'a pour utilité que l'exposition de vos services sur internet. C'est à dire, y accéder via une url publique du type `https://service.mondomaine.fr`. Si vous ne souhaitez pas exposer vos services et plutôt utiliser systématiquement un VPN pour vous connecter à vos services à distance, vous pouvez directement aller [par ici](/serveex/core/wireguard).
::
Ci-dessous, vous trouverez un exemple, exposant Dockge. Nous installerons SWAG, ainsi que le mod dbip servant à bloquer les connexions en fonction de la géoloc, ainsi que le mod dashboard qui permet de piloter le fonctionnement de swag, fail2ban et la géoloc.
@@ -80,7 +70,7 @@ services:
- DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
volumes:
- /docker/swag/config:/config
- /srv/docker/swag/config:/config
ports:
- 80:80
@@ -100,7 +90,7 @@ networks:
::tip{icon=""}
✨ __Astuce :__
ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
swag:
@@ -133,13 +123,13 @@ Ici nous partons du principe que votre zone DNS est chez OVH. Déployez la stack
En CLI, allez dans le dossier dns-conf et éditez le fichier `ovh.ini` :
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/dns-conf/ovh.ini
sudo nano /srv/docker/swag/config/dns-conf/ovh.ini
```
Voici ce qui s'affiche :
@@ -168,7 +158,7 @@ Sauvegardez et quittez le fichier.
Configurez aussi swag pour qu'il accède à DBIP, le module de gestion des accès par géolocalisation /Ouvrez le fichier nginx.conf
```bash [Terminal]
sudo nano /docker/swag/config/nginx/nginx.conf
sudo nano /srv/docker/swag/config/nginx/nginx.conf
```
Et ajoutez la ligne suivante en dessous de la section `http` :
@@ -186,7 +176,7 @@ A gauche, vous trouverez la liste des services actuellement "proxied" (aucun pou
![picture](https://www.linuxserver.io/user/pages/03.blog/introducing-swag-dashboard/example.png)
## DBIP
DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nommé `dbip.conf` dans `/docker/swag/config/nginx`. [Plus d'info ici](https://virtualize.link/secure/).
DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nommé `dbip.conf` dans `/srv/docker/swag/config/nginx`. [Plus d'info ici](https://virtualize.link/secure/).
Dans cet exemple, nous allons le configurer pour bloquer une liste de pays connus pour etre à l'origine de la plupart des connexions malveillantes. Nous allons également configurer une variable au cas où nous souhaiterions permettre au réseau interne du serveur, au réseau local de votre box ainsi qu'à un éventuel vpn en 10.x.x.x de pouvoir accéder à vos services, mais pas directement à internet.
@@ -195,7 +185,7 @@ La configuration est activable ou désactivable pour chaque service qui sera pro
Ouvrez `dbip.conf` :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/dbip.conf
sudo nano /srv/docker/swag/config/nginx/dbip.conf
```
Faites vos modifications ([voir documentation](https://github.com/linuxserver/docker-mods/tree/swag-dbip)), ou prenez l'exemple suivant:
@@ -279,20 +269,20 @@ server {
## Exposer Dockge
::note
📋 __Prérequis :__ <br/></br>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
Nous partons du principe que vous avez créé dans votre [zone DNS](/general/networking/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/general/networking/nat).
::
Il s'agit maintenant d'exposer Dockge sur internet, afin de pouvoir y accéder et gérer vos conteneurs sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configuré un sous domaine `dockge.mondomaine.fr` dans votre zone DNS dont le `CNAME` pointe sur `mondomaine.fr`.
::warning
Dockge n'utilise pas d'authentification multifacteur. Exposer Dockge sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Dockge n'utilise pas d'authentification multifacteur. Exposer Dockge sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/advanced/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::
Ouvrez le fichier dockge.subdomain.conf :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
```
Paramétrez le comme tel :
@@ -303,7 +293,7 @@ Paramétrez le comme tel :
server {
listen 443 ssl;
listen [::]:443 ssl;
# indique que le sous-domaine doit être dirigé
server_name dockge.*;
@@ -341,7 +331,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app dockge; # Nom du conteneur
set $upstream_port 5001; # Port interne conteneur
set $upstream_proto http;
@@ -368,7 +358,7 @@ services:
networks: # Relie le conteneur au réseau custom
- dockge # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
#...
dockge: # Nom du réseau déclaré dans la stack
@@ -389,7 +379,7 @@ Patientez puis tapez `https://dockge.mondomaine.fr` dans votre navigateur, vous
Swag dispose de modeles pour la plupart des services connus, nommés `nomduservice.subdomain.conf.sample`. Il vous suffit de créer le sous-domaine dans votre zone DNS chez votre registrar (comme OVH par exemple), de le faire pointer sur votre domaine principale (via un enregistrement CNAME) et de copier en renommant `nomduservice.subdomain.conf.sample` en `nomduservice.subdomain.conf`.
```bash [Terminal]
cd /docker/swag/config/proxy-confs
cd /srv/docker/swag/config/proxy-confs
sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf
```
::caution