diff --git a/content/0.index.md b/content/0.index.md
index c40bc9f..c5492ed 100644
--- a/content/0.index.md
+++ b/content/0.index.md
@@ -12,7 +12,7 @@ main:
---
cta:
- Access the Docs
- - /apropos/bienvenue
+ - /about/welcome
secondary:
- Discord â
- https://discord.gg/jvhardware
diff --git a/content/2.general/1.nat.md b/content/2.generalites/1.nat.md
similarity index 100%
rename from content/2.general/1.nat.md
rename to content/2.generalites/1.nat.md
diff --git a/content/2.general/2.dns.md b/content/2.generalites/2.dns.md
similarity index 100%
rename from content/2.general/2.dns.md
rename to content/2.generalites/2.dns.md
diff --git a/content/2.general/3.samba.md b/content/2.generalites/3.samba.md
similarity index 100%
rename from content/2.general/3.samba.md
rename to content/2.generalites/3.samba.md
diff --git a/content/2.general/_dir.yml b/content/2.generalites/_dir.yml
similarity index 100%
rename from content/2.general/_dir.yml
rename to content/2.generalites/_dir.yml
diff --git a/content/3.serveex/2.core/1.installation.md b/content/3.serveex/2.coeur/1.installation.md
similarity index 100%
rename from content/3.serveex/2.core/1.installation.md
rename to content/3.serveex/2.coeur/1.installation.md
diff --git a/content/3.serveex/2.core/2.docker.md b/content/3.serveex/2.coeur/2.docker.md
similarity index 100%
rename from content/3.serveex/2.core/2.docker.md
rename to content/3.serveex/2.coeur/2.docker.md
diff --git a/content/3.serveex/2.coeur/3.swag.md b/content/3.serveex/2.coeur/3.swag.md
new file mode 100644
index 0000000..6be695c
--- /dev/null
+++ b/content/3.serveex/2.coeur/3.swag.md
@@ -0,0 +1,398 @@
+---
+navigation: true
+title: SWAG
+main:
+ fluid: false
+---
+:ellipsis{left=0px width=40rem top=10rem blur=140px}
+# SWAG
+
+::alert{type="info"}
+đŻ __Objectifs :__
+- Installer Swag
+- Activer le SSL
+- Accéder au tableau de bord
+- Configurer le blocage régional
+- Exposer Dockge
+::
+
+[Swag](https://docs.linuxserver.io/general/swag/) est le noyau de ce homelab. C'est un reverse proxy puissant qui permet d'exposer des services sur le net via un ou des noms de domaines, en se chargeant de l'Ă©mission des certificats SSL (pour garder des connexions chiffrĂ©es), du routage des requĂȘtes et de la sĂ©curisation des accĂšs (par authent HTTP ou par SSO comme Authelia ou Authentik). Toute la doc nĂ©cessaire ce [situe ici](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).
+:::
+::
+
+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.
+
+**Principe d'un reverse proxy et application dans notre cas :**
+
+
+
+## Installation
+---
+
+::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`.
+:::
+::
+
+Plan des fichiers que nous allons modifier :
+
+```console
+root
+âââ docker
+ âââ swag
+ âââ config
+ â âââ dns-conf
+ â â âââ ovh.ini
+ â âââ nginx
+ â âââ dbip.conf
+ â âââ nginx.conf
+ â âââ proxy-confs
+ â âââ dockge.subdomain.conf
+ âââ compose.yml
+ âââ .env
+```
+
+Ouvrez Dockge dans votre navigateur, cliquez sur `compose`, nommez la stack `swag` et copiez la conf ci-dessous
+
+``` yaml
+---
+services:
+ swag:
+ image: lscr.io/linuxserver/swag:latest
+ container_name: swag
+ cap_add:
+ - NET_ADMIN
+ env_file:
+ - .env
+ environment:
+ - TZ=Europe/Paris
+ - URL=${DOMAIN}
+ - EXTRA_DOMAINS=${DOMAINS}
+ - SUBDOMAINS=wildcard # couvre les sous-domaines
+ - VALIDATION=dns
+ - DNSPLUGIN=${PLUGIN}
+ - EMAIL=${EMAIL}
+ - DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
+ volumes:
+ - /docker/swag/config:/config
+ ports:
+ - 80:80
+ - 443:443
+ - 81:81 # Nécessaire pour le dashboard
+ restart: unless-stopped
+ networks:
+ - swag
+
+networks:
+ swag:
+ name: swag_default
+
+```
+
+::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
+::
+
+Puis dans le `.env` :
+
+```properties
+DOMAIN=
+DOMAINS=
+EMAIL=
+PLUGIN=
+```
+
+Remplissez comme suit
+
+| 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.
+::
+
+
+```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 :
+
+* ``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
+
+```shell
+sudo vi /docker/swag/config/nginx/nginx.conf
+```
+
+Et ajoutez la ligne suivante en dessous de la section `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.
+
+## 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).
+
+
+
+## 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:
+
+```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;
+}
+```
+
+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
+---
+::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).
+::
+
+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).
+:::
+::
+
+Ouvrez le fichier dockge.subdomain.conf :
+
+```shell
+sudo vi /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
+```
+
+Paramétrez le comme tel :
+
+```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;
+
+ }
+}
+```
+
+
+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`) :
+
+
+```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
+```
+
+::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`.
+:::
+::
+
+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
+---
+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`.
+
+```shell
+cd /docker/swag/config/proxy-confs
+sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf
+```
+::alert{type="danger"}
+:::list{type="danger"}
+- __Si le sous domaine n'est pas redirigé correctement__
+:::
+- é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
diff --git a/content/3.serveex/2.core/_dir.yml b/content/3.serveex/2.coeur/_dir.yml
similarity index 100%
rename from content/3.serveex/2.core/_dir.yml
rename to content/3.serveex/2.coeur/_dir.yml
diff --git a/content/3.serveex/2.core/3.swag.md b/content/3.serveex/2.core/3.swag.md
deleted file mode 100644
index 5b7816d..0000000
--- a/content/3.serveex/2.core/3.swag.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-navigation: true
-title: SWAG
-main:
- fluid: false
----
-:ellipsis{left=0px width=40rem top=10rem blur=140px}
-# SWAG
-
-::alert{type="info"}
-đŻ __Goals:__
-- Install Swag
-- Enable SSL
-- Access the dashboard
-- Configure regional blocking
-- Expose Dockge
-::
-
-[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 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).
-:::
-::
-
-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.
-
-**What is a reverse proxy and how it works for us:**
-
-
-
-## Installation
----
-
-::alert{type="info" icon="exclamation-circle"}
-:::list{type="info"}
-- 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`.
-:::
-::
-
-File structure we'll edit:
-
-```console
-root
-âââ docker
- âââ swag
- âââ config
- â âââ dns-conf
- â â âââ ovh.ini
- â âââ nginx
- â âââ dbip.conf
- â âââ nginx.conf
- â âââ proxy-confs
- â âââ dockge.subdomain.conf
- âââ compose.yml
- âââ .env
-```
-
-Open Dockge, click `compose`, name the stack `swag`, and paste this config:
-
-```yaml
-services:
- swag:
- image: lscr.io/linuxserver/swag:latest
- container_name: swag
- cap_add:
- - NET_ADMIN
- env_file:
- - .env
- environment:
- - TZ=Europe/Paris
- - URL=${DOMAIN}
- - EXTRA_DOMAINS=${DOMAINS}
- - SUBDOMAINS=wildcard # couvre les sous-domaines
- - VALIDATION=dns
- - DNSPLUGIN=${PLUGIN}
- - EMAIL=${EMAIL}
- - DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
- volumes:
- - /docker/swag/config:/config
- ports:
- - 80:80
- - 443:443
- - 81:81 # Nécessaire pour le dashboard
- restart: unless-stopped
- networks:
- - swag
-
-networks:
- swag:
- name: swag_default
-
-```
-
-::alert{type="success"}
-âš __Tip:__
-Add a watchtower label to auto-update containers:
-
-```yaml
-services:
- swag:
- #...
- labels:
- - com.centurylinklabs.watchtower.enable=true
-```
-::
-
-In your `.env`:
-
-```properties
-DOMAIN=
-DOMAINS=
-EMAIL=
-PLUGIN=
-```
-
-Fill in the values:
-
-| 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
-```
-
-```properties
-dns_ovh_endpoint = ovh-eu
-dns_ovh_application_key =
-dns_ovh_application_secret =
-dns_ovh_consumer_key =
-```
-
-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/*
-
-Now configure dbip:
-
-```shell
-sudo vi /docker/swag/config/nginx/nginx.conf
-```
-
-Add this under `http`:
-
-```nginx
-include /config/nginx/dbip.conf
-```
-
-Restart the stack.
-
-## Dashboard
----
-Access the dashboard at `http://yourserverip:81`. Details [here](https://www.linuxserver.io/blog/introducing-swag-dashboard).
-
-## DBIP
----
-Geo-block config example:
-
-```nginx
-# ... (Same geo-block nginx example as before)
-```
-
-## Exposing Dockge
----
-::alert{type="info"}
-đ __Prerequisites:__ A subdomain `dockge.mydomain.com` with CNAME pointing to `mydomain.com`, and NAT port 443 properly configured.
-::
-
-::alert{type="warning"}
-:::list{type="warning"}
-- Dockge lacks MFA. Only expose it with MFA (e.g., Authentik). Otherwise, use VPN.
-:::
-::
-
-Configure `dockge.subdomain.conf` as:
-
-```nginx
-# ... (Same nginx reverse proxy config)
-```
-
-Edit SWAGâs `compose.yml` to add Dockge's network:
-
-```yaml
-services:
- swag:
- # ...
- networks:
- - dockge
-
-networks:
- dockge:
- name: dockge_default
- external: true
-```
-
-Redeploy SWAG. Access Dockge via `https://dockge.mydomain.com`.
-
-## Exposing Other Services
----
-SWAG includes many sample confs: `service.subdomain.conf.sample`. Duplicate and configure them:
-
-```shell
-cd /docker/swag/config/proxy-confs
-sudo cp service.subdomain.conf.sample service.subdomain.conf
-```
-
-::alert{type="danger"}
-:::list{type="danger"}
-- __If subdomain isnât routing correctly:__
-:::
-- 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/5.media/3.servarr.md b/content/3.serveex/5.media/3.servarr.md
index 6ba91dc..dd5fe85 100644
--- a/content/3.serveex/5.media/3.servarr.md
+++ b/content/3.serveex/5.media/3.servarr.md
@@ -1,6 +1,6 @@
---
navigation: true
-title: Automatisation
+title: Automation
main:
fluid: false
---
@@ -8,26 +8,26 @@ main:
# Servarr
::alert{type="info"}
-đŻ __Objectifs :__
-- Automatiser les téléchargements de films et de séries avec Radarr, Sonarr, Bazarr, Prowlarr et Overseerr.
+đŻ __Goals:__
+- Automate movie and TV show downloads using Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr.
::
-[Servarr](https://wiki.servarr.com/) est une collection d'applications développées dans le but d'automatiser le téléchargement, la mise à jour et la gestions des media. Ici nous allons porter notre attention sur les films et séries avec comme objectif :
-- Pouvoir choisir un film dans un catalogue via une interface web
-- N'avoir plus rien Ă faire Ă part en profiter quelques minutes plus tard sur Plex
+[Servarr](https://wiki.servarr.com/) is a suite of applications developed to automate the downloading, updating, and management of media. Here, we'll focus on movies and TV shows with the goal of:
+- Selecting a movie from a catalog through a web interface.
+- Sitting back and enjoying it on Plex a few minutes later.
Simple.

-Je vous propose de déployer la stack puis nous verrons par la suite la configuration de chacune des apps et leur fonctionnement.
+Weâll start by deploying the stack and then proceed to configure each app and understand how they work.
-## Installer les apps
+## Install the Apps
---
-### Docker compose
+### Docker Compose
-Structure des dossiers :
+Folder structure:
```console
root
@@ -54,8 +54,7 @@ root
âââ library
```
-Ouvrez dockge et votre stack `plex`. Modifiez le compose comme ceci :
-
+Open Docker and your `plex` stack. Modify the compose file as follows:
```yaml
---
services:
@@ -162,22 +161,23 @@ 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
+```
::
-Renseignez le `.env` avec les variables ci-dessous
+Set your `.env` file with the variables below:
```properties
PUID=
@@ -185,253 +185,249 @@ GUID=
MEDIA_PATH=
```
-| 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` |
-| `MEDIA_PATH`{lang=properties} | le chemin vers votre dossier media, ici : `/media`. Attention, il doit correspondre aussi Ă celui qu'utilise Qbittorrent. | `/media` |
+| Variable | Description | Example |
+|----------------|-------------------------------------------------------------------------------------------------|-------------|
+| `PUID` | Set using your user info (check with `id yourusername`) | `1000` |
+| `GUID` | Same as above | `1000` |
+| `MEDIA_PATH` | Path to your media folder, here: `/media`. It must match the one used by Qbittorrent. | `/media` |
-Déployez la stack.
+Deploy the stack.
-### Paramétrer Radarr
+### Configure Radarr
---
-Radarr est une app qui permet de requĂȘter Ă votre place vos sources de torrent et de dĂ©finir quel type de release vous souhaitez tĂ©lĂ©charger en prioritĂ©. Radarr permet aussi de mettre Ă jour vos films si une meilleure version est disponible.
-Maintenant que vous avez déployé la stack, vous pouvez vous rendre sur `http://ipduserveur:7878`.
+Radarr queries your torrent sources and lets you define the type of releases to prioritize. It can also upgrade your movies if a better version is available.
+
+Once deployed, visit `http://yourserverip:7878`.
::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.
:::
::
-Créez vous un compte, choisissez bien *forms login*.
+Create an account and choose *forms login*.
-##### Ajouter un *root folder*
+##### Add a *root folder*
-- Dans le menu Ă gauche, cliquez sur *Settings > Media Management*.
-- Ajoutez un *root folder*, choisisez `/media/movies`
+- Go to *Settings > Media Management*.
+- Add a root folder and select `/media/movies`.
::alert{type="warning"}
:::list{type="warning"}
-- __Attention :__ Si vous avez dĂ©jĂ des films dans `movies` issus de Qbittorrent, ne les ajoutez pas dans Sonarr si ce dernier vous le propose. Radarr risque de les modifier ce qui entrainerait l'arrĂȘt du seed par Qbittorrent.
+- __Warning:__ If you already have movies in `movies` from Qbittorrent, do not let Radarr add them. Radarr might modify them, which could stop seeding in Qbittorrent.
:::
::
-##### Configurer les profils
+##### Configure Profiles
-Dans le menu *Settings > Profiles*, vous trouverez les profils par dĂ©faut de Radarr. Comprendre que lorsque vous faites une requete, vous demandez un de ces profils. Ainsi, radarr va chercher en prioritĂ© le parametre le plus Ă©levĂ©, puis s'il ne trouve pas, il va passer Ă celui d'en dessous etc. Vous pouvez par exemple rĂ©gler comme ceci pour le profile "any", en dĂ©cochant tout sauf ce qui est sur l'image, et en les mettant dans le mĂȘme ordre. Avec ce profil "any", Radarr va chercher en prioritĂ© du 4K REMUX (meilleure qualitĂ©), puis s'il ne trouve pas, il va passer au critĂšre du dessous.
+Go to *Settings > Profiles*. These are your default quality profiles. When you make a request, you're selecting one of these. For example, configure the âanyâ profile by unchecking everything except what is shown in the image and ordering them accordingly. This makes Radarr search for 4K REMUX first, then go down the list if unavailable.

-##### Ajouter Qbittorrent
+##### Add Qbittorrent
-Dans *Settings > Downloads Clients* vous allez ajouter Qbittorrent.
+In *Settings > Download Clients*, add Qbittorrent.
-- Renseignez le *Host* avec l'IP de votre serveur et précisez le port de la webui, si vous avez suivi mon tuto c'est le `5695`.
-- Renseignez le *Username* et le *Password* de votre interface Qbittorrent.
-- Cliquez sur *test*.
-- Si tout est ok, cliquez sur *save*.
+- Use your server IP as *Host* and port `5695` if following this guide.
+- Provide your Qbittorrent *Username* and *Password*.
+- Click *Test*.
+- If successful, click *Save*.
+##### Connect to Plex
-##### Connecter Ă Plex
+Go to *Settings > Connect*, add a new connection and choose *Plex Media Server*.
-Dans *Settings > Connect*, ajoutez une nouvelle connexion, choisissez *Plex Media Server*.
-- Dans *Host* mettez `plex` ou l'adresse IP de votre serveur.
-- Dans port mettez `32400`.
-- Cliquez sur le bouton bleu "authenticate with Plex.tv" et authentifiez vous avec votre compte Plex.
-- Appuyez sur le bouton *test*.
-- Si tout est ok, appuyez sur le bouton *save*.
+- Use `plex` or your server IP for *Host*.
+- Port: `32400`
+- Click the blue "authenticate with Plex.tv" button and log into Plex.
+- Press *Test*, then *Save* if successful.
+##### Get API Key for Prowlarr and Overseerr
+- Go to *Settings > General* and copy your *API Key* for later use.
-##### Récupérer la clé API pour Prowlarr et Overserr
-
-- Dans *Settings > General*, copiez la *API Key* et notez la précieusement.
-
-### Paramétrer Sonarr
+### Configure Sonarr
---
-Sonarr est une app qui permet de requĂȘter Ă votre place vos sources de torrent et de dĂ©finir quel type de release vous souhaitez tĂ©lĂ©charger en prioritĂ©. Radarr permet aussi de mettre Ă jour vos sĂ©ries si une meilleure version est disponible.
-- Rendez-vous sur `http://ipduserveur:8989`.
-- Suivez exactement les mĂȘmes Ă©tapes que pour Radarr, et en *root folder* mettez `/media/tvseries`.
+Sonarr queries torrent sources and defines what kind of TV series releases to prioritize. It also upgrades series when better versions are available.
+
+- Visit `http://yourserverip:8989`.
+- Follow the same steps as for Radarr, but use `/media/tvseries` as the root folder.
::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.
:::
::
-### Paramétrer Prowlarr
+### Configure Prowlarr
---
-Prowlarr est un proxy qui permet de gérer vos sources de torrents et de les passer à Radarr et Sonarr.
-Rendez-vous sur `http://ipduserveur:9696` et créez vous un compte en choisissant bien *forms login*.
+Prowlarr acts as a proxy to manage your torrent indexers and link them to Radarr and Sonarr.
+
+Go to `http://yourserverip:9696` and create an account, using *forms login*.
::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.
:::
::
+##### Add an Indexer
-##### Ajouter une source
+- Go to the *Indexers* section and add your torrent indexer.
-- Dans la section *Indexers*, ajoutez l'indexer de votre source de torrent.
+##### Add Radarr and Sonarr
-##### Ajouter Radarr et Sonarr
+In *Settings > Apps*, add Radarr and Sonarr with the following details:
-Dans la section *Settings > Apps*, ajoutez Radarr et Sonarr avec les informations ci-dessous :
-- Prowlarr Server : `http://prowlarr:9696` (ou remplacez prowlarr par l'IP de votre serveur)
-- Sonarr / Radarr Server : `http://sonarr:8989` ou `http://radarr:7878`(ou remplacez sonarr/radarr par l'IP de votre serveur)
-- API Key, la clé que vous avez notée pour Radarr et celle de Sonarr.
-- Appuyez sur *Test*.
-- Si tout va bien, appuyez sur *Save*.
+- Prowlarr Server: `http://prowlarr:9696` (or use server IP)
+- Sonarr / Radarr Server: `http://sonarr:8989` or `http://radarr:7878`
+- API Key: use the one copied from Radarr and Sonarr.
+- Click *Test*, then *Save* if all goes well.
-
-### Paramétrer Bazarr
+### Configuring Bazarr
---
-Bazarr est une app qui permet de chercher automatiquement les bons sous-titre dans les langues souhaitez pour tout les films et séries que Radarr et Sonarr ajoutent pour vous.
+Bazarr is an app that automatically searches for the correct subtitles in your preferred languages for all the movies and TV shows added by Radarr and Sonarr.
-Rendez-vous sur `http://ipduserveur:9696`.
+Go to `http://yourserverip:9696`.
::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.
:::
::
-Rendez-vous dans *Settings > General* et créez un identifiant et un mot de passe en utilisant le *forms login*.
+Go to *Settings > General* and create a username and password using *forms login*.
-#### Ajouter un profil de langage
+#### Add a Language Profile
-- Dans *Settings > Languages* cliquez sur le bouton rose *Add new profile* et nommez le.
-- Cliquez sur le bouton rose *Add Languages* et ajoutez les langues que vous souhaitez, par exemple *French* et *English*.
-- Sauvegardez et quittez.
-- En bas de l'ecran dans *Default Language For Newly Added Show*, cochez les deux cases et renseignez le profil que vous venez de créer.
+- In *Settings > Languages*, click the pink *Add new profile* button and name it.
+- Click the pink *Add Languages* button and add your preferred languages, e.g., *French* and *English*.
+- Save and exit.
+- At the bottom of the screen under *Default Language For Newly Added Show*, check both boxes and select the profile you just created.

-- Enregistrez avec le bouton tout en haut de l'écran.
+- Save using the button at the top of the screen.
-#### Ajouter des fournisseurs de sous-titre
+#### Add Subtitle Providers
-- Dans *Settings > Providers*, ajoutez vos fournisseurs favoris, comme par exemple :
+- In *Settings > Providers*, add your preferred providers, for example:

-- Enregistrez avec le bouton tout en haut de l'écran.
+- Save using the button at the top of the screen.
-#### Ajouter Radarr et Sonarr
+#### Add Radarr and Sonarr
-- Rendez-vous dans *Settings > Sonarr*
-- Dans *Adress*, mettez `sonarr` ou l'adresse IP du serveur.
-- Dans *Port* mettez `8989`.
-- Dans *API Key* mettez la clé API de Sonarr.
-- Cliquez sur *Test*.
-- Enregistrez avec le bouton tout en haut de l'écran.
+- Go to *Settings > Sonarr*
+- In *Address*, enter `sonarr` or your server's IP address.
+- In *Port*, enter `8989`.
+- In *API Key*, enter Sonarrâs API key.
+- Click *Test*.
+- Save using the button at the top of the screen.
-Faites de mĂȘme avec Radarr.
+Repeat the same steps for Radarr.
-
-### Paramétrer Overseerr
+### Configuring Overseerr
---
-[Overseerr](https://overseerr.dev/) est une application qui permet de naviguer dans un catalogue de film et de faire des requetes à Sonarr et à Radarr. Il suffit de naviguer dans les films ou séries, puis de cliquer sur *Demander*, et le film ou la série sera automatiquement téléchargée selon les paramÚtres de Radarr ou de Sonarr. Si le film ou la série n'est pas sortie, cela sera automatiquement téléchargé lorsque cela sera disponible. Ainsi, les épisodes d'une séerie arrivent automatiquement au fur et à mesure dans Plex sans aucune intervention manuelle.
+[Overseerr](https://overseerr.dev/) is an app that lets you browse a movie catalog and send requests to Sonarr and Radarr. Just browse movies or series, click *Request*, and the media will automatically be downloaded according to your Radarr or Sonarr settings. If the title hasnât been released yet, it will be downloaded automatically when available. This way, episodes of a series appear in Plex without any manual intervention.

-Rendez-vous sur `http://ipduserveur:5055` et authentifiez vous avec votre compte Plex.
+Go to `http://yourserverip:5055` and log in with your Plex 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.
:::
::
-#### Ajouter Radarr et Sonarr
+#### Add Radarr and Sonarr
-Lorsque cela vous est demandé, ajoutez un serveur radarr :
-- Cochez *serveur par défaut*.
-- __Nom du serveur :__ Radarr
-- __Nom d'hĂŽte ou adresse IP :__ `radarr` ou l'adresse IP de votre serveur
-- __Port :__ `7878`.
-- __Clé d'API :__ la clé API de Radarr.
-- Cliquez sur *Tester* en bas.
+When prompted, add a Radarr server:
+- Check *Default server*.
+- __Server name:__ Radarr
+- __Hostname or IP address:__ `radarr` or your server's IP
+- __Port:__ `7878`
+- __API Key:__ Radarrâs API key
+- Click *Test* at the bottom.
-Si tout va bien, continuez Ă renseigner les champs.
-- __Profil de qualité :__ celui que vous avez configuré (par exemple, `any`).
-- __Dossier racine :__ le dossier de plex. Dans nos exemples : `/media/movies`.
-- __Disponibilité minimale :__ `Annoncé`. Ainsi, si un film n'est pas sorti, vous pouvez le demander et il sera automatiquement récupéré à sa sortie.
-- Cochez les 3 cases du bas.
-- Sauvegardez et continuez.
+If the test succeeds, continue filling in the fields:
+- __Quality Profile:__ the one you configured (e.g., `any`)
+- __Root Folder:__ the Plex folder. In our examples: `/media/movies`
+- __Minimum Availability:__ `Announced`. This allows requesting unreleased content and downloads it upon release.
+- Check all 3 boxes at the bottom.
+- Save and continue.
-Puis faites de mĂȘme avec Sonarr :
-- Cochez *serveur par défaut*.
-- __Nom du serveur :__ Radarr
-- __Nom d'hĂŽte ou adresse IP :__ `sonarr` ou l'adresse IP de votre serveur
-- __Port :__ `8989`.
-- __Clé d'API :__ la clé API de Sonarr.
-- Cliquez sur *Tester* en bas.
+Now do the same for Sonarr:
+- Check *Default server*.
+- __Server name:__ Sonarr
+- __Hostname or IP address:__ `sonarr` or your server's IP
+- __Port:__ `8989`
+- __API Key:__ Sonarrâs API key
+- Click *Test* at the bottom.
-Si tout va bien, continuez Ă renseigner les champs.
-- __Profil de qualité :__ celui que vous avez configuré (par exemple, `any`).
-- __Dossier racine :__ le dossier de plex. Dans nos exemples : `/media/tvseries`.
-- __Profil de langue :__ `Deprecated`.
-- Cochez les 4 cases du bas.
-- Sauvegardez et continuez.
+If the test succeeds, continue filling in the fields:
+- __Quality Profile:__ the one you configured (e.g., `any`)
+- __Root Folder:__ the Plex folder. In our examples: `/media/tvseries`
+- __Language Profile:__ `Deprecated`
+- Check all 4 boxes at the bottom.
+- Save and continue.
-Et voilà ! Vous n'avez plus qu'à faire une demande d'un film et d'une serie, puis de vérifier dans qbittorrent ou dans radarr/sonarr que tout va bien. Dans quelques minutes, votre media sera sur Plex !
+And thatâs it! Just request a movie or series, then check in qBittorrent or Radarr/Sonarr. Within a few minutes, your media will be available on Plex!
-## Exposer Overseerr avec Swag
+## Exposing Overseerr with SWAG
---
-Il peut etre intĂ©ressant d'exposer Overseerr, si vous souhaitez pouvoir faire des requĂȘtes depuis l'exterieur sans VPN, ou si vous avez partagĂ© votre BibliothĂšque Plex Ă des utilisateurs et que vous souhaitez qu'ils aient accĂšs Ă Overseerr.
+It can be useful to expose Overseerr if you want to send requests from outside your network without a VPN, or if you've shared your Plex library with others and want them to have Overseerr access.
::alert{type="info"}
:::list{type="info"}
-- Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` qui pointe vers `films.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 `films.mydomain.com` with a `CNAME` pointing to `films.fr` in your [DNS zone](/generalites/dns). And that [unless youâre using Cloudflare Zero Trust](/serveex/securite/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/generalites/nat).
:::
::
-
-Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau d'overseer, qui est celui de Plex car dans la stack Plex :
+Go to Dockge, edit the SWAG compose file, and add the Overseerr network, which is the same as Plex (since itâs in the Plex stack):
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connects the container to a custom network
# ...
- - plex # Nom du réseau déclaré dans la stack
+ - plex # Name of the network declared in the stack
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- plex: # Nom du réseau déclaré dans la stack
- name: plex_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ plex: # Name of the declared network
+ name: plex_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 until SWAG is fully operational.
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de Tautulli est `plex_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 is named `plex_default`. You can verify the connection works by visiting the SWAG dashboard at `http://yourserverip:81`.
:::
::
-Créez le fichier `films.subdomain.conf` et éditez le :
+Create and edit the file `films.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 browse and edit files instead of using terminal commands.
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/films.subdomain.conf
```
-Rentrez en édition en appuyant sur `i`:
+Enter insert mode by pressing `i`:
-```nginx
+```nginx
## Version 2024/07/16
# make sure that your overseerr container is named overseerr
# make sure that your dns has a cname set for overseerr
@@ -490,14 +486,14 @@ server {
}
```
-Appuyez sur `Echap` puis sauvegardez et quittez en tappant `:x`
+Press `Escape`, then type `:x` and press `Enter` to save and exit.
-Patientez quelques minutes puis tapez dans votre navigateur `http://films.mondomaine.fr`.
+Wait a few minutes, then visit `http://films.mydomain.com` in your browser.
::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.
:::
::
-Et voilà , vous avez exposé Overseerr !
\ No newline at end of file
+And there you go, Overseerr is now publicly accessible!
\ No newline at end of file
diff --git a/content/3.serveex/6.cloud/1.immich.md b/content/3.serveex/6.cloud/1.immich.md
index 4b4d622..1349b26 100644
--- a/content/3.serveex/6.cloud/1.immich.md
+++ b/content/3.serveex/6.cloud/1.immich.md
@@ -8,16 +8,16 @@ main:
# Immich
::alert{type="info"}
-đŻ __Objectifs :__ installer [Immich](https://immich.app/docs/overview/introduction) pour gĂ©rer vos photos sur tout vos appareils.
+đŻ __Goals:__ Install [Immich](https://immich.app/docs/overview/introduction) to manage your photos across all your devices.
::
-[Immich](https://immich.app/docs/overview/introduction) est une solution de gestion de photos et de vidéos que vous pouvez installer directement sur votre serveur. Cette solution remplace les clouds type Google Photo ou iCloud. Elle dispose de nombreuse fonctionnalités comme la reconnaissance de visage ou la géolocalisation.
+[Immich](https://immich.app/docs/overview/introduction) is a self-hosted photo and video management solution that replaces cloud services like Google Photos or iCloud. It offers powerful features like face recognition and geolocation.

## Installation
---
-Structure des dossiers
+Folder structure
```console
root
@@ -28,81 +28,78 @@ root
âââ .env
```
-
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `immich` puis copiez collez le contenu du dernier `docker-compose.yml` [publié ici](https://github.com/immich-app/immich/blob/main/docker/docker-compose.yml).
+Open Dockge, click on `compose`, name the stack `immich`, then copy and paste the latest `docker-compose.yml` [published here](https://github.com/immich-app/immich/blob/main/docker/docker-compose.yml).
::alert{type="warning"}
:::list{type="warning"}
-- __Attention__ : n'ajoutez pas le label de Watchtower à la stack d'Immich. Immich étant une solution en perpetuelle évolution, des mises à jour automatiques risqueraient de casser votre installation.
+- __Warning__: Do not add the Watchtower label to the Immich stack. Immich evolves rapidly, and automatic updates may break your installation.
:::
::
-Configurer le `.env` en copiant collant le contenu de la derniÚre version [publiée ici](https://github.com/immich-app/immich/blob/main/docker/example.env) et suivez les commentaires indiqués dans le fichier.
-
+Configure the `.env` file by copying the latest version [from here](https://github.com/immich-app/immich/blob/main/docker/example.env) and follow the comments in the file.
::alert{type="info"}
:::list{type="info"}
-- Si vous avez un NAS ou un disque réseau partagé via [samba](/generalites/samba/) pour stocker vos données, remplacez la valeur de `UPLOAD_LOCATION`{lang=properties} par le chemin d'accÚs de votre dossier partagé.
+- If you're using a NAS or a network-shared drive via [Samba](/generalites/samba/) to store your data, replace the value of `UPLOAD_LOCATION`{lang=properties} with the path to your shared folder.
:::
::
::alert{type="success"}
-⚠__Astuce :__ si votre CPU/iGPU/GPU le supporte, Immich permet d'utiliser l'accélération matérielle pour lire les vidéos ou pour la reconnaissance d'images. Ces fonctionnalités peuvent tripler les performances d'Immich. Plus d'infos sur le [Transcoding](https://immich.app/docs/features/hardware-transcoding/) et sur le [Machine learning](https://immich.app/docs/features/ml-hardware-acceleration).
+âš __Tip:__ If your CPU/iGPU/GPU supports it, Immich can use hardware acceleration for video playback and image recognition. This can triple performance. Learn more about [Transcoding](https://immich.app/docs/features/hardware-transcoding/) and [Machine Learning](https://immich.app/docs/features/ml-hardware-acceleration).
::
-Déployez le conteneur.
+Deploy the container.
-Et voilĂ , vous pouvez vous connecter et suivre les instructions sur `http://ipduserveur:2283`
+You're done! You can connect and follow the setup instructions at `http://yourserverip:2283`.
-## Exposer Immich avec Swag
+## Exposing Immich with SWAG
---
-Tout l'intĂ©rĂȘt d'une telle solution, c'est de pouvoir y accĂ©der Ă distance et sur tout vos appareils. Pour cela, nous allons exposer Immich via Swag.
+The main benefit of this setup is being able to access Immich remotely on all your devices. We'll expose Immich using SWAG.
::alert{type="info"}
-đ __Au prĂ©alable :__
+đ __Before you begin:__
-Nous partons du principe que vous avez le sous-domaine `immich.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 that you have a subdomain `immich.yourdomain.com` with a `CNAME` pointing to `yourdomain.com` in your [DNS zone](/generalites/dns). Also, unless you're using [Cloudflare Zero Trust](/serveex/securite/cloudflare), make sure port `443` on your router is forwarded to port `443` on your server via [NAT rules](/generalites/nat).
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de immich :
+In Dockge, open the SWAG stack and edit the compose file to add Immich's network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connects the container to the custom network
# ...
- - immich # Nom du réseau déclaré dans la stack
+ - immich # Network name defined in the stack
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- immich: # Nom du réseau déclaré dans la stack
- name: immich_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ immich: # Network name defined in the stack
+ name: immich_default # Actual external network name
+ external: true # Indicates it's an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de immich est `immich_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
+- We're assuming Immich's network is named `immich_default`. You can check connectivity by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-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 fully initialize.
-
-Dans les dossiers de Swag, créez le fichier `immich.subdomain.conf`.
+In the SWAG folders, create a file named `immich.subdomain.conf`.
::alert{type="success"}
:::list{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 and edit your files instead of using terminal commands.
:::
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/immich.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+Press `i` to enter insert mode, then paste the following configuration:
```nginx
## Version 2023/12/19
@@ -150,7 +147,6 @@ server {
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
-
}
location ~ (/immich)?/api {
@@ -160,15 +156,14 @@ server {
set $upstream_port 3001;
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`, then hit `Enter` to save and exit.
-Et voilà , vous avez exposé Immich ! N'oubliez pas d'installer les applications [iOS](https://apps.apple.com/us/app/immich/id1613945652)/[Android](https://play.google.com/store/apps/details?id=app.alextran.immich) afin de synchroniser vos appareils.
+That's it! Immich is now accessible from the internet. Donât forget to install the [iOS](https://apps.apple.com/us/app/immich/id1613945652) / [Android](https://play.google.com/store/apps/details?id=app.alextran.immich) apps to sync your devices.
::alert{type="success"}
-⚠__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/immich/).
-::
+âš __Tip:__ You can protect this app with Authentik natively by [following these instructions](https://docs.goauthentik.io/integrations/services/immich/).
+::
\ No newline at end of file
diff --git a/content/3.serveex/6.cloud/2.nextcloud.md b/content/3.serveex/6.cloud/2.nextcloud.md
index dc3412d..5fd8215 100644
--- a/content/3.serveex/6.cloud/2.nextcloud.md
+++ b/content/3.serveex/6.cloud/2.nextcloud.md
@@ -8,10 +8,10 @@ main:
# Nextcloud
::alert{type="info"}
-đŻ __Objectifs :__ installer [Nextcloud](https://nextcloud.com/) pour gĂ©rer vos photos sur tout vos appareils.
+đŻ __Goals:__ Install [Nextcloud](https://nextcloud.com/) to manage your photos and files across all your devices.
::
-[Nextcloud](https://nextcloud.com/) est une solution qui vous permet d'accéder à vos données sur tout vos appareils, et de les synchroniser. Nexctloud dispose également de fonctionnalités de collaboration, de calendrier et bien d'autres. Cette solution remplace des solutions du type Google Drive, iCloud, ou encore OneDrive.
+[Nextcloud](https://nextcloud.com/) is a self-hosted solution that allows you to access and synchronize your data across all your devices. It also includes collaboration features, calendar, and more. Itâs a great alternative to services like Google Drive, iCloud, or OneDrive.

@@ -19,11 +19,11 @@ main:
---
::alert{type="info"}
:::list{type="info"}
-- Nous utiliserons l'image docker maintenue par [LinuxServer.io](https://docs.linuxserver.io/images/docker-nextcloud/)
+- We'll be using the Docker image maintained by [LinuxServer.io](https://docs.linuxserver.io/images/docker-nextcloud/)
:::
::
-Structure des fichiers
+File structure:
```console
root
@@ -35,7 +35,7 @@ root
âââ .env
```
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `nextcloud` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `nextcloud` and paste the following:
```yaml
---
@@ -57,16 +57,17 @@ services:
::alert{type="info"}
:::list{type="info"}
-- Si vous avez un NAS ou un disque réseau partagé via [samba](/generalites/samba) pour stocker vos données, remplacez `/docker/nextcloud/data` par le chemin d'accÚs de votre dossier partagé.
+- If youâre using a NAS or network-shared drive via [Samba](/generalites/samba), replace `/docker/nextcloud/data` with the path to your shared folder.
:::
::
-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 username
```
-Et renseignez le `.env` avec le port souhaité, et les infos que vous avez trouvées, par exemple :
+
+Then fill out the `.env` file with your preferred port and the values found above, for example:
```properties
PUID=1000
@@ -74,83 +75,87 @@ GUID=1000
PORT=4545
```
-Déployez la stack et rendez-vous sur `http://ipduserveur:4545` et suivez les instructions.
+Deploy the stack and visit `http://yourserverip:4545` to complete the setup.
::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 Nextcloud avec Swag
+## Exposing Nextcloud with Swag
---
-Tout l'intĂ©rĂȘt d'une telle solution, c'est de pouvoir y accĂ©der Ă distance et sur tout vos appareils. Pour cela, nous allons exposer Nextcloud via Swag.
+The goal of this setup is to access Nextcloud remotely from all your devices. Weâll use Swag to expose the app.
::alert{type="info"}
:::list{type="info"}
-- Nous partons du principe que vous avez le sous-domaine `nextcloud.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 a subdomain `nextcloud.yourdomain.com` with a `CNAME` pointing to `yourdomain.com` in your [DNS zone](/generalites/dns). And unless youâre using [Cloudflare Zero Trust](/serveex/securite/cloudflare), port `443` on your router must be forwarded to port `443` on your server using [NAT rules](/generalites/nat).
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de nextcloud :
+In Dockge, go to your SWAG stack and edit the compose to add Nextcloud's network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks:
# ...
- - nextcloud # Nom du réseau déclaré dans la stack
+ - nextcloud
-networks: # Définit le réseau custom
+networks:
# ...
- nextcloud: # Nom du réseau déclaré dans la stack
- name: nextcloud_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ nextcloud:
+ name: nextcloud_default
+ external: true
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de nextcloud est `nextcloud_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 Nextcloud network is named `nextcloud_default`. You can confirm connectivity by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-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.
-Dans les fichiers de nextcloud, éditez le fichier `config.php`.
+In Nextcloudâs files, edit the `config.php` 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 navigate and edit files instead of using terminal commands.
::
```shell
sudo vi /docker/nextcloud/config/www/nextcloud/config/config.php
```
-Entrez en modification avec la touche `i` et copiez les informations suivantes __avant__ `);`.
+Enter edit mode with `i` and paste the following before the final `);`:
-```js
-'trusted_proxies' => [gethostbyname('swag')], 'overwrite.cli.url' => 'https://nextcloud.example.com/',
+```php
+'trusted_proxies' => [gethostbyname('swag')],
+'overwrite.cli.url' => 'https://nextcloud.example.com/',
'overwritehost' => 'nextcloud.example.com',
'overwriteprotocol' => 'https',
```
-Ajoutez également votre nom de domaine dans la section `array` , cela devrait ressembler à ceci
-```js
- array (
- 0 => '192.168.0.1:444', # Cette ligne est surement différente chez vous, ne la modifiez pas !
- 1 => 'nextcloud.mondomaine.fr', # Renseignez votre domaine
- ),
-```
-Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`.
+Also add your domain in the `array` section. It should look like this:
-Dans les dossiers de Swag, créez le fichier `nextcloud.subdomain.conf`.
+```php
+array (
+ 0 => '192.168.0.1:444', # This line may differâdonât change it!
+ 1 => 'nextcloud.yourdomain.com', # Add your domain here
+),
+```
+
+Press `Esc`, then save and exit by typing `:x` and hitting Enter.
+
+In Swagâs folders, create the file `nextcloud.subdomain.conf`:
```shell
-sudo vi /docker/swag/config/nginx/proxy-confs/nexctloud.subdomain.conf
+sudo vi /docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+
+Enter edit mode with `i` and paste the following:
```nginx
## Version 2024/04/25
@@ -173,7 +178,6 @@ server {
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
# Hide proxy response headers from Nextcloud that conflict with ssl.conf
- # Uncomment the Optional additional headers in SWAG's ssl.conf to pass Nextcloud's security scan
proxy_hide_header Referrer-Policy;
proxy_hide_header X-Content-Type-Options;
proxy_hide_header X-Frame-Options;
@@ -185,10 +189,10 @@ server {
}
```
-Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`.
+Press `Esc`, save and exit with `:x` then Enter.
-Et voilà , vous avez exposé Nextcloud ! Et n'oubliez pas d'installer [les applications pour ordinateurs et mobiles](https://nextcloud.com/fr/install/).
+Thatâs itâyouâve exposed Nextcloud! Donât forget to install [the desktop and mobile apps](https://nextcloud.com/install/).
::alert{type="success"}
-⚠__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/nextcloud/).
-::
\ No newline at end of file
+âš __Tip:__ You can natively protect this app with Authentik by [following these instructions](https://docs.goauthentik.io/integrations/services/nextcloud/).
+::
diff --git a/content/3.serveex/7.files/1.file-browser.md b/content/3.serveex/7.files/1.file-browser.md
index f7e6d75..cf50b40 100644
--- a/content/3.serveex/7.files/1.file-browser.md
+++ b/content/3.serveex/7.files/1.file-browser.md
@@ -8,18 +8,18 @@ main:
# File Browser
::alert{type="info"}
-đŻ __Objectifs :__
-- Installer File Browser
-- Exposer File Browser avec Swag
+đŻ __Objectives:__
+- Install File Browser
+- Expose File Browser using Swag
::
-[File Browser](https://github.com/filebrowser/filebrowser) est une interface permettant d'accéder aux fichiers de votre serveur et de les éditer.
+[File Browser](https://github.com/filebrowser/filebrowser) is a web-based interface that lets you access and edit the files on your server.

## Installation
---
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `filebrowser` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `filebrowser`, then copy and paste the following:
```yaml
---
@@ -29,14 +29,14 @@ services:
volumes:
- /:/srv
- /docker/filebrowser/config:/config/
- # - /chemin/vers/vos/dossiers:/vosdossiers
+ # - /path/to/your/folders:/yourfolders
ports:
- 8010:80
image: filebrowser/filebrowser:s6
```
::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:
@@ -46,64 +46,64 @@ services:
- com.centurylinklabs.watchtower.enable=true
::
-
-Déployez le conteneur et rendez-vous sur `http://ipduserveur:8010`. Et voilà , votre instance File Browser en webui est disponible !
+Deploy the container and go to `http://yourserverip:8010`. Thatâs itâyour File Browser web UI is up and running!
::alert{type="danger"}
:::list{type="danger"}
-- __En cas d'échec :__ vérifiez les rÚgles de votre pare-feu.
+- __If it doesnât work:__ check your firewall rules.
:::
::
-## Exposer File Browser avec Swag
+## Exposing File Browser with Swag
---
::alert{type="warning"}
:::list{type="warning"}
-- File Browser n'utilise pas d'authentification multifacteur. Exposer File Browser 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).
+- File Browser does not support multi-factor authentication. Exposing it publicly could put your systems at risk. Only do this if youâre using a secure authentication solution like [Authentik](/serveex/securite/authentik/). Otherwise, do not expose it 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 IT Tools via Swag.
+You may want to access File Browser remotely from all your devices. To do that, weâll expose it through Swag.
::alert{type="info"}
:::list{type="info"}
-- __Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `files.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).
+- __Pre-requisite:__ We assume you've already created a subdomain like `files.yourdomain.com` in your [DNS zone](/generalites/dns) pointing to `yourdomain.com` with a `CNAME`, andâunless you're using Cloudflare Zero Trustâhave already forwarded port `443` on your router to port `443` on your server using [NAT rules](/generalites/nat).
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de filebrowser :
+In Dockge, go to the SWAG stack and edit the compose file to add File Browserâs network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connects the container to the custom network
# ...
- - filebrowser # Nom du réseau déclaré dans la stack
+ - filebrowser # Name of the network declared in the stack
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- filebrowser: # Nom du réseau déclaré dans la stack
- name: filebrowser_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ filebrowser: # Name of the network declared in the stack
+ name: filebrowser_default # Actual name of the external network
+ external: true # Specifies it's an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de filebrowser est `filebrowser_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 File Browser is `filebrowser_default`. You can confirm the connection is working by accessing the SWAG dashboard at http://yourserverip:81.
:::
::
-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 fully initialize.
-Dans les dossiers de Swag, créez le fichier `files.subdomain.conf`.
+In the Swag folders, create the file `files.subdomain.conf`.
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/files.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+
+Enter insert mode by pressing `i`, and paste the following configuration:
```nginx
## Version 2023/12/19
@@ -151,14 +151,14 @@ server {
set $upstream_port 80;
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`, then save and exit with `:x` followed by `Enter`.
+
+Thatâs itâFile Browser is now exposed!
-Et voilà , vous avez exposé File Browser !
::alert{type="success"}
-⚠__Astuce :__ vous pouvez protéger cette app avec Authentik en ouvrant `files.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).
+âš __Tip:__ You can protect this app with Authentik by opening `files.subdomain.conf` and uncommenting `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).
::
\ No newline at end of file
diff --git a/content/3.serveex/7.files/2.pingvin.md b/content/3.serveex/7.files/2.pingvin.md
index a1fa640..6f62f24 100644
--- a/content/3.serveex/7.files/2.pingvin.md
+++ b/content/3.serveex/7.files/2.pingvin.md
@@ -205,9 +205,4 @@ Vous pouvez protéger cette app avec Authentik de façon native en suivant les i
- `ID du client OpenID` avec l'ID que vous avez copié en étape 2.
- `Secret du client OpenID` avec le token que vous avez copié en étape 2.
-Et voilà , désormais lorsque vous vous connectez à Pingvin, un bouton "Open ID" sera disponible en dessous de la mire de connexion.
-
-
-
-
-
+Et voilà , désormais lorsque vous vous connectez à Pingvin, un bouton "Open ID" sera disponible en dessous de la mire de connexion.
\ No newline at end of file
diff --git a/content/3.serveex/7.files/_dir.yml b/content/3.serveex/7.files/_dir.yml
index 7ad2125..b217245 100644
--- a/content/3.serveex/7.files/_dir.yml
+++ b/content/3.serveex/7.files/_dir.yml
@@ -1 +1 @@
-navigation.title: Fichiers & partage
+navigation.title: File & share
\ No newline at end of file
diff --git a/content/3.serveex/8.development/1.code-server.md b/content/3.serveex/8.development/1.code-server.md
index 19bec8a..c801bba 100644
--- a/content/3.serveex/8.development/1.code-server.md
+++ b/content/3.serveex/8.development/1.code-server.md
@@ -1,6 +1,6 @@
----
+---
navigation: true
-title: Code-Serveur
+title: Code-Server
main:
fluid: false
---
@@ -8,13 +8,13 @@ main:
# Code-Server
::alert{type="info"}
-đŻ __Objectifs :__
-- Installer code-server
-- Monter des dossiers dans vscode
-- Exposer code-server avec Swag
+đŻ __Goals:__
+- Install code-server
+- Mount folders into VS Code
+- Expose code-server with Swag
::
-[code-server](https://github.com/linuxserver/docker-code-server) est un conteneur permettant d'accéder à [vscode](https://code.visualstudio.com/) en web-ui dans un environnement linux. C'est littéralement vscode et vos projets directement dans votre poche, disponibles partout.
+[code-server](https://github.com/linuxserver/docker-code-server) is a container that lets you access [VS Code](https://code.visualstudio.com/) via a web UI in a Linux environment. It's literally VS Code and your projects in your pocket, available anywhere.

@@ -22,21 +22,21 @@ main:
---
::alert{type="info"}
:::list{type="info"}
-- Pour cette installation nous utiliserons [l'image maintenue par LinuxServer.io](https://docs.linuxserver.io/images/docker-code-server/).
+- For this setup, weâll use the [image maintained by LinuxServer.io](https://docs.linuxserver.io/images/docker-code-server/).
:::
::
-Structure des dossiers
+Folder structure
```console
root
âââ docker
â âââ code-server
â âââ config
-âââ #n'importe quel dossier Ă monter dans vscode
+âââ #any folder you want to mount in VS Code
```
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `code-server` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `code-server`, and paste the following:
```yaml
---
@@ -51,15 +51,15 @@ services:
- HASHED_PASSWORD=${PW}
volumes:
- /docker/code-server/config:/config
- # ajoutez vos dossier Ă monter dans vscode
- # - /chemin/vers/dossier:/dossier
+ # add folders to mount in VS Code
+ # - /path/to/folder:/folder
ports:
- 8443:8443
restart: unless-stopped
```
::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:
@@ -69,19 +69,19 @@ services:
- com.centurylinklabs.watchtower.enable=true
::
-Choisissez un mot de passe et générez un hash
+Choose a password and generate its hash:
```shell
-echo -n "votremotdepasse" | npx argon2-cli -e
+echo -n "yourpassword" | npx argon2-cli -e
```
-Notez précieusement le résultat. Trouvez votre PUID et votre GUID en tapant la commande suivante :
+Save the result carefully. Find your PUID and GUID with:
```shell
-id nomdutilisateur
+id yourusername
```
-Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple :
+Fill in the `.env` file with the values you found, for example:
```properties
PW='$argon2i$v=19$m=4096,t=3,p=1$wST5QhBgk2lu1ih4DMuxvg$LS1alrVdIWtvZHwnzCM1DUGg+5DTO3Dt1d5v9XtLws4'
@@ -91,77 +91,78 @@ GUID=1000
::alert{type="warning"}
:::list{type="warning"}
-- __Attention :__ Pensez Ă mettre un guillemet simple `'`au debut et Ă la fin du hash
+- __Note:__ Make sure to wrap the hash in single quotes `'`
:::
::
-Déployez le conteneur et rendez-vous sur `http://ipduserveur:8443`. Et voilà , votre instance code-server en webui est disponible !
+Deploy the container and go to `http://yourserverip:8443`. VoilĂ , your code-server instance is up and running in the browser!
::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.
:::
::
-## Monter des dossiers
+## Mount Folders
---
-Vous pouvez monter les dossiers à partager dans vscode en ajoutant les volumes concernés dans le compose.yaml (ou via dockge), et en redéployant le conteneur.
+You can mount folders into VS Code by adding the relevant volumes in `compose.yaml` (or via Dockge), then redeploy the container.
```yaml
services:
code-server:
#...
volumes:
- - /chemin/vers/dossier:/dossier
+ - /path/to/folder:/folder
```
-Une fois dans vscode, vous pourrez accéder au dossier.
+Once inside VS Code, you'll have access to the mounted folder.
-## Exposer code-server avec Swag
+## Expose code-server with Swag
---
-Tout l'intĂ©rĂȘt d'une telle solution, c'est de pouvoir y accĂ©der Ă distance et sur tout vos appareils. Pour cela, nous allons exposer coder-server via Swag.
+The whole point of such a solution is to access it remotely from any device. To do this, weâll expose code-server via Swag.
::alert{type="info"}
:::list{type="info"}
-- __Au préalable :__ Nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `code.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).
+- __Preliminary:__ We assume youâve created a subdomain like `code.yourdomain.com` with a `CNAME` pointing to `yourdomain.com` in your [DNS zone](/generalites/dns), andâunless you're using [Cloudflare Zero Trust](/serveex/securite/cloudflare)âthat youâve forwarded port `443` from your router to port `443` on your server using [NAT rules](/generalites/nat).
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de code-server :
+In Dockge, go to the SWAG stack and edit the compose file to add code-serverâs network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connects the container to a custom network
# ...
- - code-server # Nom du réseau déclaré dans la stack
+ - code-server # Name of the network defined in the stack
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- code-server: # Nom du réseau déclaré dans la stack
- name: code-serveur # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ code-server: # Name of the network defined in the stack
+ name: code-serveur # Actual name of the external network
+ external: true # Indicates itâs an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de code-server est `code-server_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 `code-server_default`. You can verify that the connection works by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-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 until SWAG is fully operational.
-Dans les dossiers de Swag, créez le fichier `code.subdomain.conf`.
+Inside the Swag config folders, create the file `code.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 and edit your files instead of using terminal commands.
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/code.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+
+Enter insert mode with `i` and paste the following configuration:
```nginx
## Version 2023/12/19
@@ -209,15 +210,14 @@ server {
set $upstream_port 8443;
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`, then save and exit by typing `:x` and pressing `Enter`.
-Et voilà , vous avez exposé code-server !
+Thatâs it â code-server is now exposed!
::alert{type="success"}
-⚠__Astuce :__ Vous pouvez protéger cette app avec Authentik en ouvrant `code.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).
+âš __Tip:__ You can protect this app with Authentik by opening `code.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).
::
\ No newline at end of file
diff --git a/content/3.serveex/8.development/2.gitea.md b/content/3.serveex/8.development/2.gitea.md
index 4741c64..f07c6ef 100644
--- a/content/3.serveex/8.development/2.gitea.md
+++ b/content/3.serveex/8.development/2.gitea.md
@@ -8,18 +8,18 @@ main:
# Gitea
::alert{type="info"}
-đŻ __Objectifs :__
-- Installer Gitea
-- Exposer Gitea avec Swag
+đŻ __Goals:__
+- Install Gitea
+- Expose Gitea using Swag
::
-[Gitea](https://https://about.gitea.com/) est une plateforme DevOps, permettant de gérer des dépots, à la maniÚre de GitHub mais chez vous en selfhost.
+[Gitea](https://about.gitea.com/) is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure.

## Installation
---
-Structure des dossiers
+Folder structure
```console
root
@@ -28,7 +28,7 @@ root
âââ data
```
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `gitea` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `gitea`, and paste the following content:
```yaml
---
@@ -52,67 +52,68 @@ services:
- 3333:3000
- 222:22
```
-Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple :
+
+Fill out the `.env` file with the required information, for example:
```properties
UID=1000
GID=1000
```
-Déployez le conteneur et rendez-vous sur `http://ipduserveur:3333`. Et voilà , votre instance Gitea est disponible !
+Deploy the container and go to `http://yourserverip:3333`. Your Gitea instance is now up and running!
::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 Gitea avec Swag
+## Exposing Gitea with Swag
---
-Tout l'intĂ©rĂȘt d'une telle solution, c'est de pouvoir y accĂ©der Ă distance et sur tout vos appareils. Pour cela, nous allons exposer Gitea via Swag.
+The benefit of this setup is being able to access it remotely from any of your devices. To do so, weâll expose Gitea through Swag.
::alert{type="info"}
:::list{type="info"}
-- __Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `gitea.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).
+- __Prerequisite:__ We assume you have created a subdomain such as `gitea.yourdomain.com` in your [DNS zone](/generalites/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/securite/cloudflare), you have already forwarded port `443` from your router to your serverâs port `443` in the [NAT rules](/generalites/nat).
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de gitea :
+In Dockge, go to the SWAG stack and edit the compose file by adding Gitea's network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connect the container to the custom network
# ...
- - gitea # Nom du réseau déclaré dans la stack
+ - gitea # Name of the declared network
-networks: # Définit le réseau custom
+networks: # Define the custom network
# ...
- gitea: # Nom du réseau déclaré dans la stack
- name: gitea_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ gitea: # Name of the declared network
+ name: gitea_default # Actual external network name
+ external: true # Indicates it's an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de gitea est `gitea_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 Gitea network name is `gitea_default`. You can verify connectivity by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-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 until SWAG is fully operational.
-Dans les dossiers de Swag, créez le fichier `gitea.subdomain.conf`.
+Inside the Swag folders, create the file `gitea.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 and edit your files instead of using terminal commands.
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/gitea.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+Press `i` to enter edit mode and paste the configuration below:
```nginx
## Version 2023/12/19
@@ -148,7 +149,7 @@ server {
#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/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
@@ -171,28 +172,27 @@ 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 hitting `Enter`.
-Ouvrez le fichier `app.ini` dans les fichiers du conteneur
+Now open the `app.ini` file from the container's file system:
```shell
sudo vi /docker/gitea/data/gitea/conf/app.ini
```
-Entrez en modification avec la touche `i` et et modifiez la section serveur avec les infos de votre domaine
+Press `i` to edit, then modify the server section with your domain information:
```properties
[server]
-DOMAIN = gitea.mondomaine.fr
-SSH_DOMAIN = gitea.mondomaine.fr
-ROOT_URL = https://gitea.mondomaine.fr/
+DOMAIN = gitea.yourdomain.com
+SSH_DOMAIN = gitea.yourdomain.com
+ROOT_URL = https://gitea.yourdomain.com/
```
-Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x` puis en appuyant sur `Entrée`.
-Relancez le conteneur.
+Press `Esc`, save and exit with `:x`, then restart the container.
-Et voilà , vous avez exposé Gitea !
+And thatâs it! Gitea is now exposed to the web.
::alert{type="success"}
-⚠__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/gitea/).
-::
+âš __Tip:__ You can natively protect this app with Authentik by [following these instructions](https://docs.goauthentik.io/integrations/services/gitea/).
+::
\ No newline at end of file
diff --git a/content/3.serveex/8.development/3.it-tools.md b/content/3.serveex/8.development/3.it-tools.md
index 80c88de..c25060c 100644
--- a/content/3.serveex/8.development/3.it-tools.md
+++ b/content/3.serveex/8.development/3.it-tools.md
@@ -1,6 +1,6 @@
---
navigation: true
-title: IT-Tools
+title: IT Tools
main:
fluid: false
---
@@ -8,19 +8,19 @@ main:
# IT Tools
::alert{type="info"}
-đŻ __Objectifs :__
-- Installer IT-Tools
-- Exposer IT Tools avec Swag
+đŻ __Goals:__
+- Install IT Tools
+- Expose IT Tools with Swag
::
-[IT Tools](https://github.com/CorentinTh/it-tools) est un conteneur exposant une page web permettant d'accéder à un grand nombre d'outil de développement.
+[IT Tools](https://github.com/CorentinTh/it-tools) is a container exposing a web page that provides access to a wide range of development tools.

## Installation
---
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `it-tools` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `it-tools`, and paste the following:
```yaml
---
@@ -34,7 +34,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 enable automatic updates.
```yaml
services:
@@ -44,68 +44,67 @@ services:
- com.centurylinklabs.watchtower.enable=true
::
-
-Déployez le conteneur et rendez-vous sur `http://ipduserveur:3222`. Et voilà , votre instance IT Tools en webui est disponible !
+Deploy the container and visit `http://yourserverip:3222`. Thatâs it, your IT Tools web UI instance is up and running!
::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 IT Tools avec Swag
+## Expose IT Tools with Swag
---
-Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer IT Tools via Swag.
+You might want to access it remotely on all your devices. To do that, we'll expose IT Tools using Swag.
::alert{type="info"}
:::list{type="info"}
-- __Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `tools.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).
+- __Pre-requisite:__ We assume youâve created a subdomain like `tools.yourdomain.com` in your [DNS zone](/generalites/dns) with `CNAME` set to `yourdomain.com`. Also, unless youâre using [Cloudflare Zero Trust](/serveex/securite/cloudflare), make sure youâve already forwarded port `443` from your router to port `443` on your server in the [NAT rules](/generalites/nat).
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de it-tools :
+In Dockge, go to the SWAG stack and edit the compose file to add the IT Tools network:
```yaml
services:
swag:
container_name: # ...
- # ...
- networks: # Relie le conteneur au réseau custom
+ # ...
+ networks: # Connects the container to the custom network
# ...
- - it-tools # Nom du réseau déclaré dans la stack
+ - it-tools # Network name as defined in the IT Tools stack
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- it-tools: # Nom du réseau déclaré dans la stack
- name: it-tools_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ it-tools: # Network name as defined in the IT Tools stack
+ name: it-tools_default # Actual name of the external network
+ external: true # Indicates it's an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de it-tools est `it-tools_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 IT Tools network is named `it-tools_default`. You can check connectivity by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
+- We also assume the SWAG network is named `swag_default`.
:::
::
-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.
-Dans les dossiers de Swag, créez le fichier `tools.subdomain.conf`.
+Inside the Swag folders, create the file `tools.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 and edit your files instead of using terminal commands.
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/tools.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
@@ -158,10 +157,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é it-tools !
+And thatâs it â IT Tools is now exposed!
::alert{type="success"}
-⚠__Astuce :__ Vous pouvez protéger cette app avec Authentik en ouvrant `tools.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).
+âš __Tip:__ You can secure this app with Authentik by opening `tools.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 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/8.development/_dir.yml b/content/3.serveex/8.development/_dir.yml
index c0bed4c..87e09b2 100644
--- a/content/3.serveex/8.development/_dir.yml
+++ b/content/3.serveex/8.development/_dir.yml
@@ -1 +1 @@
-navigation.title: Développement
\ No newline at end of file
+navigation.title: Developpement
\ No newline at end of file
diff --git a/content/3.serveex/9.apps/1.adguard.md b/content/3.serveex/9.apps/1.adguard.md
index 94230da..8bdec3f 100644
--- a/content/3.serveex/9.apps/1.adguard.md
+++ b/content/3.serveex/9.apps/1.adguard.md
@@ -8,36 +8,37 @@ main:
# Adguard Home
::alert{type="info"}
-đŻ __Objectifs :__
-- Installer et déployer Adguard
-- Exposer Adguard
-- SĂ©curiser les requĂȘtes avec SSL/TLS
-- Configurer les appareils clients
+đŻ __Goals:__
+- Install and deploy Adguard
+- Expose Adguard
+- Secure DNS queries with SSL/TLS
+- Configure client devices
::
-[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) est un serveur DNS anti-pub et anti-traçage qui fonctionne au niveau du systÚme. Une fois configuré, il couvrira TOUS vos appareils domestiques et vous n'aurezbesoin d'aucun logiciel cÎté client pour cela.
+[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) is a DNS server that blocks ads and tracking at the system level. Once configured, it will protect ALL your home devices without the need for any client-side software.
-Il fonctionne comme un serveur DNS qui redirige les domaines de suivi vers un «black hole», empĂȘchant ainsi vos appareils de se connecter Ă ces serveurs.
+It works as a DNS server that redirects tracking domains to a âblack hole,â preventing your devices from connecting to them.
-En pratique, une fois en place, il vous faudra juste configurer les serveurs DNS de vos appareils, pour que ces derniers l'utilisent.
+In practice, once it's in place, all you need to do is set your devices to use Adguard as their DNS server.
-**Rappel sur le fonctionnement d'un DNS :**
+**Quick reminder of how DNS works:**
-Lorsque vous naviguez sur un site, ou une application, des requĂȘtes sont Ă©mises vers un ou des domaines afin d'afficher le contenu de votre page. Les publicitĂ©s notamment. Votre appareil ne connait pas les adresses IP de ces serveurs Ă joindre. Pour les connaitre, il va contacter un _serveur de nom_ (Domain Name Server) qui lui va lui rĂ©pondre avec l'adresse IP la plus Ă jour pour le domaine de la requĂȘte.
+When you visit a site or use an app, it makes requests to various domains to load contentâads in particular. Your device doesnât know the IP addresses of these domains, so it contacts a _Domain Name Server_ (DNS), which returns the current IP address.
-Par défaut, votre appareil utilise le serveur votre fournisseur d'accÚs, paramétré dans votre box ou directement sur le CGNAT de votre opérateur si appareil mobile. Cela peut etre changé directement dans les réglages de votre navigateur, mais aussi dans le systÚme de votre appareil, et parfois directement dans votre box si votre FAI le permet.
+By default, your device uses your ISP's DNS server, which is usually configured in your router or, for mobile devices, at the carrierâs CGNAT level. You can change this in your browser settings, your deviceâs system settings, or even directly in your router, depending on your ISP.
-Adguard lui, va s'intercaler entre le serveur de nom et votre appareil. Si vous paramétrez vos appareil, ils contacteront d'abord adguard qui filtrera les requetes, via des listes réguliÚrement mises à jour :
+Adguard will act as a middleman between your device and the upstream DNS servers. If you configure your devices to use Adguard:
-- Si le domaine n'est pas dans une blocklist, il contactera des serveurs de noms génériques (dit upstreams) et répondra vers vos appareils avec l'adresse IP recherchée.
-- Si le domaine est dans une blocklist, il ne contactera pas les DNS upstream et ne répondre pas à vos appareils. Le contenu affilié à cette requete ne s'affichera pas.
+- If the domain is not in a blocklist, Adguard queries the upstream DNS servers and returns the correct IP to your device.
+- If the domain *is* in a blocklist, Adguard will block the request and return nothing, so the associated content wonât load.
-C'est ainsi que les pubs et domaines malveillants sont bloqués : leurs domaines sont présents dans la blocklist, le reste de la page lui charge correctement.
+This is how ads and malicious domains are blockedâAdguard blocks only the bad domains, allowing the rest of the page to load normally.

+
## Installation
---
-Structure des dossiers :
+Folder structure:
```console
root
@@ -51,18 +52,17 @@ root
::alert{type="info"}
:::list{type="info"}
-- Nous monterons aussi le dossier `/docker/swag/config/etc/letsencrypt` afin d'avoir accĂšs au certificat SSL de Swag.
+- We will also mount the `/docker/swag/config/etc/letsencrypt` folder to access Swag's SSL certificate.
:::
::
-Ouvrez Dockge, et cliquez sur `compose`
+Open Dockge and click `compose`
-Nommez la stack `adguard` et copiez la configuration ci-dessous
+Name the stack `adguard` and paste the configuration below:
```yaml
---
services:
-
adguardhome:
container_name: adguard
image: adguard/adguardhome
@@ -77,82 +77,81 @@ services:
- /docker/adguardhome/confdir:/opt/adguardhome/conf
- /docker/adguardhome/workdir:/opt/adguardhome/work
- /docker/swag/config/etc/letsencrypt:/swag-ssl:ro
-
```
-
-
::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:
- adguardhome:
- #...
- labels:
- - com.centurylinklabs.watchtower.enable=true
+```yaml
+services:
+ adguardhome:
+ # ...
+ labels:
+ - com.centurylinklabs.watchtower.enable=true
+```
::
-Déployez la stack.
+Deploy the stack.
-Rendez-vous sur `http//ipduserveur:3000` et suivez les instructions
+Go to `http://yourserverip:3000` and follow the setup instructions.
-Et voilà , vous avez déployé Adguard !
+Thatâs it! Adguard is deployed.
-## Exposer Adguard avec Swag
+
+## Exposing AdGuard with SWAG
---
-Pour ĂȘtre utilisable hors de chez vous, vous devez exposer Adguard
+To make AdGuard usable from outside your home network, you need to expose it.
::alert{type="info"}
:::list{type="info"}
-- __Au prĂ©alable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `adguard.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et 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). Redirigez Ă©galement le port `53` et le port `853` vers votre serveur. Ces ports serviront Ă router les requĂȘtes DNS.
+- __Prerequisites:__ We assume you've created a subdomain like `adguard.mydomain.com` in your [DNS zone](/generalites/dns) with a `CNAME` pointing to `mydomain.com`, and that youâve already forwarded port `443` from your router to port `443` on your server in your [NAT rules](/generalites/nat). Also forward port `53` and port `853` to your server. These ports are used to route DNS requests.
:::
::
::alert{type="warning"}
:::list{type="warning"}
-- N'utilisez pas les tunnels cloudflare pour exposer Adguard, et désactivez tout proxy.
+- Do not use Cloudflare tunnels to expose AdGuard, and make sure any proxying is disabled.
:::
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau d'adguard :
+In Dockge, go to the SWAG stack and edit the compose file to add the AdGuard network:
```yaml
services:
swag:
container_name: # ...
# ...
- networks: # Relie le conteneur au réseau custom
+ networks: # Connect the container to the custom network
# ...
- - adguard # Nom du réseau déclaré dans la stack
+ - adguard # Name of the network declared in the stack
-networks: # Définit le réseau custom
+networks: # Define the custom network
# ...
- adguard: # Nom du réseau déclaré dans la stack
- name: adguard_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ adguard: # Name of the network declared in the stack
+ name: adguard_default # Actual name of the external network
+ external: true # Specifies that this is an external network
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau d'adguard est `adguard_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
+- We assume here that the AdGuard network is named `adguard_default`. You can verify the connection is working by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complÚtement opérationnel.
-
-Créez et ouvrez le fichier `adguard.subdomain.conf`
+Restart the stack by clicking "Deploy" and wait for SWAG to be fully operational.
+
+Create and open the file `adguard.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.
+âš __Tip for terminal haters:__
+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/adguard.subdomain.conf
```
-Editez le fichier en appuyant sur `i` puis copiez la configuration ci-dessous :
+Edit the file by pressing `i` and then pasting the configuration below:
```nginx
## Version 2023/05/31
@@ -227,82 +226,80 @@ server {
}
}
-
```
::alert{type="success"}
-âš __Astuce :__
+âš __Tip:__
-Vous pouvez protéger cette app avec Authentik en ouvrant `adguard.subdomain.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). Il vous faudra exclure l'url `https://adguard.mondomaine.fr/dns-query` de l'authentification :
+You can protect this app with Authentik by opening `adguard.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). Youâll need to exclude the URL `https://adguard.mydomain.com/dns-query` from authentication:
-- Editez le fournisseur d'Adguard
-- Dans *paramÚtres avancés du protocole > chemins authentifiés*, saisissez `^/dns-query`
+- Edit the AdGuard provider
+- Under *Advanced Protocol Settings > Authenticated Paths*, enter `^/dns-query`
::
-Appuyez sur `Echap` puis sauvegardez et quittez en tapant `:x`
+Press `Esc`, then save and exit by typing `:x`
-Et voilà , vous exposez Adguard à présent !
+And that's it! AdGuard is now exposed!
-## Configurer le chiffrement SSL/TLS
+## Configure SSL/TLS Encryption
---
-Le chiffrement est essentiel si vous souhaitez garder privĂ©es les requĂȘtes que vous faites vers adguard. Chiffrer ces requĂȘtes c'est vous assurez que personne, meme votre FAI ne connaissent votre historique. C'est aussi vous assurer que personne d'autre que votre serveur vous rĂ©pond.
+Encryption is essential if you want to keep your queries to AdGuard private. Encrypting your queries ensures that no oneânot even your ISPâcan see your history. It also ensures that only your server can respond to you.
-Afin de configurer le chiffrement :
+To configure encryption:
-- Allez dans _paramĂštre_ puis dans _chiffrement_.
-- Parametrez comme suit
+- Go to _Settings_ then _Encryption_.
+- Set the options as follows:

-- Puis en dessous, dans la section _certificats_ cochez _Définir un emplacement de fichier du certificat_
-- Dans le champs de saisie, mettez `/swag-ssl/live/mondomaine.fr/fullchain.pem` en remplaçant `mondomaine.fr` par votre domaine principal.
-- Dans _clé privée_ cochez _Définir un fichier pour la clef privée_
-- Dans le champs de saisie, mettez `/swag-ssl/live/mondomaine.fr/privkey.pem` en remplaçant `mondomaine.fr` par votre domaine principal.
-- Validez
+- Below, in the _Certificates_ section, check _Use file path for certificate_
+- In the input field, enter `/swag-ssl/live/mydomain.com/fullchain.pem`, replacing `mydomain.com` with your actual domain.
+- For _Private Key_, check _Use file path for private key_
+- In the input field, enter `/swag-ssl/live/mydomain.com/privkey.pem`, replacing `mydomain.com` accordingly.
+- Save
-Et voilĂ ! Vous avez protĂ©gĂ© vos futures requĂȘtes DNS !
+Done! Your future DNS queries are now protected!
-## Configurer les appareils
+## Configure Devices
---
-Pour configurer vos appareils, vous avez plusieurs choix (que vous pouvez cumuler).
-### Sécuriser le réseau local
-Vous pouvez sĂ©curiser votre rĂ©seau local avec adguard en configurant votre box pour que chaque requĂȘte DNS soit dirigĂ©e par dĂ©faut vers adguard plutot que les services de votre FAI. Attention, votre box doit pouvoir permettre le changement de DNS (Orange ne le permet pas).
+You have several options (which you can combine) to configure your devices.
+### Secure the Local Network
+You can secure your local network with AdGuard by configuring your router to direct all DNS queries by default to AdGuard instead of your ISPâs DNS. Note: your router must allow DNS changes (Orange routers do not).
-Généralement cette option est dans les paramÚtres _DHCP_ de votre box. Pensez bien à ajouter un serveur secondaire tel que :
+This option is usually in the _DHCP_ settings. Make sure to add a fallback DNS server such as:
-- Cloudlare : `1.1.1.1`
-- Google : `8.8.8.8`
+- Cloudflare: `1.1.1.1`
+- Google: `8.8.8.8`
-En effet, sans cela, si votre serveur tombe, vos appareils n'arriveraient plus Ă se connecter Ă internet.
+Without this, if your server goes down, your devices will lose internet access.
::alert{type="info"}
:::list{type="info"}
-- Des appareils peuvent avoir un autre DNS paramétré et ne pas utiliser ceux de la box.
+- Some devices may have a separate DNS configured and may not use the routerâs DNS.
:::
::
-### Forcer un navigateur Ă utiliser Adguard
+### Force a Browser to Use AdGuard
-Dans votre navigateur, vous pouvez configurer un DNS pour le forcer Ă utiliser adguard home.
-Dans les paramĂštres, il vous faudra renseigner l'adresse` https://adguard.mondomaine.fr/dns-query`
+In your browser, you can configure a DNS to force it to use AdGuard Home.
+In the settings, specify the address `https://adguard.mydomain.com/dns-query`
-### Windows, paramétrer Adguard au niveau systÚme
+### Configure AdGuard at the System Level on Windows
-Dans windows, vous devez paramétrer Adguard pour chaque carte réseau que vous souhaitez utiliser.
+In Windows, you need to configure AdGuard for each network adapter you want to use.
-- Rendez vous dans _accueil > Réseau et internet >_ et choisissez votre carte réseau à modifier
-- Cliquez sur _modifier les DNS_ (parfois dans _propriété du matériel_)
-- Choisissez `Manuel`
-- Activez IPv4
-- Renseignez l'IP publique de votre serveur (celle accessible depuis internet)
-- Activez _DNS sur HTTPS (modĂšle manuel)_
-- Désactivez _retour au texte en clair_
-- Enregistrez
+- Go to _Home > Network & Internet_, then select the network adapter to modify
+- Click _Edit DNS_ (sometimes under _Hardware Properties_)
+- Choose `Manual`
+- Enable IPv4
+- Enter your serverâs public IP (the one accessible from the internet)
+- Enable _DNS over HTTPS (manual template)_
+- Disable _Fallback to plaintext_
+- Save
-Tous les programmes de votre machine utilisant cette carte réseau seront filtrés par Adguard.
+All programs using that network adapter will now be filtered by AdGuard.
-
-## Ajouter des filtres
+## Add Filters
---
-- Allez dans les paramĂštres et changez les filtres.
\ No newline at end of file
+- Go to the settings and change the filters.
\ No newline at end of file
diff --git a/content/3.serveex/9.apps/2.vaultwarden.md b/content/3.serveex/9.apps/2.vaultwarden.md
index b83f154..95e78a1 100644
--- a/content/3.serveex/9.apps/2.vaultwarden.md
+++ b/content/3.serveex/9.apps/2.vaultwarden.md
@@ -8,18 +8,18 @@ main:
# Vaultwarden
::alert{type="info"}
-đŻ __Objectifs :__ Installer [Vaultwarden](https://github.com/dani-garcia/vaultwarden) pour gĂ©rer vos mot de passe sur tout vos appareils (remplace la gestion de mot de passe Google ou Apple).
+đŻ __Goals:__ Install [Vaultwarden](https://github.com/dani-garcia/vaultwarden) to manage your passwords across all your devices (a replacement for Google or Apple password managers).
::

-[Vaultwarden](https://github.com/dani-garcia/vaultwarden) est une solution de gestion de vos mot de passe (génération, saisie semi-automatique...) que vous pouvez installer directement sur votre serveur. Cette solution remplace les gestionnaires comme Google, Apple ou Keepass. Cette solution permet de synchroniser tout vos mots de passe sur vos différentes machines, avec un chiffrement de bout en bout.
+[Vaultwarden](https://github.com/dani-garcia/vaultwarden) is a password management solution (generation, autofill...) that you can host directly on your server. This replaces managers like Google, Apple, or Keepass. Vaultwarden synchronizes your passwords across all your devices with end-to-end encryption.
-Vaultwarden est un fork de la solution [Bitwarden](https://bitwarden.com/fr-fr/help/).
+Vaultwarden is a fork of [Bitwarden](https://bitwarden.com/fr-fr/help/).
## Installation
---
-Structure des dossiers
+Folder structure:
```console
root
@@ -30,7 +30,7 @@ root
âââ .env
```
-Ouvrez Dockge, cliquez sur `compose`, appelez la stack `vaultwarden` puis copiez collez ceci :
+Open Dockge, click on `compose`, name the stack `vaultwarden`, and paste the following:
```yaml
---
@@ -59,95 +59,95 @@ services:
- SIGNUPS_VERIFY=true
- SIGNUPS_VERIFY_RESEND_TIME=3600
- SIGNUPS_VERIFY_RESEND_LIMIT=5
-
```
::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:
- vauktwarden:
- #...
- labels:
- - com.centurylinklabs.watchtower.enable=true
+```yaml
+services:
+ vaultwarden:
+ #...
+ labels:
+ - com.centurylinklabs.watchtower.enable=true
+```
::
-Nous allons maintenant générer un hash de mot de passe, qu'il faudra renseigner dans la variable `TOKEN` du `.env`
+Next, generate a password hash to put in the `TOKEN` variable in `.env`:
```shell
-echo -n "votremotdepasse" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
+echo -n "yourpassword" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
```
-Copiez le résultat précieusement.
+Copy the result securely.
-Dans le `.env`, renseignez les variables suivantes :
+In the `.env` file, enter the following variables:
```properties
URL=
TOKEN=
```
-| Variable | Valeur | Exemple |
-|-------------------------|---------------------------------------------------------|----------------------------|
-| `URL`{lang=properties} | L'url de votre serveur vaultwarden | `https://vault.domaine.fr` |
-| `TOKEN`{lang=properties} | Le token que vous avez précédemment copié précieusement | `'$argon2id$v=19$m=65540,t=3,p=4$bXBGME` |
+| Variable | Value | Example |
+|----------|-------|---------|
+| `URL` | The URL of your Vaultwarden server | `https://vault.yourdomain.com` |
+| `TOKEN` | The token you previously copied | `'$argon2id$v=19$m=65540,t=3,p=4$bXBGME...` |
-Puis déployez le conteneur.
-
-Depuis quelques temps, Vaultwarden ne permet pas d'etre accĂ©der sans certificat SSL, ce qui empeche d'y accĂ©der via son IP local. Nous y accĂšderons donc aprĂšs l'avoir exposĂ© avec SWAG, qui ajoute lui mĂȘme un certificat SSL.
+Then deploy the container.
+Recently, Vaultwarden requires SSL to be accessed, which prevents access via a local IP. We'll expose it with SWAG, which provides an SSL certificate.
::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 Vaultwarden avec SWAG
+## Exposing Vaultwarden with SWAG
---
-Tout l'intĂ©rĂȘt d'une telle solution, c'est de pouvoir y accĂ©der Ă distance et sur tout vos appareils. Pour cela, nous allons exposer Vaultwarden via [SWAG](/serveex/coeur/swag).
+The main benefit of Vaultwarden is being able to access it remotely from any device. We'll expose it through [SWAG](/serveex/coeur/swag).
::alert{type="info"}
-⚠__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/generalites/dns) un sous domaine du type `vault.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).
+âš __Before you start:__ Make sure you've created a DNS subdomain like `vault.yourdomain.com` with `CNAME` pointing to `yourdomain.com` and (unless using Cloudflare Zero Trust) that you've forwarded port `443` from your router to your server's `443` via [NAT rules](/generalites/nat).
::
-Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de vaultwarden :
+In Dockge, go to the SWAG stack and edit the compose file to add the Vaultwarden network:
```yaml
services:
swag:
container_name: # ...
- # ...
- networks: # Relie le conteneur au réseau custom
- # ...
- - vaultwarden # Nom du réseau déclaré dans la stack
+ # ...
+ networks: # Connects container to custom network
+ # ...
+ - vaultwarden # Name of the declared network
-networks: # Définit le réseau custom
+networks: # Defines the custom network
# ...
- vaultwarden: # Nom du réseau déclaré dans la stack
- name: vaultwarden_default # Nom véritable du réseau externe
- external: true # Précise que c'est un réseau à rechercher en externe
+ vaultwarden: # Name of the declared network
+ name: vaultwarden_default # Actual name of the external network
+ external: true
```
::alert{type="info"}
:::list{type="info"}
-- Ici nous partons du principe que le nom du réseau de vaultwarden est `vaultwarden_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
+- We're assuming the network name is `vaultwarden_default`. You can check connectivity by visiting the SWAG dashboard at http://yourserverip:81.
:::
::
-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.
-Dans les dossiers de Swag, créez le fichier `vault.subdomain.conf`.
+In SWAG's config folder, create the file `vault.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 navigate and edit files instead of using terminal commands.
::
```shell
sudo vi /docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
```
-Entrez en modification avec la touche `i` et collez la configuration ci-dessous :
+
+Press `i` to edit, and paste the following configuration:
```nginx
server {
@@ -174,13 +174,13 @@ server {
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
- # enable for ldap auth (requires ldap-server.conf in the server block)
+ # enable for ldap auth
#include /config/nginx/ldap-location.conf;
- # enable for Authelia (requires authelia-server.conf in the server block)
+ # enable for Authelia
#include /config/nginx/authelia-location.conf;
- # enable for Authentik (requires authentik-server.conf in the server block)
+ # enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
@@ -189,7 +189,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
-
}
location ~ ^(/vaultwarden)?/admin {
@@ -197,13 +196,13 @@ server {
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
- # enable for ldap auth (requires ldap-server.conf in the server block)
+ # enable for ldap auth
#include /config/nginx/ldap-location.conf;
- # enable for Authelia (requires authelia-server.conf in the server block)
+ # enable for Authelia
#include /config/nginx/authelia-location.conf;
- # enable for Authentik (requires authentik-server.conf in the server block)
+ # enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
@@ -212,7 +211,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
-
}
location ~ (/vaultwarden)?/api {
@@ -222,7 +220,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
-
}
location ~ (/vaultwarden)?/notifications/hub {
@@ -232,17 +229,16 @@ server {
set $upstream_port 80;
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`, then type `:x` and press `Enter` to save and exit.
-Et voilà , vous avez exposé Vaultwarden ! Accédez au panneau d'administration via `vault.mondomaine.fr` et créez votre compte. Plus d'info sur les fonctionnalités de [Bitwarden](https://bitwarden.com/help/).
+And there you go â Vaultwarden is now exposed! Visit `vault.yourdomain.com` to access the admin panel and create your account. For more information, see the [Bitwarden documentation](https://bitwarden.com/help/).
-N'oubliez pas d'installer les extensions Bitwarden (elles sont compatibles avec Vaultwarden) pour [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) ou pour [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/) ainsi que les applications [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) et [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) afin de synchroniser vos mot de passe.
+Don't forget to install Bitwarden browser extensions (they work with Vaultwarden) for [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) and [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/), as well as [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) and [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) apps to sync your passwords.
::alert{type="success"}
-⚠__Astuce :__ vous pouvez protéger cette app avec Authentik en ouvrant `tools.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).
+⚠__Tip:__ You can protect this app with Authentik by opening `tools.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).
::
\ No newline at end of file
diff --git a/content/3.serveex/9.apps/_dir.yml b/content/3.serveex/9.apps/_dir.yml
index be17195..6972e2b 100644
--- a/content/3.serveex/9.apps/_dir.yml
+++ b/content/3.serveex/9.apps/_dir.yml
@@ -1 +1 @@
-navigation.title: Applications utiles
+navigation.title: Useful Apps
diff --git a/content/5.betises/1.bash.md b/content/5.betises/1.bash.md
index 5e9308d..f704422 100644
--- a/content/5.betises/1.bash.md
+++ b/content/5.betises/1.bash.md
@@ -1,22 +1,22 @@
---
navigation: true
-title: Scripts bash
+title: Bash Scripts
main:
fluid: false
---
:ellipsis{left=0px width=40rem top=10rem blur=140px}
-# Scripts bash
+# Bash Scripts
-Quelques scripts en vracs qui m'ont sauvé la vie.
+A few random scripts that saved my life.
-## Detection de doublons et remplacement par des hardlinks
+## Detecting Duplicates and Replacing Them with Hardlinks
---
-Six mois aprÚs avoir téléchargé des térabytes de media, je me suis rendu compte que Sonarr et Radarr les copaient dans ma biblio Plex au lieu de créer des hardlinks. C'est dû à un mécanisme contre intuitif qui est que si vous montez plusieurs dossiers dans Sonarr/Radarr, il les voit comme deux systemes de fichiers différents. Et ne peut donc pas créer de hardlinks. C'est pour cela qu'il ne faut monter qu'un seul dossier parent, qui contient tous les enfants (`downloads`, `movies`, `tvseries` dans le dossier parent `media` par exemple).
+Six months after downloading terabytes of media, I realized that Sonarr and Radarr were copying them into my Plex library instead of creating hardlinks. This happens due to a counterintuitive mechanism: if you mount multiple folders in Sonarr/Radarr, it sees them as different filesystems and thus cannot create hardlinks. Thatâs why you should mount only one parent folder containing all child folders (like `downloads`, `movies`, `tvseries` inside a `media` parent folder).
-J'ai donc restructuré mes dossiers, remis à la main chaque chemin dans Qbittorrent, Plex, et autres. Il restait à trouver un moyen de détecter les doublons existants et d'automatiquement les supprimer et de créer des hardlinks à la place, pour économiser de l'espace.
+So I restructured my directories, manually updated every path in Qbittorrent, Plex, and others. The last challenge was finding a way to detect existing duplicates, delete them, and automatically create hardlinks insteadâto save space.
-Mes dossiers :
+My directory structure:
```console
.
@@ -28,84 +28,85 @@ Mes dossiers :
âââ tvseries
```
-Mes dossiers originaux sont dans `seedbox`, et il ne faut surtout pas les modifier pour qu'ils continuent d'etre "seed". Les copies, et donc doublons, sont dans `movies` et `tvseries`. Mais pour complexifier la chose, j'ai aussi des media uniques originaux déposés par ailleurs dans `movies` et `tvseries`, sinon cela serait trop facile. Et dans ces deux dossiers, il peut y avoir des sous dossiers, des sous-sous dossiers, etc.
+The originals are in `seedbox` and must not be modified to keep seeding. The copies (duplicates) are in `movies` and `tvseries`. To complicate things, there are also unique originals in `movies` and `tvseries`. And within those, there can be subfolders, sub-subfolders, etc.
-L'idée est donc de :
+So the idea is to:
-- lister les originaux dans seedbox
-- lister les fichiers dans movies
-- comparer les deux listes et isoler les chemins des doublons
-- supprimer les doublons
-- hardlinker les originaux dans les dossiers des doublons supprimés
+- list the originals in seedbox
+- list files in movies and tvseries
+- compare both lists and isolate duplicates
+- delete the duplicates
+- hardlink the originals to the deleted duplicate paths
-Alors oui j'ai demandé à ChatGPT et à Qwen3 (que j'héberge sur une machine dédiée à l'IA). Et evidemment ils m'ont conseillé les rfind, rdfind, dupes, rdupes, rmlint... Mais comparer les hash de 30TB de media, faudrait plusieurs jours, j'ai vite abandonné.
+Yes, I asked ChatGPT and Qwen3 (which I host on a dedicated AI machine). Naturally, they suggested tools like rfind, rdfind, dupes, rdupes, rmlint... But hashing 30TB of media would take days, so I gave up quickly.
-Au final, je n'ai que des `.mkv` Ă chercher et les doublons ont exactement les mĂȘmes noms que les originaux, ce qui simplifie grandement la tĂąche. Un simple script bash devait donc ĂȘtre suffisant.
+In the end, I only needed to find `.mkv` files, and duplicates have the exact same name as the originals, which simplifies things a lot. A simple Bash script would do the job.
-Je vous passe les incessantes questions réponses avec ChatGPT, je suis assez déçu. Qwen3 a été bien plus propre. ChatGPT n'a pas cessé de mettre des solutions type awk, qui pÚtent la lecture des chemins au moindre espace. En faisant relire à Qwen, et en lui demandant de se passer de awk, le résultat a été immediatement plus qualitatif.
+Spare you the endless Q&A with ChatGPTâI was disappointed. Qwen3 was much cleaner. ChatGPT kept pushing awk-based solutions, which fail on paths with spaces. With Qwenâs help and dropping awk, the results improved significantly.
-Pour tester, j'ai d'abord demandé un script qui ne fait que lister et comparer :
+To test, I first asked for a script that only lists and compares:
```bash
#!/bin/bash
-# Créer un tableau associatif pour stocker les doublons
+# Create an associative array to store duplicates
declare -A seen
-# Trouver tous les fichiers .mkv uniquement (exclure les dossiers)
+# Find all .mkv files only (exclude directories)
find /media/seedbox /media/movies /media/tvseries -type f -name "*.mkv" -print0 | \
while IFS= read -r -d '' file; do
- # Obtenir l'inode du fichier et son chemin
+ # Get the file's inode and name
inode=$(stat --format="%i" "$file")
filename=$(basename "$file")
- # Si ce nom de fichier a déjà été vu
+ # If the filename has been seen before
if [[ -n "${seen[$filename]}" ]]; then
- # Vérifier si l'inode est différent du précédent
+ # Check if the inode is different from the previous one
if [[ "${seen[$filename]}" != "$inode" ]]; then
- # Ajouter le doublon Ă la sortie en affichant les chemins complets
- echo "Doublons pour \"$filename\" :"
+ # Output the duplicates with full paths
+ echo "Duplicates for \"$filename\":"
echo "${seen["$filename"]} ${seen["$filename:full_path"]}"
echo "$inode $file"
echo
fi
else
- # Si c'est la premiĂšre fois qu'on rencontre ce nom de fichier
seen[$filename]="$inode"
seen["$filename:full_path"]="$file"
fi
done
```
-J'ai ainsi obtenu ce type de réponse :
+This gave me outputs like:
```
-Doublons pour "episode1.mkv" :
+Duplicates for "episode1.mkv":
1234567 /media/seedbox/sonarr/Serie 1/Season1/episode1.mkv
2345678 /media/tvseries/Serie 1/Season1/episode1.mkv
```
-Avec "awk", il se serait arrĂȘtĂ© Ă `/media/seedbox/sonarr/Serie`. Je ne suis absolument pas un pro, mais Qwen3 a Ă©tĂ© plus performant et m'a expliquĂ© de A Ă Z pourquoi et comment faire.
+With `awk`, it wouldâve stopped at `/media/seedbox/sonarr/Serie`. Iâm far from an expert, but Qwen3 performed better and explained everything clearly.
-Une fois que j'ai vu que cela fonctionnait bien, j'ai demandé un script qui fait l'intégralité de la cinématique, de la comparaison aux hardlinks en passant par la suppression des doublons.
-Encore une fois ChatGPT a été décevant. Malgré mes demandes, il créait d'abord les hardlinks et ensuite il supprimait les doublons. Ce qui.. suprimme aussi le lien (meme si cela conserve l'originale). Idiot.
-Petit détour par Qwen3, et ma RTX 5090 en PLS, et paf un résultat bien plus propre. Bon il a gardé les emoji de ChatGPT qui peut pas s'empecher d'en mettre partout, mais voilà :
+Once I verified the output, I asked for a complete script: compare, delete duplicates, create hardlinks.
+
+Again, ChatGPT disappointed. Despite my requests, it created hardlinks *before* deleting the duplicatesâeffectively linking and then deleting the link (though the original is kept). Not helpful.
+
+Quick stopover to Qwen3, RTX 5090 in overdrive, and bamâmuch better result. Yes, it kept ChatGPT-style emojis, but here it is:
```bash
#!/bin/bash
-echo "đ Ătape 1 : Indexation des fichiers originaux dans /media/seedbox..."
+echo "đ Step 1: Indexing original files in /media/seedbox..."
declare -A seen
-# Indexe tous les .mkv dans seedbox
+# Index all .mkv files in seedbox
while IFS= read -r -d '' file; do
filename=$(basename "$file")
seen["$filename"]="$file"
done < <(find /media/seedbox -type f -name "*.mkv" -print0)
-echo "đŠ Ătape 2 : Remplacement automatique des doublons..."
+echo "đŠ Step 2: Automatically replacing duplicates..."
total_doublons=0
-total_ko_economises=0
+total_ko_saved=0
while IFS= read -r -d '' file; do
filename=$(basename "$file")
@@ -117,30 +118,30 @@ while IFS= read -r -d '' file; do
if [[ "$inode_orig" != "$inode_dupe" ]]; then
size_kb=$(du -k "$file" | cut -f1)
- echo "đ Remplacement :"
- echo " Doublon : $file"
+ echo "đ Replacing:"
+ echo " Duplicate : $file"
echo " Original : $original"
- echo " Taille : ${size_kb} Ko"
+ echo " Size : ${size_kb} KB"
- rm "$file" && ln "$original" "$file" && echo "â
Hardlink créé."
+ rm "$file" && ln "$original" "$file" && echo "â
Hardlink created."
total_doublons=$((total_doublons + 1))
- total_ko_economises=$((total_ko_economises + size_kb))
+ total_ko_saved=$((total_ko_saved + size_kb))
fi
fi
done < <(find /media/movies /media/tvseries -type f -name "*.mkv" -print0)
echo ""
-echo "đ§Ÿ RĂ©sumĂ© :"
-echo " đ Doublons remplacĂ©s par hardlink : $total_doublons"
-echo " đŸ Espace disque Ă©conomisĂ© approximatif : ${total_ko_economises} Ko (~$((total_ko_economises / 1024)) Mo)"
-echo "â
Terminé."
+echo "đ§Ÿ Summary:"
+echo " đ Duplicates replaced by hardlink: $total_doublons"
+echo " đŸ Approx. disk space saved: ${total_ko_saved} KB (~$((total_ko_saved / 1024)) MB)"
+echo "â
Done."
```
-Bilan j'ai :
-- appris pas mal de subtilité bash
-- appris qu'il ne faut jamais copier coller un script généré ChatGPT sans le comprendre et sans le tester en dry-run
-- appris que Qwen sur une RTX 5090 est plus cohérent que ChatGPT 4o sur des fermes de serveurs (je vous passe les résultats de la version "normale").
-- appris que mĂȘme quand on a 100TB d'espace, monitorer ce dernier m'aurait permis de voir beaucoup plus tot que j'avais 12TB de doublons qui trainent.
+So, in conclusion, I:
+- Learned many Bash subtleties
+- Learned never to blindly copy-paste a ChatGPT script without understanding and dry-running it
+- Learned that Qwen on a RTX 5090 is more coherent than ChatGPT-4o on server farms (not even mentioning ânormalâ ChatGPT)
+- Learned that even with 100TB of storage, monitoring it wouldâve alerted me much earlier to the 12TB of duplicates lying around
-A plus tard pour de nouvelles aventures passionnantes.
\ No newline at end of file
+Catch you next time for more exciting adventures.
diff --git a/content/5.betises/2.python.md b/content/5.betises/2.python.md
index 940400d..32ddc5a 100644
--- a/content/5.betises/2.python.md
+++ b/content/5.betises/2.python.md
@@ -1,69 +1,67 @@
---
navigation: true
-title: Scripts python
+title: Python Scripts
main:
fluid: false
---
:ellipsis{left=0px width=40rem top=10rem blur=140px}
-# Scripts python
+# Python Scripts
-Mes cochonneries en python
+My messy Python creations
## đ€ Nvidia Stock Bot
---
-Depuis dĂ©jĂ 4 ans, la pĂ©nurie de materiel electronique fait rage. Et les cartes graphiques ne sont pas Ă©pargnĂ©es. En 2020, j'ai du attendre 2 mois pour obtenir mon exemplaire de RTX 3080, et pour cela j'ai du m'inscrire sur [JV Hardware](https://discord.gg/gxffg3GA96) oĂč une poignĂ©e de geek avait mis en place un bot qui envoyait un ping lorsqu'elles Ă©taient disponibles.
+For the past four years, the electronics hardware shortage has been relentless. Graphics cards are no exception. In 2020, I had to wait two months to get my RTX 3080. To manage it, I joined [JV Hardware](https://discord.gg/gxffg3GA96), where a small group of geeks had set up a bot that pinged users when GPUs became available.
-4 ans aprĂšs et 5000 abonnĂ©s plus tard, vient la sortie des RTX 5000. Et lĂ aucun bot dispo sur le marchĂ© ne semble fonctionner correctement. Je ne parle mĂȘme pas d'un certain "influenceur" qui se permet de faire payer l'accĂšs Ă son bot qui ne fonctionne meme pas. Il copie Ă la main les alertes provenant d'autres serveurs, comme le notre qui ont rĂ©solu le problĂšme.
+Four years later and with 5,000 members on the server, the RTX 5000 series is being released. Yet, no working stock bot seems to exist. Not to mention a certain âinfluencerâ who charges users for access to a bot that doesnât even work. He manually copies alerts from other servers like ours, which have already solved the issue.
-Quoiqu'il en soit, désireux d'obtenir une RTX 5090 pour ma machine dédiée à l'IA, je me suis dit qu'il était peut etre le temps de plonger dans le monde de python et de ChatGPT pour m'épauler. A l'aide d'un autre membre du serveur, KevOut, qui a principalement guidé sur le principe de départ et les sources des différentes API, j'ai réussi à obtenir un bot propre, fonctionnel, qui envoie différents types d'alertes via Discord. Avec un simple conteneur docker à déployer.
+Anyway, eager to get an RTX 5090 for my AI-dedicated machine, I decided it was time to dive into Pythonâwith a little help from ChatGPT. Along with another member, KevOut, who helped guide me through the APIs and initial architecture, I ended up building a clean and functional bot that sends different kinds of Discord alertsâall deployable in a simple Docker container.
-AprÚs moult déconvenues, je suis passé de ceci :
+After many setbacks, I went from this:

-Ă cela :
+To this:

-Plus d'infos directement sur le repo :
+More info directly on the repo:
-
- ::card
- #title
- đ __Nvidia Stock Bot__
- #description
- [Robot d'alerte de stock de GPU Nvidia](https://git.djeex.fr/Djeex/nvidia-stock-bot)
- ::
+::card
+#title
+ đ __Nvidia Stock Bot__
+#description
+ [Nvidia GPU stock alert bot](https://git.djeex.fr/Djeex/nvidia-stock-bot)
+::
## đ€ Adguard CIDRE Sync
---
-Adguard Home est une solution merveilleuse pour filter ses requĂȘtes DNS et ainsi se dĂ©barasser de la publicitĂ© ou des DNS des fournisseurs d'accĂšs, ou encore réécrire des requetes.
+Adguard Home is a fantastic solution for DNS-level ad blocking and rewriting requestsâperfect for removing ISP DNS trackers or intrusive ads.
-Quand c'est en local, c'est trĂšs chouette. Mais quand on veut que tout ses appareils en profitent mĂȘme Ă l'exterieur, on est obligĂ© de l'exposer sur le net. Et n'importe qui peut s'en servir et saturer le petit remote Ă 1⏠qu'on a pris pour l'heberger.
+It works great locally, but if you want all your devices (even on the go) to benefit, youâll need to expose Adguard to the internet. Unfortunately, that means anyone can use it, potentially overloading your âŹ1/month remote VPS.
-Adguard permet d'avoir des listes de clients autorisés ou bloqués. ProblÚme, pour autoriser un client il faut son IP, et dans le cas d'un téléphone sur le réseau mobile, beh elle change réguliÚrement. L'idée est donc plutot de bloquer des listes générales plutot que d'autoriser des IP qui de toute façon changent réguliÚrement.
+Adguard allows whitelisting or blacklisting clients. The problem? To whitelist a client, you need their IPâbut for mobile phones, that IP changes often. Instead of trying to whitelist ever-changing IPs, the better approach is to block broader IP ranges by region.
-CIDRE est un outil qui permet de synchroniser des listes de plages IP géolocalisées mises à jour réguliÚrement avec un pare feu. Plutot que de faire tourner CIDRE sur le remote complet avec des rÚgles de pare feu complexes, je me suis dit qu'il fallait simplement s'arranger pour ajouter les plages IP à jour que CIDRE propose au systeme de block list d'adguard, selon les pays que l'on souhaite bloquer.
+CIDRE is a tool that syncs geo-targeted IP ranges with firewalls. Instead of running CIDRE with a full firewall stack on the remote server, I figured I could just import those regularly updated IP ranges into Adguardâs blocklist.
-C'est ainsi qu'est né Adguard CIDRE Sync, un conteneur qui synchronise réguliÚrement la block list d'Adguard avec les plages IP recensées par CIDRE à la fréquence que vous voulez.
+Thus, Adguard CIDRE Sync was born: a container that syncs Adguardâs blocklist with CIDREâs updated IP ranges on a schedule of your choosing.
-L'idée etant de :
-- Backup le fichier de conf d'Adguard au premier lancement (le fichier jamais touchĂ© par le robot est ainsi conservĂ© au cas oĂč)
-- Télécharger la liste des pays selectionnés via une variable d'environnement
-- Permettre d'ajouter soi-meme des IP "Ă la main" dans un fichier
-- Concaténer le tout, backup le fichier de conf (derniÚre update), et injecter la liste dans la bonne section du fichier de conf d'Adguard
-- Recharger Adguard en relançant le container (accÚs au socket via docker socket proxy pour limiter les permissions)
+The idea is to:
+- Backup Adguardâs config file on first run (original untouched version saved)
+- Download selected country IP ranges via an environment variable
+- Let you manually add custom IPs via a file
+- Concatenate, backup the config again (as the updated version), and inject the list into the correct blocklist section
+- Reload Adguard by restarting the container (using Docker socket proxy for limited permissions)
-Tout ceci de maniÚre complÚtement autonome, avec une fréquence choisie en variable d'environnement dans la conf du compose.
+All fully autonomous, with frequency set via environment variable in the `docker-compose` config.
-Plus d'infos directement sur le repo :
+More info directly on the repo:
-
- ::card
- #title
- đ __Adguard CIDRE Sync__
- #description
- [Robot de synchronisation de la blocklist d'Adguard](https://git.djeex.fr/Djeex/adguard-cidre)
- ::
+::card
+#title
+ đ __Adguard CIDRE Sync__
+#description
+ [Adguard blocklist sync bot](https://git.djeex.fr/Djeex/adguard-cidre)
+::
\ No newline at end of file
diff --git a/content/5.betises/_dir.yml b/content/5.betises/_dir.yml
index 6850edc..81103e1 100644
--- a/content/5.betises/_dir.yml
+++ b/content/5.betises/_dir.yml
@@ -1,2 +1,2 @@
icon: noto:test-tube
-navigation.title: Mes bĂȘtises
+navigation.title: My nonsense