diff --git a/content/fr/3.serveex/2.core/3.wireguard.md b/content/fr/3.serveex/2.core/3.wireguard.md index 60e1b36..3c5e66e 100644 --- a/content/fr/3.serveex/2.core/3.wireguard.md +++ b/content/fr/3.serveex/2.core/3.wireguard.md @@ -39,31 +39,38 @@ On peut aussi faire en sorte que les machines reliées au réseau virtuel partag Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront dialoguer entre elle depuis ce réseau. Elles ne pourront pas dialoguer avec une machine situées sur un autre réseau local et non reliée au VPN. ## Côté serveur -::note -📋 __A vérifier au préalable :__ +::note{icon=""} +📋 **À vérifier au préalable :** -- Vérifiez si le port `51820 UDP` estlibre sur votre serveur, et bien routé dans le NAT de la box `Source 51820 UDP -> Destination 51820 UDP -> Serveur`. En effet, votre serveur étant derrière votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connecté à votre VPN. -- Vérifiez aussi que le port `51821 TCP` est libre sur le serveur pour accéder à la web ui. +- Vérifiez que le port `51820 UDP` est libre sur votre serveur et correctement redirigé depuis votre box (`51820 UDP -> Serveur`). +- Vérifiez que le port `51821 TCP` est libre pour l'interface web. :: ::warning -__Attention__: Si votre IP n'est pas fixe, vous devez avoir un nom de domaine redirigeant vers l'IP à jour à l'aide d'un [DynDNS](https://en.wikipedia.org/wiki/Dynamic_DNS). Si votre opérateur internet utilise un [CGNAT](https://en.wikipedia.org/wiki/Carrier-grade_NAT), vous êtes cuit. Vous devrez utiliser un VPS externe pour ce tuto, et y connecter votre serveur comme client. +__Attention__ : si votre IP n'est pas fixe, utilisez un service de DNS dynamique ([DynDNS](https://en.wikipedia.org/wiki/Dynamic_DNS)). Si votre opérateur utilise un [CGNAT](https://en.wikipedia.org/wiki/Carrier-grade_NAT), vous devrez passer par un VPS externe et y connecter votre serveur local comme client. :: -Structure des dossiers +### Structure des dossiers -```text [Arborescence] -root -└── docker - └── wg-easy - ├── config - │ └── etc_wireguard - ├── compose.yaml - └── .env -``` +::file-tree +--- +tree: + /: + - srv: + - docker: + - wg-easy: + - config: + - etc_wireguard/ + - compose.yaml + - .env +--- +:: -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `wg_easy`. +::steps{level="3"} +### Déployer la stack + +Ouvrez Dockge, cliquez sur **Compose**, et nommez la stack `wg_easy`. Copiez la configuration suivante : @@ -105,105 +112,125 @@ networks: config: - subnet: 10.42.42.0/24 - subnet: fdcc:ad94:bacf:61a3::/64 - ``` + ::tip{icon=""} -✨ __Astuce :__ +✨ **Astuce :** -- Vous pouvez personnaliser le port de wireguard et de la webui au lieu des ports par défaut. -- Ajoutez le label de watchtower afin d'automatiser les mises à jour +- Vous pouvez personnaliser les ports de WireGuard et de l'interface web. +- Ajoutez un label Watchtower pour les mises à jour automatiques : - ```yaml [compose.yaml] - services: - wg-easy: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + wg-easy: + # ... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Puis déployez la stack et connectez vous via le web en local sur `http://ipduserveur:51821` +Déployez la stack et accédez à l'interface web locale sur `http://ipduserveur:51821`. ::caution -En cas d'échec, vérifiez les règles du pare-feu. +En cas d'échec du déploiement, vérifiez les règles de votre pare-feu. :: -Une fois connecté, la webui vous guidera : +### Créer votre compte -- Pour créer votre compte et mot de passe d'accès -- Pour configurer l'host à utiliser dans les fichiers de conf : utilisez l'IP publique de votre box internet (ou de votre VPS), ou le nom de domaine redirigeant vers l'IP de votre box, le cas écheant. +Une fois connecté, suivez les instructions de l'interface web pour : -Une fois fait: +- Créer votre compte administrateur et son mot de passe. +- Renseigner le champ host (votre IP publique ou votre nom de domaine). -- Cliquez sur *« Administrator »* > *« Admin Panel »* > *« Config »* -- Modifiez `Allowed IPs` en remplaçant `0.0.0.0/24` par `10.8.0.0/24`. Cela signifie que seules les requêtes IP de `10.8.0.1` à `10.8.0.255` seront redirigées dans le tunnel (split tunneling), laissant ainsi à l'appareil la possibilité d'etre connecté à d'autres tunnels, et à accéder à internet par lui meme. Si vous voulez tout rediriger dans le tunnel, y compris l'acces à internet, laissez `0.0.0.0/24`. -- Supprimez l'IPv6, cela n'apportera que des problèmes. +### Configurer le tunnel -### Recuperation des fichiers de conf +Allez ensuite dans *Administrator → Admin Panel → Config* : -Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host : +- Remplacez `Allowed IPs` `0.0.0.0/24` par `10.8.0.0/24` pour du **split tunneling**. +- Supprimez l'IPv6 (il cause souvent des problèmes inutiles). -- Connectez vous via le web en local sur `http://ipduserveur:51821` -- Créez un client -- Modifiez le client en cliquant sur l'icone d'édition -- Modifiez `Server Allowed IPs` en ajoutant `10.8.0.0/24`. Cela signifie que le serveur laissera vos clients accéder à toutes les IP `10.8.0.1` à `10.8.0.255` connectées à lui, et donc laissera les clients dialoguer entre eux si nécessaire. Si vous voulez laisser vos clients accéder à tous les appareils réseau connectés autour de votre serveur en local, mettez `0.0.0.0`, à condition de l'avoir fait précédemment dans la configuration générale. -- (facultatif) Si votre client est un serveur qui doit être connecté en permanence, modifiez `Advanced` > `Persistent Keep Alive` en mettant `25`. -- Sauvegardez -- Téléchargez le fichier de conf -- Renommez le en `wg0.conf`. (Si ce n'est pas le premier, incrémentez: `wg1.conf`, etc...) +### Terminé ! +:: + +### Récupérer les fichiers de configuration + +Pour configurer les clients : + +::steps{level="4"} +#### Accéder à l'interface web + +Allez sur `http://ipduserveur:51821`. + +#### Créer un nouveau client + +#### Modifier le client + +Ajoutez `10.8.0.0/24` dans `Server Allowed IPs`. + +#### (Facultatif) Régler le Persistent Keep Alive + +Mettez-le à `25` s'il s'agit d'un client connecté en permanence. + +#### Enregistrer et renommer le fichier + +Enregistrez, téléchargez, et renommez le fichier en `wg0.conf` (ou `wg1.conf`, etc.) + +#### Terminé ! +:: ## Sur le serveur client ---- ::note -Nous partons du principe que le serveur client est un serveur linux avec Docker installé +Nous partons du principe que le serveur client tourne sous Linux avec Docker installé. :: -Structure des dossiers +### Structure des dossiers -```text [Arborescence] -root -└── docker - └── wireguard - └── config - │ └── wg_confs - └── compose.yaml -``` - -Creez le dossier `/srv/docker/wireguard/config/wg_confs`. - -::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +::file-tree +--- +tree: + /: + - srv: + - docker: + - wireguard: + - config: + - wg_confs/ + - compose.yaml +--- :: +::steps{level="3"} +### Créer le dossier + ```bash [Terminal] sudo mkdir -p /srv/docker/wireguard/config/wg_confs ``` -Créez le fichier `wg0.conf` +::tip{icon="" to="/serveex/files/file-browser-quantum"} +✨ **Astuce :** vous pouvez utiliser **File Browser Quantum** plutôt que le terminal pour modifier et téléverser vos fichiers. +:: + +### Créer le fichier wg0.conf ```bash [Terminal] sudo nano /srv/docker/wireguard/config/wg_confs/wg0.conf ``` -Copiez-collez le contenu du `wg0.conf` que vous avez téléchargé, puis enregistrez avec :kbd{value="Ctrl+O"} et :kbd{value="Entrée"}, et quittez avec :kbd{value="Ctrl+X"}. +Collez la configuration téléchargée, puis enregistrez avec :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. ::tip{icon=""} -✨ __Astuce :__ Un autre moyen est de transférer le fichier par sftp dans le dossier `/home/nomdutilisateur` puis de le copier dans le bon dossier : - - ```bash [Terminal] - sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs - ``` +✨ **Méthode alternative :** transférez le fichier en SFTP puis déplacez-le : +```bash [Terminal] +sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs +``` :: -Creez le `compose.yaml` dans `/srv/docker/wireguard `: -```bash [Terminal] -sudo nano /srv/docker/wireguard/compose.yaml -``` -Copiez la configuration ci-dessous +### Créer le fichier compose + +Créez le fichier `compose.yaml` dans `/srv/docker/wireguard` : + ```yaml [compose.yaml] --- services: @@ -213,37 +240,41 @@ services: network_mode: host cap_add: - NET_ADMIN - - SYS_MODULE #optional + - SYS_MODULE environment: - TZ=Europe/Paris volumes: - /srv/docker/wireguard/config:/config - - /lib/modules:/lib/modules #optional + - /lib/modules:/lib/modules restart: unless-stopped ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +### Démarrer le conteneur -Lancez le conteneur : ```bash [Terminal] cd /srv/docker/wireguard sudo docker compose up -d ``` + +### Terminé ! +:: + ::note -A répéter pour chaque client +Répétez cette installation pour chaque client. :: ## Autres appareils -- **Téléphone :** installer wireguard et scanner le QR code via le webui (http://ipduserveur:51821) -- **PC :** Installer wireguard client et mettre directement le fichier de conf téléchargé via le webui +- **Mobile :** installez WireGuard et scannez le QR code depuis l'interface web (`http://ipduserveur:51821`) +- **Ordinateur :** installez le client WireGuard et importez le fichier de configuration téléchargé. ::warning -__Attention :__ Si des machines clientes sont sur le meme réseau local que le serveur (derriere la box), éditez le fichier `wg0.conf` uploadé sur cette machine en changeant avec l'adresse locale du serveur : `Endpoint = ipduserveur:51820`{lang=properties} +**Note :** si la machine cliente est sur le même réseau local que le serveur, modifiez le fichier `wg0.conf` pour utiliser l'IP locale du serveur : +`Endpoint = ip-locale-du-serveur:51820` :: -Et voilà ce que cela peut donner ! +Et voici le schéma final de l'installation : ![picture](/img/serveex/wireguard.svg) diff --git a/content/fr/3.serveex/2.core/4.swag.md b/content/fr/3.serveex/2.core/4.swag.md index 663c7b9..1911e25 100644 --- a/content/fr/3.serveex/2.core/4.swag.md +++ b/content/fr/3.serveex/2.core/4.swag.md @@ -6,14 +6,14 @@ description: Configurer SWAG comme reverse proxy avec SSL automatique, exposer v :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[Swag](https://docs.linuxserver.io/general/swag/) est le noyau de ce homelab. C'est un reverse proxy puissant qui permet d'exposer des services sur le net via un ou des noms de domaines, en se chargeant de l'émission des certificats SSL (pour garder des connexions chiffrées), du routage des requêtes et de la sécurisation des accès (par authent HTTP ou par SSO comme Authelia ou Authentik). Toute la doc nécessaire se [situe ici](https://docs.linuxserver.io/general/swag). +[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 internet via des noms de domaine, 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 authentification HTTP ou par SSO comme Authelia ou Authentik). Toute la documentation nécessaire est [disponible ici](https://docs.linuxserver.io/general/swag). -::warning +::warning{to="/serveex/core/wireguard"} -SWAG n'a pour utilité que l'exposition de vos services sur internet. C'est à dire, y accéder via une url publique du type `https://service.mondomaine.fr`. Si vous ne souhaitez pas exposer vos services et plutôt utiliser systématiquement un VPN pour vous connecter à vos services à distance, vous pouvez directement aller [par ici](/serveex/core/wireguard). +SWAG n'a d'utilité que pour exposer 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 préférez systématiquement passer par un VPN pour vous connecter à distance, allez plutôt **par ici**. :: -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. +Ci-dessous, un exemple exposant Dockge. Nous installerons SWAG ainsi que le mod dbip servant à bloquer les connexions selon la géolocalisation, et le mod dashboard qui permet de piloter swag, fail2ban et la géolocalisation. **Principe d'un reverse proxy et application dans notre cas :** @@ -26,82 +26,83 @@ Ci-dessous, vous trouverez un exemple, exposant Dockge. Nous installerons SWAG, 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 : +::file-tree +--- +label: Structure de fichiers à modifier +tree: + /: + - srv: + - docker: + - swag: + - config: + - dns-conf: + - ovh.ini + - nginx: + - dbip.conf + - nginx.conf + - proxy-confs: + - dockge.subdomain.conf + - compose.yml + - .env +--- +:: -```text [Arborescence] -root -└── docker - └── swag - ├── config - │ ├── dns-conf - │ │ └── ovh.ini - │ └── nginx - │ ├── dbip.conf - │ ├── nginx.conf - │ └── proxy-confs - │ └── dockge.subdomain.conf - ├── compose.yml - └── .env -``` +::steps{level="3"} +### Déployer la stack -Ouvrez Dockge dans votre navigateur, cliquez sur `compose`, nommez la stack `swag` et copiez la conf ci-dessous +Ouvrez Dockge dans votre navigateur, cliquez sur `compose`, nommez la stack `swag`, et copiez la configuration suivante : -``` yaml +```yaml [compose.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 + - SUBDOMAINS=wildcard - VALIDATION=dns - DNSPLUGIN=${PLUGIN} - EMAIL=${EMAIL} - DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload volumes: - - /srv/docker/swag/config:/config ports: - - 80:80 - 443:443 - - 81:81 # Nécessaire pour le dashboard + - 81:81 restart: unless-stopped networks: - - swag networks: swag: name: swag_default - ``` ::tip{icon=""} ✨ __Astuce :__ -ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +ajoutez le label watchtower à chaque conteneur pour activer les mises à jour automatiques - ```yaml [compose.yaml] - services: - swag: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + swag: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Puis dans le `.env` : +### Renseigner vos variables d'environnement + +Puis dans le fichier `.env` : ```properties [.env] DOMAIN= @@ -110,29 +111,31 @@ EMAIL= PLUGIN= ``` -Remplissez comme suit +Remplissez les variables 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` | +| Propriété | Valeur | Exemples | +|-------------------------|---------------------------------------------------------------------------|-----------------------| +| `DOMAIN` | Votre domaine (cela couvre aussi tous les sous-domaines) | `mondomaine.fr` | +| `DOMAINS` | Vos éventuels autres domaines | `monsecondomaine.fr` | +| `EMAIL` | Votre email, pour générer le certificat | `votre@email.fr` | +| `PLUGIN` | 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. +### Configurer le plugin DNS OVH -En CLI, allez dans le dossier dns-conf et éditez le fichier `ovh.ini` : +En partant du principe que votre zone DNS est gérée par OVH (sinon, cherchez votre [fournisseur](https://github.com/linuxserver/docker-swag/tree/master/root/defaults/dns-conf)), déployez la stack une première fois. Les logs afficheront un échec de création du certificat SSL faute de configuration `ovh.ini`. Arrêtez la stack. + +En ligne de commande, allez dans le dossier dns-conf et modifiez le fichier `ovh.ini` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/dns-conf/ovh.ini ``` -Voici ce qui s'affiche : +Vous devriez voir : ```properties [ovh.ini] # Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-ovh/certbot_dns_ovh/__init__.py#L20 @@ -142,53 +145,62 @@ 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 : +Authentifiez-vous et créez [votre token ici](https://www.ovh.com/auth/?onsuccess=https%3A%2F%2Fwww.ovh.com%2Fauth%2Fapi%2FcreateToken). -* ``GET /domain/zone/*`` -* ``PUT /domain/zone/*`` -* ``POST /domain/zone/*`` -* ``DELETE /domain/zone/*`` +Donnez-lui les permissions suivantes : -Notez les 3 clés temporairement et renseignez le fichier `ovh.ini`. (avec nano, écrivez directement, puis :kbd{value="Ctrl+O"}, :kbd{value="Entrée"}, :kbd{value="Ctrl+X"} pour sauvegarder et quitter) +* `GET /domain/zone/*` +* `PUT /domain/zone/*` +* `POST /domain/zone/*` +* `DELETE /domain/zone/*` -Sauvegardez et quittez le fichier. +Notez temporairement les 3 clés et saisissez-les dans `ovh.ini`. (Dans nano, tapez directement, puis :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, :kbd{value="Ctrl+X"} pour enregistrer et quitter) -Configurez aussi swag pour qu'il accède à DBIP, le module de gestion des accès par géolocalisation /Ouvrez le fichier nginx.conf +Enregistrez avec :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. + +### Activer DBIP dans nginx.conf + +Configurons maintenant swag pour accéder à DBIP, le module de contrôle d'accès par géolocalisation. Ouvrez le fichier `nginx.conf` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/nginx.conf ``` -Et ajoutez la ligne suivante en dessous de la section `http` : +Ajoutez la ligne suivante sous la section `http` : ```nginx [nginx.conf] -include /config/nginx/dbip.conf +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. +Redémarrez la stack dans Dockge. Cette fois, le certificat SSL devrait être généré avec succès ! Vérifiez les logs pour confirmer que le serveur est prêt. + +### Terminé ! +:: ## 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). +Accédez au tableau de bord en local sur `http://ipdevotreserveur:81` +Sur la gauche, vous verrez la liste des services actuellement « proxifiés » (aucun pour l'instant). Sur la droite, la liste des IP bannies. En dessous, différents indicateurs. Pour plus de détails, [cliquez ici](https://www.linuxserver.io/blog/introducing-swag-dashboard). ![picture](https://www.linuxserver.io/user/pages/03.blog/introducing-swag-dashboard/example.png) ## DBIP -DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nommé `dbip.conf` dans `/srv/docker/swag/config/nginx`. [Plus d'info ici](https://virtualize.link/secure/). +DBIP permet de bloquer les connexions selon les pays. Il s'appuie sur le fichier de configuration nommé `dbip.conf` situé dans `/srv/docker/swag/config/nginx`. [Plus d'infos 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. +Dans cet exemple, nous le configurerons pour bloquer une liste de pays connus pour être à l'origine de la majorité du trafic malveillant. Nous configurerons aussi une variable pour autoriser le trafic interne au serveur, le réseau local de votre box et un éventuel VPN en 10.x.x.x à accéder à vos services, mais pas l'internet ouvert. -La configuration est activable ou désactivable pour chaque service qui sera proxied (voir exemple de Dockge plus bas). +Cette configuration peut être activée ou désactivée service par service (voir l'exemple Dockge plus bas). -Ouvrez `dbip.conf` : +::steps{level="3"} +### Ouvrir dbip.conf ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/dbip.conf ``` -Faites vos modifications ([voir documentation](https://github.com/linuxserver/docker-mods/tree/swag-dbip)), ou prenez l'exemple suivant: +### Faire vos modifications + +Reportez-vous à la [documentation](https://github.com/linuxserver/docker-mods/tree/swag-dbip), ou utilisez l'exemple suivant : ```nginx [dbip.conf] geoip2 /config/geoip2db/dbip-country-lite.mmdb { @@ -200,33 +212,30 @@ geoip2 /config/geoip2db/dbip-country-lite.mmdb { # 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 + CN no; #Chine + RU no; #Russie HK no; #Hong Kong - IN no; #India + IN no; #Inde 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 + TR no; #Turquie + EG no; #Égypte + MX no; #Mexique + JP no; #Japon + KR no; #Corée du Sud + KP no; #Corée du Nord + PE no; #Pérou + BR no; #Brésil UA no; #Ukraine - ID no; #Indonesia - TH no; #Thailand - } + ID no; #Indonésie + TH no; #Thaïlande +} geo $lan-ip { default no; @@ -237,9 +246,14 @@ geo $lan-ip { } ``` -Sauvegardez et quittez. Redémarrez la stack. +### Enregistrer et redémarrer -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 : +Enregistrez et fermez le fichier, puis redémarrez la stack. + +### Terminé ! +:: + +Dans les fichiers de configuration de domaine (voir la section suivante), vous pouvez activer ou désactiver la whitelist ou la blacklist ([voir la documentation ici](https://www.forum-nas.fr/threads/tuto-installer-swag-en-docker-reverse-proxy.15057/)). Dans notre cas, la whitelist n'autorise que les requêtes françaises. La blacklist ne bloque que les pays listés. Nous utiliserons la blacklist, comme ceci : ```nginx [some-app.subdomain.conf]{11} server { @@ -266,26 +280,29 @@ server { } ``` -## Exposer Dockge -::note -📋 __Prérequis :__

