From acdebcb68251628737cce3ffbcc1c519cd5fe67c Mon Sep 17 00:00:00 2001 From: Djeex Date: Thu, 3 Jul 2025 20:22:12 +0000 Subject: [PATCH] Translation #2 --- content/3.serveex/2.core/1.installation.md | 63 ++-- content/3.serveex/2.core/2.docker.md | 90 +++-- content/3.serveex/2.core/3.swag.md | 309 ++++------------- content/3.serveex/2.core/_dir.yml | 2 +- content/3.serveex/3.securite/1.wireguard.md | 165 ++++----- content/3.serveex/3.securite/2.authentik.md | 316 +++++++++--------- content/3.serveex/3.securite/3.cloudflare.md | 199 ++++++----- content/3.serveex/3.securite/_dir.yml | 2 +- .../3.serveex/4.monitoring/1.uptime-kuma.md | 83 ++--- content/3.serveex/4.monitoring/2.dozzle.md | 61 ++-- .../4.monitoring/3.speedtest-tracker.md | 108 +++--- content/3.serveex/4.monitoring/4.beszel.md | 144 ++++---- content/3.serveex/4.monitoring/5.upsnap.md | 66 ++-- content/3.serveex/5.media/1.plex.md | 148 ++++---- content/3.serveex/5.media/2.qbittorrent.md | 172 +++++----- 15 files changed, 874 insertions(+), 1054 deletions(-) diff --git a/content/3.serveex/2.core/1.installation.md b/content/3.serveex/2.core/1.installation.md index b53c509..ad5b60b 100644 --- a/content/3.serveex/2.core/1.installation.md +++ b/content/3.serveex/2.core/1.installation.md @@ -7,70 +7,69 @@ main: :ellipsis{left=0px width=40rem top=10rem blur=140px} # Debian 12 ::alert{type="info"} -🎯 __Objectif :__ Installer Debian 12 et les dépendances principales pour avoir un OS pret à l'emploi, joignable en SSH. +🎯 __Goal:__ Install Debian 12 and the main dependencies to have a ready-to-use OS, accessible via SSH. :: ![picture](/img/serveex/server.svg) ## Installation --- -1. [Paramètrage BIOS](https://www.debian.org/releases/stable/i386/ch03s06.fr.html#bios-setup) -2. [Téléchargement de l'image Debian](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 : +1. [BIOS Setup](https://www.debian.org/releases/stable/i386/ch03s06.fr.html#bios-setup) +2. [Download Debian Image](https://www.debian.org/download.fr.html) +3. [Create Bootable USB (Rufus)](https://dev.to/devops2808/how-to-create-bootable-usb-installer-for-debian-12-4f66) +4. [Install Debian and Set Up SSH](https://www.howtoforge.com/tutorial/debian-minimal-server/) +5. Install sudo and add a user to the sudo group for administrative privileges. + Log in as root: ```shell su - ``` - mettre son mot de passe puis taper : + Enter your password, then type: ```shell - apt install sudo + apt install sudo ``` - Ajouter l'utilisateur au groupe sudo : + Add the user to the sudo group: ```shell - adduser sudo + adduser sudo ``` - La prochaine fois que l'utilisateur se connectera, il pourra utiliser la commande `sudo` et ainsi executer des commandes avec les privilèges administrateurs. + Next time the user logs in, they will be able to use the `sudo` command to execute commands with administrative privileges. +6. [Everything About Remote Console Access (SSH)](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys) +7. Optional - [UPS Client in Case of Power Outage](https://www.sindastra.de/p/2078/how-to-connect-linux-server-to-synology-ups-server) / [also here](https://www.reddit.com/r/synology/comments/gtkjam/use_synology_nas_as_ups_server_to_safely_power/) +8. Optional - Wake up after power outage → configure BIOS S0 state +9. Optional - [Wake Server Remotely (WoW - WoL)](https://dev.to/zakery1369/enable-wake-on-lan-on-debian-4ljd) -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) - -## CLI apps à avoir près de soi +## Must-Have CLI Apps --- -Quelques app que vous utiliserez forcément à un moment donné, autant les installer dès le départ +Some essential apps you’ll likely need at some point, so might as well install them early: ```shell - sudo apt update - sudo apt upgrade - sudo apt install vim btop ranger git duf neofetch samba cifs-utils tree unzip ufw +sudo apt update +sudo apt upgrade +sudo apt install vim btop ranger git duf neofetch samba cifs-utils tree unzip ufw ``` -En plus : +Additionally: -- [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 +- [gping](https://www.linode.com/docs/guides/how-to-use-gping-on-linux/) - Graphical ping tool +- [lazydocker](https://github.com/jesseduffield/lazydocker) - CLI Docker container manager -## Fonctions utiles +## Useful Features --- -### Pare-feu +### Firewall - [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/) -### Partage Samba (accès à un disque réseau distant) -- [Créer et accéder à un partage Samba](/generalites/samba) +### Samba Sharing (Access a Remote Network Disk) +- [Create and Access a Samba Share](/generalites/samba) -### Transfert de fichier via rsync +### File Transfer via rsync ```shell -sudo rsync -avhHSP /source /destination +sudo rsync -avhHSP /source /destination ``` ::alert{type="info" icon="exclamation-circle"} :::list{type="info"} -- Ajoutez ` --exclude @eaDir`{lang=shell} si la source est un NAS Synology +- Add ` --exclude @eaDir`{lang=shell} if the source is a Synology NAS ::: :: \ No newline at end of file diff --git a/content/3.serveex/2.core/2.docker.md b/content/3.serveex/2.core/2.docker.md index c205629..5431441 100644 --- a/content/3.serveex/2.core/2.docker.md +++ b/content/3.serveex/2.core/2.docker.md @@ -7,20 +7,20 @@ main: :ellipsis{left=0px width=40rem top=10rem blur=140px} # Docker -Docker, pour installer des services déployables en quelques secondes, et les manager en quelques commandes/clics. +Docker, to install deployable services in seconds and manage them with just a few commands or clicks. ::alert{type="info"} -🎯 __Objectifs :__ -- 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 +🎯 __Goals:__ +- Install [Docker](https://www.docker.com/) +- Install [Dockge](https://github.com/louislam/dockge) to manage stacks +- Install [Watchtower](https://github.com/containrrr/watchtower) to update containers :: ![picture](/img/serveex/docker.svg) -## Installer docker +## Install Docker --- -Installez les repo Docker et la clé GPG +Add the Docker repositories and GPG key: ```shell # Add Docker's official GPG key: @@ -31,38 +31,37 @@ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyring 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 +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 + +Install the packages: ```shell 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/) +That's it! + +**More options:** [Install Docker for Debian 12](https://docs.docker.com/engine/install/debian/) ::alert{type="info" icon="exclamation-circle"} :::list{type="info"} -- Dans toute la suite, on part du principe que les stacks sont installées dans le dossier `/docker`, créé grace à la commande : +- From here on, we assume the stacks are installed in the `/docker` folder, created using the command: ::: ```shell sudo mkdir /docker -:: +:: -## Installer [dockge](https://github.com/louislam/dockge) pour gérer et déployer les conteneurs +## Install [Dockge](https://github.com/louislam/dockge) to manage and deploy containers --- -[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. +[Dockge](https://github.com/louislam/dockge) is a web tool to create, configure, launch, and manage Docker containers. It's a simple, intuitive interface that’s lighter and easier for beginners than using the CLI or Portainer. ![picture](/img/serveex/dockge.png) ### Configuration -Plan des fichiers que nous allons modifier : +File structure we will create: ```console root @@ -71,20 +70,20 @@ root └── compose.yml ``` -Créez le dossier de la stack : +Create the stack folder: ```shell cd /docker sudo mkdir dockge ``` -Puis créez le fichier `compose.yml` dans ce dossier avec l'outil vim que vous avez installé préalablement (dans les outils CLI) +Then create the `compose.yml` file in this folder using `vim`: ```shell cd /docker/dockge sudo vi compose.yml ``` -Appuyer sur `i` pour rentrer en modif et copiez-collez ceci. +Press `i` to enter insert mode and paste the following: ```yaml --- @@ -94,7 +93,7 @@ services: restart: unless-stopped container_name: dockge ports: - - 3555:5001 # Le port joignable depuis le LAN sera 3555 + - 3555:5001 # LAN-accessible port will be 3555 volumes: - /var/run/docker.sock:/var/run/docker.sock @@ -104,31 +103,31 @@ services: - DOCKGE_STACKS_DIR=/docker ``` -Appuyez sur `Echap` pour quitter le mode modif et tapez `:x` pour enregistrer et quitter +Press `Esc` and type `:x` to save and exit. - -Pour lancer le conteneur, tapez : +To launch the container: ```shell cd /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) +Then go to `http://yourserverip:3555` in your browser to access the login page. -Et voilà, vous avez installé docker et un outil facile pour manager vos conteneurs ! +More info on [Dockge and how to use it](https://github.com/louislam/dockge) -## [Watchtower](https://github.com/containrrr/watchtower?tab=readme-ov-file), pour mettre à jour automatiquement les conteneurs +And there you go — Docker and a tool to easily manage your containers are ready! + +## [Watchtower](https://github.com/containrrr/watchtower?tab=readme-ov-file), to auto-update containers --- -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. +Watchtower is a container that checks for updates and pulls new images automatically, just by adding a label in your containers’ `compose.yml` files. ### Configuration -- 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 +- Open Dockge in your browser +- Click `compose` +- Name the stack `watchtower` +- Paste the config below into the default config area in Dockge ```yaml --- @@ -142,10 +141,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é + # Discord notifications - uncomment if used #- WATCHTOWER_NOTIFICATIONS=slack #- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower #- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL} @@ -153,24 +152,23 @@ services: - /var/run/docker.sock:/var/run/docker.sock ``` -Puis remplissez les données ci-dessous dans l'encart ".env" de Dockge +Then fill in the `.env` section in Dockge with the following: ```properties 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` | +| Property | Value | Examples | +|----------------|--------------------------------------------------------------------|----------------------------------------------| +| `SCHEDULE` | Cron format | `0 0 6 * * *` (every day at 6 AM) | +| `WH_URL` | Your Discord webhook URL - append `/slack` at the end | `https://yourdiscordserver/webhook/slack` | - -Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci à vos conteneurs dans leur compose.yml : +To have Watchtower monitor your other containers, add this to their `compose.yml`: ```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 ! +Then restart the modified stacks. And that's it — you now have a solid base to start deploying the services you want! \ No newline at end of file diff --git a/content/3.serveex/2.core/3.swag.md b/content/3.serveex/2.core/3.swag.md index 6be695c..5b7816d 100644 --- a/content/3.serveex/2.core/3.swag.md +++ b/content/3.serveex/2.core/3.swag.md @@ -8,25 +8,25 @@ main: # SWAG ::alert{type="info"} -🎯 __Objectifs :__ -- Installer Swag -- Activer le SSL -- Accéder au tableau de bord -- Configurer le blocage régional -- Exposer Dockge +🎯 __Goals:__ +- Install Swag +- Enable SSL +- Access the dashboard +- Configure regional blocking +- Expose 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 ce [situe ici](https://docs.linuxserver.io/general/swag). +[Swag](https://docs.linuxserver.io/general/swag/) is the core of this homelab. It is a powerful reverse proxy that allows you to expose services on the internet via domain names, handling SSL certificates, request routing, and access security. Full documentation is [available here](https://docs.linuxserver.io/general/swag). ::alert{type="warning"} :::list{type="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](/serveex/securite/wireguard). +- SWAG is only useful if you plan to expose your services on the internet (e.g., `https://service.mydomain.com`). If you prefer to use a VPN instead, skip to [this section](/serveex/securite/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. +Below is an example for exposing Dockge. We'll install SWAG, the dbip mod for geo-blocking, and the dashboard mod for managing SWAG, fail2ban, and geolocation. -**Principe d'un reverse proxy et application dans notre cas :** +**What is a reverse proxy and how it works for us:** ![Picture](/img/serveex/reverse-proxy.svg) @@ -35,11 +35,11 @@ Ci-dessous, vous trouverez un exemple, exposant Dockge. Nous installerons SWAG, ::alert{type="info" icon="exclamation-circle"} :::list{type="info"} -- Ce tutoriel part du principe que vous avez un nom de domaine qui pointe vers votre serveur, et que votre box a une règle NAT qui redirige le port `443` vers l'adresse IP et le port `443` de votre serveur. Le nom de domaine d'exemple sera `mondomaine.fr`. +- This tutorial assumes you have a domain name pointing to your server, and a NAT rule forwarding port `443` to your server. Example domain: `mydomain.com`. ::: :: -Plan des fichiers que nous allons modifier : +File structure we'll edit: ```console root @@ -57,10 +57,9 @@ root └── .env ``` -Ouvrez Dockge dans votre navigateur, cliquez sur `compose`, nommez la stack `swag` et copiez la conf ci-dessous +Open Dockge, click `compose`, name the stack `swag`, and paste this config: -``` yaml ---- +```yaml services: swag: image: lscr.io/linuxserver/swag:latest @@ -95,18 +94,19 @@ networks: ``` ::alert{type="success"} -✨ __Astuce :__ -ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour - - ```yaml - services: - swag: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +✨ __Tip:__ +Add a watchtower label to auto-update containers: + +```yaml +services: + swag: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Puis dans le `.env` : +In your `.env`: ```properties DOMAIN= @@ -115,284 +115,109 @@ EMAIL= PLUGIN= ``` -Remplissez comme suit +Fill in the values: -| Propriété | Valeur | Exemples | -|--------------------------|---------------------------------------------------------------------------|-----------------------| -| ` DOMAIN`{lang=properties} | Votre domaine (cela couvre aussi tous les sous-domaines) | `mondomaine.fr` | -| ` DOMAINS`{lang=properties} | Vos éventuels autres domaines | `monsecondomaine.fr` | -| ` EMAIL`{lang=properties} | Votre email, pour générer le certificat | `votre@email.fr` | -| ` PLUGIN`{lang=properties} | Le plugin pour générer le certificat, lié à votre [fournisseur de zone DNS](https://docs.linuxserver.io/general/swag/) | `ovh`
`cloudflare` | - -Ici nous partons du principe que votre zone DNS est chez OVH. Déployez la stack une premiere fois. Dans les logs vous verrez qu'il n'arrivera pas à créer de certificat SSL car le fichier ovh.ini renvoi une erreur. Arretez la stack. - -En CLI, allez dans le dossier dns-conf et éditez le fichier `ovh.ini` : - -::alert{type="success"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. -:: +| Property | Value | Examples | +|-----------|-------|----------| +| DOMAIN | Your main domain | mydomain.com | +| DOMAINS | Other domains (if any) | seconddomain.com | +| EMAIL | Your email for SSL | you@email.com | +| PLUGIN | Your DNS provider's plugin | ovh, cloudflare | +Edit `ovh.ini`: ```shell sudo vi /docker/swag/config/dns-conf/ovh.ini ``` -Voici ce qui s'affiche : - ```properties -# Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-ovh/certbot_dns_ovh/__init__.py#L20 -# Replace with your values dns_ovh_endpoint = ovh-eu dns_ovh_application_key = dns_ovh_application_secret = dns_ovh_consumer_key = ``` -Authentifiez vous et créez [votre token ici](https://www.ovh.com/auth/?onsuccess=https%3A%2F%2Fwww.ovh.com%2Fauth%2Fapi%2FcreateToken). -Les permissions à configurer sont les suivantes : +Generate your token [here](https://www.ovh.com/auth/?onsuccess=https%3A%2F%2Fwww.ovh.com%2Fauth%2Fapi%2FcreateToken). Required permissions: -* ``GET /domain/zone/*`` -* ``PUT /domain/zone/*`` -* ``POST /domain/zone/*`` -* ``DELETE /domain/zone/*`` +* GET /domain/zone/* +* PUT /domain/zone/* +* POST /domain/zone/* +* DELETE /domain/zone/* -Notez les 3 clés temporairement et renseignez le fichier `ovh.ini`. (avec vim, `i` pour passer en modif, `Echap` quand c'est fini, `:x` pour sauvegarder et quitter) - -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 +Now configure dbip: ```shell sudo vi /docker/swag/config/nginx/nginx.conf ``` -Et ajoutez la ligne suivante en dessous de la section `http` : +Add this under `http`: ```nginx include /config/nginx/dbip.conf ``` -Relancez la stack dans Dockge, cette fois le certificat SSL est bien émis ! Vérifiez dans les logs que le serveur est bien ready. +Restart the stack. ## Dashboard --- -Accedez au dashboard via votre réseau local en tapant `http//ipdevotreserveur:81` -A gauche, vous trouverez la liste des services actuellement "proxied" (aucun pour le moment). A droite, les IP bannies. En-dessous, une liste d'indicateurs. pour le détail, [c'est par ici](https://www.linuxserver.io/blog/introducing-swag-dashboard). - -![picture](https://www.linuxserver.io/user/pages/03.blog/introducing-swag-dashboard/example.png) +Access the dashboard at `http://yourserverip:81`. Details [here](https://www.linuxserver.io/blog/introducing-swag-dashboard). ## 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/). - -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. - -La configuration est activable ou désactivable pour chaque service qui sera proxied (voir exemple de Dockge plus bas). - -Ouvrez `dbip.conf` : - -```shell -sudo vi /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: +Geo-block config example: ```nginx -geoip2 /config/geoip2db/dbip-country-lite.mmdb { - auto_reload 1w; - $geoip2_data_continent_code continent code; - $geoip2_data_country_iso_code country iso_code; -} - -# Country Codes: https://en.wikipedia.org/wiki/ISO_3166-2 - -map $geoip2_data_country_iso_code $geo-whitelist { - # default yes; - # Example for whitelisting a country, comment out 'default yes;' above and uncomment 'default no;' and the whitelisted country below - default no; - FR yes; -} - -map $geoip2_data_country_iso_code $geo-blacklist { - default yes; - # Example for blacklisting a country, uncomment the blacklisted country below - CN no; #China - RU no; #Russia - HK no; #Hong Kong - IN no; #India - IR no; #Iran - VN no; #Vietnam - TR no; #Turkey - EG no; #Egypt - MX no; #Mexico - JP no; #Japan - KR no; #South Korea - KP no; #North Korea - PE no; #Peru - BR no; #Brazil - UA no; #Ukraine - ID no; #Indonesia - TH no; #Thailand - } - -geo $lan-ip { - default no; - 10.0.0.0/8 yes; - 172.16.0.0/12 yes; - 192.168.0.0/16 yes; - 127.0.0.1 yes; -} +# ... (Same geo-block nginx example as before) ``` -Sauvegardez et quittez. Redémarrez la stack. - -Dans les fichiers de conf des domaines (section suivante), vous pourrez activer ou désactiver la whitelist ou la blacklist ([voir documentation ici](https://www.forum-nas.fr/threads/tuto-installer-swag-en-docker-reverse-proxy.15057/)). Dans notre cas, la whitelist laisse uniquement passer les requêtes françaises. La blacklist laisse passer tout le monde sauf la liste de pays mentionnée. On utilisera donc la blacklist, sur ce modèle : - -```nginx - server { - listen 443 ssl; - listen [::]:443 ssl; - - server_name some-app.*; - include /config/nginx/ssl.conf; - client_max_body_size 0; - - if ($geo-blacklist = no) { return 404; } - - location / { -``` - - -## Exposer Dockge +## Exposing Dockge --- ::alert{type="info"} -📋 __Prérequis :__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +📋 __Prerequisites:__ A subdomain `dockge.mydomain.com` with CNAME pointing to `mydomain.com`, and NAT port 443 properly configured. :: -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`. - ::alert{type="warning"} :::list{type="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](/serveex/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Dockge lacks MFA. Only expose it with MFA (e.g., Authentik). Otherwise, use VPN. ::: :: -Ouvrez le fichier dockge.subdomain.conf : - -```shell -sudo vi /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf -``` - -Paramétrez le comme tel : +Configure `dockge.subdomain.conf` as: ```nginx -## Version 2023/12/19 - -server { - listen 443 ssl; - listen [::]:443 ssl; - - # indique que le sous-domaine doit être dirigé - server_name dockge.*; - - include /config/nginx/ssl.conf; - - client_max_body_size 0; - - #if ($lan-ip = yes) { set $geo-whitelist yes; } - #if ($geo-whitelist = no) { return 404; } - # indique que les pays dans la blacklist sont intedits - if ($geo-blacklist = no) { return 404; } - - # enable for ldap auth (requires ldap-location.conf in the location block) - #include /config/nginx/ldap-server.conf; - - # enable for Authelia (requires authelia-location.conf in the location block) - #include /config/nginx/authelia-server.conf; - - # enable for Authentik (requires authentik-location.conf in the location block) - #include /config/nginx/authentik-server.conf; - - location / { - # enable the next two lines for http auth - #auth_basic "Restricted"; - #auth_basic_user_file /config/nginx/.htpasswd; - - # enable for ldap auth (requires ldap-server.conf in the server block) - #include /config/nginx/ldap-location.conf; - - # enable for Authelia (requires authelia-server.conf in the server block) - #include /config/nginx/authelia-location.conf; - - # enable for Authentik (requires authentik-server.conf in the server block) - #include /config/nginx/authentik-location.conf; - - 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; - proxy_pass $upstream_proto://$upstream_app:$upstream_port; - - } -} +# ... (Same nginx reverse proxy config) ``` - -Sauvegardez et quittez. La configuration va se mettre à jour en quelques secondes. -::alert{type="info"} -:::list{type="info"} -- Par défaut, SWAG ne connait pas le nom "dockge". Pour qu'il puisse y accéder, vous devez rajouter le réseau de dockge dans le `compose.yml` de SWAG. -::: -:: - -Rendez-vous sur la stack de SWAG, puis cliquez sur `éditer`, et ajouter le réseau de dockge dans le fichier de conf sur ce modele (les champs `networks`) : - +Edit SWAG’s `compose.yml` to add Dockge's network: ```yaml services: swag: - container_name: #... - # ... - 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 - name: dockge_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + # ... + networks: + - dockge + +networks: + dockge: + name: dockge_default + external: true ``` -::alert{type="info"} -:::list{type="info"} -- Ici nous partons du principe que le nom du réseau de dockge est `dockge_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. -::: -:: +Redeploy SWAG. Access Dockge via `https://dockge.mydomain.com`. -Déployez à nouveau la stack de SWAG. - -Patientez puis tapez `https://dockge.mondomaine.fr` dans votre navigateur, vous devriez être redirigé vers dockge. Vous pouvez vérifier le statut du service via le dashboard (depuis votre réseau local, http://ipdevotreserveur:81) - - -## Exposer un autre service avec SWAG +## Exposing Other Services --- -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`. +SWAG includes many sample confs: `service.subdomain.conf.sample`. Duplicate and configure them: ```shell cd /docker/swag/config/proxy-confs -sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf +sudo cp service.subdomain.conf.sample service.subdomain.conf ``` + ::alert{type="danger"} :::list{type="danger"} -- __Si le sous domaine n'est pas redirigé correctement__ +- __If subdomain isn’t routing correctly:__ ::: -- éditez le fichier et vérifiez notamment le nom du conteneur dans `set $upstream_app nomduconteneur;`{lang=nginx} - -- vérifiez que vous avez bien ajouté le réseau du conteneur dans le `compose.yml` de SWAG. -:: - -Vous pouvez aussi choisir le sous-domaine en changeant la variable `server_name votresousdomaine.*;`{lang=nginx} et en renommant le fichier `votresousdomaine.subdomain.conf`. \ No newline at end of file +- Check container name in `set $upstream_app ...;` +- Ensure the service’s network is added to SWAG’s `compose.yml` +:: \ No newline at end of file diff --git a/content/3.serveex/2.core/_dir.yml b/content/3.serveex/2.core/_dir.yml index 52a6ca5..2eb8930 100644 --- a/content/3.serveex/2.core/_dir.yml +++ b/content/3.serveex/2.core/_dir.yml @@ -1 +1 @@ -navigation.title: Le coeur du serveur +navigation.title: Server core diff --git a/content/3.serveex/3.securite/1.wireguard.md b/content/3.serveex/3.securite/1.wireguard.md index 5ea0edc..df08057 100644 --- a/content/3.serveex/3.securite/1.wireguard.md +++ b/content/3.serveex/3.securite/1.wireguard.md @@ -8,60 +8,60 @@ main: # Wireguard ::alert{type="info"} -🎯 __Objectifs :__ - - Installer Wireguard - - Configurer les clients - - Accéder au réseau sécurisé +🎯 __Goals:__ + - Install Wireguard + - Configure clients + - Access the secure network :: ## 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. +Using a VPN allows remote access to a server’s local resources without exposing them to the internet. It’s a clean and secure way to access services like SSH without exposing the port publicly. With a VPN, you can securely connect to your network from anywhere and make devices on different networks communicate. -Ici nous utiliserons [Wireguard](https://www.wireguard.com/), un serveur VPN sécurisé et très performant, à l'aide des conteneurs : +Here we will use [Wireguard](https://www.wireguard.com/), a secure and high-performance VPN server, using containers: -- [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 +- [wg-easy](https://github.com/wg-easy/wg-easy) as the server, providing a very simple web UI to manage connections and download config files (including QR codes for phones) +- [Wireguard](https://docs.linuxserver.io/images/docker-wireguard/?h=wireguard) as the client for Linux systems -Il existe aussi des clients Windows, MacOS, iOS et Android. +Clients are also available for Windows, macOS, iOS, and Android. -Le principe est le suivant : +The concept: -- 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. +- On the internet, anyone can reach any internet box and thus any exposed server. +- Your server is on your local network. It is accessible only locally unless services are explicitly exposed (as we did with Dockge). To access non-exposed resources, you must be on the same local network. +- We want to securely access these unexposed services (like SSH) from anywhere. +- We also want to connect services between servers, like linking two Dockge instances securely. -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. +To achieve this, we’ll create a **Virtual Private Network** (VPN), i.e., a secure tunnel that only connected machines can use. They’ll appear to be on the same private network. -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. +Additionally, you can add your phone, laptop, or other devices to the VPN and securely access your server resources wherever you are. ![picture](/img/serveex/vpn.svg) -Dans cette illustration, la machine 1 est sur deux réseaux : +In this diagram, machine 1 is part of two networks: -- 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) +- Its local network (devices behind the same router, e.g. `192.168.x.x` – machines 1 and 2) +- The VPN network (VPN devices with a second IP, e.g. `10.8.x.x` – machines 1 and 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). +You *can* allow VPN clients to share access to their local networks, but we won’t do that here for security and subnet conflict reasons (e.g., if two remote machines use the same local IP like `192.168.1.1`). -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. +So only VPN-connected devices can communicate with each other on the VPN, not with other local devices outside the VPN. -## Côté serveur +## Server Side --- ::alert{type="info"} -📋 __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. -:: +📋 __Checklist:__ +- Ensure port `51820 UDP` is available and properly forwarded through your router to the server (`Source 51820 UDP -> Destination 51820 UDP -> Server`). +- Ensure port `51821 TCP` is available for the web UI. +:: ::alert{type="warning"} :::list{type="warning"} -- __Attention :__ Cette documentation utilise la version `14` de [wg-easy](https://wg-easy.github.io/wg-easy/latest/). La version `15`comporte des breaking changes qui ne sont pas compatibles avec les configurations proposées ici. +- __Warning:__ This guide uses version `14` of [wg-easy](https://wg-easy.github.io/wg-easy/latest/). Version `15` introduces breaking changes incompatible with this configuration. ::: :: -Structure des dossiers +Folder structure: ```console root @@ -73,11 +73,11 @@ root └── .env ``` -Le conteneur sera en mode `HOST`, c'est à dire qu'il occupera les ports de votre host comme s'il n'etait pas dans un conteneur mais directement installé sur la machine, sans passer par un sous-réseau. +The container runs in `HOST` mode, meaning it uses the host’s network stack directly. -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `wg_easy`. +Open Dockge, click `compose`, and name the stack `wg_easy`. -Copiez la configuration suivante : +Paste the following configuration: ```yaml --- @@ -107,18 +107,20 @@ services: - NET_ADMIN - SYS_MODULE ``` -::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower afin d'automatiser les mises à jour - ```yaml - services - wg-easy: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +::alert{type="success"} +✨ __Tip:__ Add the Watchtower label to enable automatic updates + +```yaml +services + wg-easy: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Dans `.env` : +In `.env`: ```properties HOST= @@ -127,49 +129,48 @@ ADDRESS= IPS= ``` -| Variable | Valeur | Exemples | -|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| -| `HOST`{lang=properties} | Domaine de l'host | `mondomaine.fr` | -| `PW`{lang=properties} | Hash du mot de passe, [à générer ici](https://bcrypt-generator.com/). **ATTENTION:** doubler les `$` | `$$2a$$12$$FF6T4QqSP9Ho`| -| `ADDRESS`{lang=properties} | Plage d'adresse que le DHCP du VPN peut attribuer, le `x` doit etre présent, on peut changer les autres chiffres ou les remplacer par `x` aussi | `10.8.0.x` | -| `IPS`{lang=properties} | les IPs qui doivent etre routées par les clients vers le VPN. Dans notre cas, on veut que seul le traffic vers le serveur et clients du VPN soit routé, on veut pas de leurs réseau local et on veut conserver l'accès à internet direct sans passer par le VPN.Si vous voulez tout de meme ajouter toutes les machines connectées aux appareils en local, ajoutez la plage `192.168.0.0/16` en séparant les deux plages par une virgule. | `10.8.0.0/24` | +| Variable | Description | Example | +|--------------|-------------|---------| +| `HOST` | Domain name of the host | `mydomain.com` | +| `PW` | Bcrypt password hash, [generate here](https://bcrypt-generator.com/). **NOTE:** Double the `$` characters | `$$2a$$12$$FF6T4QqSP9Ho` | +| `ADDRESS` | VPN DHCP address range, the `x` must remain, others can vary | `10.8.0.x` | +| `IPS` | IPs routed by clients through the VPN. Use `10.8.0.0/24` to only route VPN traffic. To include local LAN, add `192.168.0.0/16` separated by commas. | `10.8.0.0/24` | +Deploy the stack. -Puis déployez la stack. +### Enable Forwarding on Host -### Activation du forwarding depuis l'host - -Pour que l'host autorise les clients à communiquer entre eux, vous devez activer les paramèttres suivants : +To allow communication between VPN clients, enable: ```shell sudo sysctl net.ipv4.ip_forward=1 sudo sysctl net.ipv4.conf.all.src_valid_mark=1 ``` -### Recuperation des fichiers de conf +### Retrieve Configuration Files -Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host : +To configure clients, download the config files from the server: -- Connectez vous via le web en local sur `http://ipduserveur:51821` -- Créez un client -- Téléchargez le fichier de conf -- Renommez le en `wg0.conf` +- Visit `http://your-server-ip:51821` +- Create a client +- Download the config file +- Rename it to `wg0.conf` ::alert{type="danger"} :::list{type="danger"} -- En cas d'échec, vérifiez les règles du pare-feu. +- If it fails, check firewall rules. ::: :: -## Sur le serveur client +## On the Client Server --- ::alert{type="info"} :::list{type="info"} -- Nous partons du principe que le serveur client est un serveur linux avec Docker installé +- Assumes the client is a Linux server with Docker installed ::: :: -Structure des dossiers +Folder structure: ```console root @@ -180,32 +181,34 @@ root └── compose.yaml ``` -Creez le dossier `/docker/wireguard/config/wg_confs`. +Create the folder `/docker/wireguard/config/wg_confs`: ::alert{type="success"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip:__ Use [File Browser](/serveex/files/file-browser) to browse and edit files without terminal :: ```shell sudo mkdir -p /docker/wireguard/config/wg_confs ``` -Copiez le fichier` wg0.conf` téléchargé précédemment. +Copy the `wg0.conf` file downloaded earlier: ::alert{type="success"} -✨ __Astuce :__ Le moyen le plus simple est de transférer le fichier par sftp dans le dossier `/home/nomdutilisateur` puis de le copier dans le bon dossier : - - ```shell - sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs +✨ __Tip:__ Easiest way is to transfer the file via SFTP to `/home/youruser`, then move it: +```shell +sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs +``` :: -Creez le `compose.yaml` dans `/docker/wireguard `: +Create `compose.yaml` in `/docker/wireguard`: + ```shell sudo vi /docker/wireguard/compose.yaml ``` -Appuyez sur `i` pour rentrer en modification et copiez la configuration ci-dessous + +Press `i` to enter insert mode and paste: + ```yaml services: wireguard: @@ -223,30 +226,34 @@ services: restart: unless-stopped ``` -Appuyez sur `Echap` puis tapez `:x` pour quitter et sauvegarder. +Press `Esc` then type `:x` to save and exit. + +Start the container: -Lancez le conteneur : ```shell cd /docker/wireguard sudo docker compose up -d ``` + ::alert{type="info" icon="exclamation-circle"} :::list{type="info"} -- A répéter pour chaque client +- Repeat for each client ::: :: -## Autres appareils +## Other Devices --- -- **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 +- **Phone:** Install Wireguard and scan the QR code from the web UI (`http://your-server-ip:51821`) +- **PC:** Install the Wireguard client and import the config file ::alert{type="warning"} :::list{type="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} +- __Warning:__ If a client device is on the same LAN as the server, edit `wg0.conf` and change the endpoint to the local server IP: + +`Endpoint = your-server-ip:51820` ::: :: -Et voilà ce que cela peut donner ! +And this is the result: -![picture](/img/serveex/wireguard.svg) \ No newline at end of file +![picture](/img/serveex/wireguard.svg) diff --git a/content/3.serveex/3.securite/2.authentik.md b/content/3.serveex/3.securite/2.authentik.md index c41984c..5aed9bf 100644 --- a/content/3.serveex/3.securite/2.authentik.md +++ b/content/3.serveex/3.securite/2.authentik.md @@ -8,39 +8,37 @@ main: # Authentik ::alert{type="info"} -🎯 __Objectifs :__ -- Installer et exposer Authentik -- Paramétrer le Multi-Facteur -- Protéger une app native ou via reverse proxy +🎯 __Objectives:__ +- Install and expose Authentik +- Configure Multi-Factor Authentication (MFA) +- Protect a native app or an app behind a reverse proxy :: -[Authentik](https://goauthentik.io) est un outil d'authentification unique permettant de vous logger une seule fois sur les plateformes compatibles OpenID. Il permet également de sécuriser l'accès aux services que vous exposez, en s'injectant via SWAG aux requetes vers vos services. +[Authentik](https://goauthentik.io) is a single sign-on (SSO) tool that allows you to log in once to all platforms compatible with OpenID. It can also secure access to your exposed services by injecting itself via SWAG into requests to those services. -Ainsi, si vous exposez Dockge sur internet via `dockge.mondomaine.fr`, au moment de l'accès à cette page, vous tomberez sur une page de login d'authentik. Si vous avez déjà été identifié sur un autre service sécurisé par authentik auparavant, alors vous serez déjà identifié. cela permet d'avoir à vous identifiez qu'une seule fois par jour sur l'ensemble des services protégés par authentik. +For example, if you're exposing Dockge online at `dockge.mydomain.com`, you’ll first land on an Authentik login page when accessing it. If you've already authenticated with another Authentik-protected service, you won’t need to log in again. This allows you to authenticate only once per day for all protected services. -Authentik permet aussi d'utiliser le multi-facteur, notamment par TOTP (code généré par une application d'authentification de votre choix. Enfin, authentik permet aussi de se connecter directement via un compte Microsoft ou Google, si vous avez configuré une application d'un de ces services. +Authentik also supports multi-factor authentication, including TOTP (a code generated by the authentication app of your choice). Additionally, it allows login through Microsoft or Google accounts, provided you've configured one of those applications. -C'est une bonne manière de se passer de VPN pour exposer vos services, et d'exposer des services qui ne sont pas protégés par du MFA voir pas protégés par des login (comme le dashboard de swag). +It's a great alternative to VPNs for securely exposing services, especially ones that lack MFA or login protection (e.g., the SWAG dashboard). -Authentik dipose d'[une doc très fournie](https://docs.goauthentik.io/docs/installation/docker-compose) et des [fabuleux tuto de Cooptonian](https://www.youtube.com/@cooptonian). Ici, nous montrerons juste les bases, avec l'exemple de l'exposition de Dockge. +Authentik has [extensive documentation](https://docs.goauthentik.io/docs/installation/docker-compose) and [great tutorials from Cooptonian](https://www.youtube.com/@cooptonian). Here, we’ll cover the basics using Dockge as an example. -Deux modes principaux sont à connaitre: +There are two main modes you should know: -- Le premier permet à une application qui dispose nativement d'une intégration avec du SSO compatible OpenID de se connecter directement à Authentik. C'est la solution à privilégier car elle permet de laisser l'application décider de ce qui est public et de ce qui est protégé. +- The first allows apps with native support for OpenID-compatible SSO to connect directly to Authentik. This is the preferred method, as the app itself decides what’s public and what’s protected. ![Picture](/img/serveex/auth-native.svg) -- Le second permet d'injecter une authentification via authentik grace à SWAG avant d'arriver sur le service désiré. +- The second method injects Authentik authentication through SWAG before reaching the target service. ![Picture](/img/serveex/auth-proxy.svg) -Les deux modes son configurables application par application. - - +Both modes can be configured on a per-application basis. ## Installation --- -Structure des dossiers : +Folder structure: ```console root └── docker @@ -53,28 +51,29 @@ root └── ssh ``` -Créez les dossiers : +Create the folders: ```shell sudo mkdir -p /docker/authentik/media /docker/authentik/certs /docker/authentik/custom-template /docker/authentik/ssh ``` -Positionnez vous dans le dossier `authentik` et générez un mot de passe et une clé secrete que l'on va intégrer dans le .env : +Navigate to the `authentik` folder and generate a password and secret key to include in the `.env` file: ```shell sudo echo "PG_PASS=$(openssl rand 36 | base64)" >> .env sudo echo "AUTHENTIK_SECRET_KEY=$(openssl rand 60 | base64)" >> .env ``` + ::alert{type="info"} :::list{type="info"} -- Afin de générer la clé, nous avons créé les dossiers en amont du déploiement via Dockge. Dockge vous empechera de créer une stack du meme nom dans ces dossiers s'il n'existe pas de `compose.yml`. Il faut donc créer un `compose.yml` vide afin que ce dernier la reconnaisse comme existante dans les stacks inactives : +- To generate the keys, we created the folders ahead of deployment using Dockge. Dockge will prevent you from creating a stack with the same name in these folders unless a `compose.yml` file exists. So, create an empty `compose.yml` so it appears as an inactive stack: ::: ```shell sudo vi /docker/authentik/compose.yml :: -Ouvrez dockge, et cherchez "authentik" dans les stack inactives. -Nommez la stack authentik et collez la configuration suivante, en changeant les chiffres de `{AUTHENTIK_TAG:-2024.2.3}`{lang=properties} par [la dernière version de Authentik](https://version-2024-6.goauthentik.io/docs/releases). +Open Dockge and search for "authentik" in the inactive stacks. +Name the stack `authentik` and paste the following configuration, replacing `{AUTHENTIK_TAG:-2024.2.3}`{lang=properties} with [the latest version of Authentik](https://version-2024-6.goauthentik.io/docs/releases). ```yaml --- @@ -180,59 +179,59 @@ volumes: driver: local ``` -Dans le point `.env`, les variables `PG_PASS` et `AUTHENTIK_SECRET_KEY` sont déjà remplies. -Déployez la stack. +In the `.env` file, the `PG_PASS` and `AUTHENTIK_SECRET_KEY` variables are already set. +Deploy the stack. -Vous pouvez alors commencer le set-up d'authentik en tappant `http://ipduserveur:9000/if/flow/initial-setup/`. +You can then begin the initial setup by visiting: +`http://yourserverip:9000/if/flow/initial-setup/` ::alert{type="warning"} :::list{type="warning"} -- __Attention :__ il est conseillé de créer un nouveau compte admin, et de **désactiver** le compte admin de base `akadmin`. +- __Warning:__ It’s recommended to create a new admin account and **disable** the default `akadmin` account. ::: :: -## Exposer authentik +## Exposing Authentik --- -Pour être utilisable hors de chez vous, vous devez exposer authentik. +To use Authentik outside your local network, you must expose it. ::alert{type="info"} -📋 __Au préalable :__

-Nous partons du principe quer vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `auth.mondomaine.fr` avec pour CNAME `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +📋 __Prerequisites:__

+We assume you have already created a subdomain like `auth.mydomain.com` in your [DNS zone](/generalites/dns), with a CNAME pointing to `mydomain.com`. Also, unless you're using [Cloudflare Zero Trust](/serveex/securite/cloudflare), you must have already forwarded port `443` from your router to port `443` of your server in your [NAT rules](/generalites/nat). :: -Ouvrez le fichier `authentik-server.conf`. +Open the `authentik-server.conf` file: ::alert{type="success"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip for those who dislike terminals:__ +You can use [File Browser](/serveex/files/file-browser) to navigate and edit files instead of using terminal commands. :: ```shell sudo vi /docker/swag/config/nginx/authentik-server.conf ``` -Vérifiez que dans chaque cas les variables ci-dessous sont correctes : +Verify that the following variables are set correctly: ```nginx set $upstream_authentik authentik-server; proxy_pass http://$upstream_authentik:9000; ``` -Si ce n'est pas le cas, passez en mode modification en tapant `i` et éditez les. Sauvegardez et quittez en tapant sur `Echap` puis `:x`. +If not, press `i` to enter edit mode, make the necessary changes, then save and exit by pressing `Esc` followed by `:x`. -Créez le fichier `auth.subdomain.conf` +Create the `auth.subdomain.conf` file: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/auth.subdomain.conf - ``` -Appuyez sur `i` pour rentrer en mode modification puis collez la configuration suivante : +Press `i` to enter edit mode and paste the following configuration: ```nginx ## Version 2023/05/31 -# make sure that your authentik container is named authentik-server -# make sure that your dns has a cname set for authentik +# Ensure your authentik container is named authentik-server +# Ensure your DNS has a CNAME for authentik server { listen 443 ssl; @@ -245,14 +244,12 @@ server { client_max_body_size 0; location / { - include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app authentik-server; set $upstream_port 9000; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } location ~ (/authentik)?/api { @@ -262,148 +259,145 @@ server { set $upstream_port 9000; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Sauvegardez et quittez en appuyant sur `Echap` puis en tapant `:x`. +Save and exit by pressing `Esc` then `:x`. -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau d'Authentik : +Go to Dockge, and edit the SWAG compose file to add the Authentik network: ```yaml services: swag: container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom + # ... + networks: # Attach the container to the custom network # ... - - authentik # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + - authentik # Name of the network declared in the stack + +networks: # Define the custom network # ... - authentik: # Nom du réseau déclaré dans la stack - name: authentik_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + authentik: # Name of the network declared in the stack + name: authentik_default # Actual name of the external network + external: true # Indicates it's an external network ``` -Relancez la stack et patientez le temps que SWAG soit complètement opérationnel. +Restart the stack and wait for SWAG to be fully operational. -Et voilà ! Vous pouvez accéder à authentik via `https://auth.mondomaine.fr` +Done! You can now access Authentik via `https://auth.mydomain.com` -## Activer le multifacteur +## Enable Multifactor Authentication --- -Tout l'intérêt de authentik c'est de disposer du multifacteur pour toutes les apps que l'on protègera. - -- Rendez vous sur `https://auth.mondomaine.fr` -- Identifiez-vous -- Rendez-vous dans _paramètres_ -- Cliquez sur la section _MFA_ -- Cliquez sur _s'inscrire_ -- Choisissez une méthode comme _TOTP device_ ( dans ce cas vous devrez utilisez une app d'authentification telle que Google Authenticator par exemple) -- Suivez les étapes +The main value of Authentik is using multifactor authentication for all protected apps. -Et voilà, vous serez invité à saisir un code à usage unique à chaque connexion. +- Go to `https://auth.mydomain.com` +- Log in +- Go to _Settings_ +- Click the _MFA_ section +- Click _Register_ +- Choose a method like _TOTP device_ (you'll need an authenticator app like Google Authenticator) +- Follow the steps -## Protéger une app native +You’ll now be prompted to enter a one-time code at every login. + +## Protecting a Native App --- -Authentik est compatible nativement avec un certain nombre d'application, vous retrouverez la liste et [le support ici](https://docs.goauthentik.io/integrations/services/) +Authentik is natively compatible with several applications. You can find the list and [support here](https://docs.goauthentik.io/integrations/services/). -## Protéger une app par reverse proxy +## Protecting an App via Reverse Proxy --- -Swag permet d'intercaler la page d'authentik entre la requête et l'accès à votre service. Pour cela il va falloir : +SWAG lets you insert Authentik’s login page between a request and access to your service. To do this: -- Configurer le service d'authentification dans authentik. -- Configurer le fichier proxy du domaine pour que swag puisse intercaler la page. +- Configure the authentication provider in Authentik. +- Edit the domain proxy file so SWAG can intercept the request. -Pourquoi le faire alors que Dockge a déjà une page d'authentification ? Tout simplement parce que l'authentification HTTP utilisée par Dockge est faible. Avec Authentik, vous aurez directement une authentification forte par MFA, et vous serez loggé automatiquement à toutes vos apps déjà protégées par authentik. Cela permet de sécuriser l'accès à Dockge et aux autres apps que vous protégerez, sans avoir à passer par un VPN. +Why do this when Dockge already has authentication? Because Dockge uses weak HTTP authentication. With Authentik, you get strong MFA authentication and automatic login to all apps protected by Authentik. This secures access to Dockge and other apps without needing a VPN. -### Configuration de Authentik +### Configuring Authentik -- Rendez vous dans Authentik -- Allez dans le panneau d'administration -- Sélectionnez _application_ puis _créer avec l'assistant_ -- Renseignez les champs comme suit : +- Go to Authentik +- Open the admin panel +- Select _Applications_ then _Create with wizard_ +- Fill in the fields as shown: ![Picture](/img/serveex/auth1.png) -- Puis à l'étape suivante choisissez "Transférer l'authentification (application unique)" et éditez comme suit (attention aux flow, c'est important) : +- At the next step, choose "Forward authentication (single application)" and configure it as shown (flows are important): ![Picture](/img/serveex/auth2.png) -- Ensuite, allez dans le menu à gauche dans _Avant-poste_ et éditez _authentik Embedded Outpost_ +- Next, go to the _Outposts_ menu on the left and edit _authentik Embedded Outpost_: ![Picture](/img/serveex/auth3.png) -- Ajoutez l'application `dockge` en la faisant passer à droite et validez. +- Add the `dockge` application by moving it to the right column and save. -### Configuration de SWAG +### Configuring SWAG -Ensuite rendez-vous dans le fichier `dockge.mondomaine.fr`. +Edit the file `dockge.mydomain.com`: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf ``` -Puis entrez en modification en appuyant sur `i` et enlevez les `#` des deux lignes `#include /config/nginx/authentik-server.conf;`{lang=nginx}. +Press `i` to enter edit mode and uncomment the two lines `#include /config/nginx/authentik-server.conf;` -Appuyez sur `Echap` puis tapez `:x` et appuyez sur `Entrée` pour sauvegarder et quitter. +Press `Esc`, type `:x`, and press `Enter` to save and exit. -Et voilà ! En tapant `https://dockge.mondomaine.fr`, vous tomberez à présent sur la mire d'authentification de authentik. +Done! Now when accessing `https://dockge.mydomain.com`, you’ll be redirected to the Authentik login screen. ::alert{type="success"} -✨ __Astuce :__ dans Dockge, dans les paramètres, vous pouvez désactiver l'authentification de Dockge afin de ne pas avoir à vous identifier deux fois. **Attention**, cela voudra dire que si vous avez exposé un port sur votre réseau local, il n'y aura plus aucune authentification. +✨ __Tip:__ In Dockge's settings, you can disable Dockge's authentication to avoid double login. **Warning**: this means if the port is open on your local network, there will be no authentication at all. :: ::alert{type="info"} :::list{type="info"} -- Vous pouvez répétez l'opération pour chaque application que vous souhaitez protéger (si elle ne dipose pas d'intégration directe avec Authentik). +- Repeat this process for each app you want to protect (unless it has native integration with Authentik). ::: :: -Voilà votre nouvelle architecture : +Your new architecture looks like this: ![Picture](/img/serveex/authentik.svg) -## Protéger un service sur un serveur distant +## Protecting a Remote Server Service --- -Dans le cas d'une application [native](/serveex/securite/authentik#protéger-une-app-native) (via OAuth 2.0 ou autre), rien ne change. - -Dans le cas d'une application non native à protéger derrière un reverse proxy, vous devrez déployer un __avant-poste__. Un avant-poste est un conteneur qui jouera le rôle de proxy local, c'est à dire que c'est vers ce conteneur que les requêtes d'authentification de vos applications seront redirigées. C'est le seul qui est autorisé à dialoguer avec l'API de votre instance authentik. +For a [native application](/serveex/securite/authentik#protéger-une-app-native) (via OAuth 2.0 or other), nothing changes. +For a non-native app behind a reverse proxy, you must deploy an __Outpost__. An Outpost is a container acting as a local proxy — it's the target of your app's auth requests and the only one authorized to communicate with your Authentik API. ::alert{type="info"} -Pré-requis : -- Avoir installé [docker](/serveex/coeur/docker) sur votre machine distante hébergeant le service à protéger. -- Si l'application n'a pas d'intégration native, avoir un reverse proxy compatible. Comme partout ici, nous utiliserons [SWAG](/serveex/coeur/swag). -:: +Prerequisites: +- Install [Docker](/serveex/coeur/docker) on the remote server hosting the service. +- If the app has no native integration, use a compatible reverse proxy. We will use [SWAG](/serveex/coeur/swag) here. +:: -Ce conteneur redirigera ensuite les requetes vers votre instance [Authentik](/serveex/securite/authentik#authentik) principale, à travers le web (ou votre réseau local). Le serveur executera les controle et renverra la réponse à l'_avant-poste_, qui bloquera ou non la connexion à l'app protégée. +This container will forward requests to your main [Authentik](/serveex/securite/authentik#authentik) instance over the internet (or your local network). The server will perform checks and respond to the Outpost, which will allow or block access accordingly. ![auth-outpost](/img/serveex/auth-outpost.svg) -### Configuration d'Authentik +### Configuring Authentik -Créez vos [fournisseurs et applications](/serveex/securite/authentik#protéger-une-app-native) comme nous l'avons vu plus haut. +Create your [providers and applications](/serveex/securite/authentik#protéger-une-app-native) as shown earlier. -Puis, dans votre panneau admin, allez dans la rubrique _Applications > Avant-postes_, puis créez un nouvel avant-poste. +Then, in the admin panel, go to _Applications > Outposts_, and create a new outpost. -Remplissez comme suit : +Fill in as follows: +| Field | Value | +|----------------|------------------------------------------------------------------------| +| `Name` | Your preferred name | +| `Type` | `Proxy` | +| `Integration` | Leave empty | +| `Applications` | Select the applications you previously created | -| Champs | Valeur | -|----------------|-----------------------------------------------------------------------| -| `Nom` | Le nom que vous souhaitez | -| `Type` | `Proxy` | -| `Intégration` | Laissez vide | -| `Applications` | Sélectionnez le ou les applications que vous avez créées précédemment | - -Dans la section `Paramètres avancés`, supprimez l'existant, et complétez comme suit : +In the `Advanced settings` section, clear the existing content and enter: ```yaml log_level: info docker_labels: null -authentik_host: https://domaine_de_votre_serveur_authentik/ +authentik_host: https://your_authentik_server_domain/ object_naming_template: ak-outpost-%(name)s authentik_host_insecure: false container_image: @@ -412,35 +406,36 @@ docker_map_ports: true docker_labels: null ``` -Enrtegistrez et quittez. +Save and exit. -Sur l'écran affichant les avant-postes créés, vous verrez le nouvel avant-poste que vous venez de créer. A la fin de la ligne, cliquez sur _afficher les informations_, et copiez précieusement le jeton d'accès. +On the list of created outposts, locate the new one and click _Show details_ at the end of the line. Carefully copy the access token. -### Configuration de la machine distante -Nous partons du principe que vous avez déjà installé [Docker](/serveex/coeur/docker) et [SWAG](/serveex/coeur/swag) sur cette machine distante. +### Configuring the Remote Machine -Sur votre machine distante, à l'aide de [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez une stack `authentik-outpost`. +We assume you’ve already installed [Docker](/serveex/coeur/docker) and [SWAG](/serveex/coeur/swag) on this remote machine. -Si vous n'avez pas installé [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez un dossier `/docker/authentik-outpost`, ou directement en ligne de commande : +On your remote machine, use [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs) to create a stack named `authentik-outpost`. + +If you haven’t installed [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), create a folder `/docker/authentik-outpost`, or directly via command line: ```shell sudo mkdir -P /docker/authentik-outpost ``` ::alert{type="success"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip for terminal-averse users:__ +You can use [File Browser](/serveex/files/file-browser) to navigate and edit your files instead of using terminal commands. :: -Créez le fichier `compose.yaml` ou copiez la configuration directement dans le champs si vous avez [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs) +Create the `compose.yaml` file or paste the configuration directly into Dockge if installed. -En ligne de commande : +Via command line: ```shell sudo vi /docker/authentik-outpost/compose.yaml ``` -Entrez en mode modification avec `i` et collez la configuration suivante, en changeant les chiffres de `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} par la meme version que celle de votre serveur Authentik. +Enter edit mode by pressing `i` and paste the following configuration, updating the version in `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} to match your Authentik server version. ```yaml version: "3.5" @@ -453,7 +448,6 @@ services: restart: unless-stopped env_file: - .env - # - foo ports: - 9000:9000 - 9443:9443 @@ -461,13 +455,9 @@ services: AUTHENTIK_HOST: ${HOST} AUTHENTIK_INSECURE: "false" AUTHENTIK_TOKEN: ${TOKEN} - # Starting with 2021.9, you can optionally set this too - # when authentik_host for internal communication doesn't match the public URL - # AUTHENTIK_HOST_BROWSER: https://external-domain.tld ``` -Rendez-vous sur la stack de SWAG de la machine distante (ou remplissez directement si vous avez [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs)) et ajoutez le réseau de authentik-outpost dans le fichier de conf sur ce modele (les champs `networks`) : - +Go to the SWAG stack on the remote machine (or edit directly using Dockge) and add the authentik-outpost network in the configuration file like this (see `networks` section): ```shell sudo vi /docker/swag/compose.yaml @@ -478,110 +468,108 @@ services: swag: container_name: #... # ... - networks: # Relie le conteneur au réseau custom - - authentik-outpost # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + networks: # Attach the container to the custom network + - authentik-outpost # Network name as declared in the stack + +networks: # Define the custom network #... - authentik-outpost: # Nom du réseau déclaré dans la stack - name: authentik-outpost_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + authentik-outpost: # Name of the network declared in the stack + name: authentik-outpost_default # Actual name of the external network + external: true # Marks it as an external network ``` -Appuyez sur `Echap` puis tapez `:x` et appuyez sur `Entrée` pour sauvegarder et quitter. +Press `Esc`, then type `:x` and press `Enter` to save and exit. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de dockge est `authentik-outpost_default`. +- We assume the Dockge network name is `authentik-outpost_default`. ::: :: -Si vous avez [Dockge](/serveex/coeur/docker/#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), relancez SWAG. +If using [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), restart SWAG. -Sinon, via le terminal : +Otherwise, via terminal: ```shell cd /docker/swag/ sudo docker compose up -d ``` -Creez (ou remplissez directement si vous avez [Dockge](/serveex/coeur/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs)) le fichier `.env` dans le dossier de l'avant poste authentik : +Create (or fill using Dockge) the `.env` file in the `authentik-outpost` directory: -En ligne de commande : +Via command line: ```shell sudo vi /docker/authentik-outpost/.env ``` -Entrez en mode modification avec `i` et collez la configuration suivante +Enter edit mode with `i` and paste the following configuration: ```properties HOST= TOKEN= ``` -Remplissez comme suit -| Variable | Valeur | Exemple | -|-------------------------|---------------------------------------------------------|----------------------------| -| `HOST`{lang=properties} | L'url de votre serveur authentik | `https://auth.domaine.fr` | -| `TOKEN`{lang=properties} | Le token que vous avez précédemment copié précieusement | `Q2pVEqsTNRkJSO9SkJzU3KZ2` | +Fill in the values: -Appuyez sur `Echap` puis tapez `:x` et appuyez sur `Entrée` pour sauvegarder et quitter. +| Variable | Value | Example | +|----------|-------|---------| +| `HOST`{lang=properties} | The URL of your Authentik server | `https://auth.domain.com` | +| `TOKEN`{lang=properties} | The previously copied access token | `Q2pVEqsTNRkJSO9SkJzU3KZ2` | -Si vous avez [Dockge](/serveex/coeur/docker/#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), déployez la stack. +Press `Esc`, then type `:x` and press `Enter` to save and exit. -Sinon, via le terminal : +If using Dockge, deploy the stack. + +Otherwise, via terminal: ```shell cd /docker/authentik-outpost/ sudo docker compose up -d ``` -Le conteneur est en route, vous pouvez vérifier son état dans votre panneau admin de votre instance Authentik, section _Applications > Avant-postes_. +The container is now running. You can verify its status from your Authentik instance admin panel under _Applications > Outposts_. +Now, let’s configure SWAG. -Nous allons a présent configurer SWAG. - -Ouvrez le fichier `authentik-server.conf`. +Open the `authentik-server.conf` file: ```shell sudo vi /docker/swag/config/nginx/authentik-server.conf ``` -Dans le fichier, passez en mode modification en tapant `i` et changez `authentik-server` par `authentik-outpost` comme suit : +In the file, press `i` to enter edit mode and change `authentik-server` to `authentik-outpost` as shown: ```nginx set $upstream_authentik authentik-outpost; proxy_pass http://$upstream_authentik:9000; ``` -Sauvegardez et quittez en tapant sur `Echap` puis `:x` et sur `Entrée`. +Save and exit with `Esc`, then `:x` and `Enter`. -Ensuite, configurez les applications à protéger selon si elles sont [natives](/serveex/securite/authentik#protéger-une-app-native) ou par [proxy](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy) comme vous l'avez fait sur votre serveur principal. +Then configure the applications to protect as you did on your main server, whether they are [native](/serveex/securite/authentik#protéger-une-app-native) or protected via [reverse proxy](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). -## Migrer une base authentik +## Migrating an Authentik Database --- -Sur la machine d'origine, dumper la bdd : +On the source machine, dump the database: ```shell sudo docker exec authentik-postgres pg_dump -U authentik -F t authentik > /path/to/mydb.tar ``` -Puis l'envoyer sur la machine cible. Sur la machine cible, copier le fichier dans le container docker +Then transfer it to the target machine. On the target machine, copy the file into the Docker container: ```shell cp /path/to/mydb.tar authentik-postgres:/path/to/wherever ``` -(Optionnel) Purgez les tables existantes : +(Optional) Purge existing tables: ```shell -sudo docker exec -i authentik-postgres psql -U authentik -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'authentik' AND pid <> pg_backend_pid();" && \ -sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "DROP DATABASE IF EXISTS authentik;" && \ -sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "CREATE DATABASE authentik;" && \ +sudo docker exec -i authentik-postgres psql -U authentik -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'authentik' AND pid <> pg_backend_pid();" && sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "DROP DATABASE IF EXISTS authentik;" && sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "CREATE DATABASE authentik;" ``` -Restaurez la bdd +Restore the database: ```shell sudo docker exec authentik-postgresql pg_restore -U authentik -d authentik /path/to/wherever/mydb.tar diff --git a/content/3.serveex/3.securite/3.cloudflare.md b/content/3.serveex/3.securite/3.cloudflare.md index ea3aa93..8469d66 100644 --- a/content/3.serveex/3.securite/3.cloudflare.md +++ b/content/3.serveex/3.securite/3.cloudflare.md @@ -8,123 +8,123 @@ main: # Cloudflare Zero Trust ::alert{type="info"} -🎯 __Objectifs :__ - - Comprendre le principe des Tunnels Cloudflare - - Paramétrer son compte cloudflare - - Paramétrer SWAG - - Gérer plusieurs tunnels +🎯 __Goals:__ + - Understand the concept of Cloudflare Tunnels + - Configure your Cloudflare account + - Configure SWAG + - Manage multiple tunnels :: ![cloudfare_tunnels](/img/serveex/cloudflared.svg) ## Introduction --- -L'architecture _Zero Trust_ est la pratique consistant à concevoir des systèmes fondés sur le principe de __« ne jamais faire confiance__, __toujours vérifier »__, par opposition au principe traditionnel de __« confiance, mais vérifier »__. Ce concept est devenu très populaires récemment, à la suite des attaques toujours plus nombreuses concernant les données des utilisateurs. C'est un concept très large, nous nous concentrerons sur l’application du _Zero Trust_ aux services Web que nous hébergeons. +The _Zero Trust_ architecture is the practice of designing systems based on the principle of __"never trust, always verify"__, as opposed to the traditional principle of __"trust, but verify"__. This concept has become increasingly popular recently due to the growing number of attacks targeting user data. It’s a broad concept, but we’ll focus on how to apply _Zero Trust_ to the web services we host. -Les _tunnels Cloudflare_ offrent un moyen simple d'arriver au _Zero Trust_, en s'appuyant sur [SWAG](/serveex/coeur/swag) et [Authentik](/serveex/securite/authentik). +_Cloudflare tunnels_ offer a simple way to implement _Zero Trust_, using [SWAG](/serveex/coeur/swag) and [Authentik](/serveex/securite/authentik). -Pour le dire simplement, les Tunnels Cloudflare permettent notamment de : +Simply put, Cloudflare Tunnels allow you to: -- Masquer l'IP de votre serveur (et donc de votre box s'il est hébergé chez vous). -- D'authentifier le traffic. -- De bénéficier des protection de Cloudflare (attaques DDOS, etc, blacklist, requêtes malveillantes, etc...). -- De bénéficier du CDN, c'est à dire du serveur de cache de Cloudlfare, qui permet d'augmenter les performances de vos sites web. -- De ne plus avoir besoin de l'ouverture de ports de votre routeur pour les services exposés par SWAG. +- Hide your server’s IP (and your home IP if it's self-hosted) +- Authenticate traffic +- Benefit from Cloudflare protections (DDoS attacks, blacklists, malicious requests, etc.) +- Use Cloudflare's CDN to cache and speed up your websites +- Avoid opening router ports for services exposed by SWAG -Ici, nous expliquerons comment associer SWAG aux tunnels Cloudflare. +Here we’ll explain how to integrate SWAG with Cloudflare tunnels. ::alert{type="warning"} :::list{type="warning"} -- __Attention :__ +- __Warning:__ ::: -- N'utilisez pas les tunnels Cloudflare pour exposer un serveur mail -- N'utilisez pas les tunnels Cloudflare pour exposer un service vidéo, comme Plex (si vous avez [suivi ce guide](/serveex/media/plex), Plex n'est pas exposé, c'est donc valide) -- N'utilisez pas les tunnels Cloudflare pour utiliser le protocole bittorrent (si vous avez [suivi ce guide](/serveex/media/qbittorrent), tout est bon) +- Do not use Cloudflare tunnels to expose a mail server +- Do not use Cloudflare tunnels to expose a video service like Plex (if you followed [this guide](/serveex/media/plex), Plex is not exposed, so it’s fine) +- Do not use Cloudflare tunnels for the BitTorrent protocol (if you followed [this guide](/serveex/media/qbittorrent), everything is fine) :: -## Configuration Cloudflare +## Cloudflare Configuration --- -### Zone DNS +### DNS Zone -Avant toute chose, vous devez définir Cloudflare comme gestionnaire de votre [zone DNS](/generalites/dns). Si vous avez réservé votre nom de domaine chez Cloudflare, c'est déjà le cas. Sinon, renseignez vous auprès de votre registrar sur comment ajouter des DNS externes. Cloudflare dispose d'[une documentation expliquant pas à pas comment paramétrer une Zone DNS](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/), que vous ayez un domaine externe ou reservé chez Cloudflare. +First, you need to set Cloudflare as your [DNS zone](/generalites/dns) manager. If you bought your domain from Cloudflare, that’s already done. Otherwise, check with your registrar how to add external DNS servers. Cloudflare provides [step-by-step documentation](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/) on how to configure a DNS Zone, whether your domain is external or registered with Cloudflare. -Si vous avez qu'un seul serveur à protéger derrière Cloudflare, vous pouvez supprimer l'ensemble des enregistrement DNS existant, par défaut le domaine et tout ses sous-domaines seront directement redirigés vers le tunnel. +If you only have one server to protect behind Cloudflare, you can delete all existing DNS records. By default, your domain and all its subdomains will be redirected to the tunnel. -Si vous avez des sous-domaines à rediriger vers d'autres serveurs, vous pourrez toujours les déclarer dans la zone DNS à l'aide d'un enregistrement A. +If you have subdomains pointing to other servers, you can still define them in the DNS zone using A records. -Si vous avez plusieurs serveurs et donc plusieurs tunnels pour un meme domaine principal, [voyez ici](http://192.168.7.80:8005/serveex/cloudflare/#gerer-plusieurs-tunnels-pour-plusieurs-serveurs). +If you have several servers and tunnels under one domain, [see here](http://192.168.7.80:8005/serveex/cloudflare/#gerer-plusieurs-tunnels-pour-plusieurs-serveurs). -### Clé API +### API Key -Pour commencer, nous devons créer un nouveau jeton API pour Cloudflare et récupérer nos identifiants de zone et de compte. +Start by creating a new Cloudflare API token and retrieving your zone and account IDs. -Sur le tableau de bord de Cloudflare, dans la page de présentation de votre domaine, vous pouvez voir les identifiants de `zone` et de `compte` en bas à droite de l'écran. Copiez précieusement ces deux identifiants. +On your Cloudflare dashboard, on your domain overview page, you’ll see the `zone` and `account` IDs at the bottom right. Save both securely. ![id and account](/img/serveex/cf-id.png) -Juste en dessous d'eux, il y a un lien intitulé _Obtenez votre jeton API_. Cliquez dessus. Le périmètre dont nous avons besoin pour le jeton doit inclure `Zone:DNS:Edit` et `Account:Cloudflare Tunnel:Edit`. Assurez-vous que votre page de création de token ressemble à celle illustrée dans la capture d'écran ci-dessous. +Just below that is a link titled _Get your API token_. Click it. The token scope must include `Zone:DNS:Edit` and `Account:Cloudflare Tunnel:Edit`. Your page should look like the screenshot below. ![API token](/img/serveex/cf-token.png) -Une fois que nous aurons enregistré, notre jeton sera affiché une fois. copiez le précieusement, car vous ne pourrez plus le revoir après la fermeture. +Once created, your token will only be shown once. Save it securely, as it cannot be viewed again later. ### Cloudflare Zero Trust -Vous devez vous inscrire à _Cloudflare Teams_ pour pouvoir accéder au tableau de bord _Zero Trust_ qui gère les tunnels et les politiques d'accès. Il s'agit d'un service premium, mais ils proposent un forfait gratuit pour un maximum de 50 utilisateurs, ce qui devrait suffire pour votre Home Lab. Gardez à l’esprit que puisqu’il s’agit d’une fonctionnalité premium, ils demandent une carte de crédit valide lors de l’inscription, mais avec le forfait gratuit, il n'y aura aucun frais. +You must register for _Cloudflare Teams_ to access the _Zero Trust_ dashboard that manages tunnels and access policies. This is a premium service, but there’s a free plan for up to 50 users—perfect for a home lab. Keep in mind that a valid credit card is required to register, but the free plan incurs no charges. -Inscrivez-vous [via ce lien](https://dash.teams.cloudflare.com/). +Register [via this link](https://dash.teams.cloudflare.com/). - -## Configuration de Swag +## SWAG Configuration --- ::alert{type="info"} :::list{type="info"} -- Nous partons du principe que vous avez le domaine `mondomaine.fr` avec les DNS qui pointent bien vers ceux de Cloudflare, comme vu précédemment. +- This guide assumes you own `mondomaine.fr` and that its DNS is correctly pointing to Cloudflare, as described above. ::: :: -SWAG dispose de deux `Docker Mods` permettant d'y intégrer : +SWAG supports two Docker Mods: -- __Cloudflared__, le conteneur qui permet de créer et de gérer les tunnels -- __Cloudflared Real IP__, un conteneur qui permet à SWAG d'obtenir la vraie source IP des requêtes depuis internet plutot que celle de Docker (ce qui pourrait entrer en conflit avec le mod de géolocalisatioN DBIP). +- __Cloudflared__, the container used to create and manage tunnels +- __Cloudflared Real IP__, which allows SWAG to receive the true source IP of incoming requests instead of Docker’s internal IP (important for IP geolocation mods like DBIP). -Ces deux mods, fusionnés dans le conteneur de SWAG, nécessitent un peu de configuration. +These two mods, merged into the SWAG container, require some configuration. -### Configuration du tunnel +### Tunnel Configuration -Pour configurer les tunnels, nous aurons besoin de créer un fichier `tunnelconfig.yml` auquel nous ferons appel dans le `compose.yaml` de SWAG. +Create a file `tunnelconfig.yml` to reference in your SWAG `compose.yaml`. ::alert{type="success"} -✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip:__ Use [File Browser](/serveex/files/file-browser) to navigate and edit files instead of using the terminal. :: ```shell sudo vi /docker/swag/config/tunnelconfig.yml ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous +Press `i` to enter insert mode and paste: ```yaml ingress: - hostname: mondomaine.fr service: https://mondomaine.fr - hostname: "*.mondomaine.fr" - service: https://mondomaine..fr + service: https://mondomaine.fr - service: http_status:404 ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. +Press `Esc`, then save and exit with `:x` and `Enter`. -### Configuration de Cloudflare Real IP +### Cloudflare Real IP Configuration -A présent, nous allons configurer le bon fonctionnement du mode _Cloudflare Real IP_ +Now configure _Cloudflare Real IP_. -Ouvrez le fichier `nginx.conf` +Open the `nginx.conf` file: ```shell sudo vi /docker/swag/config/nginx/nginx.conf ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous à la fin de la section `http` + +Press `i` and add the following at the end of the `http` section: ```nginx real_ip_header X-Forwarded-For; @@ -132,11 +132,12 @@ real_ip_recursive on; include /config/nginx/cf_real-ip.conf; set_real_ip_from 127.0.0.1; ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. -### Docker compose +Save and exit with `:x`. -Ouvrez Dockge, éditez la stack SWAG avec cette configuration +### Docker Compose + +In Dockge, edit your SWAG stack with this: ```yaml --- @@ -175,18 +176,15 @@ services: ``` ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add a Watchtower label to automate updates: - ```yaml - services: - swag: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +```yaml +labels: + - com.centurylinklabs.watchtower.enable=true +``` :: - -Et renseignez le `.env` les infos que vous avez trouvées et notées tout au long de ce guide +Fill in your `.env` file: ```properties PUID= @@ -201,68 +199,65 @@ TUNNEL_NAME= TUNNEL_PW= ``` -| Variable | Valeur | Exemples | -|-----------------------------------|-----------------------------------------------------------------------------------------------------------|--------------------------------| -| `PUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `GUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000 ` | -| `DOMAIN`{lang=properties} | Le domaine que vous avez réservé | `mondomaine.fr` | -| `PLUGIN`{lang=properties} | Le fournisseur de zone DNS, ici Cloudflare. Pensez à renseigner `cloudflare.ini` (voir [guide de swag](https://docs.linuxserver.io/general/swag/#create-container-via-dns-validation-with-a-wildcard-cert)) | `cloudflare` | -| `EMAIL`{lang=properties} | Votre email pour le certificat | `votre@email.fr` | -| `ZONE_ID`{lang=properties} | L'ID de Zone que vous avez noté précédemment | `aNhcz1l3JfWbFZo2XMpzQlP2iOqk` | -| `ACCOUNT_ID`{lang=properties} | L'ID de Compte que vous avez noté précédemment | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | -| `API_TOKEN`{lang=properties} | Le jeton d'API que vous avez noté précédemment | `53ydYus9TFFk1DOXNdP87iIcJtQjoW` | -| `TUNNEL_NAME`{lang=properties} | Le nom de votre tunnel | `mon_tunnel` | -| `TUNNEL_PW`{lang=properties} | Un mot de passe fort généré aléatoirement | `iSzKRmP4VbnlsMvdSdgBEJiJi` | +| Variable | Value | Example | +|----------------|-------------------------------------------------------------|--------------------------------| +| `PUID` | User ID (`id username`) | `1000` | +| `GUID` | Group ID (`id username`) | `1000` | +| `DOMAIN` | Your reserved domain | `mondomaine.fr` | +| `PLUGIN` | DNS provider (also configure `cloudflare.ini`) | `cloudflare` | +| `EMAIL` | Email for the certificate | `you@email.com` | +| `ZONE_ID` | Cloudflare Zone ID | `aNhcz1l3JfWbFZo2XMpzQlP2iOqk` | +| `ACCOUNT_ID` | Cloudflare Account ID | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | +| `API_TOKEN` | API token | `53ydYus9TFFk1DOXNdP87iIcJtQjoW` | +| `TUNNEL_NAME` | Tunnel name | `my_tunnel` | +| `TUNNEL_PW` | Strong, random password | `iSzKRmP4VbnlsMvdSdgBEJiJi` | -Une fois fait, déployez la stack. Cela prendra un peu de temps, vérifiez les logs, vous devriez arriver à `serveur ready` +Once done, deploy the stack. Check the logs—you should reach `server ready`. -Une fois le conteneur en ligne, vérifiez dans cloudflare que votre tunnel est bien présent dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). Par défaut, l'ensemble des sous domaine sont redirigés vers le tunnel, sans avoir besoin de les déclarer [dans votre zone DNS](/generalites/dns). +Then confirm your tunnel appears under _Networks > Tunnels_ in [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). By default, all subdomains will be routed through the tunnel—no need to define them [in your DNS zone](/generalites/dns). ::alert{type="success"} -✨ __Astuce:__ si vous voulez exposer un service sans tunnel, vous pouvez toujours déclarer un enregistrement A [dans votre zone DNS](/generalites/dns). En cas de problème de résolution, désactivez la fonction _proxy_ pour cet enregistrement. Par exemple pour `sous.mondomaine.fr` +✨ __Tip:__ If you want to expose a service without a tunnel, just define an A record [in your DNS zone](/generalites/dns). If resolution fails, disable the proxy function for that record—e.g., for `sub.mondomaine.fr`. ![dns](/img/serveex/cf-dns.png) :: - -## Gérer plusieurs tunnels pour plusieurs serveurs +## Managing Multiple Tunnels for Multiple Servers --- -Par défaut, l'ensemble des sous domaine de votre nom de domaine pointent vers le tunnel que vous avez créé. Mais si vous avez un second serveur, vous pouvez avoir un second tunnel en changeant seulement le nom de tunnel dans la configuration de l'instance swag de votre serveur. +By default, all subdomains of your domain are routed through the single tunnel. But if you have a second server, just change the tunnel name in that SWAG instance. -Vous devrez ensuite dans votre zone DNS rediriger les sous domaine souhaité vers le bon tunnel. Pour cela, faites comme suit. +In your DNS zone, redirect subdomains to the correct tunnel. -Rendez-vous dans dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). +Go to _Networks > Tunnels_ in [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). -Notez les deux ID des tunnels +Note the tunnel IDs: ![tunnels_id](/img/serveex/cf-tunnels-id.png) -Rendez-vous à présent dans la section DNS de [cloudflare](https://dash.cloudflare.com/), après avoir cliqué sur le nom de domaine concerné. +Then in the [Cloudflare DNS dashboard](https://dash.cloudflare.com/), click your domain name. -Cliquez sur `ajouter un enregistrement` et ajoutez deux enregistrements comme suit en ajoutant bien `.cfargotunnel.com` après vos id de tunnels. +Click `Add Record` and add these two CNAME records (include `.cfargotunnel.com`): -| Type | Nom | Cible | -|---------|----------------|-------------------------------------| -| `CNAME` | `sousdomaine1` | `votreiddetunnel1.cfargotunnel.com` | -| `CNAME` | `sousdomaine2` | `votreiddetunnel2.cfargotunnel.com` | +| Type | Name | Target | +|---------|--------------|----------------------------------------| +| `CNAME` | `subdomain1` | `yourtunnelid1.cfargotunnel.com` | +| `CNAME` | `subdomain2` | `yourtunnelid2.cfargotunnel.com` | +If you have many subdomains, point them to the above reference subdomains. +This way, if a tunnel ID changes, you only update one DNS record. -Si vous avez de nombreux sous-domaines, vous pouvez déclarer un seul sous domaine par tunnel comme ci-dessus, puis déclarer vos autres sous domaine en les faisant pointer vers ces sous domaines de référence. +Example: -Ainsi, en cas de changement d'id de tunnel, vous n'aurez qu'à le changer que pour un seul sous-domaine. -Par exemple : - -- Le serveur de `sousdomaine1` doit egalement etre la cible de sub1, et sub2 : +- `sub1` and `sub2` also point to the server behind `subdomain1`: - | Type | Nom | Cible | - |---------|----------------|-------------------------------------| - | `CNAME` | `sub1` | `sousdomaine1` | - | `CNAME` | `sub2` | `sousdomaine1` | - -- Le serveur de `sousdomaine2` doit egalement etre la cible de sub3, et sub4 : +| Type | Name | Target | +|---------|--------|---------------| +| `CNAME` | `sub1` | `subdomain1` | +| `CNAME` | `sub2` | `subdomain1` | - | Type | Nom | Cible | - |---------|----------------|-------------------------------------| - | `CNAME` | `sub3` | `sousdomaine2` | - | `CNAME` | `sub4` | `sousdomaine2` | +- `sub3` and `sub4` point to the server behind `subdomain2`: +| Type | Name | Target | +|---------|--------|---------------| +| `CNAME` | `sub3` | `subdomain2` | +| `CNAME` | `sub4` | `subdomain2` | \ No newline at end of file diff --git a/content/3.serveex/3.securite/_dir.yml b/content/3.serveex/3.securite/_dir.yml index a1ce4b5..148ce60 100644 --- a/content/3.serveex/3.securite/_dir.yml +++ b/content/3.serveex/3.securite/_dir.yml @@ -1 +1 @@ -navigation.title: La sécurité +navigation.title: Security diff --git a/content/3.serveex/4.monitoring/1.uptime-kuma.md b/content/3.serveex/4.monitoring/1.uptime-kuma.md index 6c300fa..1595e4e 100644 --- a/content/3.serveex/4.monitoring/1.uptime-kuma.md +++ b/content/3.serveex/4.monitoring/1.uptime-kuma.md @@ -1,3 +1,4 @@ + --- navigation: true title: Uptime-Kuma @@ -8,19 +9,19 @@ main: # Uptime-Kuma ::alert{type="info"} -🎯 __Objectifs :__ -- Installer et déployer Uptime-Kuma -- Exposer Uptime Kuma -- (Optionnel) Protéger Uptime-Kuma avec Authentik +🎯 __Goals:__ +- Install and deploy Uptime-Kuma +- Expose Uptime-Kuma +- (Optional) Protect Uptime-Kuma with Authentik :: -[Uptime-Kuma ](https://github.com/louislam/uptime-kuma)est un conteneur dédié au monitoring de services. Le principe est d'envoyer des requêtes régulières à vos services afin de déterminer s'ils sont en lignes ou non, et de vous alerter le cas échéant. Uptime-Kuma est développé par le meme développeur que Dockge. +[Uptime-Kuma](https://github.com/louislam/uptime-kuma) is a container dedicated to service monitoring. The principle is to regularly send requests to your services to determine if they are online, and alert you if not. Uptime-Kuma is developed by the same developer as Dockge. ![picture](https://user-images.githubusercontent.com/1336778/212262296-e6205815-ad62-488c-83ec-a5b0d0689f7c.jpg) ## Installation --- -Structure des dossiers +Folder structure ```console root @@ -30,7 +31,7 @@ root └── compose.yaml ``` -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `uptime-kuma` puis copiez collez ceci : +Open Dockge, click on `compose`, name the stack `uptime-kuma`, then copy and paste the following: ```yaml --- @@ -45,7 +46,7 @@ services: restart: always ``` ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add the Watchtower label to each container to automate updates ```yaml services: @@ -55,39 +56,39 @@ services: - com.centurylinklabs.watchtower.enable=true :: -Vous n'avez plus qu'à accéder à l'outil via `http://ipdevotreserveur:3200`. +You can now access the tool via `http://yourserverip:3200`. ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu. +- __If it fails:__ check your firewall rules. ::: :: -## Exposer avec Swag +## Expose with Swag --- ::alert{type="info"} -📋 __Au préalable :__ +📋 __Before you begin:__

-Nous partons du principe que vous avez le sous-domaine `stats.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/generalites/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/generalites/nat). +We assume you have the subdomain `stats.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/generalites/dns). And of course, [unless you're using Cloudflare Zero Trust](/serveex/securite/cloudflare), port `443` of your router should point to port `443` of your server via [NAT rules](/generalites/nat). :: ::alert{type="warning"} :::list{type="warning"} -- Uptime-Kuma n'utilise pas d'authentification multifacteur. Exposer Uptime-Kuma 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/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Uptime-Kuma does not use multi-factor authentication. Exposing Uptime-Kuma on the internet could compromise the machines it monitors. Only do this if you're using an MFA system like [Authentik](/serveex/securite/authentik/). Otherwise, don’t expose it with SWAG; use a VPN like [Wireguard](/serveex/securite/wireguard) instead. ::: :: -Dans les dossiers de Swag, créez le fichier `stats.subdomain.conf`. +In the Swag folders, create the `stats.subdomain.conf` file. ::alert{type="success"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip for those who dislike the terminal:__ +you can use [File Browser](/serveex/files/file-browser) to browse and edit your files instead of using terminal commands. :: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/stats.subdomain.conf ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous : +Enter insert mode with `i` and paste the following config: ```nginx ## Version 2023/12/19 @@ -139,43 +140,48 @@ server { } } ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau d'Uptime-Kuma : +Press `Esc`, then save and exit with `:x` and `Enter`. + +In Dockge, edit the SWAG compose and add the Uptime-Kuma network: ```yaml services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Link container to custom network # ... - - uptime-kuma # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + - uptime-kuma # Name of the declared network + +networks: # Define custom network # ... - uptime-kuma: # Nom du réseau déclaré dans la stack - name: uptime-kuma_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + uptime-kuma: # Name of the declared network + name: uptime-kuma_default # Actual name of the external network + external: true # Specifies it's an external network ``` -Relancez la stack et patientez le temps que SWAG soit complètement opérationnel. +Restart the stack and wait until SWAG is fully operational. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de Uptime-Kuma est `uptime-kuma_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- Here we assume that the network name of Uptime-Kuma is `uptime-kuma_default`. You can verify the connection by visiting SWAG's dashboard at `http://yourserverip:81`. ::: :: -Et voilà, vous avez exposé Uptime-Kuma, vous pouvez y accéder en tapant `https://stats.mondomaine.fr` +That's it! Uptime-Kuma is now exposed, and you can access it via `https://stats.mydomain.com`. ::alert{type="success"} -✨ __Astuce :__ +✨ __Tip:__

-Vous pouvez protéger cette app avec Authentik en ouvrant `stats.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). Si vous souhaitez que la page publique de stats soit joignable par tout le monde sans authentification: +You can protect this app with Authentik by opening `stats.subdomain.conf` and uncommenting the lines: +`include /config/nginx/authentik-server.conf;` +and +`include /config/nginx/authentik-location.conf;`. +Don’t forget to [create an application and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). If you want the public stats page to be accessible without authentication: -- Editez le fournisseur d'Uptime-Kuma -- Dans *paramètres avancés du protocole > chemins authentifiés*, saisissez : +- Edit the Uptime-Kuma provider +- In *Advanced Protocol Settings > Authenticated Paths*, enter: ```properties ^/$ @@ -188,11 +194,10 @@ Vous pouvez protéger cette app avec Authentik en ouvrant `stats.subodmain.conf` ^/metrics :: -Déployez à nouveau la stack. - -Uptime-Kuma sera ainsi joignable directement depuis internet en tapant `https://stats.mondomaine.fr`. +Redeploy the stack. +Uptime-Kuma will then be publicly reachable via `https://stats.mydomain.com`. ::alert{type="success"} -✨ __Astuce :__ Si vous utilisez Authentik et que vous ne craignez pas d'exposer votre panneau admin à votre réseau local, vous pouvez désactiver l'authentification d'Uptime-Kuma via les paramètres, afin de ne garder que celle d'Authentik. -:: \ No newline at end of file +✨ __Tip:__ If you're using Authentik and don't mind exposing the admin panel to your local network, you can disable Uptime-Kuma's native authentication in its settings and rely solely on Authentik. +:: diff --git a/content/3.serveex/4.monitoring/2.dozzle.md b/content/3.serveex/4.monitoring/2.dozzle.md index 689e99f..9f5eaf5 100644 --- a/content/3.serveex/4.monitoring/2.dozzle.md +++ b/content/3.serveex/4.monitoring/2.dozzle.md @@ -8,18 +8,18 @@ main: # Dozzle ::alert{type="info"} -🎯 __Objectifs :__ -- Installer Dozzle -- Exposer Dozzle avec Swag +🎯 __Goals:__ +- Install Dozzle +- Expose Dozzle with Swag :: -[Dozzle](https://dozzle.dev/) est un conteneur permettant d'accéder au logs de vos conteneurs et de les afficher en temps réel de via une interface user-friendly. C'est une manière simple de naviguer entre les logs et de retrouver des informations dans l'historique. +[Dozzle](https://dozzle.dev/) is a container that lets you access logs from your other containers and display them in real time through a user-friendly interface. It's a simple way to browse logs and retrieve information from the history. ![Dozzle](https://blog.unixhost.pro/wp-content/uploads/2023/03/image-5.png) ## Installation --- -Structure des dossiers +Folder structure ```console root @@ -28,7 +28,7 @@ root └── data ``` -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `dozzle` puis copiez collez ceci : +Open Dockge, click on `compose`, name the stack `dozzle`, then copy and paste the following: ```yaml --- @@ -49,7 +49,7 @@ services: ``` ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add the watchtower label to each container to automate updates ```yaml services: @@ -59,68 +59,67 @@ services: - com.centurylinklabs.watchtower.enable=true :: -Renseignez le `.env` votre nom de domaine, par exemple +Fill in your domain name in the `.env` file, for example: ```properties -DOMAIN=dozzle.mondomaine.fr +DOMAIN=dozzle.mydomain.com ``` -Déployez le conteneur et rendez-vous sur `http://ipduserveur:9135`. Et voilà, votre instance Dozzle en webui est disponible ! +Deploy the container and go to `http://yourserverip:9135`. Voilà, your Dozzle web UI is up and running! -## Exposer Dozzle avec Swag +## Exposing Dozzle with Swag --- ::alert{type="warning"} :::list{type="warning"} -- Dozzle n'utilise pas d'authentification multifacteur. Exposer Dozzle 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/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Dozzle does not use multi-factor authentication. Exposing Dozzle to the internet could compromise the connected machines. Only do this if you use a multi-factor authentication system like [Authentik](/serveex/securite/authentik/). Otherwise, do not expose it with SWAG and instead use a VPN like [Wireguard](/serveex/securite/wireguard). ::: :: -Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer Dozzle via Swag. +You may want to access Dozzle remotely and on all your devices. To do so, we’ll expose Dozzle via Swag. ::alert{type="info"} -📋 __Au préalable :__ +📋 __Before you begin:__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `dozzle.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), que que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +We assume you have created a subdomain like `dozzle.mydomain.com` in your [DNS zone](/generalites/dns) with a `CNAME` pointing to `mydomain.com` and that, [unless you're using Cloudflare Zero Trust](/serveex/securite/cloudflare), you’ve redirected port `443` from your router to port `443` on your server in your [NAT rules](/generalites/nat). :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Dozzle : +Go to Dockge and edit the SWAG compose file to add Dozzle’s network: ```yaml services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Connects the container to a custom network # ... - - dozzle # Nom du réseau déclaré dans la stack + - dozzle # Network name declared in the stack -networks: # Définit le réseau custom +networks: # Defines the custom network # ... - dozzle: # Nom du réseau déclaré dans la stack - name: dozzle_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + dozzle: # Network name declared in the stack + name: dozzle_default # Actual name of the external network + external: true # Indicates it's an externally defined network ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redeploy the stack by clicking “Deploy” and wait for SWAG to be fully operational. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de Dozzle est `dozzle_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- We assume the Dozzle network name is `dozzle_default`. You can verify the connection is working by visiting the SWAG dashboard at `http://yourserverip:81`. ::: :: - -Dans les dossiers de Swag, créez le fichier `dozzle.subdomain.conf`. +In the Swag folder, create the `dozzle.subdomain.conf` file. ::alert{type="success"} -✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip:__ You can use [File Browser](/serveex/files/file-browser) to browse and edit files instead of using terminal commands. :: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous : +Enter edit mode by pressing `i` and paste the configuration below: ```nginx ## Version 2023/12/19 @@ -173,10 +172,10 @@ server { } ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. +Press `Esc`, then save and exit by typing `:x` and pressing `Enter`. -Et voilà, vous avez exposé Dozzle ! +And there you go, Dozzle is now exposed! ::alert{type="success"} -✨ Vous pouvez protéger cette app avec Authentik en ouvrant `dozzle.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +✨ You can protect this app with Authentik by opening `dozzle.subdomain.conf` and removing the `#` in front of `include /config/nginx/authentik-server.conf;`{lang=nginx} and `include /config/nginx/authentik-location.conf;`{lang=nginx}. Don’t forget to [create an application and a provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). :: \ No newline at end of file diff --git a/content/3.serveex/4.monitoring/3.speedtest-tracker.md b/content/3.serveex/4.monitoring/3.speedtest-tracker.md index 1a74c7c..2df6b20 100644 --- a/content/3.serveex/4.monitoring/3.speedtest-tracker.md +++ b/content/3.serveex/4.monitoring/3.speedtest-tracker.md @@ -8,12 +8,12 @@ main: # Speedtest Tracker ::alert{type="info"} -🎯 __Objectifs :__ -- Installer Speedtest Tracker -- Exposer Speedtest Tracker avec Swag +🎯 **Objectives:** +- Install Speedtest Tracker +- Expose Speedtest Tracker with SWAG :: -[Speedtest Tracker](https://docs.speedtest-tracker.dev/) est un conteneur permettant de programmer des speedtest régulier afin d'historiser l'état de la connexion internet de votre serveur. +[Speedtest Tracker](https://docs.speedtest-tracker.dev/) is a container that allows you to schedule regular speed tests in order to log your server's internet connection status. ![speedtest-tracker](/img/serveex/speedtest-tracker.avif) @@ -21,11 +21,11 @@ main: --- ::alert{type="info"} :::list{type="info"} -- Nous utiliserons l'image docker maintenue par [LinuxServer.io](https://docs.linuxserver.io/images/docker-speedtest-tracker/) +- We will use the Docker image maintained by [LinuxServer.io](https://docs.linuxserver.io/images/docker-speedtest-tracker/) ::: :: -Structure des fichiers +File structure: ```console root @@ -35,15 +35,15 @@ root └── config ``` -Dans un terminal, générez une clé avec la commande suivante : +In a terminal, generate a key using the following command: ```shell echo -n 'base64:'; openssl rand -base64 32; ``` -Notez la clé. +Take note of the key. -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `speedtest-tracker` puis copiez collez ceci : +Open Dockge, click on `compose`, name the stack `speedtest-tracker`, then paste the following: ```yaml --- @@ -65,51 +65,50 @@ services: - /docker/speedtest-tracker/data/config:/config ``` -Trouvez votre `PUID` et votre `GUID` en tapant la commande suivante : +Find your `PUID` and `GUID` by running the following command: ```shell -id nomdutilisateur +id yourusername ``` -Dans `.env` renseignez la variable `API_KEY` avec la clé que vous avez générée et un planning de test au format cron, ainsi que vos `PUID` et `GUID`, par exemple : +In the `.env` file, set the variable `API_KEY` with the key you generated and add a cron-style test schedule, as well as your `PUID` and `GUID`, for example: ```properties -SCHEDULE=15 */6 * * * # toutes les 6h -KEY=base64:zihejehkj8_nzhY/OjeieR= # votre clé +SCHEDULE=15 */6 * * * # every 6 hours +KEY=base64:zihejehkj8_nzhY/OjeieR= # your key PUID=1000 GUID=1000 -PORT=3225 # port d'accès à la webui +PORT=3225 # port to access the web UI ``` ::alert{type="success"} -✨ __Astuce :__ vous pouvez configurer d'autres variables d'environnements en consultant la [documentation officielle](https://docs.speedtest-tracker.dev/getting-started/environment-variables). +✨ **Tip:** You can configure additional environment variables by referring to the [official documentation](https://docs.speedtest-tracker.dev/getting-started/environment-variables). :: -Déployez le conteneur et rendez-vous sur http://ipduserveur:3225. Connectez vous avec le compte `admin@exemple.com` et le mot de passe `password`. N'oubliez pas de changer votre id et votre mot de apsse une fois connecté ! +Deploy the container and go to `http://yourserverip:3225`. Log in with the account `admin@exemple.com` and the password `password`. Don’t forget to change your ID and password once logged in! - -## Exposer Speedtest Tracker +## Expose Speedtest Tracker --- ::alert{type="info"} -📋 __Prérequis :__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `speedtest.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +📋 **Prerequisites:** +We assume that you've already created a subdomain like `speedtest.yourdomain.com` in your [DNS zone](/generalites/dns) with a `CNAME` pointing to `yourdomain.com`, and [unless you’re using Cloudflare Zero Trust](/serveex/securite/cloudflare), you've also forwarded port `443` from your router to port `443` of your server in your [NAT rules](/generalites/nat). :: -Il s'agit maintenant d'exposer Speedtest Tracker sur internet, afin de pouvoir y accéder sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configuré un sous domaine `speedtest.mondomaine.fr` dans votre zone DNS dont le `CNAME` pointe sur `mondomaine.fr`. +Now we want to expose Speedtest Tracker to the internet so you can access it remotely. We assume you've set up the DNS `CNAME` for `speedtest.yourdomain.com` pointing to `yourdomain.com`. ::alert{type="warning"} :::list{type="warning"} -- Speedtest Tracker n'utilise pas d'authentification multifacteur. Exposer Speedtest Tracker 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/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Speedtest Tracker does not use multi-factor authentication. Exposing it on the internet could compromise connected devices. Do so only if you use a multi-factor system like [Authentik](/serveex/securite/authentik/). Otherwise, avoid using SWAG and prefer a VPN like [Wireguard](/serveex/securite/wireguard). ::: :: -Ouvrez le fichier speedtest.subdomain.conf : +Open the `speedtest.subdomain.conf` file: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf ``` -Paramétrez le comme tel : +Configure it like this: ```nginx ## Version 2023/12/19 @@ -118,7 +117,6 @@ server { listen 443 ssl; listen [::]:443 ssl; - # indique que le sous-domaine doit être dirigé server_name speedtest.*; include /config/nginx/ssl.conf; @@ -127,80 +125,72 @@ server { #if ($lan-ip = yes) { set $geo-whitelist yes; } #if ($geo-whitelist = no) { return 404; } - # indique que les pays dans la blacklist sont intedits if ($geo-blacklist = no) { return 404; } - # enable for ldap auth (requires ldap-location.conf in the location block) + # Authentication options (uncomment as needed) #include /config/nginx/ldap-server.conf; - - # enable for Authelia (requires authelia-location.conf in the location block) #include /config/nginx/authelia-server.conf; - - # enable for Authentik (requires authentik-location.conf in the location block) #include /config/nginx/authentik-server.conf; location / { - # enable the next two lines for http auth + # Basic auth #auth_basic "Restricted"; #auth_basic_user_file /config/nginx/.htpasswd; - # enable for ldap auth (requires ldap-server.conf in the server block) + # Per-location authentication #include /config/nginx/ldap-location.conf; - - # enable for Authelia (requires authelia-server.conf in the server block) #include /config/nginx/authelia-location.conf; - - # enable for Authentik (requires authentik-server.conf in the server block) #include /config/nginx/authentik-location.conf; include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; - set $upstream_app speedtest-tracker; # Nom du conteneur - set $upstream_port 3225; # Port interne conteneur + set $upstream_app speedtest-tracker; + set $upstream_port 3225; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Sauvegardez et quittez. La configuration va se mettre à jour en quelques secondes. +Save and exit. The configuration will update in a few seconds. ::alert{type="info"} :::list{type="info"} -- Par défaut, swag ne connait pas le nom "speedtest-tracker". Pour qu'il puisse y accéder, vous devez rajouter le réseau de Speedtest Tracker dans le `compose.yml` de SWAG. +- By default, SWAG doesn’t know the name "speedtest-tracker". To allow access, you need to add Speedtest Tracker’s network to SWAG’s `compose.yml`. ::: :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Speedtest Tracker : +Go to Dockge, and edit SWAG’s compose to include Speedtest Tracker’s network: ```yaml services: swag: - container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom - # ... - - speedtest-tracker # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + container_name: # ... + # ... + networks: + # ... + - speedtest-tracker + +networks: # ... - speedtest-tracker: # Nom du réseau déclaré dans la stack - name: speedtest-tracker_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + speedtest-tracker: + name: speedtest-tracker_default + external: true ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Restart the stack by clicking "Deploy" and wait for SWAG to be fully up. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de Speedtest Tracker est `speedtest-tracker_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- This assumes the Speedtest Tracker network is named `speedtest-tracker_default`. You can verify the connection by visiting SWAG’s dashboard at `http://yourserverip:81`. ::: :: -Patientez puis tapez `https://speedtest.mondomaine.fr` dans votre navigateur, vous devriez être redirigé vers speedtest-tracker. Vous pouvez vérifier le statut du service via le dashboard (depuis votre réseau local, http://ipdevotreserveur:81). +Wait a moment, then visit `https://speedtest.yourdomain.com` in your browser — you should be redirected to Speedtest Tracker. You can check service status via the dashboard (`http://yourserverip:81` from the local network). ::alert{type="success"} -✨ Vous pouvez protéger cette app avec Authentik en ouvrant `speedtest.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). -:: +✨ You can protect this app with Authentik by opening `speedtest.subdomain.conf` and uncommenting +`include /config/nginx/authentik-server.conf;` and `include /config/nginx/authentik-location.conf;`. +Don’t forget to [create an application and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +:: \ No newline at end of file diff --git a/content/3.serveex/4.monitoring/4.beszel.md b/content/3.serveex/4.monitoring/4.beszel.md index 16a1eec..e369928 100644 --- a/content/3.serveex/4.monitoring/4.beszel.md +++ b/content/3.serveex/4.monitoring/4.beszel.md @@ -1,4 +1,5 @@ ---- + +--- navigation: true title: Beszel main: @@ -8,23 +9,23 @@ main: # Beszel ::alert{type="info"} -🎯 __Objectifs :__ -- Installer Beszel -- Monitorer le serveur local -- Monitorer un serveur distant -- Exposer Beszel avec Swag +🎯 __Objectives:__ +- Install Beszel +- Monitor the local server +- Monitor a remote server +- Expose Beszel with Swag :: -[Beszel](https://beszel.dev/) est un conteneur permettant d'accéder aux informations du hardware de vos serveurs en temps réel et de les historiser. Activité CPU, usages des disques, températures, RAM, vous ne raterez rien de l'état de votre serveur. Beszel permet également de paramétrer des notifications et alertes en cas de dépassement de limites que vous avez choisies. +[Beszel](https://beszel.dev/) is a container that gives you real-time access to hardware information from your servers and allows historical tracking. CPU activity, disk usage, temperatures, RAM—nothing escapes your monitoring. Beszel also lets you configure notifications and alerts when your predefined thresholds are exceeded. -Beszel dispose d'un hub avec une webui et d'un agent qui permet de collecter les données depuis votre serveur ou sur un serveur distant. +Beszel includes a hub with a web UI and an agent that collects data from your server or a remote server. ![Beszel](/img/serveex/beszel.png) ## Installation --- -Structure des dossiers +Folder structure ```console root @@ -32,10 +33,9 @@ root └── beszel ├── data └── socket - ``` -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `beszel` puis copiez collez ceci : +Open Dockge, click `compose`, name the stack `beszel`, and paste the following: ```yaml --- @@ -65,52 +65,53 @@ services: ``` ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add the Watchtower label to each container to automate updates. - ```yaml - services: - beszel: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +```yaml +services: + beszel: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Renseignez le `.env`, par exemple : +Fill out the `.env` file, for example: ```properties -PORT=8090 # port de la webui -KEY= # clé privée à récupérer dans Beszel lors que vous ajoutez un système +PORT=8090 # web UI port +KEY= # private key to retrieve from Beszel when adding a system ``` -Pour la valeur `KEY`, il faudra lancer Beszel une première fois pour la saisir. -Déployez le conteneur et rendez-vous sur `http://ipduserveur:8090`. Et voilà, votre instance Beszel en webui est disponible ! +For the `KEY` value, you'll need to launch Beszel once to get it. + +Deploy the container and go to `http://yourserverip:8090`. Your Beszel web UI is now accessible! ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu. +- __If it fails:__ check your firewall rules. ::: :: -### Ajouter les informations du serveur local +### Add local server information -Maintenant que la webui est accessible, vous devez faire remonter les informations du serveur dedans. Pour cela, il vous suffit d'ajouter une machine dans la webui et de paraméter comme ceci : +Now that the web UI is accessible, you need to push local server information into it. Just add a machine via the web UI and configure it like this: ![Beszel add system](/img/serveex/beszel-add.png) -Note la clé privée et validez. Renseignez la clé dans votre `.env` dans dockge, et redéployez la stack. Lorsque vous retournerez sur la webui, votre serveur apparaitra : +Note the private key and confirm. Enter the key in your `.env` file in Dockge and redeploy the stack. Once done, your server will appear in the web UI: -![Beszel add system](/img/serveex/beszel-system.png) +![Beszel system](/img/serveex/beszel-system.png) +### Add a remote server -### Ajouter les informations d'un serveur distant +You can also monitor a remote server. To do so, run the agent on the remote server. Add a new machine in Beszel and fill in: -Vous pouvez également monitorer un serveur distant. Pour cela vous avez juste à faire tourner l'agent sur le serveur distant. Pour cela, ajoutez une nouvelle machine dans Beszel et renseignez : +- The name displayed for your remote server +- The IP address or domain name of the remote server +- The listening port (e.g., `45876`) -- Le nom qui s'affichera dans Beszel pour votre serveur distant -- L'adresse IP ou le nom de domaine de votre serveur distant -- Le port d'écoute de votre serveur distant (dans notre exemple cela sera `45876`) - -Beszel vous proposera de copier directement le `compose.yaml` à déployer sur votre serveur distant, ou vous pouvez le configurer comme suit : +Beszel will suggest a `compose.yaml` to deploy on the remote server, or you can use: ```yaml --- @@ -127,73 +128,75 @@ services: KEY: ${KEY} ``` -Et dans le `.env` : +And in `.env`: ```properties -PORT=45876 # port de communication entre votre hub et l'agent à distance -KEY= # clé privée à récupérer dans Beszel lors que vous ajoutez un système +PORT=45876 # communication port between hub and remote agent +KEY= # private key from Beszel when adding the system ``` -Déployez la stack sur votre serveur distant. Les informations du serveur distant remontront au bout de quelques secondes dans votre webui. + +Deploy the stack on the remote server. Data will begin flowing into the web UI after a few seconds. ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu. +- __If it fails:__ check your firewall rules. ::: :: -## Exposer Beszel avec Swag +## Expose Beszel with Swag --- ::alert{type="warning"} :::list{type="warning"} -- Beszel n'utilise pas d'authentification multifacteur. Exposer Beszel 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/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Beszel does not support multi-factor authentication. Exposing it on the internet could compromise connected machines. Only do this if you're using a system like [Authentik](/serveex/securite/authentik/). Otherwise, do not expose with SWAG—use a VPN like [Wireguard](/serveex/securite/wireguard) instead. ::: :: -Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer Beszel via Swag. +If you want to access Beszel remotely from all your devices, expose it using Swag. ::alert{type="info"} -📋 __Au préalable :__ +📋 __Prerequisite:__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `beszel.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), que que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +You must have created a DNS subdomain like `beszel.mydomain.com` with a `CNAME` pointing to `mydomain.com`, and—unless you're using Cloudflare Zero Trust—you must have forwarded port `443` on your router to your server’s `443` port via [NAT rules](/generalites/nat). :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Beszel : +In Dockge, edit Swag's compose file and add Beszel’s network: ```yaml services: swag: container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom - # ... - - beszel # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + # ... + networks: + # ... + - beszel # network declared in the stack + +networks: # ... - beszel: # Nom du réseau déclaré dans la stack - name: beszel_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + beszel: + name: beszel_default # actual external network name + external: true ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redeploy the stack and wait for Swag to become fully operational. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de beszel est `beszel_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- We assume the network name is `beszel_default`. You can check connectivity by visiting Swag's dashboard at `http://yourserverip:81`. ::: :: -Dans les dossiers de Swag, créez le fichier `beszel.subdomain.conf`. +In Swag’s config folders, create `beszel.subdomain.conf`. ::alert{type="success"} -✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip:__ Use [File Browser](/serveex/files/file-browser) to browse and edit files instead of terminal commands. :: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/beszel.subdomain.conf ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous : + +Press `i` to enter insert mode and paste: ```nginx ## Version 2023/12/19 @@ -212,27 +215,21 @@ server { #if ($geo-whitelist = no) { return 404; } if ($geo-blacklist = no) { return 404; } - # enable for ldap auth (requires ldap-location.conf in the location block) + # enable for ldap auth #include /config/nginx/ldap-server.conf; - # enable for Authelia (requires authelia-location.conf in the location block) + # enable for Authelia #include /config/nginx/authelia-server.conf; - # enable for Authentik (requires authentik-location.conf in the location block) + # enable for Authentik #include /config/nginx/authentik-server.conf; location / { - # enable the next two lines for http auth #auth_basic "Restricted"; #auth_basic_user_file /config/nginx/.htpasswd; - # enable for ldap auth (requires ldap-server.conf in the server block) #include /config/nginx/ldap-location.conf; - - # enable for Authelia (requires authelia-server.conf in the server block) #include /config/nginx/authelia-location.conf; - - # enable for Authentik (requires authentik-server.conf in the server block) #include /config/nginx/authentik-location.conf; include /config/nginx/proxy.conf; @@ -241,15 +238,14 @@ server { set $upstream_port 8090; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. +Press `Esc`, type `:x`, and hit `Enter` to save and exit. -Et voilà, vous avez exposé Beszel ! +That’s it—Beszel is now exposed! ::alert{type="success"} -✨ Vous pouvez protéger cette app avec Authentik en ouvrant `beszel.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). -:: \ No newline at end of file +✨ You can protect this app with Authentik by opening `beszel.subdomain.conf` and removing the `#` in front of `include /config/nginx/authentik-server.conf;` and `include /config/nginx/authentik-location.conf;`. Don’t forget to [create an application and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +:: diff --git a/content/3.serveex/4.monitoring/5.upsnap.md b/content/3.serveex/4.monitoring/5.upsnap.md index 5af430d..16b8c6b 100644 --- a/content/3.serveex/4.monitoring/5.upsnap.md +++ b/content/3.serveex/4.monitoring/5.upsnap.md @@ -8,19 +8,19 @@ main: # UpSnap ::alert{type="info"} -🎯 __Objectifs :__ -- Installer UpSnap -- Exposer UpSnap avec Swag +🎯 __Goals:__ +- Install UpSnap +- Expose UpSnap with Swag :: -[UpSnap](https://github.com/seriousm4x/UpSnap) est un conteneur permettant d'allumer, éteindre, ou mettre en veille vos machines à distance. Il utilise essentiellement le systeme de Wake-On-Lan (WoL) par le réseau et dispose d'autres fonctions avancées. +[UpSnap](https://github.com/seriousm4x/UpSnap) is a container that allows you to remotely power on, shut down, or put your machines to sleep. It mainly uses Wake-On-Lan (WoL) over the network and offers advanced features. ![Beszel](/img/serveex/upsnap.webp) ## Installation --- -Structure des dossiers +Folder structure ```console root @@ -29,7 +29,7 @@ root └── data ``` -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `upsnap` puis copiez collez ceci : +Open Dockge, click on `compose`, name the stack `upsnap`, then copy and paste the following: ```yaml --- @@ -55,7 +55,7 @@ services: ``` ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add the watchtower label to each container to automate updates ```yaml services: @@ -65,74 +65,74 @@ services: - com.centurylinklabs.watchtower.enable=true :: -Renseignez le `.env`, par exemple : +Fill in the `.env`, for example: ```properties -RANGE=192.168.1.0/24 # scan toutes les machines sur le réseau local ayant une adresse IP comprise entre 192.168.0.1 et 192.168.1.255 -DNS=192.168.1.1 # IP du dns à utiliser pour résoudre les noms de domaines, ici dans l'exemple c'est généralement l'IP du routeur +RANGE=192.168.1.0/24 # scans all devices on the local network with an IP between 192.168.0.1 and 192.168.1.255 +DNS=192.168.1.1 # DNS IP to resolve domain names, typically your router’s IP ``` -Déployez le conteneur et rendez-vous sur `http://ipduserveur:8095`. Vous n'avez plus qu'à suivre les instructions pour créer votre compte ! +Deploy the container and go to `http://yourserverip:8095`. Just follow the steps to create your account! ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu. +- __If it fails:__ check your firewall rules. ::: :: -## Exposer UpSnap avec Swag +## Exposing UpSnap with Swag --- ::alert{type="warning"} :::list{type="warning"} -- UpSnap n'utilise pas d'authentification multifacteur. Exposer UpSnap sur internet pourrait compromettre les machines auxquel il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- UpSnap does not support multi-factor authentication. Exposing it on the internet could compromise connected machines. Do this only if you're using a multi-factor authentication system like [Authentik](/serveex/securite/authentik/). Otherwise, avoid exposing it with SWAG and use a VPN like [Wireguard](/serveex/securite/wireguard) instead. ::: :: -Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer UpSnap via Swag. +You may want to access it remotely from all your devices. To do so, we'll expose UpSnap via Swag. ::alert{type="info"} -📋 __Au préalable :__ +📋 __Beforehand:__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `upsnap.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), que que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/generalites/nat). +We assume you've created a subdomain in your [DNS zone](/generalites/dns), such as `upsnap.yourdomain.com` with a `CNAME` to `yourdomain.com`. Also, unless you're using Cloudflare Zero Trust, you should have already forwarded port `443` from your router to port `443` on your server in your [NAT rules](/generalites/nat). :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de UpSnap : +Go to Dockge, and edit the SWAG compose by adding the UpSnap network: ```yaml services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Connects the container to the custom network # ... - - upsnap # Nom du réseau déclaré dans la stack + - upsnap # Network name declared in the stack -networks: # Définit le réseau custom +networks: # Defines the custom network # ... - upsnap: # Nom du réseau déclaré dans la stack - name: upsnap_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + upsnap: # Network name declared in the stack + name: upsnap_default # Actual name of the external network + external: true # Indicates it's an external network ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Restart the stack by clicking "deploy" and wait for SWAG to be fully operational. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de upsnap est `upsnap_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- Here we assume the network name for upsnap is `upsnap_default`. You can check the connection in the SWAG dashboard at `http://yourserverip:81`. ::: :: -Dans les dossiers de Swag, créez le fichier `upsnap.subdomain.conf`. +In the Swag folders, create the file `upsnap.subdomain.conf`. ::alert{type="success"} -✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Tip:__ You can use [File Browser](/serveex/files/file-browser) to navigate your files and edit documents instead of using terminal commands. :: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf ``` -Entrez en modification avec la touche `i` et collez la configuration ci-dessous : +Enter edit mode by pressing `i`, and paste the following configuration: ```nginx ## Version 2023/12/19 @@ -185,10 +185,10 @@ server { } ``` -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`. +Press `Escape`, then save and exit by typing `:x` and pressing `Enter`. -Et voilà, vous avez exposé UpSnap ! +And that’s it — you’ve exposed UpSnap! ::alert{type="success"} -✨ Vous pouvez protéger cette app avec Authentik en ouvrant `upsnap.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). -:: \ No newline at end of file +✨ You can protect this app with Authentik by opening `upsnap.subdomain.conf` and removing the `#` in front of `include /config/nginx/authentik-server.conf;`{lang=nginx} and `include /config/nginx/authentik-location.conf;`{lang=nginx}. Don’t forget to [create an application and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +:: diff --git a/content/3.serveex/5.media/1.plex.md b/content/3.serveex/5.media/1.plex.md index 3cd0d70..3f6470d 100644 --- a/content/3.serveex/5.media/1.plex.md +++ b/content/3.serveex/5.media/1.plex.md @@ -8,32 +8,32 @@ main: # Plex ::alert{type="info"} -🎯 __Objectifs :__ -- Installer Plex -- Installer Tautulli -- Accéder aux media depuis l'exterieur +🎯 **Objectives:** +- Install Plex +- Install Tautulli +- Access media from outside your network :: -[Plex](https://www.plex.tv/fr/) est une plateforme de streaming vidéo déployable chez vous, pour manager votre bibliothèque de films ou de série, et les lire en locale ou à distance. Plex dispose d'applications TV, Android, iOS, Window et Mac OS, permettant la lecture de vos bibliothèques, à la Netflix. +[Plex](https://www.plex.tv/fr/) is a self-hosted video streaming platform for managing your movie or TV show library and playing them locally or remotely. Plex has apps for TV, Android, iOS, Windows, and macOS, allowing you to stream your library just like Netflix. -Avec le *plexpass*, vous pouvez également organsier et lire vos contenus audio, à la spotify, la différence étant que c'est bien votre contenu qui est hébergé et lu depuis chez vous. +With *Plex Pass*, you can also organize and play your music content similar to Spotify, the difference being that it’s your content, hosted and streamed from your server. ![picture](/img/serveex/plex.png) -On installera également [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), un outil qui permet d'avoir des stats poussées sur Plex. On utilisera, comme dès qu'on le peut, les images de linuxserver.io. +We'll also install [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), a tool that provides detailed stats about Plex. As always, we'll use linuxserver.io images where possible. -- [Plus d'info sur le conteneur Plex](https://docs.linuxserver.io/images/docker-plex) -- [Plus d'info sur le conteneur Tautulli](https://docs.linuxserver.io/images/docker-tautulli/) +- [More info on the Plex container](https://docs.linuxserver.io/images/docker-plex) +- [More info on the Tautulli container](https://docs.linuxserver.io/images/docker-tautulli/) ::alert{type="info"} :::list{type="info"} -- Vous serez amenés à creer un compte *Plex.tv*. Vous n'avez pas besoin d'exposer votre service Plex, il sera accessible directement par la plateforme. Votre serveur Plex sera gérable directement depuis votre compte. +- You’ll need to create a *Plex.tv* account. You don’t need to expose your Plex service; it will be accessible through the platform. Your Plex server will be manageable directly from your account. ::: :: -## Installer Plex +## Install Plex --- -Structure des dossiers : +Folder structure: ```console root ├── docker @@ -50,14 +50,14 @@ root └── library ``` -Créez les dossiers `movies`, `tvseries` et `library` dans /media : +Create the `movies`, `tvseries`, and `library` folders in `/media`: ```sh mkdir -p /media/movies /media/library /media/tvseries ``` -Ouvrez Dockge dans votre navigeateur, et cliquez sur `compose`. -Nommez la stack `plex` et ajoutez la config suivante : +Open Dockge in your browser and click `compose`. +Name the stack `plex` and add the following config: ```yaml --- @@ -80,7 +80,7 @@ services: mem_reservation: 2048m devices: - /dev/dri:/dev/dri - + tautulli: image: lscr.io/linuxserver/tautulli:latest container_name: tautulli @@ -96,115 +96,119 @@ services: ``` ::alert{type="success"} -✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ Add the Watchtower label to each container to automate updates: - ```yaml - services: - plex: - #... - labels: - - com.centurylinklabs.watchtower.enable=true - - tautulli: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +```yaml +services: + plex: + #... + labels: + - com.centurylinklabs.watchtower.enable=true + + tautulli: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Trouvez votre PUID et votre GUID en tapant la commande suivante : +Find your PUID and GUID by running: ```shell -id nomdutilisateur +id username ``` -Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple : + +Fill in your `.env` file with the retrieved values, for example: ```properties PUID=1000 GUID=1000 ``` -Déployez la stack. -L'interface locale est disponible via `http://ipduserveur:32400/web/index.html`. L'interface de Tautulli est joignable via `http://ipduserveur:8181`. +Deploy the stack. + +The local interface is available at `http://yourserverip:32400/web/index.html`. +Tautulli is accessible at `http://yourserverip:8181`. ::alert{type="warning"} :::list{type="warning"} -- Vous devez impérativement être sur votre réseau local au moment du premier setup de Plex, sans quoi l'url vous renverra sur votre compte Plex sans detecter votre serveur. Un VPN ne vous sauvera pas. Si vous ne pouvez pas faire autrement, [vous pouvez gérer l'installation à distance via un tunnel SSH](https://support.plex.tv/articles/200288586-installation/#toc-2). +- You must be on your local network during Plex's initial setup. Otherwise, the URL will redirect to your Plex account without detecting your server. A VPN won't help. If you have no choice, [you can handle the setup remotely via SSH tunnel](https://support.plex.tv/articles/200288586-installation/#toc-2). ::: :: -## Paramétrer Plex +## Configure Plex --- -Plex propose tout une gamme de film/série gratuitement. Après avoir créé votre compte, et pour ne pas polluer votre bibliothèque, je vous conseille de tout désactiver dans la section _Services en ligne_. +Plex offers a range of free movies/shows. After creating your account, I recommend disabling everything in the _Online Services_ section to keep your library clean. -Ensuite rendez-vous dans la section _Accès à distance_ et choisissez un port manuellement (ici cela sera `1234`). Il est préférable de ne pas garder le port d'origine. +Then go to the _Remote Access_ section and manually select a port (we’ll use `1234`). It's best not to use the default port. ![picture](/img/serveex/plex-port.png) -- Sur votre routeur, redirigez le port `TCP` source `1234` vers le port `32400`, vers l'IP de votre serveur via [les règles NAT](/generalites/nat). -- Une fois fait, retournez dans Plex afin de vérifier que la connexion est bien opérationnelle +- On your router, forward TCP port `1234` to port `32400` for your server’s IP using [NAT rules](/generalites/nat). +- Once done, return to Plex to verify that remote access is functional. ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu et autorisez le port `32400` de votre serveur. +- **If it fails:** check your firewall rules and allow port `32400` on your server. ::: :: -- Si vous avez un abonnement PlexPass et un GPU ou iGPU, activez *l'accélération matérielle* dans la section _Transcodeur_. -- Dans la section _Réglages/bibliothèque_, cochez _Analyser ma bibliothèque automatiquement_. -- Dans la section _Gérer/bibliothèque_ modifiez ou ajouter les bibliothèque, et choisissez le répertoire `/media/movies` pour les films et `/media/tvseries` pour les séries. +- If you have PlexPass and a GPU or iGPU, enable *hardware acceleration* in the _Transcoder_ section. +- In _Settings > Library_, enable _Update my library automatically_. +- In _Manage > Library_, add or edit libraries and point to `/media/movies` for movies and `/media/tvseries` for series. -Et voilà, vous avez un Plex fonctionnel ! +And that’s it! You now have a working Plex server! -Vous n'avez plus qu'a remplir les dossiers `/media/movies` et `/media/tvseries` sur votre serveur de vos média favoris. Vous pourrez alors télécharger l'application Plex sur vos appareils et lire vos média favoris, chez vous ou à distance ! +Simply add your media to `/media/movies` and `/media/tvseries` on your server. You can then install the Plex app on your devices and watch your favorite content locally or remotely. ::alert{type="info"} :::list{type="info"} -- Si pour stocker vos média vous utilisez un disque réseau (par exemple un stockage sur un NAS ou un disque dur externe branché ailleurs sur le réseau), veuillez consulter la section [montage samba](/generalites/samba) afin que Plex puisse y accéder. +- If your media is stored on a network disk (e.g. NAS or external hard drive over the network), refer to the [Samba mount guide](/generalites/samba) so Plex can access it. ::: :: -## Exposer Tautulli avec Swag +## Expose Tautulli with Swag --- -Plex n'a pas besoin d'etre exposé, étant joignable directement depuis votre compte Plex sur plex.tv. +You don’t need to expose Plex, as it's accessible via your Plex account on plex.tv. + +However, you may want to expose Tautulli so you can view stats from a simple URL when you're not home. -En revanche, vous pouvez désirer exposer Tautulli, afin d'accéder aux stats même si vous n'est pas chez vous, depuis une simple url. ::alert{type="info"} :::list{type="info"} -- Nous partons du principe que vous avez le sous-domaine `tautulli.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/generalites/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/generalites/nat). +- We assume you have the subdomain `tautulli.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/generalites/dns). And of course, [unless you use Cloudflare Zero Trust](/serveex/securite/cloudflare), your box's port `443` must be forwarded to your server's port `443` in [NAT rules](/generalites/nat). ::: :: - -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Tautulli : +Go to Dockge and edit SWAG’s compose file by adding Tautulli’s network: ```yaml services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Attach container to custom network # ... - - tautulli # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + - tautulli # Name of the declared network + +networks: # Define the custom network # ... - tautulli: # Nom du réseau déclaré dans la stack - name: tautulli_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + tautulli: # Declared network name + name: tautulli_default # Actual external network name + external: true # Marks it as externally defined ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redeploy the stack and wait for SWAG to be fully operational. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de Tautulli est `tautulli_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +- Here we assume the Tautulli network name is `tautulli_default`. You can check the connection by visiting SWAG’s dashboard at `http://yourserverip:81`. ::: :: -Copiez en renommant le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf` et éditez le : +Copy and rename the file `tautulli.subdomain.conf.sample` to `tautulli.subdomain.conf`, then edit it: ::alert{type="success"} -✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ **Tip:** Use [File Browser](/serveex/files/file-browser) to navigate and edit files instead of using terminal commands. :: ```shell @@ -212,7 +216,7 @@ sudo cp /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /do sudo vi /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf ``` -Et vérifiez que la configuration correspond bien à ceci, sinon éditez le fichier en appuyant sur `i`: +Ensure the configuration matches the following. If needed, press `i` to edit: ```nginx ## Version 2023/05/31 @@ -307,4 +311,18 @@ Patientez quelques minutes puis tapez dans votre navigateur `http://tautulli.mon ::: :: -Et voilà ! \ No newline at end of file +::alert{type="success"} +✨ You can protect this app with Authentik by removing the `#` before `include /config/nginx/authentik-server.conf;` and `include /config/nginx/authentik-location.conf;`. Don’t forget to [create an application and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +:: + +Press `Esc` then save and quit by typing `:x` + +Wait a few minutes, then open `http://tautulli.mydomain.com` in your browser. + +::alert{type="danger"} +:::list{type="danger"} +- **If it fails:** check your firewall rules. +::: +:: + +And you're done! \ No newline at end of file diff --git a/content/3.serveex/5.media/2.qbittorrent.md b/content/3.serveex/5.media/2.qbittorrent.md index 3e6aa1b..90a7686 100644 --- a/content/3.serveex/5.media/2.qbittorrent.md +++ b/content/3.serveex/5.media/2.qbittorrent.md @@ -1,4 +1,5 @@ ---- + +--- navigation: true title: Qbittorrent main: @@ -8,28 +9,28 @@ main: # Qbittorrent ::alert{type="info"} -🎯 __Objectifs :__ -- Installer et configurer Qbittorrent -- Etre relié au réseau bittorent en toute sécurité avec Gluetun et Proton VPN +🎯 __Goals:__ +- Install and configure Qbittorrent +- Securely connect to the BitTorrent network using Gluetun and Proton VPN :: ![Picture](https://github.com/VueTorrent/VueTorrent/blob/master/public/screenshots/screenshot-desktop-dark-mode.jpeg?raw=true) -Afin de téléchargez vos media favoris en toute sécurité, nous allons monter un système à base de : +To safely download your favorite media, we'll build a system using: -- [Qbittorent](https://github.com/linuxserver/docker-qbittorrent) comme logiciel de téléchargement bittorent -- [Proton VPN Plus](https://protonvpn.com/torrenting), VPN pour sécuriser vos échanges, auquel vous devez souscrire (il y a de nombreux codes promo) pour accéder au protocole Bittorent, mais vous pouvez également en choisir un autre, à condition qu'il propose le protocole bittorent. +- [Qbittorrent](https://github.com/linuxserver/docker-qbittorrent) as the BitTorrent client +- [Proton VPN Plus](https://protonvpn.com/torrenting), a VPN to secure your traffic. You need a subscription (promos available) to access the BitTorrent protocol. You can also use another VPN as long as it supports BitTorrent. - [Gluetun](https://github.com/qdm12/gluetun) -- [Qbittorrent port update](https://codeberg.org/TechnoSam/qbittorrent-gluetun-port-update) pour mettre automatiquement à jour le port de votre VPN (qui change régulièrement). -- Et le mode [vuetorrent](https://github.com/gabe565/linuxserver-mod-vuetorrent) pour une interface moderne et intuitive. +- [Qbittorrent port update](https://codeberg.org/TechnoSam/qbittorrent-gluetun-port-update) to automatically update the VPN port (which changes regularly). +- The [VueTorrent](https://github.com/gabe565/linuxserver-mod-vuetorrent) mod for a modern and intuitive UI. -Nous monterons ici le système ci-dessous : +Here’s the system we’ll set up: ![Picture](/img/serveex/qbit.svg) ## Configuration --- -Structure des dossiers +Folder structure ```console root @@ -41,22 +42,22 @@ root │ ├── compose.yaml │ └── .env │ -└── media #relié à plex et Qbittorrent - ├── downloads #vos téléchargements génériques, à selectionner dans les parametres - ├── movies #à selectionner dans l'interface pour télécharger vos films - └── tvseries #à selectionner dans l'interface pour télécharger vos séries +└── media #linked to Plex and Qbittorrent + ├── downloads #generic downloads, selected in settings + ├── movies #used for downloading movies + └── tvseries #used for downloading TV shows ``` -Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` : +If not already done, create the `downloads` folder under `/media`: ```sh mkdir -P /media/downloads ``` -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `seedbox`. Collez la config ci-dessous : +Open Dockge, click on `compose`, and name the stack `seedbox`. Paste the following config: ```yaml ---- + services: qbit: image: ghcr.io/linuxserver/qbittorrent:latest @@ -102,164 +103,162 @@ services: - WIREGUARD_PRIVATE_KEY=${PR_KEY} - SERVER_COUNTRIES=France - PORT_FORWARD_ONLY=on - ``` - ::alert{type="success"} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Tip:__ Add the Watchtower label in each container to automate updates - ```yaml - services: - qbittorrent: - #... - labels: - - com.centurylinklabs.watchtower.enable=true - gluetun: - #... - labels: - - com.centurylinklabs.watchtower.enable=true +```yaml +services: + qbittorrent: + #... + labels: + - com.centurylinklabs.watchtower.enable=true + gluetun: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Avant de renseigner le `.env` dans Dockge, nous allons configurer la mise à jour du port de téléchargement. En effet, Proton, et la plupart des VPN, changent régulièrement le port de téléchargement, et celui-ci doit etre communiqué à Qbitorrent. +Before editing the `.env` in Dockge, let's configure the download port update. Proton and most VPNs rotate the forwarding port, which must be communicated to Qbittorrent. -Pour ce faire, nous avons ajouté le mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` dans le conteneur. +We’ve added the mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` to the container. -Il faut à présent permettre au mod de récupérer l'information via Gluetun, qui n'accepte que les communications chiffrées via son API. +We now need to allow the mod to fetch info from Gluetun, which only allows encrypted communication via its API. -A cet effet, ouvrez un terminal. Nous allons à présent générer une clé d'authentification : +Open a terminal to generate the authentication key: ```shell sudo docker run --rm qmcgaw/gluetun genkey ``` -Notez la clé. Puis créez le dossier `/docker/gluetun` +Note the key, then create the `/docker/gluetun` folder: ```shell sudo mkdir /docker/gluetun ``` -Et créez le fichier `config.toml` +Create the `config.toml` file: ```shell sudo vi /docker/gluetun/config.toml ``` -Entrez en modification en tapant `i` et éditez le comme suit en ajoutant la clée que vous avez générée : +Press `i` to edit and enter: ```toml [[roles]] name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod" routes = ["GET /v1/openvpn/portforwarded"] auth = "apikey" -apikey = "votre_clée" # clée que vous avez générée précédemment +apikey = "your_key_here" # key you just generated ``` -Appuyez sur `échap` et quittez en sauvegardant en tapant `:x`. Rendez-vous dans Dockge, et renseignez les variables dans `.env`: +Press `Esc` then type `:x` to save and exit. + +In Dockge, fill in the variables in `.env`: ```properties PUID= GUID= UI_PORT= PR_KEY= -GSP_KEY= # la clé que vous avez générée et renseignée dans config.toml +GSP_KEY= # the key you generated and entered in config.toml ID= PW= ``` -En détails : +Detailed info: -| Variable | Valeur | Exemples | -|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------| -| `PUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `GUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `UI_PORT`{lang=properties} | Le port d'accès à la web ui, elle sera joignable via `http//ipduserveur:port` | `5695` | -| `PR_KEY`{lang=properties} | La clée privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | -| `GSP_KEY`{lang=properties} | Clé que vous avez générée pour la mise à jour du port | `MnBa47MeVmk7xiv` | -| `ID`{lang=properties} | username que vous utilisez pour vous logger dans l'interface de Qbittorrent | `user` | -| `PW`{lang=properties} | mot de passe que vous utilisez pour vous logger dans l'interface de Qbittorrent | `password` | +| Variable | Description | Example | +|------------|-------------|---------| +| `PUID` | User ID (`id yourusername`) | `1000` | +| `GUID` | Group ID (`id yourusername`) | `1000` | +| `UI_PORT` | Port for accessing the web UI | `5695` | +| `PR_KEY` | Private key from Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | +| `GSP_KEY` | Key you generated for port update | `MnBa47MeVmk7xiv` | +| `ID` | Qbittorrent UI login username | `user` | +| `PW` | Qbittorrent UI password | `password` | -## Déploiement +## Deployment --- -Une fois fait, déployez le conteneur. - +Once done, deploy the container. ::alert{type="warning"} :::list{type="warning"} -- **Dans les logs de lancement, vous trouverez un mot de passe temporaire pour l'utilisateur `admin`** +- **Startup logs will show a temporary password for `admin` user** ::: :: -Loggez vous sur `http://ipduserveur:5695` (ou le port que vous avez configuré). +Login at `http://server-ip:5695` (or the port you set). ::alert{type="danger"} :::list{type="danger"} -- __En cas d'échec :__ vérifiez les règles de votre pare-feu. +- __If login fails:__ check your firewall rules. ::: :: -Changez votre nom d'utilisateur et votre mot de passe dans les paramètres "webui". +Change your username and password in the "webui" settings. -Et voilà ! Dans les paramètres de Qbittorrent, dans "téléchargements" selectionnez `/media/downloads` comme chemin par défaut pour télécharger vos media. +You're done! In Qbittorrent settings, under "Downloads", set `/media/downloads` as the default folder. -Lorsque vous lancez un téléchargement, n'oubliez pas de préciser le bon répertoire de téléchargement afin que Plex puisse synchroniser correctement sa bibliothèque (`/media/movies` et `/media/tvseries`). Vous pouvez aussi l'automatiser en créant une catégorie et un répertoire associé. +When adding a download, remember to select the proper directory so Plex can sync correctly (`/media/movies` or `/media/tvseries`). You can also automate this with categories and folders. -## Exposer la webui +## Exposing the Web UI --- ::alert{type="warning"} :::list{type="warning"} -- Qbitorrent n'utilise pas d'authentification multifacteur. Exposer Qbitorrent 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/securite/authentik/). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/securite/wireguard). +- Qbittorrent does not support multi-factor authentication. Exposing it to the internet may put your system at risk. Only do this if you use MFA via [Authentik](/serveex/securite/authentik/). Otherwise, don’t expose it with SWAG—use a VPN like [Wireguard](/serveex/securite/wireguard) instead. ::: :: - -Afin de lancer des téléchargement hors de chez vous, sans VPN, vous pouvez exposer la webui de Qbittorrent. +To start downloads from outside your home, without a VPN, you can expose the Qbittorrent web UI. ::alert{type="info"} :::list{type="info"} -- Nous partons du principe que vous avez le sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/generalites/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/generalites/nat). +- We assume you have the subdomain `seedbox.mydomain.com` with a `CNAME` pointing to `mydomain.com` in [DNS zone](/generalites/dns). And that port `443` on your router is forwarded to your server in [NAT rules](/generalites/nat), unless you’re using Cloudflare Zero Trust. ::: :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Gluetun : +In Dockge, edit the SWAG compose file and add Gluetun’s network: ```yaml services: swag: - container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom - # ... - - seedbox # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + container_name: # ... + # ... + networks: + # ... + - seedbox + +networks: # ... - seedbox: # Nom du réseau déclaré dans la stack - name: seedbox_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + seedbox: + name: seedbox_default + external: true ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Click "Deploy" and wait for SWAG to fully initialize. ::alert{type="info"} :::list{type="info"} -- Ici nous partons du principe que le nom du réseau de la seedbox est `seedbox_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81. +- We assume the network name is `seedbox_default`. You can confirm by checking the SWAG dashboard at http://server-ip:81. ::: :: - -Puis nous allons créer et éditer le fichier `seedbox.subdomain.conf`. +Now create/edit `seedbox.subdomain.conf`. ::alert{type="success"} -✨__Astuce pour les allergiques au terminal :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Terminal-free tip:__ use [File Browser](/serveex/files/file-browser) to edit files instead of using the terminal. :: ```shell sudo vi /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf ``` -Entrez en modification en appuyant sur `i` et copiez la configuration ci-dessous, en prenant soin de vérifier le port : +Press `i` and paste the following config (check the port): ```nginx ## Version 2023/12/19 @@ -311,14 +310,15 @@ server { } } ``` + ::alert{type="success"} -✨ Vous pouvez protéger cette app avec Authentik en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). +✨ You can secure this app with Authentik by uncommenting the `authentik-server.conf` and `authentik-location.conf` lines. Don’t forget to [create an app and provider in Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy). :: -Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x`. +Press `Esc`, type `:x` to save and quit. -Patientez quelques minutes puis tapez dans votre navigateur `https://seedbox.mondomaine.fr`, vous arriverez sur l'interface de Qbittorrent. +Wait a few minutes, then go to `https://seedbox.mydomain.com`—you should land on the Qbittorrent interface. -Et voilà, vous avez un mediacenter pret à l'emploi ! +And that’s it! You now have a ready-to-use media center. ![Picture](/img/serveex/seed.svg)