Fix content audit findings across Serveex, Nonsense and recycled guides

This commit is contained in:
Djeex
2026-09-07 20:54:58 +02:00
parent aa43d51c42
commit 9c4b8a756e
25 changed files with 78 additions and 92 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ description: Set up SWAG as a reverse proxy with automatic SSL, expose your serv
SWAG is only useful for exposing your services to the internet, i.e. accessing them via a public URL like `https://service.mydomain.com`. If you dont want to expose your services and prefer to always use a VPN to connect remotely, you can go **here instead**.
::
Below is an example exposing Dockge. We will install SWAG along with the dbip mod for geolocation-based blocking, and the dashboard mod for managing swag, fail2ban, and geolocation.
Below is an example exposing Dockge. We will install SWAG along with the dbip mod for geolocation-based blocking, the dashboard mod for managing swag, fail2ban, and geolocation, and the auto-reload mod, which automatically reloads nginx whenever a config file changes, without having to restart the container.
**Reverse proxy principle and its application in our case:**
+8 -15
View File
@@ -101,32 +101,25 @@ We assume you've created a subdomain in your [DNS zone](/general/networking/dns)
::
::steps{level="3"}
### Add UpSnap's network to SWAG
### Make the host reachable from SWAG
Go to Dockge, and edit the SWAG compose by adding the UpSnap network:
UpSnap runs with `network_mode: host` (needed for Wake-on-LAN broadcasts and network scanning to work reliably), so it never joins a Docker network SWAG could attach to like other stacks. Instead, give SWAG a way to reach the host itself:
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Connects the container to the custom network
# ...
- upsnap # Network name declared in the stack
networks: # Defines the custom network
# ...
upsnap: # Network name declared in the stack
name: upsnap_default # Actual name of the external network
external: true # Indicates it's an external network
# ...
extra_hosts:
- "host.docker.internal:host-gateway" # resolves to the Docker host's own IP
```
Restart the stack by clicking "deploy" and wait for SWAG to be fully operational.
::note
Here we assume the network name for upsnap is `upsnap_default`. You can check the connection in the SWAG dashboard at `http://yourserverip:81`.
`host-gateway` is a special value Docker resolves to the host machine's IP automatically, so this works regardless of your server's actual address.
::
### Create the subdomain.conf file
@@ -184,7 +177,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app upsnap;
set $upstream_app host.docker.internal;
set $upstream_port 8095;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -262,7 +255,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app upsnap;
set $upstream_app host.docker.internal;
set $upstream_port 8095;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -47,7 +47,7 @@ tree:
If not already done, create the `downloads` folder under `/media`:
```bash [Terminal]
mkdir -P /media/downloads
mkdir -p /media/downloads
```
### Deploy the stack
@@ -88,7 +88,7 @@ services:
devices:
- /dev/net/tun:/dev/net/tun
ports:
- ${UI_PORT}:5695 # Port de la web-ui
- ${UI_PORT}:${UI_PORT} # Port de la web-ui
- 8000:8000 # Port de controle de Gluetun
cap_add:
- NET_ADMIN
@@ -321,7 +321,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -399,7 +399,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
+1 -1
View File
@@ -394,7 +394,7 @@ Seerr has no built-in two-factor authentication. Only expose it if you're using
::note
We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `films.fr` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
::
::steps{level="3"}
@@ -475,7 +475,7 @@ On your remote machine, use [Dockge](/serveex/core/docker/#install-dockge-to-man
If you havent installed [Dockge](/serveex/core/docker/#install-dockge-to-manage-and-deploy-containers), create a folder `/srv/docker/authentik-outpost`, or directly via command line:
```bash [Terminal]
sudo mkdir -P /srv/docker/authentik-outpost
sudo mkdir -p /srv/docker/authentik-outpost
```
::tip{icon="" to="/serveex/files/file-browser-quantum"}
@@ -492,7 +492,7 @@ Via command line:
```bash [Terminal]
sudo nano /srv/docker/authentik-outpost/compose.yaml
```
Paste the following configuration, updating the version in `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} to match your Authentik server version.
Paste the following configuration, updating the version in `ghcr.io/goauthentik/proxy:2026.2`{lang=properties} to match your Authentik server version.
```yaml [compose.yaml]
---
@@ -500,7 +500,7 @@ version: "3.5"
services:
authentik_proxy:
container_name: authentik-outpost
image: ghcr.io/goauthentik/proxy:2024.2.3
image: ghcr.io/goauthentik/proxy:2026.2
# Optionally specify which networks the container should be
# might be needed to reach the core authentik server
restart: unless-stopped
@@ -1,6 +1,6 @@
---
title: File Browser
description: Install File Browser to browse and manage your server files from a web interface, exposed securely with SWAG.
description: Archived guide to installing File Browser to browse and manage your server files, superseded by File Browser Quantum.
---
@@ -1,6 +1,6 @@
---
title: Plex
description: Install Plex Media Server with Tautulli on your homelab to stream movies and TV shows from anywhere on all your devices.
description: Archived guide to installing Plex Media Server with Tautulli, kept for reference — Serveex now recommends Jellyfin.
---
@@ -1,6 +1,6 @@
---
title: qBittorrent for Plex
description: Install qBittorrent with Gluetun and ProtonVPN to download torrents securely behind a VPN on your self-hosted server.
description: Archived guide to installing qBittorrent for a Plex setup, kept for reference — see the current qBittorrent guide instead.
---
@@ -52,7 +52,7 @@ tree:
If not already done, create the `downloads` folder under `/media`:
```bash [Terminal]
mkdir -P /media/downloads
mkdir -p /media/downloads
```
### Deploy the stack
@@ -93,7 +93,7 @@ services:
devices:
- /dev/net/tun:/dev/net/tun
ports:
- ${UI_PORT}:5695 # Port de la web-ui
- ${UI_PORT}:${UI_PORT} # Port de la web-ui
- 8000:8000 # Port de controle de Gluetun
cap_add:
- NET_ADMIN
@@ -322,7 +322,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -1,6 +1,6 @@
---
title: Servarr for Plex
description: Automate media downloads with the Servarr stack, Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr for movies and TV shows.
description: Archived guide to the Servarr stack for a Plex setup, kept for reference — see the current Servarr guide instead.
---
@@ -415,7 +415,7 @@ It can be useful to expose Overseerr if you want to send requests from outside y
::note
We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `films.fr` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
::
::steps{level="3"}
@@ -1,6 +1,6 @@
---
title: Gitea
description: Install Gitea, a lightweight self-hosted Git service to manage your code repositories privately on your own server.
description: Archived guide to installing Gitea, kept for reference — Serveex now recommends Forgejo.
---
+2 -2
View File
@@ -29,8 +29,8 @@ Ce qui nous intéresse le plus :
ZFS dispose d'une structure particulière :
- __vdev__ (virtual device) : une grappe de disques (physiques ou virtuel)
- __zpool__ : un ensemble de disques physiques ou virtuels en volume simple, Z-mirror ou RAIDZ. Un _zpool_ peut englober plusieurs _vdev_ mais pas l'inverse.
- __dataset__ : un système de de donnée dans un _zpool_. Chaque dataset peut avoir ses propres options (compression, quotas, permissions, etc.).
- __zpool__ : un ensemble de _vdev_ configuré comme un seul pool de stockage. Un _zpool_ peut englober plusieurs _vdev_ mais pas l'inverse.
- __dataset__ : un conteneur logique de données dans un _zpool_. Chaque dataset peut avoir ses propres options (compression, quotas, permissions, etc.).
Il existe plusieurs types de dataset :
@@ -61,7 +61,7 @@ Cliquez sur un processus pour le sélectionner, :kbd{value="Esc"} ouvre le menu,
## `duf`, l'espace disque qui se lit comme un tableau
`df -h` affiche tous tous vos dossiers/fichiers et vous laisse vous exploser les yeux sur les colonnes, les chiffres, les tailles. `duf` montre les mêmes informations groupées, alignées et colorées, avec une barre d'utilisation par système de fichiers.
`df -h` affiche jusqu'au moindre loop device créé par Docker et vous laisse vous exploser les yeux sur les colonnes, les chiffres, les tailles. `duf` montre les mêmes informations groupées, alignées et colorées, avec une barre d'utilisation par système de fichiers.
::steps{level="4"}
#### L'installer
+8 -15
View File
@@ -101,32 +101,25 @@ Nous partons du principe que vous avez créé un sous-domaine dans votre [zone D
::
::steps{level="3"}
### Ajouter le réseau d'UpSnap à SWAG
### Rendre l'hôte accessible depuis SWAG
Allez dans Dockge et modifiez le compose de SWAG en y ajoutant le réseau d'UpSnap :
UpSnap tourne en `network_mode: host` (nécessaire pour que la diffusion Wake-on-LAN et le scan réseau fonctionnent de manière fiable), il ne rejoint donc jamais de réseau Docker auquel SWAG pourrait se rattacher comme pour les autres stacks. Il faut à la place donner à SWAG un moyen d'atteindre l'hôte lui-même :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- upsnap # Nom du réseau déclaré dans la stack
networks: # Définit le réseau personnalisé
# ...
upsnap: # Nom du réseau déclaré dans la stack
name: upsnap_default # Nom réel du réseau externe
external: true # Indique qu'il s'agit d'un réseau externe
# ...
extra_hosts:
- "host.docker.internal:host-gateway" # se résout vers l'IP de l'hôte Docker lui-même
```
Redémarrez la stack en cliquant sur « deploy » et attendez que SWAG soit pleinement opérationnel.
::note
Nous partons ici du principe que le nom du réseau d'upsnap est `upsnap_default`. Vous pouvez vérifier la connexion dans le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
`host-gateway` est une valeur spéciale que Docker résout automatiquement vers l'IP de la machine hôte, donc cela fonctionne quelle que soit l'adresse réelle de votre serveur.
::
### Créer le fichier subdomain.conf
@@ -184,7 +177,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app upsnap;
set $upstream_app host.docker.internal;
set $upstream_port 8095;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -262,7 +255,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app upsnap;
set $upstream_app host.docker.internal;
set $upstream_port 8095;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -47,7 +47,7 @@ tree:
Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` :
```bash [Terminal]
mkdir -P /media/downloads
mkdir -p /media/downloads
```
### Déployer la stack
@@ -88,7 +88,7 @@ services:
devices:
- /dev/net/tun:/dev/net/tun
ports:
- ${UI_PORT}:5695 # Port de la web-ui
- ${UI_PORT}:${UI_PORT} # Port de la web-ui
- 8000:8000 # Port de controle de Gluetun
cap_add:
- NET_ADMIN
@@ -321,7 +321,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -399,7 +399,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
+1 -1
View File
@@ -394,7 +394,7 @@ Seerr n'a pas d'authentification à deux facteurs intégrée. Ne l'exposez que s
::note
Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `films.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat).
Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat).
::
::steps{level="3"}
@@ -476,7 +476,7 @@ Sur votre machine distante, utilisez [Dockge](/serveex/core/docker/#installer-do
Si vous n'avez pas installé [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez un dossier `/srv/docker/authentik-outpost`, ou directement en ligne de commande :
```bash [Terminal]
sudo mkdir -P /srv/docker/authentik-outpost
sudo mkdir -p /srv/docker/authentik-outpost
```
::tip{icon="" to="/serveex/files/file-browser-quantum"}
@@ -28,6 +28,6 @@ Tout ceci de manière complètement autonome, avec une fréquence choisie en var
Plus d'infos directement sur le repo :
::card{title="🐋 __AdGuard CIDRE Sync__"}
[Robot de synchronisation de la blocklist d'AdGuard](https://git.djeex.fr/Djeex/adguard-cidre)
::card{title="🐋 __AdGuard CIDRE Sync__" to="https://git.djeex.fr/Djeex/adguard-cidre" target="_blank"}
Robot de synchronisation de la blocklist d'AdGuard
::
+21 -21
View File
@@ -20,66 +20,66 @@ Ainsi, ce script :
* Chiffre avec le mot de passe
* Détruit l'archive non chiffrée
```
```bash [Terminal]
#!/bin/bash
# Directory where LUKS headers will be backed up
# Dossier où seront sauvegardés les headers LUKS
DEST="/root/luks-headers-backup"
mkdir -p "$DEST"
echo "🔍 Searching for LUKS containers on all partitions..."
echo "🔍 Recherche des conteneurs LUKS sur toutes les partitions..."
# Loop through all possible disk partitions (including NVMe and SATA)
# Parcourt toutes les partitions disque possibles (y compris NVMe et SATA)
for part in /dev/sd? /dev/sd?? /dev/nvme?n?p?; do
# Skip if the device doesn't exist
# Ignore si le périphérique n'existe pas
if [ ! -b "$part" ]; then
continue
fi
# Check if the partition is a LUKS encrypted volume
# Vérifie si la partition est un volume chiffré LUKS
if cryptsetup isLuks "$part"; then
# Find the parent disk device (e.g. nvme0n1p4 → nvme0n1)
# Trouve le disque parent (ex. nvme0n1p4 → nvme0n1)
disk=$(lsblk -no pkname "$part" | head -n 1)
full_disk="/dev/$disk"
# Get the serial number of the parent disk
# Récupère le numéro de série du disque parent
SERIAL=$(udevadm info --query=all --name="$full_disk" | grep ID_SERIAL= | cut -d= -f2)
if [ -z "$SERIAL" ]; then
SERIAL="unknown"
fi
# Extract the partition name (e.g. nvme0n1p4)
# Extrait le nom de la partition (ex. nvme0n1p4)
PART_NAME=$(basename "$part")
# Build the output filename with partition name and disk serial
# Construit le nom du fichier de sortie avec le nom de partition et le numéro de série
OUTPUT="$DEST/luks-header-${PART_NAME}__${SERIAL}.img"
echo "🔐 Backing up LUKS header of $part (Serial: $SERIAL)..."
echo "🔐 Sauvegarde du header LUKS de $part (Numéro de série : $SERIAL)..."
# Backup the LUKS header to the output file
# Sauvegarde le header LUKS dans le fichier de sortie
cryptsetup luksHeaderBackup "$part" --header-backup-file "$OUTPUT"
if [[ $? -eq 0 ]]; then
echo "✅ Backup successful → $OUTPUT"
echo "✅ Sauvegarde réussie → $OUTPUT"
else
echo "❌ Backup failed for $part"
echo "❌ Échec de la sauvegarde pour $part"
fi
fi
done
# Create a timestamped compressed tar archive of all header backups
# Crée une archive tar compressée et horodatée de toutes les sauvegardes de headers
ARCHIVE_NAME="/root/luks-headers-$(date +%Y%m%d_%H%M%S).tar.gz"
echo "📦 Creating archive $ARCHIVE_NAME..."
echo "📦 Création de l'archive $ARCHIVE_NAME..."
tar -czf "$ARCHIVE_NAME" -C "$DEST" .
# Encrypt the archive symmetrically using GPG with AES256 cipher
echo "🔐 Encrypting the archive with GPG..."
# Chiffre l'archive symétriquement avec GPG et le chiffrement AES256
echo "🔐 Chiffrement de l'archive avec GPG..."
gpg --symmetric --cipher-algo AES256 "$ARCHIVE_NAME"
if [[ $? -eq 0 ]]; then
echo "✅ Encrypted archive created: ${ARCHIVE_NAME}.gpg"
# Remove the unencrypted archive for security
echo "✅ Archive chiffrée créée : ${ARCHIVE_NAME}.gpg"
# Supprime l'archive non chiffrée pour plus de sécurité
rm -f "$ARCHIVE_NAME"
else
echo "❌ Encryption failed"
echo "❌ Échec du chiffrement"
fi
```
@@ -77,6 +77,6 @@ services:
Plus d'infos directement sur le repo :
::card{title="🐋 __Socat Proxy__"}
[A lighteweight bind mount socket proxy](https://git.djeex.fr/Djeex/socat-proxy)
::card{title="🐋 __Socat Proxy__" to="https://git.djeex.fr/Djeex/socat-proxy" target="_blank"}
Un proxy de socket léger basé sur un bind mount
::
@@ -1,6 +1,6 @@
---
title: File Browser
description: Installer File Browser pour parcourir et gérer les fichiers de votre serveur depuis une interface web, exposée en toute sécurité avec SWAG.
description: Ancien guide File Browser conservé à titre archivé, voir le guide File Browser Quantum pour une installation actuelle.
---
@@ -1,6 +1,6 @@
---
title: Plex
description: Installer Plex Media Server avec Tautulli sur votre homelab pour diffuser films et séries depuis n'importe où sur tous vos appareils.
description: Ancien guide Plex Media Server conservé à titre archivé, voir le guide Jellyfin pour une installation actuelle.
---
@@ -1,6 +1,6 @@
---
title: qBittorrent pour Plex
description: Installer qBittorrent avec Gluetun et ProtonVPN pour télécharger des torrents de manière sécurisée derrière un VPN sur votre serveur auto-hébergé.
description: Ancien guide qBittorrent pour Plex conservé à titre archivé, voir le guide qBittorrent à jour pour une installation actuelle.
---
@@ -52,7 +52,7 @@ tree:
Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` :
```bash [Terminal]
mkdir -P /media/downloads
mkdir -p /media/downloads
```
### Déployer la stack
@@ -93,7 +93,7 @@ services:
devices:
- /dev/net/tun:/dev/net/tun
ports:
- ${UI_PORT}:5695 # Port de la web-ui
- ${UI_PORT}:${UI_PORT} # Port de la web-ui
- 8000:8000 # Port de controle de Gluetun
cap_add:
- NET_ADMIN
@@ -322,7 +322,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gluetun;
set $upstream_port 5555;
set $upstream_port 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
@@ -1,6 +1,6 @@
---
title: Servarr pour Plex
description: Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Overseerr pour les films et les séries.
description: Ancien guide Servarr pour Plex conservé à titre archivé, voir le guide Servarr à jour pour une installation actuelle.
---
@@ -415,7 +415,7 @@ Il peut être utile d'exposer Overseerr si vous voulez envoyer des demandes depu
::note
Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `films.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat).
Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat).
::
::steps{level="3"}
@@ -1,6 +1,6 @@
---
title: Gitea
description: Installer Gitea, un service Git auto-hébergé et léger pour gérer vos dépôts de code en privé sur votre propre serveur.
description: Ancien guide Gitea conservé à titre archivé, voir le guide Forgejo pour une installation actuelle.
---
+1 -1
View File
@@ -25,7 +25,7 @@ seo:
---
color: primary
size: xl
to: /fr/about/welcome
to: /about/welcome/
---
Accéder à la doc
::::::