-Nous partons du principe que vous avez créé dans votre [zone DNS](/general/networking/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/general/networking/nat). +## (Facultatif) Exposer Dockge +::note{icon=""} +📋 __Au préalable :__

+Nous partons du principe que vous avez créé un sous-domaine du type `dockge.mondomaine.fr` dans votre [zone DNS](/general/networking/dns), avec un `CNAME` pointant vers `mondomaine.fr`. À moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), nous partons aussi du principe que vous avez redirigé le port `443` de votre box vers le `443` du serveur dans [vos règles NAT](/general/networking/nat). :: -Il s'agit maintenant d'exposer Dockge sur internet, afin de pouvoir y accéder et gérer vos conteneurs sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configuré un sous domaine `dockge.mondomaine.fr` dans votre zone DNS dont le `CNAME` pointe sur `mondomaine.fr`. +Il est temps d'exposer Dockge sur internet pour accéder à vos conteneurs et les gérer à distance. Nous partons du principe que vous avez configuré le sous-domaine `dockge.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr`. ::warning -Dockge n'utilise pas d'authentification multifacteur. Exposer Dockge sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/advanced/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). +Dockge ne gère pas l'authentification multifacteur. L'exposer en ligne pourrait compromettre toutes les machines reliées. Ne le faites que si vous utilisez une solution MFA comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG. Utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). :: -Ouvrez le fichier dockge.subdomain.conf : +::steps{level="3"} +### Créer le fichier subdomain.conf + +Ouvrez le fichier `dockge.subdomain.conf` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf ``` -Paramétrez le comme tel : +Configurez-le comme ceci : ```nginx [dockge.subdomain.conf] ## Version 2023/12/19 @@ -293,9 +310,8 @@ Paramétrez le comme tel : server { listen 443 ssl; listen [::]:443 ssl; - - # indique que le sous-domaine doit être dirigé - server_name dockge.*; + + server_name dockge.*; # définit le sous-domaine à rediriger include /config/nginx/ssl.conf; @@ -303,91 +319,86 @@ server { #if ($lan-ip = yes) { set $geo-whitelist yes; } #if ($geo-whitelist = no) { return 404; } - # indique que les pays dans la blacklist sont intedits - if ($geo-blacklist = no) { return 404; } + if ($geo-blacklist = no) { return 404; } # tous les pays de la blacklist sont interdits - # 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_app dockge; # nom du conteneur + set $upstream_port 5001; # port interne du conteneur (pas le port exposé) set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Sauvegardez et quittez. La configuration va se mettre à jour en quelques secondes. +Enregistrez et quittez. La configuration se met à jour en quelques secondes. + ::note -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. +Par défaut, SWAG ne connaît pas le nom « dockge ». Vous devrez ajouter le réseau de Dockge au `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`) : +### Ajouter le réseau de Dockge à SWAG + +Allez sur la stack SWAG, cliquez sur `edit`, et modifiez le fichier de configuration comme ceci (notez la section `networks`) : ```yaml [compose.yaml] --- services: swag: - container_name: #... - # ... - networks: # Relie le conteneur au réseau custom + container_name: #... + # ... + networks: # Relie le conteneur au réseau personnalisé - - dockge # Nom du réseau déclaré dans la stack + - dockge # Nom du réseau tel que défini dans la stack -networks: # Définit le réseau custom - #... - dockge: # Nom du réseau déclaré dans la stack - name: dockge_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe +networks: # Définit le réseau personnalisé + # ... + dockge: # Nom du réseau tel que défini dans la stack + name: dockge_default # Vrai nom du réseau externe + external: true ``` ::note -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`. +Nous partons du principe que le réseau de Dockge s'appelle `dockge_default`. Vous pouvez vérifier que tout fonctionne en consultant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`. :: -Déployez à nouveau la stack de SWAG. +Redéployez la stack 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) +### Visiter votre nouveau sous-domaine + +Patientez un instant, puis visitez `https://dockge.mondomaine.fr` dans votre navigateur. Vous devriez être redirigé vers Dockge. Vous pouvez aussi vérifier l'état du service depuis le tableau de bord (`http://ipdevotreserveur:81` sur votre réseau local). + +### Terminé ! +:: ## 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`. +SWAG inclut des modèles pour la plupart des services connus, nommés `nomduservice.subdomain.conf.sample`. Il suffit de créer le sous-domaine dans la zone DNS de votre registrar (comme OVH), de le faire pointer vers votre domaine principal via un CNAME, puis de copier et renommer le fichier d'exemple : ```bash [Terminal] cd /srv/docker/swag/config/proxy-confs sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf ``` + ::caution -- __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. +__Si le sous-domaine n'est pas redirigé correctement__ +- Ouvrez le fichier et vérifiez le nom du conteneur dans `set $upstream_app nomduconteneur;`{lang=nginx} +- Assurez-vous d'avoir 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`. +Vous pouvez aussi personnaliser le sous-domaine en modifiant `server_name votresousdomaine.*;`{lang=nginx} et en renommant le fichier en `votresousdomaine.subdomain.conf`. diff --git a/content/fr/3.serveex/5.media/2.qbittorrent.md b/content/fr/3.serveex/5.media/2.qbittorrent.md index e8e78c8..cb56d8c 100644 --- a/content/fr/3.serveex/5.media/2.qbittorrent.md +++ b/content/fr/3.serveex/5.media/2.qbittorrent.md @@ -21,23 +21,28 @@ Nous monterons ici le système ci-dessous : ![Picture](/img/serveex/qbit.svg) ## Configuration -Structure des dossiers -```text [Arborescence] -root -├── docker -│ └── seedbox -│ ├── qbittorrent -│ │ └── config -│ ├── gluetun -│ ├── compose.yaml -│ └── .env -│ -└── media #relié à plex et Qbittorrent - ├── downloads #vos téléchargements génériques, à selectionner dans les parametres - ├── movies #à selectionner dans l'interface pour télécharger vos films - └── tvseries #à selectionner dans l'interface pour télécharger vos séries -``` +::file-tree +--- +tree: + /: + - srv: + - docker: + - seedbox: + - qbittorrent: + - config/ + - gluetun/ + - compose.yaml + - .env + - "media # relié à Jellyfin et Qbittorrent": + - "downloads/ # téléchargements génériques, choisis dans les réglages" + - "movies/ # utilisé pour télécharger les films" + - "tvseries/ # utilisé pour télécharger les séries" +--- +:: + +::steps{level="3"} +### Créer les dossiers média Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` : @@ -45,7 +50,9 @@ Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` : mkdir -P /media/downloads ``` -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `seedbox`. Collez la config ci-dessous : +### Déployer la stack + +Ouvrez Dockge, cliquez sur `compose`, et nommez la stack `seedbox`. Collez la configuration suivante : ```yaml [compose.yaml] --- @@ -94,157 +101,182 @@ services: - WIREGUARD_PRIVATE_KEY=${PR_KEY} - SERVER_COUNTRIES=France - PORT_FORWARD_ONLY=on - ``` ::tip{icon=""} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Astuce :__ ajoutez le label Watchtower dans chaque conteneur pour automatiser les mises à jour - ```yaml [compose.yaml] - services: - qbittorrent: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - gluetun: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + qbittorrent: + #... + labels: + - com.centurylinklabs.watchtower.enable=true + gluetun: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Avant de renseigner le `.env` dans Dockge, nous allons configurer la mise à jour du port de téléchargement. En effet, Proton, et la plupart des VPN, changent régulièrement le port de téléchargement, et celui-ci doit etre communiqué à Qbitorrent. +### Configurer la mise à jour du port de téléchargement -Pour ce faire, nous avons ajouté le mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` dans le conteneur. +Avant de renseigner le `.env` dans Dockge, configurons la mise à jour du port de téléchargement. Proton et la plupart des VPN font tourner le port de redirection, qui doit être communiqué à Qbittorrent. -Il faut à présent permettre au mod de récupérer l'information via Gluetun, qui n'accepte que les communications chiffrées via son API. +Nous avons ajouté le mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` au conteneur. -A cet effet, ouvrez un terminal. Nous allons à présent générer une clé d'authentification : +Il faut maintenant permettre au mod de récupérer les informations de Gluetun, qui n'autorise qu'une communication chiffrée via son API. + +Ouvrez un terminal pour générer la clé d'authentification : ```bash [Terminal] sudo docker run --rm qmcgaw/gluetun genkey ``` -Notez la clé. Puis créez le dossier `/srv/docker/gluetun` +Notez la clé, puis créez le dossier `/srv/docker/gluetun` : ```bash [Terminal] sudo mkdir /srv/docker/gluetun ``` -Et créez le fichier `config.toml` +Créez le fichier `config.toml` : ```bash [Terminal] sudo nano /srv/docker/gluetun/config.toml ``` -Éditez le comme suit en ajoutant la clée que vous avez générée : +Saisissez : ```toml [config.toml] [[roles]] name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod" routes = ["GET /v1/portforward"] auth = "apikey" -apikey = "votre_clée" # clée que vous avez générée précédemment +apikey = "votre_cle_ici" # la clé que vous venez de générer ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. Rendez-vous dans Dockge, et renseignez les variables dans `.env`: +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. + +### Renseigner vos variables d'environnement + +Dans Dockge, renseignez les variables du `.env` : ```properties [.env] PUID= GUID= UI_PORT= PR_KEY= -GSP_KEY= # la clé que vous avez générée et renseignée dans config.toml +GSP_KEY= # la clé générée et saisie dans config.toml ID= PW= ``` -En détails : +Détail : -| Variable | Valeur | Exemples | -|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------| -| `PUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `GUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `UI_PORT`{lang=properties} | Le port d'accès à la web ui, elle sera joignable via `http//ipduserveur:port` | `5695` | -| `PR_KEY`{lang=properties} | La clée privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | -| `GSP_KEY`{lang=properties} | Clé que vous avez générée pour la mise à jour du port | `MnBa47MeVmk7xiv` | -| `ID`{lang=properties} | username que vous utilisez pour vous logger dans l'interface de Qbittorrent | `user` | -| `PW`{lang=properties} | mot de passe que vous utilisez pour vous logger dans l'interface de Qbittorrent | `password` | +| Variable | Description | Exemple | +|------------|-------------|---------| +| `PUID` | ID utilisateur (`id votreutilisateur`) | `1000` | +| `GUID` | ID de groupe (`id votreutilisateur`) | `1000` | +| `UI_PORT` | Port d'accès à l'interface web | `5695` | +| `PR_KEY` | Clé privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | +| `GSP_KEY` | Clé générée pour la mise à jour du port | `MnBa47MeVmk7xiv` | +| `ID` | Identifiant de connexion à l'interface Qbittorrent | `user` | +| `PW` | Mot de passe de l'interface Qbittorrent | `password` | -## Déploiement -Une fois fait, déployez le conteneur. - -::warning - -**Dans les logs de lancement, vous trouverez un mot de passe temporaire pour l'utilisateur `admin`** +### Terminé ! :: -Loggez vous sur `http://ipduserveur:5695` (ou le port que vous avez configuré). +## Déploiement + +::steps{level="3"} +### Déployer le conteneur + +Une fois fait, déployez le conteneur. + +::note{to="/serveex/core/docker/#dockge"} + +**Les logs de démarrage affichent un mot de passe temporaire pour l'utilisateur `admin`.** +Consultez les logs dans **Dockge** pour le récupérer, ou tapez cette commande dans un terminal : +```bash [Terminal] +docker logs qbittorrent 2>&1 | grep -i "temporary password" +``` +:: + +### Se connecter et sécuriser son compte + +Connectez-vous sur `http://ipduserveur:5695` (ou le port que vous avez défini). ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si la connexion échoue :__ vérifiez les règles de votre pare-feu. :: -Changez votre nom d'utilisateur et votre mot de passe dans les paramètres "webui". +Changez votre identifiant et votre mot de passe dans les réglages « webui ». -Et voilà ! Dans les paramètres de Qbittorrent, dans "téléchargements" selectionnez `/media/downloads` comme chemin par défaut pour télécharger vos media. +### Terminé ! +:: -Lorsque vous lancez un téléchargement, n'oubliez pas de préciser le bon répertoire de téléchargement afin que Plex puisse synchroniser correctement sa bibliothèque (`/media/movies` et `/media/tvseries`). Vous pouvez aussi l'automatiser en créant une catégorie et un répertoire associé. +C'est terminé ! Dans les réglages de Qbittorrent, section « Téléchargements », définissez `/media/downloads` comme dossier par défaut. + +Lors de l'ajout d'un téléchargement, pensez à choisir le bon dossier pour que Jellyfin se synchronise correctement (`/media/movies` ou `/media/tvseries`). Vous pouvez aussi automatiser cela avec des catégories et des dossiers. ## Exposer la webui ::warning -Qbitorrent n'utilise pas d'authentification multifacteur. Exposer Qbitorrent sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/advanced/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). +Qbittorrent ne gère pas l'authentification multifacteur. L'exposer sur internet peut mettre votre système en danger. Ne le faites que si vous utilisez du MFA via [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG. Utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). :: -Afin de lancer des téléchargement hors de chez vous, sans VPN, vous pouvez exposer la webui de Qbittorrent. +Pour lancer des téléchargements depuis l'extérieur, sans VPN, vous pouvez exposer l'interface web de Qbittorrent. ::note -Nous partons du principe que vous avez le sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/general/networking/nat). +Nous partons du principe que vous avez le sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans la [zone DNS](/general/networking/dns). Et que le port `443` de votre box est redirigé vers votre serveur dans les [règles NAT](/general/networking/nat), à moins d'utiliser Cloudflare Zero Trust. :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Gluetun : +::steps{level="3"} +### Ajouter le réseau de Gluetun à SWAG + +Dans Dockge, modifiez le fichier compose de SWAG et ajoutez le réseau de Gluetun : ```yaml [compose.yaml] --- services: swag: - container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom - # ... - - seedbox # Nom du réseau déclaré dans la stack + container_name: # ... + # ... + networks: + # ... + - seedbox -networks: # Définit le réseau custom +networks: # ... - seedbox: # Nom du réseau déclaré dans la stack - name: seedbox_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + seedbox: + name: seedbox_default + external: true ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Cliquez sur « Deploy » et attendez que SWAG soit complètement initialisé. ::note -Ici nous partons du principe que le nom du réseau de la seedbox est `seedbox_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81. +Nous partons du principe que le nom du réseau est `seedbox_default`. Vous pouvez le confirmer en consultant le tableau de bord de SWAG sur http://ipduserveur:81. :: -Puis nous allons créer et éditer le fichier `seedbox.subdomain.conf`. +### Créer le fichier subdomain.conf + +Créez ou modifiez maintenant `seedbox.subdomain.conf`. ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce pour les allergiques au terminal :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce pour les allergiques au terminal :__ utilisez **File Browser Quantum** pour modifier les fichiers plutôt que le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf ``` -Copiez la configuration ci-dessous, en prenant soin de vérifier le port : +Collez la configuration suivante (vérifiez le port) : ```nginx [seedbox.subdomain.conf] ## Version 2023/12/19 @@ -296,14 +328,94 @@ server { } } ``` -::tip{icon=""} -✨ Vous pouvez protéger cette app avec Authentik en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy). + +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. + +### Terminé ! :: -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Attendez quelques minutes, puis allez sur `https://seedbox.mondomaine.fr`. Vous devriez arriver sur l'interface de Qbittorrent. -Patientez quelques minutes puis tapez dans votre navigateur `https://seedbox.mondomaine.fr`, vous arriverez sur l'interface de Qbittorrent. +## Protéger Qbittorrent avec TinyAuth +Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `seedbox.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) : -Et voilà, vous avez un mediacenter pret à l'emploi ! +```nginx [seedbox.subdomain.conf]{26-38,41-42} +## Version 2023/12/19 + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name seedbox.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + #if ($lan-ip = yes) { set $geo-whitelist yes; } + #if ($geo-whitelist = no) { return 404; } + 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 /tinyauth { + internal; + proxy_pass http://tinyauth:3000/api/auth/nginx; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Uri $request_uri; + } + + location @tinyauth_login { + return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri; + } + + location / { + auth_request /tinyauth; + error_page 401 = @tinyauth_login; + + # 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 gluetun; + set $upstream_port 5555; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } +} +``` + +::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"} + +Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. +:: + +::tip{icon=""} +✨ Vous pouvez sécuriser cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en décommentant les lignes `authentik-server.conf` et `authentik-location.conf`. N'oubliez pas de [créer une application et un provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). +:: + +Et voilà ! Vous avez maintenant un media center prêt à l'emploi. ![Picture](/img/serveex/seed.svg) diff --git a/content/fr/3.serveex/5.media/3.servarr.md b/content/fr/3.serveex/5.media/3.servarr.md index 896777f..03f2fbd 100644 --- a/content/fr/3.serveex/5.media/3.servarr.md +++ b/content/fr/3.serveex/5.media/3.servarr.md @@ -1,96 +1,79 @@ --- title: Automatisation -description: Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Overseerr pour films et séries. +description: Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Seerr, pour les films et les séries. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[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 : +[Servarr](https://wiki.servarr.com/) est une suite d'applications conçues pour automatiser le téléchargement, la mise à jour et la gestion des médias. Ici, nous nous concentrerons sur les films et les séries avec pour 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 +- Choisir un film dans un catalogue via une interface web. +- Se poser dans son canapé et le regarder sur Jellyfin quelques minutes plus tard. Simple. ![arr](/img/serveex/arr.svg) -Je vous propose de déployer la stack puis nous verrons par la suite la configuration de chacune des apps et leur fonctionnement. +Nous commencerons par déployer la stack, puis nous configurerons chaque application et verrons comment elles fonctionnent. ## Installer les apps -### Docker compose - -Structure des dossiers : - -```text [Arborescence] -root -├── docker -│ ├── plex -│ │ ├── compose.yml -│ │ ├── config -│ │ └── transcode -│ ├── tautulli -│ │ └── config -│ ├── sonarr -│ │ └── config -│ ├── radarr -│ │ └── config -│ ├── bazarr -│ │ └── config -│ ├── prowlarr -│ │ └── config -│ └── overseerr -│ └── config -└── media - ├── downloads - ├── tvseries - ├── movies - └── library -``` +::file-tree +--- +tree: + /: + - srv: + - docker: + - jellyfin: + - compose.yml + - .env + - config/ + - sonarr: + - config/ + - radarr: + - config/ + - bazarr: + - config/ + - prowlarr: + - config/ + - seerr: + - config/ + - media: + - downloads/ + - tvseries/ + - movies/ + - library/ +--- +:: ::warning -__Attention :__ Respectez bien ce type de structure de fichier, notamment le dossier `media`. Ce dossier doit etre monté de la même manière dans les compose de _Qbittorrent_ (`/votre/chemin/media:/media`) et des _arr_. Sans cela, les _arr_ risquent de ne pas trouver le chemin fourni par Qbittorrent et de ne pas créer de _hardlinks_. Sans hardlink, les _arr_ copieront les films et cela doublera l'espace utilisé sur votre stockage. +__Attention :__ respectez bien cette structure de fichiers, en particulier le dossier `media`. Ce dossier doit être monté **exactement de la même façon** dans le fichier compose de _Qbittorrent_ (`/votre/chemin/media:/media`) et dans les applications _arr_. Sinon, les applications _arr_ risquent de ne pas reconnaître le chemin fourni par Qbittorrent et ne créeront pas de _hardlinks_. Sans hardlinks, les applications _arr_ copieront les fichiers, ce qui **doublera l'espace utilisé** sur votre stockage. :: -Ouvrez dockge et votre stack `plex`. Modifiez le compose comme ceci : +::steps{level="3"} +### Déployer la stack +Ouvrez Docker et votre stack `jellyfin`. Modifiez le fichier compose comme suit : ```yaml [compose.yaml] --- services: - linuxserver_plex: - image: ghcr.io/linuxserver/plex:latest - container_name: plex - network_mode: host + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin environment: - PUID=${PUID} - PGID=${PGID} - TZ=Europe/Paris - - VERSION=docker - - PLEX_CLAIM= #optional volumes: - - /srv/docker/plex/config:/config - - /srv/docker/plex/transcode:/transcode #optional + - /srv/docker/jellyfin/config:/config - ${MEDIA_PATH}:/media - labels: - - com.centurylinklabs.watchtower.enable=true restart: unless-stopped - mem_limit: 4096m - mem_reservation: 2048m devices: - /dev/dri:/dev/dri - - tautulli: - image: lscr.io/linuxserver/tautulli:latest - container_name: tautulli - environment: - - TZ=Europe/Paris - volumes: - - /srv/docker/tautulli/config:/config ports: - - 8181:8181 - restart: unless-stopped + - 8096:8096 sonarr: image: lscr.io/linuxserver/sonarr:latest @@ -133,18 +116,14 @@ services: - 9696:9696 restart: unless-stopped - overseerr: - image: lscr.io/linuxserver/overseerr:latest - container_name: overseerr - dns: - - 1.1.1.1 - - 8.8.8.8 + seerr: + image: ghcr.io/seerr-team/seerr:latest + container_name: seerr environment: - - PUID=${PUID} - - PGID=${PGID} + - LOG_LEVEL=info - TZ=Europe/Paris volumes: - - /srv/docker/overseerr/config:/config + - /srv/docker/seerr/config:/app/config ports: - 5055:5055 restart: unless-stopped @@ -154,7 +133,7 @@ services: container_name: bazarr restart: unless-stopped environment: - - PUID=1000 + - PUID=1000 - PGID=1000 - TZ=Europe/Paris volumes: @@ -165,25 +144,21 @@ services: ``` ::tip{icon=""} -✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ Ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour - ```yaml [compose.yaml] - services: - plex: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - - tautulli: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + jellyfin: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Renseignez le `.env` avec les variables ci-dessous +### Renseigner vos variables d'environnement + +Renseignez votre fichier `.env` avec les variables ci-dessous : ```properties [.env] PUID= @@ -191,202 +166,241 @@ 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` | - -Déployez la stack. - -### Paramétrer 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`. - -::caution - -__En cas d'échec :__ vérifiez les règles de votre pare-feu. -:: - -Créez vous un compte, choisissez bien *forms login*. - -##### Ajouter un *root folder* - -- Dans le menu à gauche, cliquez sur *Settings > Media Management*. -- Ajoutez un *root folder*, choisisez `/media/movies` - -::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. -:: - -##### Configurer les profils - -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. - -![profiles_radarr](/img/serveex/radarr1.png) - -##### Ajouter Qbittorrent - -Dans *Settings > Downloads Clients* vous allez ajouter 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*. - -##### Connecter à Plex - -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*. - -##### 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 -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`. - -::caution - -__En cas d'échec :__ vérifiez les règles de votre pare-feu. -:: - -### Paramétrer 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*. - -::caution - -__En cas d'échec :__ vérifiez les règles de votre pare-feu. -:: - -##### Ajouter une source - -- Dans la section *Indexers*, ajoutez l'indexer de votre source de torrent. - -##### Ajouter Radarr et Sonarr - -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*. - -### Paramétrer 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. - -Rendez-vous sur `http://ipduserveur:6767`. - -::caution - -__En cas d'échec :__ vérifiez les règles de votre pare-feu. -:: - -Rendez-vous dans *Settings > General* et créez un identifiant et un mot de passe en utilisant le *forms login*. - -#### Ajouter un profil de langage - -- 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. -![Bazarr](/img/serveex/bazarr2.png) - -- Enregistrez avec le bouton tout en haut de l'écran. - -#### Ajouter des fournisseurs de sous-titre - -- Dans *Settings > Providers*, ajoutez vos fournisseurs favoris, comme par exemple : - -![Bazarr](/img/serveex/bazarr.png) - -- Enregistrez avec le bouton tout en haut de l'écran. - -#### Ajouter Radarr et 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. - -Faites de même avec Radarr. - -### Paramétrer 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](/img/serveex/overseerr.webp) - -Rendez-vous sur `http://ipduserveur:5055` et authentifiez vous avec votre compte Plex. - -::caution - -__En cas d'échec :__ vérifiez les règles de votre pare-feu. -:: - -#### Ajouter Radarr et 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. - -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. - -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. - -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. - -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 ! - -## Exposer Overseerr avec 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. +| Variable | Description | Exemple | +|----------------|-------------------------------------------------------------------------------------------------|-------------| +| `PUID` | À renseigner avec vos informations utilisateur (à vérifier avec `id votreutilisateur`) | `1000` | +| `GUID` | Idem | `1000` | +| `MEDIA_PATH` | Chemin de votre dossier média, ici `/media`. Il doit correspondre à celui utilisé par Qbittorrent. | `/media` | ::note -Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` qui pointe vers `films.fr` dans [zone DNS](/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/general/networking/nat). +Contrairement aux autres conteneurs présentés ici, l'image de Seerr n'utilise pas `PUID`/`PGID`, elle tourne toujours en UID `1000`. Assurez-vous que `/srv/docker/seerr/config` appartient bien à cet utilisateur, sinon Seerr ne pourra pas y écrire : + +```bash [Terminal] +sudo chown -R 1000:1000 /srv/docker/seerr/config +``` :: -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 : +Déployez la stack. + +### Terminé ! +:: + +### Paramétrer Radarr + +Radarr interroge vos sources torrent et permet de définir le type de releases à privilégier. Il peut aussi mettre à niveau vos films si une meilleure version est disponible. + +Une fois déployé, allez sur `http://ipdevotreserveur:7878`. + +::caution + +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. +:: + +Créez un compte et choisissez *forms login*. + +::steps{level="4"} +#### Ajouter un *root folder* + +- Allez dans *Settings > Media Management*. +- Ajoutez un root folder et sélectionnez `/media/movies`. + +::warning + +__Attention :__ si vous avez déjà des films dans `movies` provenant de Qbittorrent, ne laissez pas Radarr les ajouter. Radarr pourrait les modifier, ce qui interromprait le seed dans Qbittorrent. +:: + +#### Configurer les profils + +Allez dans *Settings > Profiles*. Ce sont vos profils de qualité par défaut. Quand vous faites une demande, vous en choisissez un. Par exemple, configurez le profil « any » en décochant tout sauf ce qui apparaît sur l'image, et en les ordonnant en conséquence. Radarr cherchera ainsi d'abord du 4K REMUX, puis descendra dans la liste si ce n'est pas disponible. + +![profiles_radarr](/img/serveex/radarr1.png) + +#### Ajouter Qbittorrent + +Dans *Settings > Download Clients*, ajoutez Qbittorrent. + +- Utilisez l'IP de votre serveur comme *Host* et le port `5695` si vous suivez ce guide. +- Renseignez vos *Username* et *Password* Qbittorrent. +- Cliquez sur *Test*. +- Si le test réussit, cliquez sur *Save*. + +#### Connecter à Jellyfin + +Récupérez d'abord une clé API dans Jellyfin : connectez-vous en administrateur, allez dans *Dashboard > Advanced > API Keys*, et ajoutez-en une nouvelle. + +Puis, dans Radarr, allez dans *Settings > Connect*, ajoutez une nouvelle connexion et choisissez *Jellyfin*. + +- Utilisez `jellyfin` ou l'IP de votre serveur comme *Host*. +- Port : `8096` +- Collez la clé API générée. +- Cliquez sur *Test*, puis sur *Save* si le test réussit. + +#### Récupérer la clé API pour Prowlarr et Seerr + +- Allez dans *Settings > General* et copiez votre *API Key* pour plus tard. + +#### Terminé ! +:: + +### Paramétrer Sonarr + +Sonarr interroge les sources torrent et définit le type de releases de séries à privilégier. Il met aussi à niveau les séries quand de meilleures versions sont disponibles. + +- Allez sur `http://ipdevotreserveur:8989`. +- Suivez les mêmes étapes que pour Radarr, mais avec `/media/tvseries` comme root folder. + +::caution + +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. +:: + +### Paramétrer Prowlarr + +Prowlarr sert de proxy pour gérer vos indexeurs torrent et les relier à Radarr et Sonarr. + +Allez sur `http://ipdevotreserveur:9696` et créez un compte, en utilisant *forms login*. + +::caution + +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. +:: + +::steps{level="4"} +#### Ajouter une source + +- Allez dans la section *Indexers* et ajoutez votre indexeur torrent. + +#### Ajouter Radarr et Sonarr + +Dans *Settings > Apps*, ajoutez Radarr et Sonarr avec les informations suivantes : + +- Serveur Prowlarr : `http://prowlarr:9696` (ou l'IP du serveur) +- Serveur Sonarr / Radarr : `http://sonarr:8989` ou `http://radarr:7878` +- API Key : celle copiée depuis Radarr et Sonarr. +- Cliquez sur *Test*, puis sur *Save* si tout se passe bien. + +#### Terminé ! +:: + +### Paramétrer Bazarr +Bazarr est une application qui recherche automatiquement les bons sous-titres, dans les langues de votre choix, pour tous les films et séries ajoutés par Radarr et Sonarr. + +Allez sur `http://ipdevotreserveur:6767`. + +::caution + +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. +:: + +Allez dans *Settings > General* et créez un identifiant et un mot de passe en utilisant *forms login*. + +::steps{level="4"} +#### Ajouter un profil de langage + +- Dans *Settings > Languages*, cliquez sur le bouton rose *Add new profile* et nommez-le. +- Cliquez sur le bouton rose *Add Languages* et ajoutez vos langues préférées, par exemple *French* et *English*. +- Enregistrez et quittez. +- En bas de l'écran, sous *Default Language For Newly Added Show*, cochez les deux cases et sélectionnez le profil que vous venez de créer. +![Bazarr](/img/serveex/bazarr2.png) + +- Enregistrez avec le bouton en haut de l'écran. + +#### Ajouter des fournisseurs de sous-titres + +- Dans *Settings > Providers*, ajoutez vos fournisseurs préférés, par exemple : + +![Bazarr](/img/serveex/bazarr.png) + +- Enregistrez avec le bouton en haut de l'écran. + +#### Ajouter Radarr et Sonarr + +- Allez dans *Settings > Sonarr* +- Dans *Address*, saisissez `sonarr` ou l'adresse IP de votre serveur. +- Dans *Port*, saisissez `8989`. +- Dans *API Key*, saisissez la clé API de Sonarr. +- Cliquez sur *Test*. +- Enregistrez avec le bouton en haut de l'écran. + +Répétez les mêmes étapes pour Radarr. + +#### Terminé ! +:: + +### Paramétrer Seerr + +[Seerr](https://seerr.dev/) (le successeur unifié d'Overseerr et de Jellyseerr) est une application qui permet de parcourir un catalogue de films et d'envoyer des demandes à Sonarr et Radarr. Parcourez les films ou séries, cliquez sur *Request*, et le média sera automatiquement téléchargé selon vos réglages Radarr ou Sonarr. Si le titre n'est pas encore sorti, il sera téléchargé automatiquement dès sa disponibilité. Ainsi, les épisodes d'une série apparaissent dans Jellyfin sans aucune intervention manuelle. + +Allez sur `http://ipdevotreserveur:5055`, choisissez *Jellyfin* comme serveur multimédia, et connectez-vous avec votre compte administrateur Jellyfin. + +::caution + +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. +:: + +::steps{level="4"} +#### Ajouter Radarr + +Quand la question est posée, ajoutez un serveur Radarr : + +- Cochez *Default server*. +- __Server name :__ Radarr +- __Hostname or IP address :__ `radarr` ou l'IP de votre serveur +- __Port :__ `7878` +- __API Key :__ la clé API de Radarr +- Cliquez sur *Test* en bas. + +Si le test réussit, continuez de remplir les champs : + +- __Quality Profile :__ celui que vous avez configuré (par exemple `any`) +- __Root Folder :__ le dossier Jellyfin. Dans nos exemples : `/media/movies` +- __Minimum Availability :__ `Announced`. Cela permet de demander des contenus non sortis et de les télécharger dès leur sortie. +- Cochez les 3 cases en bas. +- Enregistrez et continuez. + +#### Ajouter Sonarr + +Faites maintenant de même pour Sonarr : + +- Cochez *Default server*. +- __Server name :__ Sonarr +- __Hostname or IP address :__ `sonarr` ou l'IP de votre serveur +- __Port :__ `8989` +- __API Key :__ la clé API de Sonarr +- Cliquez sur *Test* en bas. + +Si le test réussit, continuez de remplir les champs : + +- __Quality Profile :__ celui que vous avez configuré (par exemple `any`) +- __Root Folder :__ le dossier Jellyfin. Dans nos exemples : `/media/tvseries` +- __Language Profile :__ `Deprecated` +- Cochez les 4 cases en bas. +- Enregistrez et continuez. + +#### Terminé ! +:: + +Et voilà ! Demandez un film ou une série, puis regardez dans qBittorrent ou Radarr/Sonarr. En quelques minutes, votre média sera disponible sur Jellyfin ! + +## Exposer Seerr avec SWAG + +Il peut être utile d'exposer Seerr si vous voulez envoyer des demandes depuis l'extérieur sans VPN, ou si vous avez partagé votre bibliothèque Jellyfin et voulez que vos proches aient accès à Seerr. + +::warning + +Seerr n'a pas d'authentification à deux facteurs intégrée. Ne l'exposez que si vous utilisez une solution d'authentification robuste comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik). Sinon, ne l'exposez pas avec SWAG, utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). +:: + +::note + +Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `films.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat). +:: + +::steps{level="3"} +### Ajouter le réseau de Seerr à SWAG + +Allez dans Dockge, modifiez le fichier compose de SWAG, et ajoutez le réseau de Seerr, qui est le même que celui de Jellyfin (puisqu'il est dans la stack Jellyfin) : ```yaml [compose.yaml] --- @@ -394,40 +408,42 @@ 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 - -networks: # Définit le réseau custom + - jellyfin # Name of the network declared in the stack + +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 + jellyfin: # Name of the declared network + name: jellyfin_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. +Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel. ::note -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`. +Nous partons ici du principe que le réseau de Jellyfin s'appelle `jellyfin_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`. :: -Créez le fichier `films.subdomain.conf` et éditez le : +### Créer le fichier subdomain.conf + +Créez et modifiez le fichier `films.subdomain.conf` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/films.subdomain.conf ``` -Collez la configuration suivante : +Collez ce qui suit : ```nginx [films.subdomain.conf] ## Version 2024/07/16 -# make sure that your overseerr container is named overseerr -# make sure that your dns has a cname set for overseerr +# make sure that your seerr container is named seerr +# make sure that your dns has a cname set for seerr server { listen 443 ssl; @@ -464,17 +480,17 @@ server { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; - set $upstream_app overseerr; + set $upstream_app seerr; set $upstream_port 5055; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; } - location ~ (/overseerr)?/api { + location ~ (/seerr)?/api { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; - set $upstream_app overseerr; + set $upstream_app seerr; set $upstream_port 5055; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; @@ -483,13 +499,104 @@ server { } ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. -Patientez quelques minutes puis tapez dans votre navigateur `http://films.mondomaine.fr`. +Attendez quelques minutes, puis visitez `http://films.mondomaine.fr` dans votre navigateur. + +### Terminé ! +:: ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -Et voilà, vous avez exposé Overseerr ! +Et voilà, Seerr est maintenant accessible publiquement ! + +## Protéger Seerr avec TinyAuth +Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `films.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy). L'interface web (`/`) reçoit la vérification, `/api` en est exclu, puisque les appels d'API de Seerr (et tout ce qui s'y intègre) ne peuvent pas faire de connexion interactive dans un navigateur : + +```nginx [films.subdomain.conf]{24-36,39-40} +## Version 2024/07/16 +# make sure that your seerr container is named seerr +# make sure that your dns has a cname set for seerr + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name films.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + # 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 /tinyauth { + internal; + proxy_pass http://tinyauth:3000/api/auth/nginx; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Uri $request_uri; + } + + location @tinyauth_login { + return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri; + } + + location / { + auth_request /tinyauth; + error_page 401 = @tinyauth_login; + + # 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 seerr; + set $upstream_port 5055; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } + + location ~ (/seerr)?/api { + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app seerr; + set $upstream_port 5055; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } +} +``` + +::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"} + +Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. +:: + +::tip{icon=""} +✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `films.subdomain.conf` et en retirant le `#` 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 provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). +:: diff --git a/content/fr/3.serveex/8.development/1.code-server.md b/content/fr/3.serveex/8.development/1.code-server.md index cd2528b..3c37fa6 100644 --- a/content/fr/3.serveex/8.development/1.code-server.md +++ b/content/fr/3.serveex/8.development/1.code-server.md @@ -1,32 +1,39 @@ --- title: Code-Serveur -description: Installer code-server pour utiliser VS Code dans votre navigateur depuis votre homelab, montez des dossiers et exposez-le de manière sécurisée avec SWAG. +description: Installer code-server pour utiliser VS Code dans votre navigateur depuis votre homelab, monter des dossiers et l'exposer de manière sécurisée avec SWAG. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[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) est un conteneur permettant d'accéder à [VS Code](https://code.visualstudio.com/) en interface web dans un environnement Linux. C'est littéralement VS Code et vos projets dans votre poche, disponibles partout. ![code-server](https://github.com/coder/code-server/raw/main/docs/assets/screenshot-2.png) ## Installation -::note +::note{to="https://docs.linuxserver.io/images/docker-code-server/"} -Pour cette installation nous utiliserons [l'image maintenue par LinuxServer.io](https://docs.linuxserver.io/images/docker-code-server/). +Pour cette installation, nous utiliserons l'**image maintenue par LinuxServer.io**. :: -Structure des dossiers +::file-tree +--- +tree: + /: + - srv: + - docker: + - code-server: + - compose.yaml + - .env + - config/ + - (n'importe quel dossier à monter dans VS Code)/ +--- +:: -```text [Arborescence] -root -├── docker -│ └── code-server -│ └── config -└── #n'importe quel dossier à monter dans vscode -``` +::steps{level="3"} +### Déployer la stack -Ouvrez Dockge, cliquez sur `compose`, appelez la stack `code-server` puis copiez collez ceci : +Ouvrez Dockge, cliquez sur `compose`, nommez la stack `code-server`, et collez ce qui suit : ```yaml [compose.yaml] --- @@ -41,7 +48,7 @@ services: - HASHED_PASSWORD=${PW} volumes: - /srv/docker/code-server/config:/config - # ajoutez vos dossier à monter dans vscode + # ajoutez les dossiers à monter dans VS Code # - /chemin/vers/dossier:/dossier ports: - 8443:8443 @@ -49,7 +56,7 @@ services: ``` ::tip{icon=""} -✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ Ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour ```yaml [compose.yaml] services: @@ -61,19 +68,21 @@ services: ``` :: -Choisissez un mot de passe et générez un hash +### Renseigner vos variables d'environnement + +Choisissez un mot de passe et générez son hash : ```bash [Terminal] echo -n "votremotdepasse" | npx argon2-cli -e ``` -Notez précieusement le résultat. Trouvez votre PUID et votre GUID en tapant la commande suivante : +Conservez précieusement le résultat. Trouvez vos PUID et GUID avec : ```bash [Terminal] -id nomdutilisateur +id votreutilisateur ``` -Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple : +Remplissez le fichier `.env` avec les valeurs trouvées, par exemple : ```properties [.env] PW='$argon2i$v=19$m=4096,t=3,p=1$wST5QhBgk2lu1ih4DMuxvg$LS1alrVdIWtvZHwnzCM1DUGg+5DTO3Dt1d5v9XtLws4' @@ -83,18 +92,21 @@ GUID=1000 ::warning -__Attention :__ Pensez à mettre un guillemet simple `'`au debut et à la fin du hash +__Note :__ veillez à bien encadrer le hash par des apostrophes simples `'` :: -Déployez le conteneur et rendez-vous sur `http://ipduserveur:8443`. Et voilà, votre instance code-server en webui est disponible ! +Déployez le conteneur et allez sur `http://ipdevotreserveur:8443`. Et voilà, votre instance code-server tourne dans le navigateur ! + +### Terminé ! +:: ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: ## Monter des dossiers -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. +Vous pouvez monter des dossiers dans VS Code en ajoutant les volumes correspondants dans le `compose.yaml` (ou via Dockge), puis en redéployant le conteneur. ```yaml [compose.yaml] --- @@ -104,17 +116,20 @@ services: volumes: - /chemin/vers/dossier:/dossier ``` -Une fois dans vscode, vous pourrez accéder au dossier. +Une fois dans VS Code, vous aurez accès au dossier monté. ## Exposer code-server avec 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. +Tout l'intérêt d'une telle solution est d'y accéder à distance depuis n'importe quel appareil. Pour cela, nous allons exposer code-server via Swag. ::note -__Au préalable :__ Nous partons du principe que vous avez créé dans votre [zone DNS](/general/networking/dns) un sous domaine du type `code.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/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](/general/networking/nat). +__Au préalable :__ nous partons du principe que vous avez créé un sous-domaine du type `code.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). À moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), nous partons aussi du principe que vous avez redirigé le port `443` de votre box vers le port `443` de votre serveur avec les [règles NAT](/general/networking/nat). :: -Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de code-server : +::steps{level="3"} +### Ajouter le réseau de code-server à SWAG + +Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de code-server : ```yaml [compose.yaml] --- @@ -122,34 +137,37 @@ services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Rattache le conteneur à un réseau personnalisé # ... - - code-server # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + - code-server # Nom du réseau défini dans la stack + +networks: # Définit le réseau personnalisé # ... - 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: # Nom du réseau défini dans la stack + name: code-serveur # Nom réel du réseau externe + external: true # Indique qu'il s'agit d'un réseau externe ``` ::note -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. +Nous partons du principe que le nom du réseau est `code-server_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. :: -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redéployez la stack en cliquant sur « deploy » et attendez que SWAG soit pleinement opérationnel. -Dans les dossiers de Swag, créez le fichier `code.subdomain.conf`. +### Créer le fichier subdomain.conf + +Dans les dossiers de configuration de Swag, créez le fichier `code.subdomain.conf`. ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/code.subdomain.conf ``` -Collez la configuration ci-dessous : + +Collez la configuration suivante : ```nginx [code.subdomain.conf] ## Version 2023/12/19 @@ -197,15 +215,92 @@ server { set $upstream_port 8443; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. -Et voilà, vous avez exposé code-server ! +### Terminé ! +:: + +Et voilà ! code-server est maintenant exposé ! + +## Protéger code-server avec TinyAuth +Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `code.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) : + +```nginx [code.subdomain.conf]{26-38,41-42} +## Version 2023/12/19 + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name code.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + #if ($lan-ip = yes) { set $geo-whitelist yes; } + #if ($geo-whitelist = no) { return 404; } + 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 /tinyauth { + internal; + proxy_pass http://tinyauth:3000/api/auth/nginx; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Uri $request_uri; + } + + location @tinyauth_login { + return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri; + } + + location / { + auth_request /tinyauth; + error_page 401 = @tinyauth_login; + + # 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 code-server; + set $upstream_port 8443; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + } +} +``` + +::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"} + +Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. +:: ::tip{icon=""} -✨ __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/advanced/authentik#protéger-une-app-par-reverse-proxy). +✨ __Astuce :__ vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `code.subdomain.conf` et en décommentant `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 provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). :: diff --git a/content/fr/3.serveex/9.apps/1.adguard.md b/content/fr/3.serveex/9.apps/1.adguard.md index e612c8e..4ee2e6a 100644 --- a/content/fr/3.serveex/9.apps/1.adguard.md +++ b/content/fr/3.serveex/9.apps/1.adguard.md @@ -12,6 +12,8 @@ Il fonctionne comme un serveur DNS qui redirige les domaines de suivi vers un « En pratique, une fois en place, il vous faudra juste configurer les serveurs DNS de vos appareils, pour que ces derniers l'utilisent. +![adguard](/img/serveex/adguard.png) + **Rappel sur le fonctionnement d'un DNS :** 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. @@ -26,32 +28,38 @@ Adguard lui, va s'intercaler entre le serveur de nom et votre appareil. Si vous 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. ![Picture](/img/serveex/adguard.svg) -## Installation -Structure des dossiers : -```text [Arborescence] -root -└── docker - └── adguard - ├── confdir - ├── workdir - ├── compose.yaml - └── .env -``` +## Installation + +::file-tree +--- +tree: + /: + - srv: + - docker: + - adguard: + - confdir/ + - workdir/ + - compose.yaml + - .env +--- +:: ::note -Nous monterons aussi le dossier `/srv/docker/swag/config/etc/letsencrypt` afin d'avoir accès au certificat SSL de Swag. +Nous monterons également le dossier `/srv/docker/swag/config/etc/letsencrypt` pour accéder au certificat SSL de Swag. :: -Ouvrez Dockge, et cliquez sur `compose` +::steps{level="3"} +### Déployer la stack -Nommez la stack `adguardhome` et copiez la configuration ci-dessous +Ouvrez Dockge et cliquez sur `compose` + +Nommez la stack `adguardhome` et collez la configuration ci-dessous : ```yaml [compose.yaml] --- services: - adguardhome: container_name: adguard image: adguard/adguardhome @@ -66,42 +74,47 @@ services: - /srv/docker/adguardhome/confdir:/opt/adguardhome/conf - /srv/docker/adguardhome/workdir:/opt/adguardhome/work - /srv/docker/swag/config/etc/letsencrypt:/swag-ssl:ro - ``` ::tip{icon=""} -✨ __Astuce :__ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Astuce :__ ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour - ```yaml [compose.yaml] - services: - adguardhome: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + adguardhome: + # ... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: Déployez la stack. -Rendez-vous sur `http//ipduserveur:3000` et suivez les instructions +Allez sur `http://ipdevotreserveur:3000` et suivez les instructions de configuration. -Et voilà, vous avez déployé Adguard ! +### Terminé ! +:: -## Exposer Adguard avec Swag -Pour être utilisable hors de chez vous, vous devez exposer Adguard +C'est tout ! Adguard est déployé. -::note +## Exposer AdGuard avec SWAG +Pour rendre AdGuard utilisable en dehors de votre réseau domestique, vous devez l'exposer. -__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/general/networking/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](/general/networking/nat). Redirigez également le port `53` et le port `853` vers votre serveur. Ces ports serviront à router les requêtes DNS. +::note{icon=""} + +📋 __Prérequis :__ nous partons du principe que vous avez créé un sous-domaine du type `adguard.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr`, et que vous avez déjà redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat). Redirigez également les ports `53` et `853` vers votre serveur. Ces ports servent à router les requêtes DNS. :: ::warning -N'utilisez pas les tunnels cloudflare pour exposer Adguard, et désactivez tout proxy. +N'utilisez pas les tunnels Cloudflare pour exposer AdGuard, et assurez-vous que tout proxy est désactivé. :: -Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau d'adguard : +::steps{level="3"} +### Ajouter le réseau d'AdGuard à SWAG + +Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau d'AdGuard : ```yaml [compose.yaml] --- @@ -109,36 +122,38 @@ services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Rattache le conteneur au réseau personnalisé # ... - adguard # Nom du réseau déclaré dans la stack - -networks: # Définit le réseau custom + +networks: # Définit le réseau personnalisé # ... 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 + name: adguard_default # Nom réel du réseau externe + external: true # Précise qu'il s'agit d'un réseau externe ``` ::note -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. +Nous partons ici du principe que le réseau d'AdGuard s'appelle `adguard_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. :: -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel. + +### Créer le fichier subdomain.conf Créez et ouvrez le fichier `adguard.subdomain.conf` ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf ``` -Copiez la configuration ci-dessous : +Collez la configuration ci-dessous : ```nginx [adguard.subdomain.conf] ## Version 2023/05/31 @@ -213,9 +228,114 @@ server { } } - ``` +### Terminé ! +:: + +## Protéger AdGuard avec TinyAuth +Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `adguard.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy). Le `location /dns-query` est laissé en dehors de la vérification `auth_request`, puisque les clients DNS-over-HTTPS ne peuvent pas faire de connexion interactive : + +```nginx [adguard.subdomain.conf]{28-40,43-44,69-70} +## Version 2023/05/31 +# make sure that your adguard container is named adguard +# make sure that your dns has a cname set for adguard + +server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name adguard.*; + + include /config/nginx/ssl.conf; + + client_max_body_size 0; + + #if ($lan-ip = yes) { set $geo-whitelist yes; } + #if ($geo-whitelist = no) { return 404; } + 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 /tinyauth { + internal; + proxy_pass http://tinyauth:3000/api/auth/nginx; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Uri $request_uri; + } + + location @tinyauth_login { + return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri; + } + + location / { + auth_request /tinyauth; + error_page 401 = @tinyauth_login; + + # 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 adguard; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } + + location /control { + auth_request /tinyauth; + error_page 401 = @tinyauth_login; + + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app adguard; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } + + location /dns-query { + # to properly use this please set `allow_unencrypted_doh: true` and `force_https: false` in adguard + # see https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_app adguard; + set $upstream_port 3000; + set $upstream_proto http; + proxy_pass $upstream_proto://$upstream_app:$upstream_port; + + } +} +``` + +::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"} + +Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. +:: + ::tip{icon=""} ✨ __Astuce :__

diff --git a/content/fr/3.serveex/91.advanced/1.authentik.md b/content/fr/3.serveex/91.advanced/1.authentik.md index 5d3b120..cc8e1c4 100644 --- a/content/fr/3.serveex/91.advanced/1.authentik.md +++ b/content/fr/3.serveex/91.advanced/1.authentik.md @@ -6,64 +6,79 @@ description: Installer Authentik comme fournisseur d'identité auto-hébergé, c :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[Authentik](https://goauthentik.io) est un outil d'authentification unique permettant de vous logger une seule fois sur les plateformes compatibles OpenID. Il permet également de sécuriser l'accès aux services que vous exposez, en s'injectant via SWAG aux requetes vers vos services. +::note -Ainsi, si vous exposez Dockge sur internet via `dockge.mondomaine.fr`, au moment de l'accès à cette page, vous tomberez sur une page de login d'authentik. Si vous avez déjà été identifié sur un autre service sécurisé par authentik auparavant, alors vous serez déjà identifié. cela permet d'avoir à vous identifiez qu'une seule fois par jour sur l'ensemble des services protégés par authentik. +C'est une alternative avancée à [TinyAuth](/serveex/security/tinyauth) et [Pocket ID](/serveex/security/pocket-id) : une seule application qui assume à la fois le rôle de proxy forward-auth et de fournisseur OIDC, avec du LDAP, du SAML et des politiques d'accès de type RBAC intégrés (restreindre qui peut atteindre quelle application, pas seulement s'il est connecté), le tout par-dessus sa propre interface d'administration des utilisateurs, groupes et outposts. TinyAuth et Pocket ID restent plus légers et plus simples pour un petit homelab ; Authentik vaut la configuration supplémentaire dès que vous avez besoin d'un contrôle d'accès plus fin ou d'une couverture de protocoles plus large qu'OIDC seul. +:: -Authentik permet aussi d'utiliser le multi-facteur, notamment par TOTP (code généré par une application d'authentification de votre choix. Enfin, authentik permet aussi de se connecter directement via un compte Microsoft ou Google, si vous avez configuré une application d'un de ces services. +[Authentik](https://goauthentik.io) est un outil d'authentification unique (SSO) qui permet de se connecter une seule fois à toutes les plateformes compatibles OpenID. Il peut aussi sécuriser l'accès à vos services exposés en s'injectant via SWAG dans les requêtes vers ces services. -C'est une bonne manière de se passer de VPN pour exposer vos services, et d'exposer des services qui ne sont pas protégés par du MFA voir pas protégés par des login (comme le dashboard de swag). +Par exemple, si vous exposez Dockge en ligne sur `dockge.mondomaine.fr`, vous arriverez d'abord sur une page de connexion Authentik. Si vous vous êtes déjà authentifié sur un autre service protégé par Authentik, vous n'aurez pas à vous reconnecter. Cela permet de ne s'authentifier qu'une fois par jour pour tous les services protégés. -Authentik dipose d'[une doc très fournie](https://docs.goauthentik.io/docs/installation/docker-compose) et des [fabuleux tuto de Cooptonian](https://www.youtube.com/@cooptonian). Ici, nous montrerons juste les bases, avec l'exemple de l'exposition de Dockge. +Authentik gère aussi l'authentification multifacteur, dont le TOTP (un code généré par l'application d'authentification de votre choix). Il permet en outre de se connecter via un compte Microsoft ou Google, à condition d'avoir configuré l'une de ces applications. -Deux modes principaux sont à connaitre: +C'est une excellente alternative au VPN pour exposer des services en toute sécurité, en particulier ceux qui n'ont ni MFA ni protection de connexion (le tableau de bord de SWAG par exemple). -- Le premier permet à une application qui dispose nativement d'une intégration avec du SSO compatible OpenID de se connecter directement à Authentik. C'est la solution à privilégier car elle permet de laisser l'application décider de ce qui est public et de ce qui est protégé. +Authentik dispose d'une [documentation fournie](https://docs.goauthentik.io/docs/installation/docker-compose) et de [très bons tutoriels de Cooptonian](https://www.youtube.com/@cooptonian). Ici, nous verrons les bases en prenant Dockge comme exemple. + +Il y a deux modes principaux à connaître : + +- Le premier permet aux applications gérant nativement le SSO compatible OpenID de se connecter directement à Authentik. C'est la méthode à privilégier, puisque l'application décide elle-même de ce qui est public et de ce qui est protégé. ![Picture](/img/serveex/auth-native.svg) -- Le second permet d'injecter une authentification via authentik grace à SWAG avant d'arriver sur le service désiré. +- La seconde méthode injecte l'authentification Authentik via SWAG avant d'atteindre le service cible. ![Picture](/img/serveex/auth-proxy.svg) -Les deux modes son configurables application par application. +Les deux modes se configurent application par application. ## Installation -Structure des dossiers : -```text [Arborescence] -root -└── docker - └── authentik - ├── .env - ├── compose.yml - ├── media - ├── certs - ├── custom-template - └── ssh -``` -Créez les dossiers : +::file-tree +--- +tree: + /: + - srv: + - docker: + - authentik: + - .env + - compose.yml + - media/ + - certs/ + - custom-template/ + - ssh/ +--- +:: + +::steps{level="3"} +### Créer les dossiers ```bash [Terminal] sudo mkdir -p /srv/docker/authentik/media /srv/docker/authentik/certs /srv/docker/authentik/custom-template /srv/docker/authentik/ssh ``` -Positionnez vous dans le dossier `authentik` via `cd /srv/docker/authentik` et générez un mot de passe et une clé secrete que l'on va intégrer dans le .env : +### Générer les secrets + +Placez-vous dans le dossier `authentik` avec `cd /srv/docker/authentik` et générez un mot de passe et une clé secrète à inclure dans le fichier `.env` : ```bash [Terminal] sudo echo "PG_PASS=$(openssl rand 36 | base64)" >> .env sudo echo "AUTHENTIK_SECRET_KEY=$(openssl rand 60 | base64)" >> .env ``` + ::note -Afin de générer la clé, nous avons créé les dossiers en amont du déploiement via Dockge. Dockge vous empechera de créer une stack du meme nom dans ces dossiers s'il n'existe pas de `compose.yml`. Il faut donc créer un `compose.yml` vide afin que ce dernier la reconnaisse comme existante dans les stacks inactives : +Pour générer les clés, nous avons créé les dossiers avant le déploiement par Dockge. Dockge vous empêchera de créer une stack du même nom dans ces dossiers tant qu'un fichier `compose.yml` n'existe pas. Créez donc un `compose.yml` vide pour qu'elle apparaisse comme stack inactive : ```bash [Terminal] sudo nano /srv/docker/authentik/compose.yml ``` :: -Ouvrez dockge, et cherchez "authentik" dans les stack inactives. -Nommez la stack authentik et collez la configuration suivante, en changeant les chiffres de `{AUTHENTIK_TAG:-2026.2}`{lang=properties} par [la dernière version de Authentik](https://goauthentik.io/docs/releases). +### Déployer la stack + +Ouvrez Dockge et cherchez « authentik » dans les stacks inactives. +Nommez la stack `authentik` et collez la configuration suivante, en remplaçant `{AUTHENTIK_TAG:-2026.2}`{lang=properties} par [la dernière version d'Authentik](https://goauthentik.io/docs/releases). ```yaml [compose.yaml] --- @@ -105,7 +120,7 @@ services: timeout: 3s volumes: - redis:/data - + server: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2} container_name: authentik-server @@ -167,57 +182,67 @@ volumes: driver: local ``` -Dans le point `.env`, les variables `PG_PASS` et `AUTHENTIK_SECRET_KEY` sont déjà remplies. +### Démarrer la configuration initiale + +Dans le fichier `.env`, les variables `PG_PASS` et `AUTHENTIK_SECRET_KEY` sont déjà renseignées. Déployez la stack. -Vous pouvez alors commencer le set-up d'authentik en tappant `http://ipduserveur:9000/if/flow/initial-setup/`. +Vous pouvez ensuite commencer la configuration initiale en visitant : +`http://ipdevotreserveur:9000/if/flow/initial-setup/` ::warning -__Attention :__ il est conseillé de créer un nouveau compte admin, et de **désactiver** le compte admin de base `akadmin`. +__Attention :__ il est recommandé de créer un nouveau compte administrateur et de **désactiver** le compte `akadmin` par défaut. :: -## Exposer authentik -Pour être utilisable hors de chez vous, vous devez exposer authentik. +### Terminé ! +:: + +## Exposer Authentik +Pour utiliser Authentik en dehors de votre réseau local, vous devez l'exposer. ::note -📋 __Au préalable :__

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

+Nous partons du principe que vous avez déjà créé un sous-domaine du type `auth.mondomaine.fr` dans votre [zone DNS](/general/networking/dns), avec un CNAME pointant vers `mondomaine.fr`. Par ailleurs, à moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), vous devez déjà avoir redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat). :: -Ouvrez le fichier `authentik-server.conf`. +::steps{level="3"} +### Vérifier authentik-server.conf + +Ouvrez le fichier `authentik-server.conf` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/authentik-server.conf ``` -Vérifiez que dans chaque cas les variables ci-dessous sont correctes : +Vérifiez que les variables suivantes sont correctement réglées : ```nginx [authentik-server.conf] set $upstream_authentik authentik-server; proxy_pass http://$upstream_authentik:9000; ``` -Si ce n'est pas le cas, éditez-les, puis enregistrez avec :kbd{value="Ctrl+O"} et :kbd{value="Entrée"}, et quittez avec :kbd{value="Ctrl+X"}. +Sinon, faites les modifications nécessaires, puis enregistrez avec :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. -Créez le fichier `auth.subdomain.conf` +### Créer le fichier subdomain.conf + +Créez le fichier `auth.subdomain.conf` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/auth.subdomain.conf - ``` Collez la configuration suivante : ```nginx [auth.subdomain.conf] ## Version 2023/05/31 -# make sure that your authentik container is named authentik-server -# make sure that your dns has a cname set for authentik +# Ensure your authentik container is named authentik-server +# Ensure your DNS has a CNAME for authentik server { listen 443 ssl; @@ -230,14 +255,12 @@ server { client_max_body_size 0; location / { - include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app authentik-server; set $upstream_port 9000; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } location ~ (/authentik)?/api { @@ -247,143 +270,156 @@ server { set $upstream_port 9000; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } } ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Enregistrez avec :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau d'Authentik : +### Ajouter le réseau d'Authentik à SWAG + +Allez dans Dockge, et modifiez le fichier compose de SWAG pour y ajouter le réseau d'Authentik : ```yaml [compose.yaml] --- services: swag: container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom + # ... + networks: # Attach the container to the custom network # ... - - authentik # Nom du réseau déclaré dans la stack + - authentik # Name of the network declared in the stack -networks: # Définit le réseau custom +networks: # Define the custom network # ... - authentik: # Nom du réseau déclaré dans la stack - name: authentik_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + authentik: # Name of the network declared in the stack + name: authentik_default # Actual name of the external network + external: true # Indicates it's an external network ``` -Relancez la stack et patientez le temps que SWAG soit complètement opérationnel. +Redémarrez la stack et attendez que SWAG soit pleinement opérationnel. -Et voilà ! Vous pouvez accéder à authentik via `https://auth.mondomaine.fr` +### Terminé ! +:: -## Activer le multifacteur -Tout l'intérêt de authentik c'est de disposer du multifacteur pour toutes les apps que l'on protègera. +Vous pouvez maintenant accéder à Authentik via `https://auth.mondomaine.fr` -- Rendez vous sur `https://auth.mondomaine.fr` -- Identifiez-vous -- Rendez-vous dans _paramètres_ -- Cliquez sur la section _MFA_ -- Cliquez sur _s'inscrire_ -- Choisissez une méthode comme _TOTP device_ ( dans ce cas vous devrez utilisez une app d'authentification telle que Google Authenticator par exemple) -- Suivez les étapes +## Activer l'authentification multifacteur +Le principal intérêt d'Authentik est d'utiliser l'authentification multifacteur pour toutes les applications protégées. -Et voilà, vous serez invité à saisir un code à usage unique à chaque connexion. +::steps{level="3"} +### Se connecter à Authentik + +Allez sur `https://auth.mondomaine.fr` et connectez-vous. + +### Enregistrer une méthode MFA + +Allez dans _Settings_, cliquez sur la section _MFA_, puis sur _Register_. Choisissez une méthode comme _TOTP device_ (il vous faudra une application d'authentification du type Google Authenticator) et suivez les étapes. + +### Terminé ! +:: + +Un code à usage unique vous sera désormais demandé à chaque connexion. ## Protéger une app native -Authentik est compatible nativement avec un certain nombre d'application, vous retrouverez la liste et [le support ici](https://docs.goauthentik.io/integrations/services/) +Authentik est nativement compatible avec plusieurs applications. Vous trouverez la liste et [le support ici](https://docs.goauthentik.io/integrations/services/). ## Protéger une app par reverse proxy -Swag permet d'intercaler la page d'authentik entre la requête et l'accès à votre service. Pour cela il va falloir : +SWAG permet d'insérer la page de connexion d'Authentik entre une requête et l'accès à votre service. Pour cela : -- Configurer le service d'authentification dans authentik. -- Configurer le fichier proxy du domaine pour que swag puisse intercaler la page. +- Configurez le fournisseur d'authentification dans Authentik. +- Modifiez le fichier proxy du domaine pour que SWAG intercepte la requête. -Pourquoi le faire alors que Dockge a déjà une page d'authentification ? Tout simplement parce que l'authentification HTTP utilisée par Dockge est faible. Avec Authentik, vous aurez directement une authentification forte par MFA, et vous serez loggé automatiquement à toutes vos apps déjà protégées par authentik. Cela permet de sécuriser l'accès à Dockge et aux autres apps que vous protégerez, sans avoir à passer par un VPN. +Pourquoi faire cela alors que Dockge a déjà une authentification ? Parce que Dockge utilise une authentification HTTP faible. Avec Authentik, vous obtenez une authentification MFA robuste et une connexion automatique à toutes les applications protégées par Authentik. Cela sécurise l'accès à Dockge et aux autres applications sans avoir besoin d'un VPN. -### Configuration de Authentik +::steps{level="3"} +### Configuration d'Authentik -- Rendez vous dans Authentik -- Allez dans le panneau d'administration -- Sélectionnez _application_ puis _créer avec l'assistant_ -- Renseignez les champs comme suit : +- Allez dans Authentik +- Ouvrez le panneau d'administration +- Choisissez _Applications_ puis _Create with wizard_ +- Remplissez les champs comme suit : ![Picture](/img/serveex/auth1.png) -- Puis à l'étape suivante choisissez "Transférer l'authentification (application unique)" et éditez comme suit (attention aux flow, c'est important) : +- À l'étape suivante, choisissez « Forward authentication (single application) » et configurez comme suit (les flows sont importants) : ![Picture](/img/serveex/auth2.png) -- Ensuite, allez dans le menu à gauche dans _Avant-poste_ et éditez _authentik Embedded Outpost_ +- Ensuite, allez dans le menu _Outposts_ à gauche et modifiez _authentik Embedded Outpost_ : ![Picture](/img/serveex/auth3.png) -- Ajoutez l'application `dockge` en la faisant passer à droite et validez. +- Ajoutez l'application `dockge` en la déplaçant dans la colonne de droite et enregistrez. ### Configuration de SWAG -Ensuite rendez-vous dans le fichier `dockge.mondomaine.fr`. +Modifiez le fichier `dockge.mondomaine.fr` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf ``` -Puis enlevez les `#` des deux lignes `#include /config/nginx/authentik-server.conf;`{lang=nginx}. +Décommentez les deux lignes `#include /config/nginx/authentik-server.conf;` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. - -Et voilà ! En tapant `https://dockge.mondomaine.fr`, vous tomberez à présent sur la mire d'authentification de authentik. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. ::tip{icon=""} -✨ __Astuce :__ dans Dockge, dans les paramètres, vous pouvez désactiver l'authentification de Dockge afin de ne pas avoir à vous identifier deux fois. **Attention**, cela voudra dire que si vous avez exposé un port sur votre réseau local, il n'y aura plus aucune authentification. +✨ __Astuce :__ dans les réglages de Dockge, vous pouvez désactiver l'authentification de Dockge pour éviter une double connexion. **Attention** : cela signifie que si le port est ouvert sur votre réseau local, il n'y aura plus aucune authentification. :: +### Terminé ! +:: + +Désormais, en accédant à `https://dockge.mondomaine.fr`, vous serez redirigé vers l'écran de connexion d'Authentik. + ::note -Vous pouvez répétez l'opération pour chaque application que vous souhaitez protéger (si elle ne dipose pas d'intégration directe avec Authentik). +Répétez cette procédure pour chaque application que vous voulez protéger (sauf si elle a une intégration native avec Authentik). :: -Voilà votre nouvelle architecture : +Votre nouvelle architecture ressemble à ceci : ![Picture](/img/serveex/authentik.svg) ## Protéger un service sur un serveur distant -Dans le cas d'une application [native](/serveex/advanced/authentik#protéger-une-app-native) (via OAuth 2.0 ou autre), rien ne change. +Pour une [application native](/serveex/advanced/authentik/#protecting-a-native-app) (via OAuth 2.0 ou autre), rien ne change. -Dans le cas d'une application non native à protéger derrière un reverse proxy, vous devrez déployer un __avant-poste__. Un avant-poste est un conteneur qui jouera le rôle de proxy local, c'est à dire que c'est vers ce conteneur que les requêtes d'authentification de vos applications seront redirigées. C'est le seul qui est autorisé à dialoguer avec l'API de votre instance authentik. +Pour une application non native derrière un reverse proxy, vous devez déployer un __Outpost__. Un Outpost est un conteneur qui fait office de proxy local. C'est la cible des requêtes d'authentification de votre application, et le seul autorisé à communiquer avec votre API Authentik. ::note -Pré-requis : +Prérequis : -- Avoir installé [docker](/serveex/core/docker) sur votre machine distante hébergeant le service à protéger. -- Si l'application n'a pas d'intégration native, avoir un reverse proxy compatible. Comme partout ici, nous utiliserons [SWAG](/serveex/core/swag). +- Installer [Docker](/serveex/core/docker) sur le serveur distant qui héberge le service. +- Si l'application n'a pas d'intégration native, utiliser un reverse proxy compatible. Nous utiliserons [SWAG](/serveex/core/swag) ici. :: -Ce conteneur redirigera ensuite les requetes vers votre instance [Authentik](/serveex/advanced/authentik#authentik) principale, à travers le web (ou votre réseau local). Le serveur executera les controle et renverra la réponse à l'_avant-poste_, qui bloquera ou non la connexion à l'app protégée. +Ce conteneur transmettra les requêtes à votre instance [Authentik](/serveex/advanced/authentik#authentik) principale via internet (ou votre réseau local). Le serveur effectuera les vérifications et répondra à l'Outpost, qui autorisera ou bloquera l'accès en conséquence. ![auth-outpost](/img/serveex/auth-outpost.svg) +::steps{level="3"} ### Configuration d'Authentik -Créez vos [fournisseurs et applications](/serveex/advanced/authentik#protéger-une-app-native) comme nous l'avons vu plus haut. +Créez vos [providers et applications](/serveex/advanced/authentik/#protecting-a-native-app) comme montré plus haut. -Puis, dans votre panneau admin, allez dans la rubrique _Applications > Avant-postes_, puis créez un nouvel avant-poste. +Puis, dans le panneau d'administration, allez dans _Applications > Outposts_, et créez un nouvel outpost. Remplissez comme suit : -| Champs | Valeur | -|----------------|-----------------------------------------------------------------------| -| `Nom` | Le nom que vous souhaitez | -| `Type` | `Proxy` | -| `Intégration` | Laissez vide | -| `Applications` | Sélectionnez le ou les applications que vous avez créées précédemment | +| Champ | Valeur | +|----------------|------------------------------------------------------------------------| +| `Name` | Le nom de votre choix | +| `Type` | `Proxy` | +| `Integration` | Laisser vide | +| `Applications` | Sélectionnez les applications créées précédemment | -Dans la section `Paramètres avancés`, supprimez l'existant, et complétez comme suit : +Dans la section `Advanced settings`, effacez le contenu existant et saisissez : ```yaml log_level: info docker_labels: null -authentik_host: https://domaine_de_votre_serveur_authentik/ +authentik_host: https://your_authentik_server_domain/ object_naming_template: ak-outpost-%(name)s authentik_host_insecure: false container_image: @@ -392,17 +428,17 @@ docker_map_ports: true docker_labels: null ``` -Enrtegistrez et quittez. +Enregistrez avec :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. -Sur l'écran affichant les avant-postes créés, vous verrez le nouvel avant-poste que vous venez de créer. A la fin de la ligne, cliquez sur _afficher les informations_, et copiez précieusement le jeton d'accès. +Dans la liste des outposts créés, repérez le nouveau et cliquez sur _Show details_ en fin de ligne. Copiez soigneusement le token d'accès. -### Configuration de la machine distante +Nous partons du principe que vous avez déjà installé [Docker](/serveex/core/docker) et [SWAG](/serveex/core/swag) sur cette machine distante. Voici comment la configurer : -Nous partons du principe que vous avez déjà installé [Docker](/serveex/core/docker) et [SWAG](/serveex/core/swag) sur cette machine distante. +### Créer le dossier de la stack -Sur votre machine distante, à l'aide de [Dockge](/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez une stack `authentik-outpost`. +Sur votre machine distante, utilisez [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs) pour créer une stack nommée `authentik-outpost`. -Si vous n'avez pas installé [Dockge](/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez un dossier `/srv/docker/authentik-outpost`, ou directement en ligne de commande : +Si vous n'avez pas installé [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez un dossier `/srv/docker/authentik-outpost`, ou directement en ligne de commande : ```bash [Terminal] sudo mkdir -P /srv/docker/authentik-outpost @@ -410,17 +446,19 @@ sudo mkdir -P /srv/docker/authentik-outpost ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: -Créez le fichier `compose.yaml` ou copiez la configuration directement dans le champs si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs) +### Créer le fichier compose + +Créez le fichier `compose.yaml` ou collez la configuration directement dans Dockge s'il est installé. En ligne de commande : ```bash [Terminal] sudo nano /srv/docker/authentik-outpost/compose.yaml ``` -Collez la configuration suivante, en changeant les chiffres de `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} par la meme version que celle de votre serveur Authentik. +Collez la configuration suivante, en mettant à jour la version dans `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} pour correspondre à celle de votre serveur Authentik. ```yaml [compose.yaml] --- @@ -434,7 +472,6 @@ services: restart: unless-stopped env_file: - .env - # - foo ports: - 9000:9000 - 9443:9443 @@ -442,12 +479,11 @@ services: AUTHENTIK_HOST: ${HOST} AUTHENTIK_INSECURE: "false" AUTHENTIK_TOKEN: ${TOKEN} - # Starting with 2021.9, you can optionally set this too - # when authentik_host for internal communication doesn't match the public URL - # AUTHENTIK_HOST_BROWSER: https://external-domain.tld ``` -Rendez-vous sur la stack de SWAG de la machine distante (ou remplissez directement si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs)) et ajoutez le réseau de authentik-outpost dans le fichier de conf sur ce modele (les champs `networks`) : +### Ajouter le réseau de l'outpost à SWAG + +Allez sur la stack SWAG de la machine distante (ou modifiez-la directement dans Dockge) et ajoutez le réseau authentik-outpost dans le fichier de configuration comme suit (voir la section `networks`) : ```bash [Terminal] sudo nano /srv/docker/swag/compose.yaml @@ -459,25 +495,27 @@ services: swag: container_name: #... # ... - networks: # Relie le conteneur au réseau custom + networks: # Attach the container to the custom network - - authentik-outpost # Nom du réseau déclaré dans la stack + - authentik-outpost # Network name as declared in the stack -networks: # Définit le réseau custom +networks: # Define the custom network #... - authentik-outpost: # Nom du réseau déclaré dans la stack - name: authentik-outpost_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + authentik-outpost: # Name of the network declared in the stack + name: authentik-outpost_default # Actual name of the external network + external: true # Marks it as an external network ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. ::note -Ici nous partons du principe que le nom du réseau de dockge est `authentik-outpost_default`. +Nous partons du principe que le nom du réseau de Dockge est `authentik-outpost_default`. :: -Si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), relancez SWAG. +### Redémarrer SWAG + +Si vous utilisez [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), redémarrez SWAG. Sinon, via le terminal : @@ -486,7 +524,9 @@ cd /srv/docker/swag/ sudo docker compose up -d ``` -Creez (ou remplissez directement si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs)) le fichier `.env` dans le dossier de l'avant poste authentik : +### Renseigner vos variables d'environnement + +Créez (ou remplissez via Dockge) le fichier `.env` dans le dossier `authentik-outpost` : En ligne de commande : @@ -494,22 +534,25 @@ En ligne de commande : sudo nano /srv/docker/authentik-outpost/.env ``` -Collez la configuration suivante +Collez la configuration suivante : ```properties [.env] HOST= TOKEN= ``` -Remplissez comme suit -| Variable | Valeur | Exemple | -|-------------------------|---------------------------------------------------------|----------------------------| -| `HOST`{lang=properties} | L'url de votre serveur authentik | `https://auth.domaine.fr` | -| `TOKEN`{lang=properties} | Le token que vous avez précédemment copié précieusement | `Q2pVEqsTNRkJSO9SkJzU3KZ2` | +Renseignez les valeurs : -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +| Variable | Valeur | Exemple | +|----------|-------|---------| +| `HOST`{lang=properties} | L'URL de votre serveur Authentik | `https://auth.domaine.fr` | +| `TOKEN`{lang=properties} | Le token d'accès copié précédemment | `Q2pVEqsTNRkJSO9SkJzU3KZ2` | -Si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), déployez la stack. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. + +### Déployer la stack + +Si vous utilisez Dockge, déployez la stack. Sinon, via le terminal : @@ -518,50 +561,71 @@ cd /srv/docker/authentik-outpost/ sudo docker compose up -d ``` -Le conteneur est en route, vous pouvez vérifier son état dans votre panneau admin de votre instance Authentik, section _Applications > Avant-postes_. +Le conteneur tourne à présent. Vous pouvez vérifier son état depuis le panneau d'administration de votre instance Authentik, dans _Applications > Outposts_. -Nous allons a présent configurer SWAG. +### Pointer SWAG vers l'outpost -Ouvrez le fichier `authentik-server.conf`. +Configurons maintenant SWAG. + +Ouvrez le fichier `authentik-server.conf` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/authentik-server.conf ``` -Dans le fichier, changez `authentik-server` par `authentik-outpost` comme suit : +Dans le fichier, remplacez `authentik-server` par `authentik-outpost` comme suit : ```nginx [authentik-server.conf] set $upstream_authentik authentik-outpost; proxy_pass http://$upstream_authentik:9000; ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Enregistrez avec :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}. -Ensuite, configurez les applications à protéger selon si elles sont [natives](/serveex/advanced/authentik#protéger-une-app-native) ou par [proxy](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy) comme vous l'avez fait sur votre serveur principal. +### Terminé ! +:: -## Migrer une base authentik -Sur la machine d'origine, dumper la bdd : +Configurez ensuite les applications à protéger comme vous l'avez fait sur votre serveur principal, qu'elles soient [natives](/serveex/advanced/authentik/#protecting-a-native-app) ou protégées via [reverse proxy](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). + +## Migrer une base de données Authentik + +::note + +Les commandes ci-dessous partent du principe que le conteneur Postgres s'appelle `authentik-postgresql`, comme dans la section [Installation](#installation) plus haut. Adaptez si vous l'avez renommé. +:: + +::steps{level="3"} +### Exporter la base + +Sur la machine source, exportez la base : ```bash [Terminal] -sudo docker exec authentik-postgres pg_dump -U authentik -F t authentik > /path/to/mydb.tar +sudo docker exec authentik-postgresql pg_dump -U authentik -F t authentik > /chemin/vers/mabase.tar ``` -Puis l'envoyer sur la machine cible. Sur la machine cible, copier le fichier dans le container docker +### Transférer l'export + +Transférez-le sur la machine cible, puis copiez le fichier dans le conteneur Docker : ```bash [Terminal] -cp /path/to/mydb.tar authentik-postgres:/path/to/wherever +cp /chemin/vers/mabase.tar authentik-postgresql:/chemin/vers/ou-vous-voulez ``` -(Optionnel) Purgez les tables existantes : +### Purger les tables existantes + +(Facultatif) Purgez les tables existantes : ```bash [Terminal] -sudo docker exec -i authentik-postgres psql -U authentik -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'authentik' AND pid <> pg_backend_pid();" && \ -sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "DROP DATABASE IF EXISTS authentik;" && \ -sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c "CREATE DATABASE authentik;" && \ +sudo docker exec -i authentik-postgresql psql -U authentik -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'authentik' AND pid <> pg_backend_pid();" && sudo docker exec -i authentik-postgresql psql -U authentik -d postgres -c "DROP DATABASE IF EXISTS authentik;" && sudo docker exec -i authentik-postgresql psql -U authentik -d postgres -c "CREATE DATABASE authentik;" ``` -Restaurez la bdd +### Restaurer la base + +Restaurez la base : ```bash [Terminal] -sudo docker exec authentik-postgresql pg_restore -U authentik -d authentik /path/to/wherever/mydb.tar +sudo docker exec authentik-postgresql pg_restore -U authentik -d authentik /chemin/vers/ou-vous-voulez/mabase.tar ``` + +### Terminé ! +:: diff --git a/content/fr/6.recycled/2.deprecated/1.wireguard-14.md b/content/fr/6.recycled/2.deprecated/1.wireguard-14.md index d8c147e..5789e4e 100644 --- a/content/fr/6.recycled/2.deprecated/1.wireguard-14.md +++ b/content/fr/6.recycled/2.deprecated/1.wireguard-14.md @@ -6,6 +6,11 @@ description: Ancien guide WireGuard 14 conservé à titre archivé, voir le guid :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} +::note{to="/serveex/core/wireguard"} + +wg-easy 15 est devenu bien plus compliqué, « not so easy » dirait-on. C'est justement pour ça que ce vieux tutoriel v14 vaut la peine d'être gardé sous le coude : c'est toujours la façon la plus simple de monter un serveur WireGuard si vous n'avez pas besoin de ce qu'apporte la nouvelle version. +:: + ## Introduction L'utilisation d'un VPN permet d'accéder à distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une manière propre de sécuriser l'accès à la console SSH, plutot que d'exposer le port sur internet. C'est pouvoir se connecter à son réseau où que l'on soit, de maniere sécurisée, et de faire dialoguer des machines qui sont sur des réseaux différents. @@ -40,34 +45,39 @@ Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront ## Côté serveur ::note -📋 __A vérifier au préalable :__ +📋 __À vérifier au préalable :__ -- Vérifiez si le port `51820 UDP` estlibre sur votre serveur, et bien routé dans le NAT de la box `Source 51820 UDP -> Destination 51820 UDP -> Serveur`. En effet, votre serveur étant derrière votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connecté à votre VPN. -- Vérifiez aussi que le port `51821 TCP` est libre sur le serveur pour accéder à la web ui. +- Vérifiez que le port `51820 UDP` est disponible et correctement redirigé par votre box vers le serveur (`Source 51820 UDP -> Destination 51820 UDP -> Serveur`). +- Vérifiez que le port `51821 TCP` est disponible pour l'interface web. :: -::warning +::warning{to="https://wg-easy.github.io/wg-easy/latest/"} -__Attention :__ Cette documentation utilise la version `14` de [wg-easy](https://wg-easy.github.io/wg-easy/latest/). La version `15`comporte des breaking changes qui ne sont pas compatibles avec les configurations proposées ici. +__Attention :__ ce tutoriel utilise la version `14` de **wg-easy**. La version `15` introduit des changements incompatibles avec cette configuration. :: -Structure des dossiers +::file-tree +--- +tree: + /: + - srv: + - docker: + - wg-easy: + - config: + - etc_wireguard/ + - compose.yaml + - .env +--- +:: -```text [Arborescence] -root -└── docker - └── wg-easy - ├── config - │ └── etc_wireguard - ├── compose.yaml - └── .env -``` +Le conteneur tourne en mode `HOST`, c'est-à-dire qu'il utilise directement la pile réseau de l'hôte. -Le conteneur sera en mode `HOST`, c'est à dire qu'il occupera les ports de votre host comme s'il n'etait pas dans un conteneur mais directement installé sur la machine, sans passer par un sous-réseau. +::steps{level="3"} +### Déployer la stack -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `wg_easy`. +Ouvrez Dockge, cliquez sur `compose`, et nommez la stack `wg_easy`. -Copiez la configuration suivante : +Collez la configuration suivante : ```yaml [compose.yaml] --- @@ -77,7 +87,7 @@ services: env_file: - .env environment: - - LANG=en + - LANG=fr - WG_HOST=${HOST} - PASSWORD_HASH=${PW} - WG_DEFAULT_ADDRESS=${ADDRESS} @@ -95,22 +105,24 @@ services: - NET_ADMIN - SYS_MODULE ``` + ::tip{icon=""} -✨ __Astuce :__ +✨ __Astuce :__ -- Vous pouvez personnaliser le port de wireguard avec `WG_PORT` au lieu du port par defaut `51820` -- Ajoutez le label de watchtower afin d'automatiser les mises à jour +- Vous pouvez aussi indiquer votre propre port WireGuard avec `WG_PORT` +- Ajoutez le label Watchtower pour activer les mises à jour automatiques - ```yaml [compose.yaml] - services: - wg-easy: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true +```yaml [compose.yaml] +--- +services: + wg-easy: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Dans `.env` : +Dans le `.env` : ```properties [.env] HOST= @@ -119,81 +131,95 @@ ADDRESS= IPS= ``` -| Variable | Valeur | Exemples | -|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| -| `HOST`{lang=properties} | IP publique de votre box internet (elle doit etre fixe) | `80.72.136.27` | -| `PW`{lang=properties} | Hash du mot de passe, [à générer ici](https://bcrypt-generator.com/). **ATTENTION:** doubler les `$` | `$$2a$$12$$FF6T4QqSP9Ho`| -| `ADDRESS`{lang=properties} | Plage d'adresse que le DHCP du VPN peut attribuer, le `x` doit etre présent, on peut changer les autres chiffres ou les remplacer par `x` aussi | `10.8.0.x` | -| `IPS`{lang=properties} | les IPs qui doivent etre routées par les clients vers le VPN. Dans notre cas, on veut que seul le traffic vers le serveur et clients du VPN soit routé, on veut pas de leurs réseau local et on veut conserver l'accès à internet direct sans passer par le VPN.Si vous voulez tout de meme ajouter toutes les machines connectées aux appareils en local, ajoutez la plage `192.168.0.0/16` en séparant les deux plages par une virgule. | `10.8.0.0/24` | +| Variable | Description | Exemple | +|--------------|-------------|---------| +| `HOST` | IP publique d'accès à votre hôte (l'IP de la box si c'est chez vous) | `80.75.137.27` | +| `PW` | Hash bcrypt du mot de passe, [à générer ici](https://bcrypt-generator.com/). **ATTENTION :** doublez les `$` | `$$2a$$12$$FF6T4QqSP9Ho` | +| `ADDRESS` | Plage d'adresses DHCP du VPN, le `x` doit rester, les autres chiffres peuvent varier | `10.8.0.x` | +| `IPS` | Les IP routées par les clients dans le VPN. Utilisez `10.8.0.0/24` pour ne router que le trafic du VPN. Pour inclure le réseau local, ajoutez `192.168.0.0/16` séparé par une virgule. | `10.8.0.0/24` | -Puis déployez la stack. +Déployez la stack. -### Activation du forwarding depuis l'host +### Terminé ! +:: -Pour que l'host autorise les clients à communiquer entre eux, vous devez activer les paramèttres suivants : +### Activer le forwarding sur l'hôte + +Pour permettre la communication entre les clients du VPN, activez : ```bash [Terminal] sudo sysctl net.ipv4.ip_forward=1 sudo sysctl net.ipv4.conf.all.src_valid_mark=1 ``` -### Recuperation des fichiers de conf +### Récupérer les fichiers de configuration -Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host : +Pour configurer les clients, téléchargez les fichiers de configuration depuis le serveur : -- Connectez vous via le web en local sur `http://ipduserveur:51821` +- Allez sur `http://ipdevotreserveur:51821` - Créez un client -- Téléchargez le fichier de conf -- Renommez le en `wg0.conf` +- Téléchargez le fichier de configuration +- Renommez-le en `wg0.conf` ::caution -En cas d'échec, vérifiez les règles du pare-feu. +En cas d'échec, vérifiez les règles de votre pare-feu. :: ## Sur le serveur client ---- ::note -Nous partons du principe que le serveur client est un serveur linux avec Docker installé +Nous partons du principe que le client est un serveur Linux avec Docker installé :: -Structure des dossiers +::file-tree +--- +tree: + /: + - srv: + - docker: + - wireguard: + - config: + - wg_confs/ + - compose.yaml +--- +:: -```text [Arborescence] -root -└── docker - └── wireguard - └── config - │ └── wg_confs - └── compose.yaml -``` +::steps{level="3"} +### Créer le dossier de configuration -Creez le dossier `/srv/docker/wireguard/config/wg_confs`. +Créez le dossier `/srv/docker/wireguard/config/wg_confs` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce pour les allergiques au terminal :__ -vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce :__ utilisez **File Browser** pour parcourir et modifier vos fichiers sans terminal :: ```bash [Terminal] sudo mkdir -p /srv/docker/wireguard/config/wg_confs ``` -Copiez le fichier` wg0.conf` téléchargé précédemment. +### Copier le fichier de configuration + +Copiez le fichier `wg0.conf` téléchargé précédemment : ::tip{icon=""} -✨ __Astuce :__ Le moyen le plus simple est de transférer le fichier par sftp dans le dossier `/home/nomdutilisateur` puis de le copier dans le bon dossier : +✨ __Astuce :__ le plus simple est de transférer le fichier en SFTP dans `/home/votreutilisateur`, puis de le déplacer : - ```bash [Terminal] - sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs +```bash [Terminal] +sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs +``` :: -Creez le `compose.yaml` dans `/srv/docker/wireguard `: +### Déployer le conteneur + +Créez le `compose.yaml` dans `/srv/docker/wireguard` : + ```bash [Terminal] sudo nano /srv/docker/wireguard/compose.yaml ``` -Appuyez sur `i` pour rentrer en modification et copiez la configuration ci-dessous + +Collez : + ```yaml [compose.yaml] --- services: @@ -203,37 +229,43 @@ services: network_mode: host cap_add: - NET_ADMIN - - SYS_MODULE #optional + - SYS_MODULE #facultatif environment: - TZ=Europe/Paris volumes: - /srv/docker/wireguard/config:/config - - /lib/modules:/lib/modules #optional + - /lib/modules:/lib/modules #facultatif restart: unless-stopped ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. + +Démarrez le conteneur : -Lancez le conteneur : ```bash [Terminal] cd /srv/docker/wireguard sudo docker compose up -d ``` + ::note -A répéter pour chaque client +Répétez pour chaque client +:: + +### Terminé ! :: ## Autres appareils -- **Téléphone :** installer wireguard et scanner le QR code via le webui (http://ipduserveur:51821) -- **PC :** Installer wireguard client et mettre directement le fichier de conf téléchargé via le webui +- **Téléphone :** installez Wireguard et scannez le QR code depuis l'interface web (`http://ipdevotreserveur:51821`) +- **PC :** installez le client Wireguard et importez le fichier de configuration ::warning -__Attention :__ Si des machines clientes sont sur le meme réseau local que le serveur (derriere la box), éditez le fichier `wg0.conf` uploadé sur cette machine en changeant avec l'adresse locale du serveur : `Endpoint = ipduserveur:51820`{lang=properties} +__Attention :__ si un appareil client est sur le même réseau local que le serveur, modifiez `wg0.conf` et remplacez l'endpoint par l'IP locale du serveur : +`Endpoint = ip-de-votre-serveur:51820` :: -Et voilà ce que cela peut donner ! +Et voici le résultat : ![picture](/img/serveex/wireguard.svg) diff --git a/content/fr/6.recycled/3.alternatives/1.plex.md b/content/fr/6.recycled/3.alternatives/1.plex.md index 7b85b7a..f396f60 100644 --- a/content/fr/6.recycled/3.alternatives/1.plex.md +++ b/content/fr/6.recycled/3.alternatives/1.plex.md @@ -1,53 +1,67 @@ --- title: Plex -description: Installer Plex Media Server avec Tautulli sur votre homelab pour streamer films et séries depuis n'importe où sur tous vos appareils. +description: Installer Plex Media Server avec Tautulli sur votre homelab pour diffuser films et séries depuis n'importe où sur tous vos appareils. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[Plex](https://www.plex.tv/fr/) est une plateforme de streaming vidéo déployable chez vous, pour manager votre bibliothèque de films ou de série, et les lire en locale ou à distance. Plex dispose d'applications TV, Android, iOS, Window et Mac OS, permettant la lecture de vos bibliothèques, à la Netflix. +::note{to="/serveex/media/jellyfin"} -Avec le *plexpass*, vous pouvez également organsier et lire vos contenus audio, à la spotify, la différence étant que c'est bien votre contenu qui est hébergé et lu depuis chez vous. +C'est une alternative à **Jellyfin**, conservée ici pour référence. Plex n'est pas entièrement auto-hébergé : même la lecture locale passe par le relais de Plex et exige un compte Plex, et plusieurs fonctions sont derrière le paywall du Plex Pass. +:: + +[Plex](https://www.plex.tv/fr/) est une plateforme de streaming vidéo auto-hébergée pour gérer votre bibliothèque de films ou de séries et les lire en local ou à distance. Plex propose des applications pour TV, Android, iOS, Windows et macOS, permettant de diffuser votre bibliothèque comme sur Netflix. + +Avec le *Plex Pass*, vous pouvez aussi organiser et écouter votre musique à la manière de Spotify, à la différence que c'est votre contenu, hébergé et diffusé depuis votre serveur. ![picture](/img/serveex/plex.png) -On installera également [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), un outil qui permet d'avoir des stats poussées sur Plex. On utilisera, comme dès qu'on le peut, les images de linuxserver.io. +Nous installerons également [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), un outil qui fournit des statistiques détaillées sur Plex. Comme toujours, nous utiliserons les images linuxserver.io quand c'est possible. -- [Plus d'info sur le conteneur Plex](https://docs.linuxserver.io/images/docker-plex) -- [Plus d'info sur le conteneur Tautulli](https://docs.linuxserver.io/images/docker-tautulli/) +- [Plus d'infos sur le conteneur Plex](https://docs.linuxserver.io/images/docker-plex) +- [Plus d'infos sur le conteneur Tautulli](https://docs.linuxserver.io/images/docker-tautulli/) ::note -Vous serez amenés à creer un compte *Plex.tv*. Vous n'avez pas besoin d'exposer votre service Plex, il sera accessible directement par la plateforme. Votre serveur Plex sera gérable directement depuis votre compte. +Vous devrez créer un compte *Plex.tv*. Vous n'avez pas besoin d'exposer votre service Plex, il sera accessible via la plateforme. Votre serveur Plex sera pilotable directement depuis votre compte. :: ## Installer Plex -Structure des dossiers : -```text [Arborescence] -root -├── docker -│ ├── plex -│ │ ├── compose.yml -│ │ ├── .env -│ │ ├── config -│ │ └── transcode -│ └── tautulli -│ └── config -└── media - ├── tvseries - ├── movies - └── library -``` -Créez les dossiers `movies`, `tvseries` et `library` dans /media : +::file-tree +--- +tree: + /: + - srv: + - docker: + - plex: + - compose.yml + - .env + - config/ + - transcode/ + - tautulli: + - config/ + - media: + - tvseries/ + - movies/ + - library/ +--- +:: + +::steps{level="3"} +### Créer les dossiers média + +Créez les dossiers `movies`, `tvseries` et `library` dans `/media` : ```bash [Terminal] mkdir -p /media/movies /media/library /media/tvseries ``` -Ouvrez Dockge dans votre navigeateur, et cliquez sur `compose`. -Nommez la stack `plex` et ajoutez la config suivante : +### Déployer la stack + +Ouvrez Dockge dans votre navigateur et cliquez sur `compose`. +Nommez la stack `plex` et ajoutez la configuration suivante : ```yaml [compose.yaml] --- @@ -86,82 +100,93 @@ services: ``` ::tip{icon=""} -✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ Ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour : - ```yaml [compose.yaml] - services: - plex: - #... - labels: +```yaml [compose.yaml] +--- +services: + plex: + #... + labels: + - com.centurylinklabs.watchtower.enable=true - - com.centurylinklabs.watchtower.enable=true - - tautulli: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` + tautulli: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Trouvez votre PUID et votre GUID en tapant la commande suivante : +### Renseigner vos variables d'environnement + +Trouvez vos PUID et GUID en lançant : ```bash [Terminal] -id nomdutilisateur +id utilisateur ``` -Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple : + +Remplissez votre fichier `.env` avec les valeurs récupérées, par exemple : ```properties [.env] PUID=1000 GUID=1000 ``` + Déployez la stack. -L'interface locale est disponible via `http://ipduserveur:32400/web/index.html`. L'interface de Tautulli est joignable via `http://ipduserveur:8181`. +L'interface locale est disponible sur `http://ipdevotreserveur:32400/web/index.html`. +Tautulli est accessible sur `http://ipdevotreserveur:8181`. -::warning +::warning{to="https://support.plex.tv/articles/200288586-installation/#toc-2"} -Vous devez impérativement être sur votre réseau local au moment du premier setup de Plex, sans quoi l'url vous renverra sur votre compte Plex sans detecter votre serveur. Un VPN ne vous sauvera pas. Si vous ne pouvez pas faire autrement, [vous pouvez gérer l'installation à distance via un tunnel SSH](https://support.plex.tv/articles/200288586-installation/#toc-2). +Vous devez être sur votre réseau local pendant la configuration initiale de Plex. Sinon, l'URL redirigera vers votre compte Plex sans détecter votre serveur. Un VPN n'y changera rien. Si vous n'avez pas le choix, **vous pouvez faire la configuration à distance via un tunnel SSH**. +:: + +### Terminé ! :: ## Paramétrer Plex -Plex propose tout une gamme de film/série gratuitement. Après avoir créé votre compte, et pour ne pas polluer votre bibliothèque, je vous conseille de tout désactiver dans la section _Services en ligne_. +Plex propose une série de films et de séries gratuits. Après avoir créé votre compte, je vous conseille de tout désactiver dans la section _Services en ligne_ pour garder une bibliothèque propre. -Ensuite rendez-vous dans la section _Accès à distance_ et choisissez un port manuellement (ici cela sera `1234`). Il est préférable de ne pas garder le port d'origine. +Allez ensuite dans la section _Accès à distance_ et choisissez manuellement un port (nous prendrons `1234`). Mieux vaut ne pas utiliser le port par défaut. ![picture](/img/serveex/plex-port.png) -- Sur votre routeur, redirigez le port `TCP` source `1234` vers le port `32400`, vers l'IP de votre serveur via [les règles NAT](/general/networking/nat). -- Une fois fait, retournez dans Plex afin de vérifier que la connexion est bien opérationnelle +- Sur votre box, redirigez le port TCP `1234` vers le port `32400` de l'IP de votre serveur avec les [règles NAT](/general/networking/nat). +- Une fois fait, retournez dans Plex pour vérifier que l'accès à distance fonctionne. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu et autorisez le port `32400` de votre serveur. +**Si ça ne marche pas :** vérifiez les règles de votre pare-feu et autorisez le port `32400` sur votre serveur. :: -- Si vous avez un abonnement PlexPass et un GPU ou iGPU, activez *l'accélération matérielle* dans la section _Transcodeur_. -- Dans la section _Réglages/bibliothèque_, cochez _Analyser ma bibliothèque automatiquement_. -- Dans la section _Gérer/bibliothèque_ modifiez ou ajouter les bibliothèque, et choisissez le répertoire `/media/movies` pour les films et `/media/tvseries` pour les séries. +- Si vous avez le PlexPass et un GPU ou iGPU, activez l'*accélération matérielle* dans la section _Transcodeur_. +- Dans _Paramètres > Bibliothèque_, activez _Mettre à jour ma bibliothèque automatiquement_. +- Dans _Gérer > Bibliothèque_, ajoutez ou modifiez les bibliothèques en pointant `/media/movies` pour les films et `/media/tvseries` pour les séries. -Et voilà, vous avez un Plex fonctionnel ! +Et voilà ! Vous avez un serveur Plex fonctionnel ! -Vous n'avez plus qu'a remplir les dossiers `/media/movies` et `/media/tvseries` sur votre serveur de vos média favoris. Vous pourrez alors télécharger l'application Plex sur vos appareils et lire vos média favoris, chez vous ou à distance ! +Ajoutez simplement vos médias dans `/media/movies` et `/media/tvseries` sur votre serveur. Vous pouvez ensuite installer l'application Plex sur vos appareils et regarder vos contenus préférés en local ou à distance. -::note +::note{to="/general/networking/samba"} -Si pour stocker vos média vous utilisez un disque réseau (par exemple un stockage sur un NAS ou un disque dur externe branché ailleurs sur le réseau), veuillez consulter la section [montage samba](/general/networking/samba) afin que Plex puisse y accéder. +Si vos médias sont stockés sur un disque réseau (un NAS ou un disque dur externe accessible par le réseau), reportez-vous au **guide de montage Samba** pour que Plex puisse y accéder. :: ## Exposer Tautulli avec Swag -Plex n'a pas besoin d'etre exposé, étant joignable directement depuis votre compte Plex sur plex.tv. +Vous n'avez pas besoin d'exposer Plex, il est accessible via votre compte Plex sur plex.tv. + +En revanche, vous voudrez peut-être exposer Tautulli pour consulter vos statistiques depuis une simple URL quand vous n'êtes pas chez vous. -En revanche, vous pouvez désirer exposer Tautulli, afin d'accéder aux stats même si vous n'est pas chez vous, depuis une simple url. ::note -Nous partons du principe que vous avez le sous-domaine `tautulli.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/general/networking/nat). +Nous partons du principe que vous avez le sous-domaine `tautulli.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et bien sûr, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box doit être redirigé vers le port `443` de votre serveur dans les [règles NAT](/general/networking/nat). :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Tautulli : +::steps{level="3"} +### Ajouter le réseau de Tautulli à SWAG + +Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau de Tautulli : ```yaml [compose.yaml] --- @@ -169,28 +194,30 @@ services: swag: container_name: # ... # ... - networks: # Relie le conteneur au réseau custom + networks: # Rattache le conteneur au réseau personnalisé # ... - - tautulli # Nom du réseau déclaré dans la stack + - tautulli # Nom du réseau déclaré -networks: # Définit le réseau custom +networks: # Définit le réseau personnalisé # ... - tautulli: # Nom du réseau déclaré dans la stack - name: tautulli_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + tautulli: # Nom du réseau déclaré + name: tautulli_default # Nom réel du réseau externe + external: true # Le marque comme défini à l'extérieur ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Redéployez la stack et attendez que SWAG soit pleinement opérationnel. ::note -Ici nous partons du principe que le nom du réseau de Tautulli est `tautulli_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`. +Nous partons ici du principe que le nom du réseau de Tautulli est `tautulli_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`. :: -Copiez en renommant le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf` et éditez le : +### Créer le fichier subdomain.conf + +Copiez et renommez le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf`, puis modifiez-le : ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ **Astuce :** utilisez **File Browser** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] @@ -198,7 +225,7 @@ sudo cp /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample sudo nano /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf ``` -Et vérifiez que la configuration correspond bien à ceci, sinon éditez le fichier : +Vérifiez que la configuration correspond à ce qui suit, et modifiez-la si nécessaire : ```nginx [tautulli.subdomain.conf] ## Version 2023/05/31 @@ -279,17 +306,20 @@ server { } ``` -::tip{icon=""} -✨ Vous pouvez protéger cette app avec Authentik en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy). +::tip{icon="" to="/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy"} +✨ Vous pouvez protéger cette application avec Authentik en retirant le `#` devant `include /config/nginx/authentik-server.conf;` et `include /config/nginx/authentik-location.conf;`. N'oubliez pas de **créer une application et un provider dans Authentik**. :: -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. -Patientez quelques minutes puis tapez dans votre navigateur `http://tautulli.mondomaine.fr`. +### Terminé ! +:: + +Attendez quelques minutes, puis ouvrez `http://tautulli.mondomaine.fr` dans votre navigateur. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +**Si ça ne marche pas :** vérifiez les règles de votre pare-feu. :: -Et voilà ! +Et c'est terminé ! diff --git a/content/fr/6.recycled/3.alternatives/2.qbittorrent for plex.md b/content/fr/6.recycled/3.alternatives/2.qbittorrent for plex.md index e8e78c8..bd01a3b 100644 --- a/content/fr/6.recycled/3.alternatives/2.qbittorrent for plex.md +++ b/content/fr/6.recycled/3.alternatives/2.qbittorrent for plex.md @@ -1,11 +1,16 @@ --- -title: Qbittorrent +title: Qbittorrent pour Plex description: Installer qBittorrent avec Gluetun et ProtonVPN pour télécharger des torrents de manière sécurisée derrière un VPN sur votre serveur auto-hébergé. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} +::note{to="/serveex/media/qbittorrent"} + +C'est l'installation de la seedbox associée à Plex plutôt qu'à Jellyfin, conservée ici pour référence. Voir **Qbittorrent** pour la même installation associée à Jellyfin, l'alternative recommandée puisque Plex n'est pas entièrement auto-hébergé (son propre relais, un compte obligatoire) et enferme des fonctions derrière le paywall du Plex Pass. +:: + ![Picture](/img/serveex/qbit-vue.jpeg) Afin de télécharger vos media favoris en toute sécurité, nous allons monter un système à base de : @@ -21,23 +26,28 @@ Nous monterons ici le système ci-dessous : ![Picture](/img/serveex/qbit.svg) ## Configuration -Structure des dossiers -```text [Arborescence] -root -├── docker -│ └── seedbox -│ ├── qbittorrent -│ │ └── config -│ ├── gluetun -│ ├── compose.yaml -│ └── .env -│ -└── media #relié à plex et Qbittorrent - ├── downloads #vos téléchargements génériques, à selectionner dans les parametres - ├── movies #à selectionner dans l'interface pour télécharger vos films - └── tvseries #à selectionner dans l'interface pour télécharger vos séries -``` +::file-tree +--- +tree: + /: + - srv: + - docker: + - seedbox: + - qbittorrent: + - config/ + - gluetun/ + - compose.yaml + - .env + - "media # relié à Plex et Qbittorrent": + - "downloads/ # téléchargements génériques, choisis dans les réglages" + - "movies/ # utilisé pour télécharger les films" + - "tvseries/ # utilisé pour télécharger les séries" +--- +:: + +::steps{level="3"} +### Créer le dossier de téléchargements Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` : @@ -45,7 +55,9 @@ Si ce n'est pas déjà fait, créez le dossier `downloads` dans `/media` : mkdir -P /media/downloads ``` -Ouvrez Dockge, cliquez sur `compose` et nommez la stack `seedbox`. Collez la config ci-dessous : +### Déployer la stack + +Ouvrez Dockge, cliquez sur `compose`, et nommez la stack `seedbox`. Collez la configuration suivante : ```yaml [compose.yaml] --- @@ -94,157 +106,178 @@ services: - WIREGUARD_PRIVATE_KEY=${PR_KEY} - SERVER_COUNTRIES=France - PORT_FORWARD_ONLY=on - ``` ::tip{icon=""} -✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ __Astuce :__ ajoutez le label Watchtower dans chaque conteneur pour automatiser les mises à jour - ```yaml [compose.yaml] - services: - qbittorrent: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - gluetun: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` +```yaml [compose.yaml] +--- +services: + qbittorrent: + #... + labels: + - com.centurylinklabs.watchtower.enable=true + gluetun: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Avant de renseigner le `.env` dans Dockge, nous allons configurer la mise à jour du port de téléchargement. En effet, Proton, et la plupart des VPN, changent régulièrement le port de téléchargement, et celui-ci doit etre communiqué à Qbitorrent. +### Configurer la synchronisation du port -Pour ce faire, nous avons ajouté le mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` dans le conteneur. +Avant de renseigner le `.env` dans Dockge, configurons la mise à jour du port de téléchargement. Proton et la plupart des VPN font tourner le port de redirection, qui doit être communiqué à Qbittorrent. -Il faut à présent permettre au mod de récupérer l'information via Gluetun, qui n'accepte que les communications chiffrées via son API. +Nous avons ajouté le mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` au conteneur. -A cet effet, ouvrez un terminal. Nous allons à présent générer une clé d'authentification : +Il faut maintenant permettre au mod de récupérer les informations de Gluetun, qui n'autorise qu'une communication chiffrée via son API. + +Ouvrez un terminal pour générer la clé d'authentification : ```bash [Terminal] sudo docker run --rm qmcgaw/gluetun genkey ``` -Notez la clé. Puis créez le dossier `/srv/docker/gluetun` +Notez la clé, puis créez le dossier `/srv/docker/gluetun` : ```bash [Terminal] sudo mkdir /srv/docker/gluetun ``` -Et créez le fichier `config.toml` +Créez le fichier `config.toml` : ```bash [Terminal] sudo nano /srv/docker/gluetun/config.toml ``` -Éditez le comme suit en ajoutant la clée que vous avez générée : +Saisissez : ```toml [config.toml] [[roles]] name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod" routes = ["GET /v1/portforward"] auth = "apikey" -apikey = "votre_clée" # clée que vous avez générée précédemment +apikey = "votre_cle_ici" # la clé que vous venez de générer ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. Rendez-vous dans Dockge, et renseignez les variables dans `.env`: +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. + +### Renseigner vos variables d'environnement + +Dans Dockge, renseignez les variables du `.env` : ```properties [.env] PUID= GUID= UI_PORT= PR_KEY= -GSP_KEY= # la clé que vous avez générée et renseignée dans config.toml +GSP_KEY= # la clé générée et saisie dans config.toml ID= PW= ``` -En détails : +Détail : -| Variable | Valeur | Exemples | -|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------| -| `PUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `GUID`{lang=properties} | A renseigner avec les infos de votre user (trouvables via la commande `id nomdutilisateur`{lang=shell}) | `1000` | -| `UI_PORT`{lang=properties} | Le port d'accès à la web ui, elle sera joignable via `http//ipduserveur:port` | `5695` | -| `PR_KEY`{lang=properties} | La clée privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | -| `GSP_KEY`{lang=properties} | Clé que vous avez générée pour la mise à jour du port | `MnBa47MeVmk7xiv` | -| `ID`{lang=properties} | username que vous utilisez pour vous logger dans l'interface de Qbittorrent | `user` | -| `PW`{lang=properties} | mot de passe que vous utilisez pour vous logger dans l'interface de Qbittorrent | `password` | +| Variable | Description | Exemple | +|------------|-------------|---------| +| `PUID` | ID utilisateur (`id votreutilisateur`) | `1000` | +| `GUID` | ID de groupe (`id votreutilisateur`) | `1000` | +| `UI_PORT` | Port d'accès à l'interface web | `5695` | +| `PR_KEY` | Clé privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly` | +| `GSP_KEY` | Clé générée pour la mise à jour du port | `MnBa47MeVmk7xiv` | +| `ID` | Identifiant de connexion à l'interface Qbittorrent | `user` | +| `PW` | Mot de passe de l'interface Qbittorrent | `password` | + +### Terminé ! +:: ## Déploiement + +::steps{level="3"} +### Déployer le conteneur + Une fois fait, déployez le conteneur. ::warning -**Dans les logs de lancement, vous trouverez un mot de passe temporaire pour l'utilisateur `admin`** +**Les logs de démarrage affichent un mot de passe temporaire pour l'utilisateur `admin`** :: -Loggez vous sur `http://ipduserveur:5695` (ou le port que vous avez configuré). +### Se connecter et sécuriser son compte + +Connectez-vous sur `http://ipduserveur:5695` (ou le port que vous avez défini). ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si la connexion échoue :__ vérifiez les règles de votre pare-feu. :: -Changez votre nom d'utilisateur et votre mot de passe dans les paramètres "webui". +Changez votre identifiant et votre mot de passe dans les réglages « webui ». -Et voilà ! Dans les paramètres de Qbittorrent, dans "téléchargements" selectionnez `/media/downloads` comme chemin par défaut pour télécharger vos media. +### Terminé ! +:: -Lorsque vous lancez un téléchargement, n'oubliez pas de préciser le bon répertoire de téléchargement afin que Plex puisse synchroniser correctement sa bibliothèque (`/media/movies` et `/media/tvseries`). Vous pouvez aussi l'automatiser en créant une catégorie et un répertoire associé. +C'est terminé ! Dans les réglages de Qbittorrent, section « Téléchargements », définissez `/media/downloads` comme dossier par défaut. + +Lors de l'ajout d'un téléchargement, pensez à choisir le bon dossier pour que Plex se synchronise correctement (`/media/movies` ou `/media/tvseries`). Vous pouvez aussi automatiser cela avec des catégories et des dossiers. ## Exposer la webui ::warning -Qbitorrent n'utilise pas d'authentification multifacteur. Exposer Qbitorrent sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/advanced/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). +Qbittorrent ne gère pas l'authentification multifacteur. L'exposer sur internet peut mettre votre système en danger. Ne le faites que si vous utilisez du MFA via [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG. Utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). :: -Afin de lancer des téléchargement hors de chez vous, sans VPN, vous pouvez exposer la webui de Qbittorrent. +Pour lancer des téléchargements depuis l'extérieur, sans VPN, vous pouvez exposer l'interface web de Qbittorrent. ::note -Nous partons du principe que vous avez le sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/general/networking/nat). +Nous partons du principe que vous avez le sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans la [zone DNS](/general/networking/dns). Et que le port `443` de votre box est redirigé vers votre serveur dans les [règles NAT](/general/networking/nat), à moins d'utiliser Cloudflare Zero Trust. :: -Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Gluetun : +::steps{level="3"} +### Ajouter le réseau seedbox à SWAG + +Dans Dockge, modifiez le fichier compose de SWAG et ajoutez le réseau de Gluetun : ```yaml [compose.yaml] --- services: swag: - container_name: # ... - # ... - networks: # Relie le conteneur au réseau custom - # ... - - seedbox # Nom du réseau déclaré dans la stack + container_name: # ... + # ... + networks: + # ... + - seedbox -networks: # Définit le réseau custom +networks: # ... - seedbox: # Nom du réseau déclaré dans la stack - name: seedbox_default # Nom véritable du réseau externe - external: true # Précise que c'est un réseau à rechercher en externe + seedbox: + name: seedbox_default + external: true ``` -Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel. +Cliquez sur « Deploy » et attendez que SWAG soit complètement initialisé. ::note -Ici nous partons du principe que le nom du réseau de la seedbox est `seedbox_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81. +Nous partons du principe que le nom du réseau est `seedbox_default`. Vous pouvez le confirmer en consultant le tableau de bord de SWAG sur http://ipduserveur:81. :: -Puis nous allons créer et éditer le fichier `seedbox.subdomain.conf`. +### Créer le fichier subdomain.conf + +Créez ou modifiez maintenant `seedbox.subdomain.conf`. ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce pour les allergiques au terminal :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce pour les allergiques au terminal :__ utilisez **File Browser** pour modifier les fichiers plutôt que le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf ``` -Copiez la configuration ci-dessous, en prenant soin de vérifier le port : +Collez la configuration suivante (vérifiez le port) : ```nginx [seedbox.subdomain.conf] ## Version 2023/12/19 @@ -296,14 +329,18 @@ server { } } ``` -::tip{icon=""} -✨ Vous pouvez protéger cette app avec Authentik en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy). + +::tip{icon="" to="/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy"} +✨ Vous pouvez sécuriser cette application avec Authentik en décommentant les lignes `authentik-server.conf` et `authentik-location.conf`. N'oubliez pas de **créer une application et un provider dans Authentik**. :: -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. -Patientez quelques minutes puis tapez dans votre navigateur `https://seedbox.mondomaine.fr`, vous arriverez sur l'interface de Qbittorrent. +### Terminé ! +:: -Et voilà, vous avez un mediacenter pret à l'emploi ! +Attendez quelques minutes, puis allez sur `https://seedbox.mondomaine.fr`. Vous devriez arriver sur l'interface de Qbittorrent. + +Et voilà ! Vous avez maintenant un media center prêt à l'emploi. ![Picture](/img/serveex/seed.svg) diff --git a/content/fr/6.recycled/3.alternatives/3.servarr for plex.md b/content/fr/6.recycled/3.alternatives/3.servarr for plex.md index 896777f..a3499ee 100644 --- a/content/fr/6.recycled/3.alternatives/3.servarr for plex.md +++ b/content/fr/6.recycled/3.alternatives/3.servarr for plex.md @@ -1,61 +1,70 @@ --- -title: Automatisation -description: Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Overseerr pour films et séries. +title: Servarr pour Plex +description: Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Overseerr pour les films et les séries. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} -[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 : +::note{to="/serveex/media/servarr"} -- 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 +C'est la stack Servarr câblée pour Plex plutôt que pour Jellyfin, conservée ici pour référence. Voir **Automatisation** pour la même stack associée à Jellyfin, l'alternative recommandée puisque Plex n'est pas entièrement auto-hébergé (son propre relais, un compte obligatoire) et enferme des fonctions derrière le paywall du Plex Pass. +:: + +[Servarr](https://wiki.servarr.com/) est une suite d'applications conçues pour automatiser le téléchargement, la mise à jour et la gestion des médias. Ici, nous nous concentrerons sur les films et les séries avec pour objectif : + +- Choisir un film dans un catalogue via une interface web. +- Se poser dans son canapé et le regarder sur Plex quelques minutes plus tard. Simple. ![arr](/img/serveex/arr.svg) -Je vous propose de déployer la stack puis nous verrons par la suite la configuration de chacune des apps et leur fonctionnement. +Nous commencerons par déployer la stack, puis nous configurerons chaque application et verrons comment elles fonctionnent. ## Installer les apps -### Docker compose - -Structure des dossiers : - -```text [Arborescence] -root -├── docker -│ ├── plex -│ │ ├── compose.yml -│ │ ├── config -│ │ └── transcode -│ ├── tautulli -│ │ └── config -│ ├── sonarr -│ │ └── config -│ ├── radarr -│ │ └── config -│ ├── bazarr -│ │ └── config -│ ├── prowlarr -│ │ └── config -│ └── overseerr -│ └── config -└── media - ├── downloads - ├── tvseries - ├── movies - └── library -``` +::file-tree +--- +tree: + /: + - srv: + - docker: + - plex: + - compose.yml + - config/ + - transcode/ + - tautulli: + - config/ + - sonarr: + - config/ + - radarr: + - config/ + - bazarr: + - config/ + - prowlarr: + - config/ + - overseerr: + - config/ + - media: + - downloads/ + - tvseries/ + - movies/ + - library/ +--- +:: ::warning -__Attention :__ Respectez bien ce type de structure de fichier, notamment le dossier `media`. Ce dossier doit etre monté de la même manière dans les compose de _Qbittorrent_ (`/votre/chemin/media:/media`) et des _arr_. Sans cela, les _arr_ risquent de ne pas trouver le chemin fourni par Qbittorrent et de ne pas créer de _hardlinks_. Sans hardlink, les _arr_ copieront les films et cela doublera l'espace utilisé sur votre stockage. +__Attention :__ respectez bien cette structure de fichiers, en particulier le dossier `media`. Ce dossier doit être monté **exactement de la même façon** dans le fichier compose de _Qbittorrent_ (`/votre/chemin/media:/media`) et dans les applications _arr_. +Sinon, les applications _arr_ risquent de ne pas reconnaître le chemin fourni par Qbittorrent et ne créeront pas de _hardlinks_. +Sans hardlinks, les applications _arr_ copieront les fichiers, ce qui **doublera l'espace utilisé** sur votre stockage. :: -Ouvrez dockge et votre stack `plex`. Modifiez le compose comme ceci : +::steps{level="3"} +### Déployer la stack +Ouvrez Docker et votre stack `plex`. Modifiez le fichier compose comme suit : ```yaml [compose.yaml] --- services: @@ -91,7 +100,7 @@ services: ports: - 8181:8181 restart: unless-stopped - + sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr @@ -154,7 +163,7 @@ services: container_name: bazarr restart: unless-stopped environment: - - PUID=1000 + - PUID=1000 - PGID=1000 - TZ=Europe/Paris volumes: @@ -165,25 +174,26 @@ services: ``` ::tip{icon=""} -✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour +✨ Ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour - ```yaml [compose.yaml] - services: - plex: - #... - labels: +```yaml [compose.yaml] +--- +services: + plex: + #... + labels: + - com.centurylinklabs.watchtower.enable=true - - com.centurylinklabs.watchtower.enable=true - - tautulli: - #... - labels: - - - com.centurylinklabs.watchtower.enable=true - ``` + tautulli: + #... + labels: + - com.centurylinklabs.watchtower.enable=true +``` :: -Renseignez le `.env` avec les variables ci-dessous +### Renseigner vos variables d'environnement + +Renseignez votre fichier `.env` avec les variables ci-dessous : ```properties [.env] PUID= @@ -191,202 +201,227 @@ 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 | Exemple | +|----------------|-------------------------------------------------------------------------------------------------|-------------| +| `PUID` | À renseigner avec vos informations utilisateur (à vérifier avec `id votreutilisateur`) | `1000` | +| `GUID` | Idem | `1000` | +| `MEDIA_PATH` | Chemin de votre dossier média, ici `/media`. Il doit correspondre à celui utilisé par Qbittorrent. | `/media` | Déployez la stack. -### Paramétrer 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. +### Terminé ! +:: -Maintenant que vous avez déployé la stack, vous pouvez vous rendre sur `http://ipduserveur:7878`. +### Paramétrer Radarr + +Radarr interroge vos sources torrent et permet de définir le type de releases à privilégier. Il peut aussi mettre à niveau vos films si une meilleure version est disponible. + +Une fois déployé, allez sur `http://ipdevotreserveur:7878`. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -Créez vous un compte, choisissez bien *forms login*. +Créez un compte et choisissez *forms login*. -##### Ajouter un *root folder* +::steps{level="4"} +#### Ajouter un *root folder* -- Dans le menu à gauche, cliquez sur *Settings > Media Management*. -- Ajoutez un *root folder*, choisisez `/media/movies` +- Allez dans *Settings > Media Management*. +- Ajoutez un root folder et sélectionnez `/media/movies`. ::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. +__Attention :__ si vous avez déjà des films dans `movies` provenant de Qbittorrent, ne laissez pas Radarr les ajouter. Radarr pourrait les modifier, ce qui interromprait le seed dans Qbittorrent. :: -##### Configurer les profils +#### Configurer les profils -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. +Allez dans *Settings > Profiles*. Ce sont vos profils de qualité par défaut. Quand vous faites une demande, vous en choisissez un. Par exemple, configurez le profil « any » en décochant tout sauf ce qui apparaît sur l'image, et en les ordonnant en conséquence. Radarr cherchera ainsi d'abord du 4K REMUX, puis descendra dans la liste si ce n'est pas disponible. ![profiles_radarr](/img/serveex/radarr1.png) -##### Ajouter Qbittorrent +#### Ajouter Qbittorrent -Dans *Settings > Downloads Clients* vous allez ajouter Qbittorrent. +Dans *Settings > Download Clients*, ajoutez 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*. +- Utilisez l'IP de votre serveur comme *Host* et le port `5695` si vous suivez ce guide. +- Renseignez vos *Username* et *Password* Qbittorrent. +- Cliquez sur *Test*. +- Si le test réussit, cliquez sur *Save*. -##### Connecter à Plex +#### Connecter à Plex -Dans *Settings > Connect*, ajoutez une nouvelle connexion, choisissez *Plex Media Server*. +Allez dans *Settings > Connect*, ajoutez une nouvelle connexion et 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*. +- Utilisez `plex` ou l'IP de votre serveur comme *Host*. +- Port : `32400` +- Cliquez sur le bouton bleu « authenticate with Plex.tv » et connectez-vous à Plex. +- Cliquez sur *Test*, puis sur *Save* si le test réussit. -##### Récupérer la clé API pour Prowlarr et Overserr +#### Récupérer la clé API pour Prowlarr et Overseerr -- Dans *Settings > General*, copiez la *API Key* et notez la précieusement. +- Allez dans *Settings > General* et copiez votre *API Key* pour plus tard. + +#### Terminé ! +:: ### Paramétrer 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 interroge les sources torrent et définit le type de releases de séries à privilégier. Il met aussi à niveau les séries quand de meilleures versions sont disponibles. + +- Allez sur `http://ipdevotreserveur:8989`. +- Suivez les mêmes étapes que pour Radarr, mais avec `/media/tvseries` comme root folder. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: ### Paramétrer 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 sert de proxy pour gérer vos indexeurs torrent et les relier à Radarr et Sonarr. + +Allez sur `http://ipdevotreserveur:9696` et créez un compte, en utilisant *forms login*. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -##### Ajouter une source +::steps{level="4"} +#### Ajouter une source -- Dans la section *Indexers*, ajoutez l'indexer de votre source de torrent. +- Allez dans la section *Indexers* et ajoutez votre indexeur torrent. -##### Ajouter Radarr et Sonarr +#### Ajouter Radarr et Sonarr -Dans la section *Settings > Apps*, ajoutez Radarr et Sonarr avec les informations ci-dessous : +Dans *Settings > Apps*, ajoutez Radarr et Sonarr avec les informations suivantes : -- 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*. +- Serveur Prowlarr : `http://prowlarr:9696` (ou l'IP du serveur) +- Serveur Sonarr / Radarr : `http://sonarr:8989` ou `http://radarr:7878` +- API Key : celle copiée depuis Radarr et Sonarr. +- Cliquez sur *Test*, puis sur *Save* si tout se passe bien. + +#### Terminé ! +:: ### Paramétrer 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 est une application qui recherche automatiquement les bons sous-titres, dans les langues de votre choix, pour tous les films et séries ajoutés par Radarr et Sonarr. -Rendez-vous sur `http://ipduserveur:6767`. +Allez sur `http://ipdevotreserveur:6767`. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -Rendez-vous dans *Settings > General* et créez un identifiant et un mot de passe en utilisant le *forms login*. +Allez dans *Settings > General* et créez un identifiant et un mot de passe en utilisant *forms login*. +::steps{level="4"} #### Ajouter un profil de langage -- 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. +- Dans *Settings > Languages*, cliquez sur le bouton rose *Add new profile* et nommez-le. +- Cliquez sur le bouton rose *Add Languages* et ajoutez vos langues préférées, par exemple *French* et *English*. +- Enregistrez et quittez. +- En bas de l'écran, sous *Default Language For Newly Added Show*, cochez les deux cases et sélectionnez le profil que vous venez de créer. ![Bazarr](/img/serveex/bazarr2.png) -- Enregistrez avec le bouton tout en haut de l'écran. +- Enregistrez avec le bouton en haut de l'écran. -#### Ajouter des fournisseurs de sous-titre +#### Ajouter des fournisseurs de sous-titres -- Dans *Settings > Providers*, ajoutez vos fournisseurs favoris, comme par exemple : +- Dans *Settings > Providers*, ajoutez vos fournisseurs préférés, par exemple : ![Bazarr](/img/serveex/bazarr.png) -- Enregistrez avec le bouton tout en haut de l'écran. +- Enregistrez avec le bouton en haut de l'écran. #### Ajouter Radarr et 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. +- Allez dans *Settings > Sonarr* +- Dans *Address*, saisissez `sonarr` ou l'adresse IP de votre serveur. +- Dans *Port*, saisissez `8989`. +- Dans *API Key*, saisissez la clé API de Sonarr. - Cliquez sur *Test*. -- Enregistrez avec le bouton tout en haut de l'écran. +- Enregistrez avec le bouton en haut de l'écran. -Faites de même avec Radarr. +Répétez les mêmes étapes pour Radarr. + +#### Terminé ! +:: ### Paramétrer 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/) est une application qui permet de parcourir un catalogue de films et d'envoyer des demandes à Sonarr et Radarr. Parcourez les films ou séries, cliquez sur *Request*, et le média sera automatiquement téléchargé selon vos réglages Radarr ou Sonarr. Si le titre n'est pas encore sorti, il sera téléchargé automatiquement dès sa disponibilité. Ainsi, les épisodes d'une série apparaissent dans Plex sans aucune intervention manuelle. ![Overseerr](/img/serveex/overseerr.webp) -Rendez-vous sur `http://ipduserveur:5055` et authentifiez vous avec votre compte Plex. +Allez sur `http://ipdevotreserveur:5055` et connectez-vous avec votre compte Plex. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -#### Ajouter Radarr et Sonarr +::steps{level="4"} +#### Ajouter Radarr -Lorsque cela vous est demandé, ajoutez un serveur radarr : +Quand la question est posée, 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. +- Cochez *Default server*. +- __Server name :__ Radarr +- __Hostname or IP address :__ `radarr` ou l'IP de votre serveur +- __Port :__ `7878` +- __API Key :__ la clé API de Radarr +- Cliquez sur *Test* en bas. -Si tout va bien, continuez à renseigner les champs. +Si le test réussit, continuez de remplir 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. +- __Quality Profile :__ celui que vous avez configuré (par exemple `any`) +- __Root Folder :__ le dossier Plex. Dans nos exemples : `/media/movies` +- __Minimum Availability :__ `Announced`. Cela permet de demander des contenus non sortis et de les télécharger dès leur sortie. +- Cochez les 3 cases en bas. +- Enregistrez et continuez. -Puis faites de même avec Sonarr : +#### Ajouter 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. +Faites maintenant de même pour Sonarr : -Si tout va bien, continuez à renseigner les champs. +- Cochez *Default server*. +- __Server name :__ Sonarr +- __Hostname or IP address :__ `sonarr` ou l'IP de votre serveur +- __Port :__ `8989` +- __API Key :__ la clé API de Sonarr +- Cliquez sur *Test* en bas. -- __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. +Si le test réussit, continuez de remplir les champs : -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 ! +- __Quality Profile :__ celui que vous avez configuré (par exemple `any`) +- __Root Folder :__ le dossier Plex. Dans nos exemples : `/media/tvseries` +- __Language Profile :__ `Deprecated` +- Cochez les 4 cases en bas. +- Enregistrez et continuez. -## Exposer Overseerr avec Swag +#### Terminé ! +:: -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. +Et voilà ! Demandez un film ou une série, puis regardez dans qBittorrent ou Radarr/Sonarr. En quelques minutes, votre média sera disponible sur Plex ! + +## Exposer Overseerr avec SWAG + +Il peut être utile d'exposer Overseerr si vous voulez envoyer des demandes depuis l'extérieur sans VPN, ou si vous avez partagé votre bibliothèque Plex et voulez que vos proches aient accès à Overseerr. ::note -Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` qui pointe vers `films.fr` dans [zone DNS](/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/general/networking/nat). +Nous partons du principe que vous avez le sous-domaine `films.mondomaine.fr` avec un `CNAME` pointant vers `films.fr` dans votre [zone DNS](/general/networking/dns). Et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box est redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat). :: -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 : +::steps{level="3"} +### Ajouter le réseau d'Overseerr à SWAG + +Allez dans Dockge, modifiez le fichier compose de SWAG, et ajoutez le réseau d'Overseerr, qui est le même que celui de Plex (puisqu'il est dans la stack Plex) : ```yaml [compose.yaml] --- @@ -394,35 +429,37 @@ 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 - -networks: # Définit le réseau custom + - plex # Name of the network declared in the stack + +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. +Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel. ::note -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`. +Nous partons ici du principe que le réseau de Tautulli s'appelle `plex_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`. :: -Créez le fichier `films.subdomain.conf` et éditez le : +### Créer le fichier subdomain.conf + +Créez et modifiez le fichier `films.subdomain.conf` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} -✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. +✨ __Astuce :__ vous pouvez utiliser **File Browser** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/films.subdomain.conf ``` -Collez la configuration suivante : +Collez ce qui suit : ```nginx [films.subdomain.conf] ## Version 2024/07/16 @@ -483,13 +520,16 @@ server { } ``` -Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}. +Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. -Patientez quelques minutes puis tapez dans votre navigateur `http://films.mondomaine.fr`. +### Terminé ! +:: + +Attendez quelques minutes, puis visitez `http://films.mondomaine.fr` dans votre navigateur. ::caution -__En cas d'échec :__ vérifiez les règles de votre pare-feu. +__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: -Et voilà, vous avez exposé Overseerr ! +Et voilà, Overseerr est maintenant accessible publiquement !