Mirror the French docs onto the English structure

This commit is contained in:
Djeex
2026-09-05 16:55:39 +02:00
parent 86f04ed794
commit 1894ac7ead
74 changed files with 6322 additions and 1588 deletions
+196 -67
View File
@@ -1,74 +1,94 @@
---
title: Introduction
description: Introduction à Serveex un projet homelab pour auto-héberger ses services du quotidien avec Debian et Docker, sans dépendre de Google, Apple ou Netflix.
description: Introduction à Serveex, un projet homelab pour auto-héberger ses services du quotidien avec Debian et Docker, sans dépendre de Google, Apple ou Netflix.
navigation:
icon: i-lucide-bookmark
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
## Un home lab par un débutant pour les débutants
## Un homelab de débutant, pour les débutants
![](/img/serveex/serveex-server.svg)
![](/img/serveex/serveex-server.svg)
**Serveex** c'est avant tout un projet personnel visant à héberger chez soi le plus de services possibles du quotidien sans passer par des plateformes propriétaires (Google, Apple, Netflix...). L'idée était d'expérimenter, d'apprendre, et de documenter chaque étape. C'est un projet purement pour la science, et n'a pas vocation à être utilisé en production.
**Serveex** est avant tout un projet personnel visant à héberger chez soi le plus de services du quotidien possible, sans dépendre de plateformes propriétaires (Google, Apple, Netflix, etc.). L'objectif était d'expérimenter, d'apprendre, et de documenter chaque étape du chemin. C'est un projet purement scientifique, pas destiné à un usage en production.
Un grand merci à **Nipah**, pour le partage de ses connaissances infinies, et surtout pour sa patience.
Un grand merci à **Nipah** pour avoir partagé son savoir infini et, surtout, pour sa patience.
::note
**Pré-requis :**
- Posséder [un VPS en ligne](https://www.it-connect.fr/les-serveurs-prives-virtuels-vps-pour-les-debutants/) ou une machine locale : idéalement un mini PC (on trouve des N100 pour 100€), mais fonctionne aussi sur laptop ou [une machine virtuelle](https://openclassrooms.com/fr/courses/2035806-virtualisez-votre-architecture-et-vos-environnements-de-travail/6313946-installez-virtualbox). Les [Freebox Delta/Ultra proposent des machines virtuelles](https://next.ink/3493/machines-virtuelles-et-freebox-delta-comment-heberger-votre-premiere-page-web/).
- Savoir configurer les [règles NAT d'un routeur et attribuer des baux DHCP](/fr/general/networking/nat)
- Savoir configurer la [zone DNS d'un nom de domaine](/fr/general/networking/dns)
::note{icon=""}
📋 **Prérequis :**
- Disposer d'[un VPS en ligne](https://www.it-connect.fr/les-serveurs-prives-virtuels-vps-pour-les-debutants/) ou d'une machine locale : idéalement un mini PC (on trouve des modèles N100 autour de 100 €), mais ça marche aussi sur un portable ou [une machine virtuelle](https://openclassrooms.com/fr/courses/2035806-virtualisez-votre-architecture-et-vos-environnements-de-travail/6313946-installez-virtualbox). Les [Freebox Delta/Ultra proposent des machines virtuelles](https://next.ink/3493/machines-virtuelles-et-freebox-delta-comment-heberger-votre-premiere-page-web/).
- Savoir configurer [les règles NAT d'une box et attribuer des baux DHCP](/general/networking/nat)
- Savoir configurer la [zone DNS d'un nom de domaine](/general/networking/dns)
::
<div align="center">
<img src="/img/serveex/serveex.svg" align="center" width="700">
</div>
L'objectif étant d'être facilement déployable et facile à migrer, voici sa structure :
L'objectif est d'être facilement déployable et facile à migrer, voici donc sa structure :
### Le coeur du serveur
### Le cœur du serveur
:::div{class="relative"}
:ellipsis{left=0px width=40rem top=10rem blur=140px}
:::
::card-group
::card{icon="i-logos-debian" title="Système d'exploitation"}
[Installer et configurer Debian 13](/fr/serveex/core/installation)
::card{icon="i-logos-debian" title="Système d'exploitation" to="/serveex/core/installation"}
Installer et configurer Debian 13
::
::card{icon="i-logos-docker-icon" title="Moteur de conteneur"}
[Installer Docker](/fr/serveex/core/docker)
::card{icon="i-logos-docker-icon" title="Conteneuriser ses applications" to="/serveex/core/docker"}
Installer Docker
::
::card{icon="i-carbon-container-registry" title="Docker GUI"}
[Installer et déployer Dockge](/fr/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs)
::card
---
icon: i-carbon-container-registry
title: Gestionnaire de conteneurs
to: "/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs"
ui:
icon: text-[#74C2FF]
---
Installer et déployer Dockge
::
::card{icon="i-noto-globe-showing-americas" title="Reverse Proxy"}
[Exposez vos services avec SWAG](/fr/serveex/core/swag)
::card
---
icon: i-simple-icons-wireguard
title: VPN
to: /serveex/core/wireguard
ui:
icon: text-[#88171A]
---
Installer et déployer Wireguard
::
::card{icon="i-noto-globe-showing-americas" title="Reverse Proxy" to="/serveex/core/swag"}
Exposer vos services avec SWAG
::
::
### La sécurité
### Sécurité
:::div{class="relative"}
:ellipsis{left=0px width=40rem top=10rem blur=140px}
:::
::card-group
::card{icon="i-simple-icons-wireguard" title="VPN"}
[Installer et déployer Wireguard](/fr/serveex/security/wireguard)
::card{icon="i-noto-locked-with-key" title="Forward Auth" to="/serveex/security/tinyauth"}
Installer et déployer TinyAuth
::
::card{icon="i-noto-key" title="SSO & MFA"}
[Installer et déployer Authentik](/fr/serveex/security/authentik)
::card{icon="i-noto-identification-card" title="SSO sans mot de passe" to="/serveex/security/pocket-id"}
Installer et déployer Pocket ID
::
::card{icon="i-logos-cloudflare-icon" title="Zero Trust"}
[Installer et déployer Cloudflared](/fr/serveex/security/cloudflare)
::card{icon="i-logos-cloudflare-icon" title="Zero Trust" to="/serveex/security/cloudflare"}
Installer et déployer Cloudflared
::
::
@@ -79,56 +99,123 @@ L'objectif étant d'être facilement déployable et facile à migrer, voici sa s
:::
::card-group
::card{icon="i-solar-pulse-linear" title="Etat des services"}
[Installer et déployer Uptime-Kuma](/fr/serveex/monitoring/uptime-kuma)
::card
---
icon: i-solar-pulse-linear
title: État des services
to: /serveex/monitoring/uptime-kuma
ui:
icon: text-[#5CDD8B]
---
Installer et déployer Uptime-Kuma
::
::card{icon="i-lucide-logs" title="Gestion des logs"}
[Installer et déployer Dozzle](/fr/serveex/monitoring/dozzle)
::card
---
icon: i-lucide-logs
title: Gestion des logs
to: /serveex/monitoring/dozzle
ui:
icon: text-[#FFA600]
---
Installer et déployer Dozzle
::
::card{icon="i-noto-rabbit" title="Gestion de la connexion"}
[Installer et déployer Speedtest Tracker](/fr/serveex/monitoring/speedtest-tracker)
::card{icon="i-noto-rabbit" title="Suivi de la connexion" to="/serveex/monitoring/speedtest-tracker"}
Installer et déployer Speedtest Tracker
::
::card{icon="i-lucide-chart-column-decreasing" title="Etat des ressources"}
[Installer et déployer Beszel](/fr/serveex/monitoring/beszel)
::card
---
icon: i-lucide-chart-column-decreasing
title: État des ressources
to: /serveex/monitoring/beszel
ui:
icon: text-[#747bff]
---
Installer et déployer Beszel
::
::card{icon="i-lucide-circle-power" title="Wake on Lan"}
[Installer et déployer UpSnap](/fr/serveex/monitoring/upsnap)
::card
---
icon: i-lucide-circle-power
title: Wake on Lan
to: /serveex/monitoring/upsnap
ui:
icon: text-[#5BDAFD]
---
Installer et déployer UpSnap
::
::
### Media
### Média
:::div{class="relative"}
:ellipsis{left=0px width=40rem top=10rem blur=140px}
:::
::card-group
::card{icon="i-cbi-plex-alt" title="Media"}
[Installer et déployer Plex](/fr/serveex/media/plex)
::card
---
icon: i-simple-icons-jellyfin
title: Média
to: /serveex/media/jellyfin
ui:
icon: text-[#00A4DC]
---
Installer et déployer Jellyfin
::
::card{icon="i-cbi-qbittorrent" title="Seedbox"}
[Installer et déployer Qbittorrent](/fr/serveex/media/qbittorrent)
::card
---
icon: i-cbi-qbittorrent
title: Seedbox
to: /serveex/media/qbittorrent
ui:
icon: text-[#2F67BA]
---
Installer et déployer Qbittorrent
::
::card
---
icon: i-cbi-radarr
title: Automatisation
to: /serveex/media/servarr
ui:
icon: text-[#FFCB3D]
---
Installer et déployer la stack Servarr
::
::
### Cloud Drive & Photos
### Cloud & Photos
:::div{class="relative"}
:ellipsis{left=0px width=40rem top=10rem blur=140px}
:::
::card-group
::card{icon="i-cib-nextcloud" title="Drive"}
[Installer et déployer Nextcloud](/fr/serveex/cloud/nextcloud)
::card
---
icon: i-cib-nextcloud
title: Drive
to: /serveex/cloud/nextcloud
ui:
icon: text-[#0082C9]
---
Installer et déployer Nextcloud
::
::card{icon="i-simple-icons-immich" title="Photos"}
[Installer et déployer Immich](/fr/serveex/cloud/immich)
::card
---
icon: i-simple-icons-immich
title: Photos
to: /serveex/cloud/immich
ui:
icon: text-[#4250AF]
---
Installer et déployer Immich
::
::
@@ -139,12 +226,19 @@ L'objectif étant d'être facilement déployable et facile à migrer, voici sa s
:::
::card-group
::card{icon="i-noto-open-file-folder" title="Explorateur de fichier"}
[Installer et déployer file-browser](/fr/serveex/files/file-browser)
::card{icon="i-noto-open-file-folder" title="Explorateur de fichiers" to="/serveex/files/file-browser-quantum"}
Installer et déployer File Browser Quantum
::
::card{icon="i-carbon-share" title="Partage"}
[Installer et déployer Pingvin](/fr/serveex/files/pingvin)
::card
---
icon: i-carbon-share
title: Partage
to: /serveex/files/pingvin
ui:
icon: text-[#46509E]
---
Installer et déployer Pingvin
::
::
@@ -155,16 +249,23 @@ L'objectif étant d'être facilement déployable et facile à migrer, voici sa s
:::
::card-group
::card{icon="i-logos-visual-studio-code" title="Visual Studio Code"}
[Installer et déployer code-server](/fr/serveex/development/code-server)
::card{icon="i-logos-visual-studio-code" title="Visual Studio Code" to="/serveex/development/code-server"}
Installer et déployer code-server
::
::card{icon="i-simple-icons-gitea" title="Git Repository"}
[Installer et déployer Gitea](/fr/serveex/development/gitea)
::card
---
icon: i-simple-icons-forgejo
title: Dépôt Git
to: /serveex/development/forgejo
ui:
icon: text-[#FB923C]
---
Installer et déployer Forgejo
::
::card{icon="i-noto-hammer-and-wrench" title="Outils"}
[Installer et déployer IT Tools](/fr/serveex/development/it-tools)
::card{icon="i-noto-hammer-and-wrench" title="Outils" to="/serveex/development/it-tools"}
Installer et déployer IT Tools
::
::
@@ -175,18 +276,46 @@ L'objectif étant d'être facilement déployable et facile à migrer, voici sa s
:::
::card-group
::card{icon="i-cbi-adguard" title="DNS anti-pub et filtres"}
[Installer et déployer Adguard Home](/fr/serveex/apps/adguard)
::card
---
icon: i-cbi-adguard
title: DNS et filtres anti-pub
to: /serveex/apps/adguard
ui:
icon: text-[#68BC71]
---
Installer et déployer Adguard Home
::
::card{icon="i-cbi-bitwarden" title="Gestionnaire de mots de passe"}
[Installer et déployer Vaultwarden](/fr/serveex/apps/vaultwarden)
::card
---
icon: i-cbi-bitwarden
title: Gestionnaire de mots de passe
to: /serveex/apps/vaultwarden
ui:
icon: text-[#175DDC]
---
Installer et déployer Vaultwarden
::
::
## A venir
### Avancé
- Homepage, pour avoir tout vos services en un coup d'oeil et y accéder facilement
- Mkdocs pour votre documentation
- Docus, alternative à Mkdocs
- UpSnap pour réveiller vos machines à distance
:::div{class="relative"}
:ellipsis{left=0px width=40rem top=10rem blur=140px}
:::
::card-group
::card{icon="i-noto-key" title="SSO & MFA" to="/serveex/advanced/authentik"}
Installer et déployer Authentik
::
::card{icon="i-noto-crystal-ball" title="Gestionnaire Docker multi-hôtes" to="/serveex/advanced/arcane"}
Installer et déployer Arcane
::
::
## Bientôt
- Homepage, pour avoir tous vos services d'un coup d'œil et y accéder facilement
- Zensical, comment écrire et organiser votre propre documentation
+318 -44
View File
@@ -1,72 +1,346 @@
---
title: Debian 13
description: Guide pas à pas pour installer Debian 13 sur un serveur et configurer l'accès SSH, les paquets essentiels et un système de base prêt à l'emploi.
description: Guide pas à pas pour installer Debian 13 sur un serveur maison et configurer l'accès SSH, les paquets essentiels et un système de base prêt à l'emploi.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Debian 13
::note
🎯 __Objectif :__ Installer Debian 13 et les dépendances principales pour avoir un OS pret à l'emploi, joignable en SSH.
::
[Debian 13 « Trixie »](https://www.debian.org/) est la base sur laquelle repose tout ce guide. C'est un Linux simple, ennuyeux et stable, et pour un homelab c'est précisément l'intérêt : les versions des paquets restent figées pendant toute la durée de vie de la version, les correctifs de sécurité continuent d'arriver pendant environ cinq ans en comptant la LTS, si bien que la machine tourne des années au lieu de demander une reconstruction tous les quelques mois.
L'autre raison, c'est qu'il ne vous gêne pas. Les systèmes clés en main comme Unraid, TrueNAS ou le DSM de Synology posent leur propre couche par-dessus Docker, et le jour où vous avez besoin de quelque chose que leur interface n'expose pas, vous êtes coincé à bricoler autour. Debian n'est qu'un serveur : vous installez ce que vous voulez, où vous voulez, et rien n'est caché derrière l'interface de quelqu'un d'autre. Ça se trouve être aussi ce que la plupart des projets auto-hébergés visent en premier, leurs docs vous donnent donc des commandes `apt` qui fonctionnent telles quelles, Docker publie un dépôt Debian officiel, et n'importe quel message d'erreur collé dans un moteur de recherche a déjà des années de réponses derrière lui. Une installation minimale est assez légère pour laisser presque toute la RAM et le CPU d'un petit N100 à vos conteneurs.
![picture](/img/serveex/server.svg)
## Installation
1. [Paramètrage BIOS](https://www.debian.org/releases/stable/amd64/ch03s06.fr.html#bios-setup)
2. [Téléchargement de l'image Debian 13](https://www.debian.org/download.fr.html)
3. [USB bootable (Rufus)](https://dev.to/devops2808/how-to-create-bootable-usb-installer-for-debian-12-4f66)
4. [Installer Debian et configurer SSH](https://www.howtoforge.com/tutorial/debian-minimal-server/)
5. Installer sudo et ajouter un utilisateur au groupe sudo, pour les privilèges administrateurs
Se connecter en root :
```bash [Terminal]
su -
```
mettre son mot de passe puis taper :
```bash [Terminal]
apt install sudo
```
Ajouter l'utilisateur au groupe sudo :
```bash [Terminal]
adduser <nomdutilisateur> sudo
```
::note{icon="" to="/general/linux/cli-basics"}
📋 __Prérequis :__ tout ce qui suit se passe dans un terminal, vous devriez donc être à l'aise avec les bases : se déplacer avec `cd`, lister avec `ls`, modifier un fichier avec `nano`, et lire ce qu'une commande vous dit quand elle échoue. Si tout ça est nouveau pour vous, commencez par les **bases de la ligne de commande** et revenez ensuite.
::
La prochaine fois que l'utilisateur se connectera, il pourra utiliser la commande `sudo` et ainsi executer des commandes avec les privilèges administrateurs.
### Réglages du BIOS
6. [Tout savoir sur la connexion à distance à la console (SSH)](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys)
7. Optionnel - [UPS client en cas de coupure](https://www.sindastra.de/p/2078/how-to-connect-linux-server-to-synology-ups-server) / [et aussi](https://www.reddit.com/r/synology/comments/gtkjam/use_synology_nas_as_ups_server_to_safely_power/)
8. Optionnel - Réveil en cas de coupure de courant -> régler le BIOS S0 state
9. Optionnel - [Réveiller le serveur à distance (WoW - WoL)](https://dev.to/zakery1369/enable-wake-on-lan-on-debian-4ljd)
Appuyez sur :kbd{value="Del"} ou :kbd{value="F2"} juste après l'allumage pour ouvrir le setup du firmware (l'écran de démarrage indique généralement quelle touche c'est). La plupart des machines ont aussi un menu de démarrage ponctuel, souvent :kbd{value="F12"}, :kbd{value="F11"} ou :kbd{value="F8"}, qui permet de démarrer sur la clé USB une seule fois sans toucher à l'ordre de démarrage permanent. Debian documente la procédure générale dans son [manuel d'installation](https://www.debian.org/releases/forky/amd64/ch03s06.fr.html), et voici ce qui compte avant d'installer :
## CLI apps à avoir près de soi
Quelques app que vous utiliserez forcément à un moment donné, autant les installer dès le départ
- **Mode de démarrage.** Préférez l'UEFI natif. L'important est que l'installateur démarre dans le *même* mode que celui dans lequel vous comptez faire tourner le serveur, parce que l'UEFI utilise un partitionnement GPT alors que le BIOS legacy (et l'UEFI en mode CSM) utilise une table de partitions DOS, et une incohérence installe le chargeur de démarrage au mauvais endroit. Attention sur les machines multiboot : le mode de démarrage par défaut des périphériques amovibles n'est souvent pas celui utilisé pour les disques internes.
- **Le Secure Boot** peut rester activé. Debian fournit un chargeur shim signé par Microsoft, il démarre donc très bien tel quel.
- **Le mode SATA** doit être `AHCI`, pas `RAID` / Intel RST, sinon Linux risque de ne pas voir vos disques du tout. Changer ce réglage après avoir installé un autre OS sur le même disque empêchera cet OS de démarrer, réglez-le donc avant de commencer.
- **La restauration après coupure de courant**, pour que le serveur revienne tout seul après une coupure au lieu d'attendre que quelqu'un appuie sur le bouton. Le réglage se trouve dans *Power Management*, *APM Configuration* ou *Advanced* selon la carte, sous un nom du genre *Restore on AC Power Loss*, *AC Power Recovery*, *After Power Failure*, *AC Back Function* ou *S0 state*. Mettez-le sur **Power On**, pas sur *Last State*, qui laisserait la machine éteinte si la coupure l'a surprise pendant un arrêt.
- **Le Wake on LAN**, si vous voulez pouvoir allumer la machine à distance plutôt que d'aller la voir. Même menu *Power Management* : mettez *Wake on LAN*, *Power On By PCI-E/PCI* ou *Resume by PCI-E Device* sur **Enabled**, puis désactivez *ErP* / *EuP Ready* et *Deep Sleep* / *Deep Sx*, qui coupent l'alimentation de la carte réseau une fois la machine éteinte et la rendraient sourde au magic packet. Debian doit aussi dire à la carte d'écouter, voir [Pour aller plus loin](#pour-aller-plus-loin).
- **La virtualisation** (`VT-x` / `AMD-V`, plus `VT-d` pour le passthrough) ne coûte rien à activer maintenant et évite un aller-retour dans le BIOS le jour où vous voudrez faire tourner une VM. Docker lui-même n'en a pas besoin sous Linux.
::note
Si vous êtes en dual boot avec Windows, désactivez son *démarrage rapide* : il laisse le système de fichiers dans un état que Linux peut corrompre, et Windows Update aime bien le réactiver en douce.
::
### Télécharger l'ISO et l'écrire sur une clé USB
::steps{level="4"}
#### Télécharger l'image netinst
Récupérez l'image **netinst** `amd64` sur [debian.org](https://www.debian.org/download.fr.html). Elle fait environ 700 Mo et récupère le reste des paquets sur le réseau pendant l'installation, ce qui est exactement ce qu'on veut sur un serveur branché en ethernet : vous obtenez des paquets à jour au lieu d'installer depuis un instantané vieux de plusieurs mois puis de tout mettre à jour derrière. Les images DVD complètes n'ont de sens que si la machine n'a pas de réseau pendant l'installation.
#### L'écrire avec Rufus
Sous Windows, écrivez-la avec [Rufus](https://rufus.ie/) (portable, aucune installation nécessaire). Branchez une clé USB de 2 Go ou plus, en gardant en tête qu'**elle sera entièrement effacée**, puis :
- **Périphérique** : votre clé USB. Vérifiez la capacité deux fois, Rufus écrit volontiers sur le mauvais disque si vous le laissez faire.
- **Type de démarrage** : `SÉLECTION`, puis choisissez l'ISO Debian que vous venez de télécharger.
- **Schéma de partition** : il doit correspondre au mode de démarrage réglé dans le BIOS plus haut. `GPT` pour l'UEFI, `MBR` uniquement si vous restez en legacy/CSM. Le champ système de destination suit automatiquement.
- Laissez les options de formatage par défaut, puis cliquez sur `DÉMARRER`. Si Rufus demande comment écrire l'image, gardez le *mode image ISO* recommandé.
![Rufus configuré pour écrire l'ISO Debian](/img/serveex/install/rufus.png)
_Capture issue de [ce guide de clé USB bootable sur DEV Community](https://dev.to/devops2808/how-to-create-bootable-usb-installer-for-debian-12-4f66)._
L'écriture prend quelques minutes.
#### Terminé !
::
### Installer Debian
Démarrez sur la clé USB (menu de démarrage ponctuel vu dans la section BIOS) et choisissez **Install**, l'installateur en mode texte. L'objectif ici est un serveur minimal et headless : pas de bureau, pas de session graphique, rien d'autre qu'un shell joignable en SSH. L'écran et le clavier que vous utilisez en ce moment ne servent que pour cette installation, après quoi la machine tourne à l'aveugle dans un coin. Le [guide d'installation officiel](https://www.debian.org/releases/trixie/amd64/ch06s03.fr.html) documente chaque écran.
![Menu de démarrage de l'installateur Debian, Install sélectionné](/img/serveex/install/debian-install-boot.png)
::steps{level="4"}
#### Langue, pays, clavier
Rien de particulier. La disposition du clavier est celle sur laquelle vous tapez physiquement, ce qui est facile à rater si vous avez choisi l'anglais mais tapez en AZERTY.
#### Réseau et nom de machine
Une connexion filaire se configure toute seule en DHCP. Quand il demande un **nom de machine**, donnez-lui un vrai nom (`serveex`, `nas`...), vous le verrez dans chaque invite SSH ensuite. Le **domaine** peut rester vide, ou être réglé sur quelque chose comme `lan` si vous en utilisez déjà un à la maison.
![Écran du nom de machine de l'installateur Debian](/img/serveex/install/debian-install-hostname.png)
#### Mot de passe root et compte utilisateur
Laissez le **mot de passe root vide**. Debian désactive alors le compte root, installe `sudo` et y place votre utilisateur, ce qui est le comportement le plus sûr et vous épargne une étape de configuration plus tard.
Créez ensuite votre utilisateur : nom complet, identifiant, mot de passe. C'est le compte avec lequel vous vous connecterez en SSH. Évitez `admin` comme identifiant, il est réservé sur Debian et l'installateur le refusera.
#### Horloge
Confirmez le fuseau horaire deviné à partir de votre pays.
#### Partitionnement
*Assisté, utiliser un disque entier* sur le disque système, puis *Tout dans une seule partition*, ce qui vous donne un gros `/` plus une partition de swap. Des partitions `/home` ou `/var` séparées n'apportent pas grand-chose ici et garantissent surtout que l'une se remplit pendant que les autres restent à moitié vides. Ne prenez LVM que si vous savez déjà que vous voulez des snapshots ou agrandir des volumes plus tard. Vos disques de données ne sont pas touchés à ce stade, vous les monterez ensuite.
Terminez avec *Terminer le partitionnement et appliquer les changements*, puis confirmez avec *Oui* : c'est le point de non-retour pour ce disque.
![Schéma de partitionnement de l'installateur Debian, tout dans une seule partition](/img/serveex/install/debian-install-partition.png)
::tip{icon="" to="/general/linux/filesystem"}
__Astuce :__ ce qui vit réellement sur cette unique partition, et pourquoi `/srv/docker` est l'endroit où ce guide place chaque stack, est traité dans **dossiers et partitions**.
::
#### Miroir et sondages
Répondez *Non* à *Faut-il analyser un autre média d'installation ?*, tout le reste vient du réseau. Pour le miroir, prenez-en un dans votre pays, ou `deb.debian.org` qui route automatiquement vers un miroir proche, et laissez le champ du proxy HTTP vide sauf si vous en avez réellement un. Le concours de popularité (statistiques anonymes sur les paquets) est oui ou non, sans conséquence.
#### Sélection des logiciels (tasksel)
L'écran qui décide vraiment si votre serveur reste minimal. Décochez **tout**, en particulier `Environnement de bureau Debian` et `GNOME`, cochés par défaut, qui embarqueraient des gigaoctets de paquets plus une session graphique que vous n'afficherez jamais. Gardez exactement deux cases : **`serveur SSH`**, votre seule porte d'entrée à partir de maintenant, et **`utilitaires usuels du système`**, que la suite de ce guide suppose installés.
::warning
Les cases se cochent et se décochent avec :kbd{value="Space"}, jamais :kbd{value="Enter"}. :kbd{value="Enter"} valide tout l'écran et passe à la suite, appuyer dessus sur la ligne du bureau installe donc GNOME au lieu de le retirer, et vous vous retrouvez avec un serveur graphique à dépouiller à la main. Utilisez :kbd{value="Tab"} pour atteindre `Continuer` une fois que les deux cases ci-dessus sont les seules cochées.
::
![Sélection des logiciels de l'installateur Debian avec seulement serveur SSH et utilitaires usuels cochés](/img/serveex/install/debian-install-tasksel.png)
#### GRUB
Installez-le sur le disque que vous venez de partitionner (`/dev/sda`, `/dev/nvme0n1`...), pas sur une partition.
![L'installateur Debian demandant sur quel périphérique installer le chargeur GRUB](/img/serveex/install/debian-install-grub.png)
#### Terminé !
::
::note
Avant de redémarrer, prenez une minute pour donner au serveur une **adresse fixe** dans votre box. Tout ce qui suit pointe dessus : vos raccourcis SSH, le reverse proxy, les favoris vers chaque service. Sur un simple bail DHCP cette adresse finit par changer toute seule et tout casse d'un coup.
La bonne méthode est une réservation DHCP, qui lie l'adresse à l'adresse MAC du serveur tout en laissant la box gérer l'adressage. Voir [NAT & DHCP](/general/networking/nat) pour savoir où la trouver dans l'interface de votre box.
::
_Captures de l'installateur issues du [guide de serveur Debian minimal de howtoforge.com](https://www.howtoforge.com/tutorial/debian-minimal-server/)._
### Se connecter en SSH
Le serveur n'a plus d'écran à partir de maintenant, tout passe par SSH. Ces étapes vous font entrer, puis s'assurent que personne d'autre ne le peut.
::steps{level="4"}
#### Se connecter depuis une autre machine
Retirez la clé USB et redémarrez. L'adresse à utiliser est celle que vous avez réservée dans la box juste avant, `192.168.1.42` dans les exemples ci-dessous.
Tout ce qui suit se passe depuis une autre machine de votre réseau local, pas sur le serveur. Windows et macOS embarquent tous les deux un client SSH, il n'y a donc rien à installer : ouvrez **PowerShell** sous Windows, ou **Terminal** sous macOS, et tapez la même commande.
```bash [Terminal]
ssh [email protected]
```
La première connexion vous demande de confirmer l'empreinte du serveur, c'est normal, répondez `yes`. Elle est stockée dans `~/.ssh/known_hosts` et la question ne reviendra pas.
::note
Si la connexion est refusée, la case `serveur SSH` a probablement été laissée décochée à l'écran tasksel. Rebranchez un écran, connectez-vous en local et lancez `sudo apt install openssh-server`.
::
L'écran et le clavier ne servent plus à rien. Débranchez-les, la machine peut aller vivre dans son coin.
#### Se connecter par clé plutôt que par mot de passe
Les mots de passe en SSH se font attaquer par force brute dès que le port est joignable depuis l'extérieur, et en taper un à chaque connexion devient vite pénible. Toujours sur l'autre machine, générez une clé si vous n'en avez pas déjà une :
```bash [Terminal]
sudo apt update
sudo apt upgrade
sudo apt install nano btop ranger git duf neofetch samba cifs-utils tree unzip
ssh-keygen -t ed25519
```
Appuyez sur :kbd{value="Enter"} pour accepter le chemin par défaut, et mettez une passphrase (elle protège le fichier de clé lui-même, votre système la retiendra après le premier déverrouillage). Copiez ensuite la moitié publique sur le serveur. Windows n'a pas de `ssh-copy-id`, il pousse donc la clé à travers la connexion :
::code-group
```bash [macOS]
ssh-copy-id [email protected]
```
```bash [Windows]
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```
En plus :
```bash [Linux]
ssh-copy-id [email protected]
```
::
- [gping](https://www.linode.com/docs/guides/how-to-use-gping-on-linux/) - Outil graphique de ping
- [lazydocker](https://github.com/jesseduffield/lazydocker) - Gestion de conteneurs docker en CLI
Il demande votre mot de passe une dernière fois. Reconnectez-vous pour vérifier qu'il ne le demande plus :
## Fonctions utiles
### Pare-feu
```bash [Terminal]
ssh [email protected]
```
- [ufw](https://www.zenarmor.com/docs/network-security-tutorials/how-to-set-up-a-firewall-with-ufw-on-debian)
- [Firewalld](https://linuxcapable.com/how-to-install-firewalld-on-debian-linux/)
#### Refermer la porte derrière vous
### Partage Samba (accès à un disque réseau distant)
Une fois la clé fonctionnelle, coupez les connexions par mot de passe et l'accès root direct. Sur le serveur :
- [Créer et accéder à un partage Samba](/fr/general/networking/samba)
```bash [Terminal]
sudo nano /etc/ssh/sshd_config.d/hardening.conf
```
```properties [hardening.conf]
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
```
### Transfert de fichier via rsync
Un fichier dans `sshd_config.d/` est lu par-dessus la configuration principale, vos changements survivent donc à une mise à jour de paquet qui réécrirait `/etc/ssh/sshd_config`. Appliquez :
```bash [Terminal]
sudo rsync -avhHSP /source /destination
sudo systemctl restart ssh
```
::warning
Gardez votre session SSH actuelle ouverte pendant le test. Ouvrez un **second** terminal et reconnectez-vous : si la clé ne fonctionne plus, la session restée ouverte est votre porte de secours pour corriger la configuration. Fermez-la avant d'avoir vérifié et une faute de frappe vous enferme dehors de votre propre serveur, avec l'écran et le clavier comme seul recours.
::
::note
La porte est maintenant fermée pour toutes les autres machines aussi, y compris la prochaine depuis laquelle vous voudrez vous connecter. Pour en laisser entrer une nouvelle, remettez `PasswordAuthentication yes` dans `hardening.conf`, redémarrez SSH, refaites les deux étapes de clé ci-dessus depuis cette machine, puis remettez `no` et redémarrez SSH une dernière fois.
::
#### Terminé !
::
### Réveiller le serveur à distance
Une machine qui tourne 24h/24 pour deux heures d'utilisation réelle consomme, fait tourner des ventilateurs et use des disques pour rien. Le Wake on LAN permet de l'éteindre proprement quand vous avez fini et de la rallumer en quelques secondes sans vous déplacer : la carte réseau reste alimentée en veille, à l'écoute d'un broadcast bien précis (le *magic packet*) contenant l'adresse MAC du serveur, et allume la machine dès qu'elle le voit. Pratique pour une cible de sauvegarde dont vous n'avez besoin que la nuit, ou un serveur multimédia que personne ne regarde dans la journée.
Deux conditions avant de commencer : la machine doit être en ethernet filaire, les cartes WiFi ne gèrent presque jamais ça, et le paquet doit être envoyé depuis le même réseau local, puisqu'un broadcast ne traverse pas un routeur. La partie BIOS a été traitée dans [Réglages du BIOS](#réglages-du-bios), voici la partie Debian.
::steps{level="4"}
#### Trouver l'interface et son adresse MAC
```bash [Terminal]
ip -br link
```
Vous obtenez quelque chose comme `enp1s0 UP aa:bb:cc:dd:ee:ff`. Gardez les deux : le nom de l'interface pour les commandes ci-dessous, l'adresse MAC pour la machine qui enverra le paquet.
#### Vérifier que la carte le gère
```bash [Terminal]
sudo apt install ethtool
sudo ethtool enp1s0 | grep -i wake
```
La réponse ressemble à `Supports Wake-on: pumbg` puis `Wake-on: d`. La lettre qui compte est **g**, pour magic packet. Si la ligne *Supports* ne la contient pas, la carte ne sait pas le faire et il n'y a rien à configurer. `Wake-on: d` signifie simplement désactivé, ce que l'étape suivante corrige.
#### L'activer
```bash [Terminal]
sudo ethtool -s enp1s0 wol g
```
Relancez la vérification, `Wake-on` devrait maintenant être à `g`. Ce réglage est réinitialisé à chaque démarrage, il faut donc le réappliquer automatiquement.
#### Le faire survivre aux redémarrages
```bash [Terminal]
sudo nano /etc/systemd/system/wol.service
```
```ini [wol.service]
[Unit]
Description=Enable Wake on LAN
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp1s0 wol g
[Install]
WantedBy=basic.target
```
```bash [Terminal]
sudo systemctl daemon-reload
sudo systemctl enable --now wol.service
```
#### Le réveiller
Éteignez le serveur avec `sudo poweroff`, puis envoyez le magic packet depuis une autre machine du réseau. Sur macOS et Linux, le paquet `wakeonlan` le fait en une commande :
```bash [Terminal]
wakeonlan aa:bb:cc:dd:ee:ff
```
Windows n'a pas d'émetteur intégré, la solution la plus simple là-bas est une application mobile : n'importe laquelle des applications *Wake on LAN* gratuites prend l'adresse MAC et fonctionne de la même façon. Le serveur devrait démarrer en quelques secondes.
#### Terminé !
::
::note
Le réveiller depuis l'extérieur est une autre histoire, et passer par un VPN n'aide pas si ce VPN tourne sur le serveur lui-même : le tunnel est coupé tant que la machine est éteinte. La solution est de rediriger un port UDP sur la box (7 ou 9, les ports Wake on LAN habituels) vers le serveur, puis d'envoyer le paquet sur votre adresse publique depuis une application qui sait le faire, [WolOn](https://wolon.app/) par exemple. La [règle NAT](/general/networking/nat) est toute simple, `UDP 9` depuis l'extérieur vers `192.168.1.42:9` à l'intérieur. La box doit encore savoir associer cette IP à la bonne adresse MAC pendant que la machine est éteinte, et c'est pour ça que certaines exposent une entrée ARP statique, ou un bouton Wake on LAN à elles qui vous épargne complètement la redirection de port. Vérifiez d'abord votre box.
::
### Garder le système à jour
Debian ne se met pas à jour tout seul. Tous les mois environ, ou quand vous y pensez, quatre commandes en SSH :
::steps{level="4"}
#### Rafraîchir la liste des paquets
```bash [Terminal]
sudo apt update
```
Rien n'est installé à ce stade, `apt` demande seulement aux miroirs ce qui est disponible et vous dit combien de paquets sont en retard.
#### Appliquer les mises à jour
```bash [Terminal]
sudo apt full-upgrade
```
`full-upgrade` est préféré au simple `upgrade` parce qu'il accepte de retirer un paquet quand c'est le prix à payer pour en faire avancer un autre, ce qui arrive sur un serveur qui vit des années. Lisez le résumé avant de répondre oui, il liste exactement ce qui est supprimé.
#### Nettoyer derrière elles
```bash [Terminal]
sudo apt autoremove --purge
```
Chaque mise à jour de noyau laisse le précédent installé, et `/boot` est une petite partition qui finit par se remplir et casser la mise à jour suivante. Faites-le à chaque fois, pas de temps en temps. `--purge` supprime aussi les fichiers de configuration des paquets retirés.
#### Redémarrer si le noyau a bougé
```bash [Terminal]
sudo reboot
```
Une mise à jour du noyau ou de la libc ne prend effet qu'après un redémarrage. Tout le reste s'applique immédiatement, ce n'est donc nécessaire que quand la mise à jour a touché l'un des deux, et ça vaut la peine de le planifier à un moment où rien ne dépend de la machine.
#### Terminé !
::
::tip
Si vous n'avez pas besoin de surveiller ce qui se passe, les trois premières étapes tiennent sur une ligne, `&&` interrompant la chaîne dès que l'une d'elles échoue :
```bash [Terminal]
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove --purge -y
```
`-y` répond oui à toutes les questions, y compris le jour où une mise à jour propose de retirer quelque chose que vous auriez préféré garder, réservez-le donc aux tournées de routine. Ajoutez `&& sudo reboot` pour évacuer aussi le redémarrage.
::
Pour les correctifs de sécurité sans avoir à y penser, `sudo apt install unattended-upgrades` puis `sudo dpkg-reconfigure -plow unattended-upgrades` les applique tout seul chaque nuit. À noter que tout ceci ne couvre que le système : vos conteneurs se mettent à jour séparément, depuis Dockge.
### Pour aller plus loin
- [Tout savoir sur l'accès à distance à la console (SSH)](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys)
- Optionnel - [Client UPS en cas de coupure de courant](https://www.sindastra.de/p/2078/how-to-connect-linux-server-to-synology-ups-server) / [et aussi ici](https://www.reddit.com/r/synology/comments/gtkjam/use_synology_nas_as_ups_server_to_safely_power/)
Ajoutez ` --exclude @eaDir`{lang=shell} si la source est un NAS Synology
::tip{icon="" to="/general/linux/handy-tools"}
✨ __Astuce :__ une poignée d'outils en ligne de commande à ajouter par-dessus une installation minimale, `btop`, `duf`, `ufw` et quelques autres, sont traités dans **outils CLI pratiques**.
::
+78 -61
View File
@@ -3,86 +3,87 @@ title: Docker
description: Installer Docker et Dockge sur Debian pour déployer et gérer des services auto-hébergés avec de simples stacks de conteneurs.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Docker
Docker, pour installer des services déployables en quelques secondes, et les manager en quelques commandes/clics.
Chaque application de ce guide, [Jellyfin](/serveex/media/jellyfin), [Vaultwarden](/serveex/apps/vaultwarden), [Immich](/serveex/cloud/immich), pour n'en citer que quelques-unes, arrive avec sa propre liste de dépendances, sa propre version de Python ou de Node, ses propres bizarreries. Installer tout ça directement sur Debian fonctionne un moment, jusqu'à ce que deux applications réclament une version différente de la même bibliothèque, ou qu'en désinstaller une laisse des fichiers éparpillés dans le système sans moyen propre de revenir en arrière.
::note
🎯 __Objectifs :__
Un **conteneur** contourne le problème : il empaquette une application avec tout ce dont elle a besoin pour tourner, isolée du reste du système et de tous les autres conteneurs. En démarrer un ne touche pas aux paquets de Debian, et le supprimer tient en une commande qui ne laisse rien derrière. Ce n'est pas non plus une machine virtuelle, il n'y a pas de second système d'exploitation à démarrer ni de ressources à réserver à l'avance : un conteneur partage le noyau de l'hôte et démarre en une seconde environ, en n'utilisant que la RAM et le CPU dont l'application à l'intérieur a réellement besoin.
- Installer [Docker](https://www.docker.com/)
- Installer [Dockge](https://github.com/louislam/dockge) pour manager les stacks
- Installer [Watchtower](https://github.com/containrrr/watchtower) pour mettre à jour les conteneurs
::
**Docker** est l'outil qui construit, démarre et gère ces conteneurs. Pointez-le sur une *image*, un instantané prêt à l'emploi d'une application maintenu par ses développeurs, et il la télécharge et la lance en une commande. Tout le reste de Serveex est bâti dessus : chaque application à partir d'ici est un conteneur Docker, ou une poignée de conteneurs qui travaillent ensemble.
![picture](/img/serveex/docker.svg)
## Installer docker
Installez les repo Docker et la clé GPG
## Installer Docker
::steps{level="3"}
### Ajouter le dépôt Docker et la clé GPG
```bash [Terminal]
# Add Docker's official GPG key:
# Ajoute la clé GPG officielle de Docker :
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Ajoute le dépôt aux sources Apt :
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
```
Installez les package
### Installer les paquets
```bash [Terminal]
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Et voilà !
**Plus d'options** [Installer docker pour Debian 12](https://docs.docker.com/engine/install/debian/)
### Terminé !
::
**Plus d'options :** [Installer Docker pour Debian 13](https://docs.docker.com/engine/install/debian/)
::note
Dans toute la suite, on part du principe que les stacks sont installées dans le dossier `/docker`, créé grace à la commande :
```bash [Terminal]
sudo mkdir /docker
```
À partir d'ici, nous partons du principe que les stacks sont installées dans le dossier `/srv/docker`, créé avec la commande :
```bash [Terminal]
sudo mkdir /srv/docker
```
::
## Installer [dockge](https://github.com/louislam/dockge) pour gérer et déployer les conteneurs
[Dockge](https://github.com/louislam/dockge) est un outil web permettant de créer, configurer, lancer et gérer des conteneurs pour Docker. C'est une interface simple, intuitive, qui est plus légère et plus facile pour les débutants que d'utiliser docker en CLI ou Portainer.
## Installer [Dockge](https://github.com/louislam/dockge) pour gérer et déployer les conteneurs
[Dockge](https://github.com/louislam/dockge) est un outil web pour créer, configurer, lancer et gérer des conteneurs Docker. C'est une interface simple et intuitive, plus légère et plus abordable pour un débutant que la ligne de commande ou Portainer.
![picture](/img/serveex/dockge.png)
### Configuration
Plan des fichiers que nous allons modifier :
::file-tree
---
label: Structure de fichiers que nous allons créer
tree:
/:
- srv:
- docker:
- dockge:
- compose.yml
---
::
```text [Arborescence]
root
└── docker
└── dockge
└── compose.yml
```
Créez le dossier de la stack :
::steps{level="4"}
#### Créer le dossier de la stack
```bash [Terminal]
cd /docker
cd /srv/docker
sudo mkdir dockge
```
Puis créez le fichier `compose.yml` dans ce dossier avec l'outil nano que vous avez installé préalablement (dans les outils CLI)
#### Créer le fichier compose
```bash [Terminal]
cd /docker/dockge
cd /srv/docker/dockge
sudo nano compose.yml
```
Appuyer sur `i` pour rentrer en modif et copiez-collez ceci.
Collez ce qui suit :
```yaml [compose.yaml]
---
@@ -92,39 +93,46 @@ services:
restart: unless-stopped
container_name: dockge
ports:
- 3555:5001 # Le port joignable depuis le LAN sera 3555
- 3555:5001 # le port accessible sur le réseau local sera 3555
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /docker/dockge/data:/app/data
- /docker:/docker
- /srv/docker/dockge/data:/app/data
- /srv/docker:/srv/docker
environment:
- DOCKGE_STACKS_DIR=/docker
- DOCKGE_STACKS_DIR=/srv/docker
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Pour lancer le conteneur, tapez :
#### Lancer le conteneur
```bash [Terminal]
cd /docker/dockge
cd /srv/docker/dockge
sudo docker compose up -d
```
Une fois lancé, tapez dans votre navigateur `http://ipduserveur:3555` et vous tomberez sur la page de login.
Plus d'info sur [dockge et comment l'utiliser](https://github.com/louislam/dockge)
Allez ensuite sur `http://ipdevotreserveur:3555` dans votre navigateur pour accéder à la page de connexion.
Et voilà, vous avez installé docker et un outil facile pour manager vos conteneurs !
Plus d'infos sur [Dockge et son utilisation](https://github.com/louislam/dockge)
## [Watchtower](https://watchtower.nickfedor.com/), pour mettre à jour automatiquement les conteneurs
Watchtower est un conteneur qui permet de vérifier les mise à jour et d'installer les nouvelles images sans effort, en ajoutant un simple label dans les fichiers `compose.yml` de vos conteneurs.
#### Terminé !
::
Et voilà ! Docker et un outil pour gérer facilement vos conteneurs sont prêts !
## [Watchtower](https://watchtower.nickfedor.com/), pour mettre à jour les conteneurs automatiquement
Watchtower est un conteneur qui vérifie les mises à jour et récupère les nouvelles images automatiquement, simplement en ajoutant un label dans les fichiers `compose.yml` de vos conteneurs.
### Configuration
::steps{level="4"}
#### Créer la stack
- Ouvrez Dockge dans votre navigateur
- Cliquez sur `compose`
- Nommez la stack `watchtower`
- Copiez collez la configuration ci-dessous à la place de la configuration par défaut dans Dockge
- Collez la configuration ci-dessous dans la zone de configuration par défaut de Dockge
```yaml [compose.yaml]
---
@@ -138,10 +146,10 @@ services:
environment:
- TZ=Europe/Paris
- WATCHTOWER_SCHEDULE=${SCHEDULE}
- WATCHTOWER_LABEL_ENABLE=true # watchtower scan tous les conteneurs qui ont le label com.centurylinklabs.watchtower.enable=true
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_REMOVE_VOLUMES=true
#Notifications Discord - décommenter si utilisé
# Notifications Discord - décommentez si utilisées
#- WATCHTOWER_NOTIFICATIONS=slack
#- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
#- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL}
@@ -149,24 +157,33 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
```
Puis remplissez les données ci-dessous dans l'encart ".env" de Dockge
#### Renseigner vos variables d'environnement
Remplissez la section `.env` dans Dockge avec ce qui suit :
```properties [.env]
SCHEDULE=
WH_URL=
```
| Propriété | Valeur | Exemples |
|-------------------------|---------------------------------------------------------------------|----------------------------------------------|
| `SCHEDULE`{lang=properties} | Format cron | `0 0 6 * * *` (tous les jours à 6h du matin) |
| `WH_URL`{lang=properties} | URL du webhook de votre serveur Discord - ajouter `/slack` à la fin | `https://serveurdiscord/valeur/slack` |
| Propriété | Valeur | Exemples |
|----------------|--------------------------------------------------------------------|----------------------------------------------|
| `SCHEDULE` | Format cron | `0 0 6 * * *` (tous les jours à 6h) |
| `WH_URL` | L'URL de votre webhook Discord, ajoutez `/slack` à la fin | `https://votreserveurdiscord/webhook/slack` |
Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci à vos conteneurs dans leur compose.yml :
#### Activer Watchtower sur les autres conteneurs
Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci à leur `compose.yml` :
```yaml [compose.yaml]
---
labels:
- com.centurylinklabs.watchtower.enable=true
- com.centurylinklabs.watchtower.enable=true
```
Puis relancez les stacks modifiés. Et voilà, vous avez une bonne carcasse pour commencer à installer les services qui vous plaisent !
Redémarrez ensuite les stacks modifiées.
#### Terminé !
::
Et c'est tout ! Vous avez maintenant une base solide pour commencer à déployer les services que vous voulez !
@@ -3,16 +3,8 @@ title: Wireguard
description: Installer et configurer WireGuard VPN pour accéder à votre homelab de n'importe où et connecter tous vos appareils à votre réseau privé.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Wireguard
::note
🎯 __Objectifs :__
- Installer Wireguard
- Configurer les clients
- Accéder au réseau sécurisé
::
## 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.
@@ -180,21 +172,21 @@ root
└── compose.yaml
```
Creez le dossier `/docker/wireguard/config/wg_confs`.
Creez le dossier `/srv/docker/wireguard/config/wg_confs`.
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo mkdir -p /docker/wireguard/config/wg_confs
sudo mkdir -p /srv/docker/wireguard/config/wg_confs
```
Créez le fichier `wg0.conf`
```bash [Terminal]
sudo nano /docker/wireguard/config/wg_confs/wg0.conf
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"}.
@@ -203,13 +195,13 @@ Copiez-collez le contenu du `wg0.conf` que vous avez téléchargé, puis enregis
__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 /docker/wireguard/config/wg_confs
sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs
```
::
Creez le `compose.yaml` dans `/docker/wireguard `:
Creez le `compose.yaml` dans `/srv/docker/wireguard `:
```bash [Terminal]
sudo nano /docker/wireguard/compose.yaml
sudo nano /srv/docker/wireguard/compose.yaml
```
Copiez la configuration ci-dessous
```yaml [compose.yaml]
@@ -225,7 +217,7 @@ services:
environment:
- TZ=Europe/Paris
volumes:
- /docker/wireguard/config:/config
- /srv/docker/wireguard/config:/config
- /lib/modules:/lib/modules #optional
restart: unless-stopped
```
@@ -234,7 +226,7 @@ Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez a
Lancez le conteneur :
```bash [Terminal]
cd /docker/wireguard
cd /srv/docker/wireguard
sudo docker compose up -d
```
::note
@@ -3,24 +3,14 @@ title: SWAG
description: Configurer SWAG comme reverse proxy avec SSL automatique, exposer vos services en toute sécurité et activer le blocage géographique sur votre homelab.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# SWAG
::note
🎯 __Objectifs :__
- Installer Swag
- Activer le SSL
- Accéder au tableau de bord
- Configurer le blocage régional
- Exposer Dockge
::
[Swag](https://docs.linuxserver.io/general/swag/) est le noyau de ce homelab. C'est un reverse proxy puissant qui permet d'exposer des services sur le net via un ou des noms de domaines, en se chargeant de l'émission des certificats SSL (pour garder des connexions chiffrées), du routage des requêtes et de la sécurisation des accès (par authent HTTP ou par SSO comme Authelia ou Authentik). Toute la doc nécessaire se [situe ici](https://docs.linuxserver.io/general/swag).
::warning
SWAG n'a pour utilité que l'exposition de vos services sur internet. C'est à dire, y accéder via une url publique du type `https://service.mondomaine.fr`. Si vous ne souhaitez pas exposer vos services et plutôt utiliser systématiquement un VPN pour vous connecter à vos services à distance, vous pouvez directement aller [par ici](/fr/serveex/security/wireguard).
SWAG n'a pour utilité que l'exposition de vos services sur internet. C'est à dire, y accéder via une url publique du type `https://service.mondomaine.fr`. Si vous ne souhaitez pas exposer vos services et plutôt utiliser systématiquement un VPN pour vous connecter à vos services à distance, vous pouvez directement aller [par ici](/serveex/core/wireguard).
::
Ci-dessous, vous trouverez un exemple, exposant Dockge. Nous installerons SWAG, ainsi que le mod dbip servant à bloquer les connexions en fonction de la géoloc, ainsi que le mod dashboard qui permet de piloter le fonctionnement de swag, fail2ban et la géoloc.
@@ -80,7 +70,7 @@ services:
- DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
volumes:
- /docker/swag/config:/config
- /srv/docker/swag/config:/config
ports:
- 80:80
@@ -100,7 +90,7 @@ networks:
::tip{icon=""}
✨ __Astuce :__
ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
swag:
@@ -133,13 +123,13 @@ Ici nous partons du principe que votre zone DNS est chez OVH. Déployez la stack
En CLI, allez dans le dossier dns-conf et éditez le fichier `ovh.ini` :
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/dns-conf/ovh.ini
sudo nano /srv/docker/swag/config/dns-conf/ovh.ini
```
Voici ce qui s'affiche :
@@ -168,7 +158,7 @@ Sauvegardez et quittez le fichier.
Configurez aussi swag pour qu'il accède à DBIP, le module de gestion des accès par géolocalisation /Ouvrez le fichier nginx.conf
```bash [Terminal]
sudo nano /docker/swag/config/nginx/nginx.conf
sudo nano /srv/docker/swag/config/nginx/nginx.conf
```
Et ajoutez la ligne suivante en dessous de la section `http` :
@@ -186,7 +176,7 @@ A gauche, vous trouverez la liste des services actuellement "proxied" (aucun pou
![picture](https://www.linuxserver.io/user/pages/03.blog/introducing-swag-dashboard/example.png)
## DBIP
DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nommé `dbip.conf` dans `/docker/swag/config/nginx`. [Plus d'info ici](https://virtualize.link/secure/).
DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nommé `dbip.conf` dans `/srv/docker/swag/config/nginx`. [Plus d'info ici](https://virtualize.link/secure/).
Dans cet exemple, nous allons le configurer pour bloquer une liste de pays connus pour etre à l'origine de la plupart des connexions malveillantes. Nous allons également configurer une variable au cas où nous souhaiterions permettre au réseau interne du serveur, au réseau local de votre box ainsi qu'à un éventuel vpn en 10.x.x.x de pouvoir accéder à vos services, mais pas directement à internet.
@@ -195,7 +185,7 @@ La configuration est activable ou désactivable pour chaque service qui sera pro
Ouvrez `dbip.conf` :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/dbip.conf
sudo nano /srv/docker/swag/config/nginx/dbip.conf
```
Faites vos modifications ([voir documentation](https://github.com/linuxserver/docker-mods/tree/swag-dbip)), ou prenez l'exemple suivant:
@@ -279,20 +269,20 @@ server {
## Exposer Dockge
::note
📋 __Prérequis :__ <br/></br>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
Nous partons du principe que vous avez créé dans votre [zone DNS](/general/networking/dns) un sous domaine du type `dockge.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/general/networking/nat).
::
Il s'agit maintenant d'exposer Dockge sur internet, afin de pouvoir y accéder et gérer vos conteneurs sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configuré un sous domaine `dockge.mondomaine.fr` dans votre zone DNS dont le `CNAME` pointe sur `mondomaine.fr`.
::warning
Dockge n'utilise pas d'authentification multifacteur. Exposer Dockge sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Dockge n'utilise pas d'authentification multifacteur. Exposer Dockge sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/serveex/advanced/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::
Ouvrez le fichier dockge.subdomain.conf :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
```
Paramétrez le comme tel :
@@ -303,7 +293,7 @@ Paramétrez le comme tel :
server {
listen 443 ssl;
listen [::]:443 ssl;
# indique que le sous-domaine doit être dirigé
server_name dockge.*;
@@ -341,7 +331,7 @@ server {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app dockge; # Nom du conteneur
set $upstream_port 5001; # Port interne conteneur
set $upstream_proto http;
@@ -368,7 +358,7 @@ services:
networks: # Relie le conteneur au réseau custom
- dockge # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
#...
dockge: # Nom du réseau déclaré dans la stack
@@ -389,7 +379,7 @@ Patientez puis tapez `https://dockge.mondomaine.fr` dans votre navigateur, vous
Swag dispose de modeles pour la plupart des services connus, nommés `nomduservice.subdomain.conf.sample`. Il vous suffit de créer le sous-domaine dans votre zone DNS chez votre registrar (comme OVH par exemple), de le faire pointer sur votre domaine principale (via un enregistrement CNAME) et de copier en renommant `nomduservice.subdomain.conf.sample` en `nomduservice.subdomain.conf`.
```bash [Terminal]
cd /docker/swag/config/proxy-confs
cd /srv/docker/swag/config/proxy-confs
sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf
```
::caution
@@ -1,26 +1,16 @@
---
title: Cloudflare Zero Trust
description: Utiliser les tunnels Cloudflare et Zero Trust pour exposer des services sans ouvrir de ports configurer SWAG et gérer plusieurs tunnels.
description: Utiliser les tunnels Cloudflare et Zero Trust pour exposer des services sans ouvrir de ports, configurer SWAG et gérer plusieurs tunnels.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Cloudflare Zero Trust
::note
🎯 __Objectifs :__
- Comprendre le principe des Tunnels Cloudflare
- Paramétrer son compte cloudflare
- Paramétrer SWAG
- Gérer plusieurs tunnels
::
![cloudfare_tunnels](/img/serveex/cloudflared.svg)
## Introduction
L'architecture _Zero Trust_ est la pratique consistant à concevoir des systèmes fondés sur le principe de __« ne jamais faire confiance__, __toujours vérifier »__, par opposition au principe traditionnel de __« confiance, mais vérifier »__. Ce concept est devenu très populaires récemment, à la suite des attaques toujours plus nombreuses concernant les données des utilisateurs. C'est un concept très large, nous nous concentrerons sur lapplication du _Zero Trust_ aux services Web que nous hébergeons.
Les _tunnels Cloudflare_ offrent un moyen simple d'arriver au _Zero Trust_, en s'appuyant sur [SWAG](/fr/serveex/core/swag) et [Authentik](/fr/serveex/security/authentik).
Les _tunnels Cloudflare_ offrent un moyen simple d'arriver au _Zero Trust_, en s'appuyant sur [SWAG](/serveex/core/swag) et [Authentik](/serveex/advanced/authentik).
Pour le dire simplement, les Tunnels Cloudflare permettent notamment de :
@@ -33,23 +23,22 @@ Pour le dire simplement, les Tunnels Cloudflare permettent notamment de :
Ici, nous expliquerons comment associer SWAG aux tunnels Cloudflare.
::warning
- __Attention :__
__Attention :__
- N'utilisez pas les tunnels Cloudflare pour exposer un serveur mail
- N'utilisez pas les tunnels Cloudflare pour exposer un service vidéo, comme Plex (si vous avez [suivi ce guide](/fr/serveex/media/plex), Plex n'est pas exposé, c'est donc valide)
- N'utilisez pas les tunnels Cloudflare pour utiliser le protocole bittorrent (si vous avez [suivi ce guide](/fr/serveex/media/qbittorrent), tout est bon)
- N'utilisez pas les tunnels Cloudflare pour exposer un service vidéo comme Jellyfin. Contrairement à Plex, [Jellyfin n'a pas de relais cloud](/serveex/media/jellyfin) et est exposé directement par SWAG dans ce guide, veillez donc à le laisser derrière une simple redirection de port plutôt que derrière un tunnel Cloudflare
- N'utilisez pas les tunnels Cloudflare pour le protocole BitTorrent (si vous avez [suivi ce guide](/serveex/media/qbittorrent), tout est bon)
::
## Configuration Cloudflare
### Zone DNS
Avant toute chose, vous devez définir Cloudflare comme gestionnaire de votre [zone DNS](/fr/general/networking/dns). Si vous avez réservé votre nom de domaine chez Cloudflare, c'est déjà le cas. Sinon, renseignez vous auprès de votre registrar sur comment ajouter des DNS externes. Cloudflare dispose d'[une documentation expliquant pas à pas comment paramétrer une Zone DNS](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/), que vous ayez un domaine externe ou reservé chez Cloudflare.
Avant toute chose, vous devez définir Cloudflare comme gestionnaire de votre [zone DNS](/general/networking/dns). Si vous avez réservé votre nom de domaine chez Cloudflare, c'est déjà le cas. Sinon, renseignez vous auprès de votre registrar sur comment ajouter des DNS externes. Cloudflare dispose d'[une documentation expliquant pas à pas comment paramétrer une Zone DNS](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/), que vous ayez un domaine externe ou reservé chez Cloudflare.
Si vous avez qu'un seul serveur à protéger derrière Cloudflare, vous pouvez supprimer l'ensemble des enregistrement DNS existant, par défaut le domaine et tout ses sous-domaines seront directement redirigés vers le tunnel.
Si vous avez des sous-domaines à rediriger vers d'autres serveurs, vous pourrez toujours les déclarer dans la zone DNS à l'aide d'un enregistrement A.
Si vous avez plusieurs serveurs et donc plusieurs tunnels pour un meme domaine principal, [voyez ici](http://192.168.7.80:8005/serveex/cloudflare/#gerer-plusieurs-tunnels-pour-plusieurs-serveurs).
Si vous avez plusieurs serveurs et donc plusieurs tunnels pour un meme domaine principal, [voyez ici](#gérer-plusieurs-tunnels-pour-plusieurs-serveurs).
### Clé API
@@ -84,16 +73,17 @@ SWAG dispose de deux `Docker Mods` permettant d'y intégrer :
Ces deux mods, fusionnés dans le conteneur de SWAG, nécessitent un peu de configuration.
::steps{level="3"}
### Configuration du tunnel
Pour configurer les tunnels, nous aurons besoin de créer un fichier `tunnelconfig.yml` auquel nous ferons appel dans le `compose.yaml` de SWAG.
::tip{icon=""}
__Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::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.
::
```bash [Terminal]
sudo nano /docker/swag/config/tunnelconfig.yml
sudo nano /srv/docker/swag/config/tunnelconfig.yml
```
Collez la configuration ci-dessous
@@ -118,9 +108,10 @@ A présent, nous allons configurer le bon fonctionnement du mode _Cloudflare Rea
Ouvrez le fichier `nginx.conf`
```bash [Terminal]
sudo nano /docker/swag/config/nginx/nginx.conf
sudo nano /srv/docker/swag/config/nginx/nginx.conf
```
Collez la configuration ci-dessous à la fin de la section `http`
Collez la configuration ci-dessous à la fin de la section `http` :
```nginx [nginx.conf]
real_ip_header X-Forwarded-For;
@@ -128,9 +119,10 @@ real_ip_recursive on;
include /config/nginx/cf_real-ip.conf;
set_real_ip_from 127.0.0.1;
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
### Docker compose
### Déployer la stack SWAG
Ouvrez Dockge, éditez la stack SWAG avec cette configuration
@@ -165,25 +157,22 @@ services:
ports:
- 81:81
volumes:
- /docker/swag/config:/config
- /docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro
- /srv/docker/swag/config:/config
- /srv/docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro
restart: unless-stopped
```
::tip{icon=""}
__Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
__Astuce :__ ajoutez un label Watchtower pour automatiser les mises à jour :
```yaml [compose.yaml]
services:
swag:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
```yaml [compose.yaml]
---
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Et renseignez le `.env` les infos que vous avez trouvées et notées tout au long de ce guide
Renseignez votre fichier `.env` :
```properties [.env]
PUID=
@@ -213,48 +202,58 @@ TUNNEL_PW=
Une fois fait, déployez la stack. Cela prendra un peu de temps, vérifiez les logs, vous devriez arriver à `serveur ready`
Une fois le conteneur en ligne, vérifiez dans cloudflare que votre tunnel est bien présent dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). Par défaut, l'ensemble des sous domaine sont redirigés vers le tunnel, sans avoir besoin de les déclarer [dans votre zone DNS](/fr/general/networking/dns).
Une fois le conteneur en ligne, vérifiez dans cloudflare que votre tunnel est bien présent dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/). Par défaut, l'ensemble des sous domaine sont redirigés vers le tunnel, sans avoir besoin de les déclarer [dans votre zone DNS](/general/networking/dns).
::tip{icon=""}
__Astuce:__ si vous voulez exposer un service sans tunnel, vous pouvez toujours déclarer un enregistrement A [dans votre zone DNS](/fr/general/networking/dns). En cas de problème de résolution, désactivez la fonction _proxy_ pour cet enregistrement. Par exemple pour `sous.mondomaine.fr`
::tip{icon="" to="/general/networking/dns"}
__Astuce :__ si vous voulez exposer un service sans tunnel, déclarez simplement un enregistrement A **dans votre zone DNS**. En cas de problème de résolution, désactivez la fonction _proxy_ pour cet enregistrement, par exemple pour `sous.mondomaine.fr`.
![dns](/img/serveex/cf-dns.png)
::
### Terminé !
::
## Gérer plusieurs tunnels pour plusieurs serveurs
Par défaut, l'ensemble des sous domaine de votre nom de domaine pointent vers le tunnel que vous avez créé. Mais si vous avez un second serveur, vous pouvez avoir un second tunnel en changeant seulement le nom de tunnel dans la configuration de l'instance swag de votre serveur.
Par défaut, l'ensemble des sous-domaines de votre domaine passent par l'unique tunnel. Mais si vous avez un second serveur, il suffit de changer le nom du tunnel dans cette instance de SWAG, puis de rediriger les sous-domaines vers le bon tunnel dans votre zone DNS.
Vous devrez ensuite dans votre zone DNS rediriger les sous domaine souhaité vers le bon tunnel. Pour cela, faites comme suit.
::steps{level="3"}
### Changer le nom du tunnel
Rendez-vous dans dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/).
Dans la stack SWAG du second serveur, mettez un `TUNNEL_NAME` différent dans le fichier `.env`, puis redéployez.
Notez les deux ID des tunnels
### Trouver les ID des tunnels
Rendez-vous dans la section _Networks > Tunnels_ de [Cloudflare Zero Trust](https://one.dash.cloudflare.com/) et notez les ID des tunnels :
![tunnels_id](/img/serveex/cf-tunnels-id.png)
Rendez-vous à présent dans la section DNS de [cloudflare](https://dash.cloudflare.com/), après avoir cliqué sur le nom de domaine concerné.
### Ajouter les enregistrements CNAME
Cliquez sur `ajouter un enregistrement` et ajoutez deux enregistrements comme suit en ajoutant bien `.cfargotunnel.com` après vos id de tunnels.
Dans le [tableau de bord DNS de Cloudflare](https://dash.cloudflare.com/), cliquez sur votre nom de domaine, puis sur `Ajouter un enregistrement` et ajoutez ces deux enregistrements CNAME (en incluant bien `.cfargotunnel.com`) :
| Type | Nom | Cible |
|---------|----------------|-------------------------------------|
| `CNAME` | `sousdomaine1` | `votreiddetunnel1.cfargotunnel.com` |
| `CNAME` | `sousdomaine2` | `votreiddetunnel2.cfargotunnel.com` |
### Terminé !
::
Si vous avez de nombreux sous-domaines, vous pouvez déclarer un seul sous domaine par tunnel comme ci-dessus, puis déclarer vos autres sous domaine en les faisant pointer vers ces sous domaines de référence.
Ainsi, en cas de changement d'id de tunnel, vous n'aurez qu'à le changer que pour un seul sous-domaine.
Ainsi, en cas de changement d'ID de tunnel, vous n'aurez qu'un seul enregistrement DNS à modifier.
Par exemple :
- Le serveur de `sousdomaine1` doit egalement etre la cible de sub1, et sub2 :
| Type | Nom | Cible |
|---------|----------------|-------------------------------------|
| `CNAME` | `sub1` | `sousdomaine1` |
| `CNAME` | `sub2` | `sousdomaine1` |
- Le serveur de `sousdomaine2` doit egalement etre la cible de sub3, et sub4 :
- `sub1` et `sub2` pointent eux aussi vers le serveur derrière `sousdomaine1` :
| Type | Nom | Cible |
|---------|----------------|-------------------------------------|
| `CNAME` | `sub3` | `sousdomaine2` |
| `CNAME` | `sub4` | `sousdomaine2` |
| Type | Nom | Cible |
|---------|--------|----------------|
| `CNAME` | `sub1` | `sousdomaine1` |
| `CNAME` | `sub2` | `sousdomaine1` |
- `sub3` et `sub4` pointent vers le serveur derrière `sousdomaine2` :
| Type | Nom | Cible |
|---------|--------|----------------|
| `CNAME` | `sub3` | `sousdomaine2` |
| `CNAME` | `sub4` | `sousdomaine2` |
@@ -0,0 +1,353 @@
---
title: TinyAuth
description: Installer TinyAuth, un proxy de forward-auth léger, et l'associer à Pocket ID pour ajouter une connexion SSO devant vos applications auto-hébergées. Protéger votre application derrière Swag avec le forward-auth.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
[TinyAuth](https://tinyauth.app) est un petit proxy de forward-auth : une unique page de connexion que Swag peut insérer devant n'importe quelle application avant de laisser passer une requête, en vérifiant si le visiteur est authentifié avant de le rediriger.
![tinyauth](/img/serveex/tinyauth.png)
Il gère nativement une simple connexion locale identifiant/mot de passe, c'est ce que nous mettrons en place ici. Il peut aussi déléguer la connexion à un fournisseur OIDC externe comme [Pocket ID](/serveex/security/pocket-id), de sorte que quiconque visite une application protégée s'authentifie avec une passkey via Pocket ID puis est redirigé : installez Pocket ID ensuite et suivez [son tutoriel](/serveex/security/pocket-id#connecting-pocket-id-to-tinyauth) pour relier les deux.
- [Documentation de TinyAuth](https://tinyauth.app/docs)
- [TinyAuth sur GitHub](https://github.com/tinyauthapp/tinyauth)
## Installation
::file-tree
---
tree:
/:
- srv:
- docker:
- tinyauth:
- compose.yaml
- .env
- data/
---
::
::steps{level="3"}
### Créer le dossier de données
```bash [Terminal]
sudo mkdir -p /srv/docker/tinyauth/data
```
### Générer un hash de mot de passe
```bash [Terminal]
sudo docker run -i -t --rm ghcr.io/tinyauthapp/tinyauth:v5 user create --interactive
```
::note
Activez « Format for Docker » quand la question est posée, ainsi le hash généré est déjà échappé pour être utilisé dans un fichier `.env`.
::
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `tinyauth`, et ajoutez la configuration suivante :
```yaml [compose.yaml]
---
services:
tinyauth:
image: ghcr.io/tinyauthapp/tinyauth:v5
container_name: tinyauth
restart: unless-stopped
env_file:
- .env
volumes:
- /srv/docker/tinyauth/data:/data
ports:
- 3000:3000
```
::tip{icon=""}
✨ Ajoutez le label Watchtower pour automatiser les mises à jour :
```yaml [compose.yaml]
---
services:
tinyauth:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
### Renseigner vos variables d'environnement
Remplissez le fichier `.env` :
```properties [.env]
TINYAUTH_APPURL=https://tinyauth.mondomaine.fr
TINYAUTH_AUTH_USERS=
```
| Variable | Valeur | Exemple |
|----------|-------|---------|
| `TINYAUTH_APPURL`{lang=properties} | L'URL publique par laquelle vous joindrez TinyAuth (voir l'exposition plus bas) | `https://tinyauth.mondomaine.fr` |
| `TINYAUTH_AUTH_USERS`{lang=properties} | Le hash généré ci-dessus | `user:$$2a$$10$$UdLYoJ5lgPsC0RKq...` |
Déployez la stack. L'interface locale est disponible sur `http://ipdevotreserveur:3000`.
### Terminé !
::
## Activer l'authentification à deux facteurs
TinyAuth peut exiger un code TOTP issu d'une application d'authentification (Google Authenticator, Aegis...) en plus du mot de passe local, utilisateur par utilisateur. C'est une propriété de l'entrée utilisateur elle-même, pas une option de l'interface web.
::steps{level="3"}
### Générer un secret TOTP
```bash [Terminal]
sudo docker run -i -t --rm ghcr.io/tinyauthapp/tinyauth:v5 totp generate --interactive
```
Saisissez la paire `username:hash` générée lors de l'installation. TinyAuth affiche un QR code à scanner avec votre application d'authentification, puis produit la chaîne de connexion mise à jour sous la forme `username:hash:secret`.
::note
`docker run` comme `docker exec` ont besoin des options `-it` ici : la commande est interactive et affiche le QR code dans le terminal, ce qui nécessite un TTY (et une fenêtre assez large) pour s'afficher correctement.
::
### Mettre à jour votre variable d'environnement
Remplacez l'entrée de cet utilisateur dans `TINYAUTH_AUTH_USERS` par la nouvelle chaîne `username:hash:secret`, puis redéployez la stack.
::tip{icon=""}
✨ __Astuce :__ vérifiez que tout fonctionne avant de compter dessus :
```bash [Terminal]
sudo docker run -i -t --rm ghcr.io/tinyauthapp/tinyauth:v5 user verify --interactive
```
Elle redemande l'identifiant, le mot de passe et le code à 6 chiffres du moment.
::
### Terminé !
::
À partir de maintenant, cet utilisateur a besoin à la fois de son mot de passe et d'un code valide de son application d'authentification pour se connecter.
## Exposer TinyAuth avec Swag
TinyAuth a besoin de son propre sous-domaine : c'est la page sur laquelle les utilisateurs arrivent avant d'être redirigés vers l'application qu'ils veulent réellement.
::note
Nous partons du principe que vous avez le sous-domaine `tinyauth.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).
::
::steps{level="3"}
### Ajouter le réseau de TinyAuth à SWAG
Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau de TinyAuth :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- tinyauth # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
tinyauth: # Nom du réseau déclaré
name: tinyauth_default # Nom réel du réseau externe
external: true # Le marque comme défini à l'extérieur
```
Redéployez la stack et attendez que SWAG soit pleinement opérationnel.
::note
Nous partons ici du principe que le nom du réseau de TinyAuth est `tinyauth_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `tinyauth.subdomain.conf` :
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ utilisez **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tinyauth.subdomain.conf
```
Collez la configuration suivante :
```nginx [tinyauth.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tinyauth.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app tinyauth;
set $upstream_port 3000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Visiter votre nouveau sous-domaine
Attendez quelques minutes, puis ouvrez `https://tinyauth.mondomaine.fr` dans votre navigateur et connectez-vous avec l'identifiant et le mot de passe créés plus haut.
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
### Terminé !
::
## Protéger une application via le reverse proxy
Swag ne fournit pas de fichier d'inclusion tout prêt pour TinyAuth, nous ajouterons donc la vérification forward-auth directement dans le `*.subdomain.conf` de l'application. Nous prendrons Dockge en exemple.
::steps{level="3"}
### Ouvrir le fichier subdomain.conf de l'application
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
```
### Ajouter la vérification forward-auth
Ajoutez un bloc `location /tinyauth` interne, et référencez-le depuis le bloc `location /` de l'application avec `auth_request` :
```nginx [dockge.subdomain.conf]{9-11,25}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name dockge.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
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;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app dockge;
set $upstream_port 5001;
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é.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Et voilà ! Visiter `https://dockge.mondomaine.fr` redirige désormais d'abord vers TinyAuth. Répétez ce motif `location /tinyauth` / `auth_request` dans le `*.subdomain.conf` de n'importe quelle autre application pour la protéger de la même façon.
::note
Répétez cette procédure pour chaque application que vous voulez protéger (sauf si elle gère nativement OIDC, auquel cas vous pouvez la pointer directement sur Pocket ID).
::
## Laisser certains chemins publics
Il arrive qu'on veuille verrouiller l'essentiel d'une application derrière TinyAuth, mais laisser une poignée de chemins ouverts, par exemple une page de statut publique, ou les endpoints d'API sur lesquels une application mobile s'appuie. Contrairement à Authentik, TinyAuth n'a pas de réglage intégré de « chemins authentifiés » pour ça : c'est un simple problème nginx, et il se résout avec le système de correspondance de `location` de nginx.
Un bloc `location` en expression régulière est toujours prioritaire sur le bloc `location /` simple, quel que soit celui qui apparaît en premier dans le fichier. Tout chemin correspondant à une location en regex que vous définissez exécute donc son propre `proxy_pass`, sans jamais atteindre la ligne `auth_request /tinyauth;` du `location /`.
Par exemple, pour laisser ouverte la page de statut publique d'Uptime-Kuma et ses ressources tout en protégeant le reste :
```nginx [dockge.subdomain.conf]{9-16}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name stats.*;
include /config/nginx/ssl.conf;
location ~ ^/(status|assets|icon\.svg|api|upload|metrics) {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app uptime-kuma;
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
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;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app uptime-kuma;
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
::note
Adaptez la liste des chemins exclus à ce dont l'application que vous protégez a réellement besoin en public. Ne laissez jamais un chemin d'administration ou de réglages dans cette liste, uniquement ce que l'application elle-même documente comme sûr à exposer sans authentification.
::
@@ -0,0 +1,282 @@
---
title: Pocket ID
description: Installer Pocket ID, un fournisseur OIDC auto-hébergé et léger qui permet de se connecter à vos autres applications avec une passkey plutôt qu'un mot de passe.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
[Pocket ID](https://pocket-id.org) est un fournisseur OIDC (OpenID Connect) minimaliste et auto-hébergé, entièrement construit autour des passkeys : au lieu de gérer des mots de passe, vous et vos utilisateurs vous connectez aux applications compatibles avec une **passkey** (empreinte digitale, reconnaissance faciale, ou clé de sécurité matérielle). Il tourne dans un unique conteneur léger, sans base de données externe à gérer, et fait une seule chose, bien : délivrer des connexions OIDC.
![pocketid](/img/serveex/pocketid.png)
C'est donc un bon choix si vous voulez simplement un backend SSO simple et rapide, par exemple pour l'associer à [TinyAuth](/serveex/security/tinyauth) en tant que forward-auth léger, ou pour vous connecter directement aux applications qui gèrent nativement OIDC.
- [Documentation de Pocket ID](https://pocket-id.org/docs)
- [Pocket ID sur GitHub](https://github.com/pocket-id/pocket-id)
## Installation
::file-tree
---
tree:
/:
- srv:
- docker:
- pocket-id:
- compose.yaml
- .env
- data/
---
::
::steps{level="3"}
### Créer le dossier de données
```bash [Terminal]
sudo mkdir -p /srv/docker/pocket-id/data
```
### Générer une clé de chiffrement
```bash [Terminal]
openssl rand -base64 32
```
Gardez le résultat, vous en aurez besoin pour le fichier `.env` ci-dessous.
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `pocket-id`, et ajoutez la configuration suivante :
```yaml [compose.yaml]
---
services:
pocket-id:
image: pocketid/pocket-id:v2
container_name: pocket-id
restart: unless-stopped
env_file:
- .env
volumes:
- /srv/docker/pocket-id/data:/app/data
ports:
- 1411:1411
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1411/healthz"]
interval: 90s
timeout: 5s
retries: 3
```
::tip{icon=""}
✨ Ajoutez le label Watchtower pour automatiser les mises à jour :
```yaml [compose.yaml]
---
services:
pocket-id:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
### Renseigner vos variables d'environnement
Remplissez le fichier `.env` :
```properties [.env]
APP_URL=https://id.mondomaine.fr
ENCRYPTION_KEY=
TRUST_PROXY=true
```
| Variable | Valeur | Exemple |
|----------|-------|---------|
| `APP_URL`{lang=properties} | L'URL publique par laquelle vous joindrez Pocket ID (voir l'exposition plus bas) | `https://id.mondomaine.fr` |
| `ENCRYPTION_KEY`{lang=properties} | La clé générée ci-dessus | `Q2pVEqsTNRkJSO9SkJzU3KZ2...` |
| `TRUST_PROXY`{lang=properties} | Nécessaire puisque Pocket ID se trouve derrière Swag | `true` |
Déployez la stack. L'interface locale est disponible sur `http://ipdevotreserveur:1411`.
### Terminé !
::
## Première connexion
Pocket ID n'utilise pas de mots de passe : votre premier compte est créé avec une **passkey**, que votre navigateur ou votre système génère pour vous (Windows Hello, Touch ID, un téléphone, ou une clé matérielle comme une YubiKey).
- Allez sur `http://ipdevotreserveur:1411/setup`
- Suivez les instructions pour créer votre compte administrateur et enregistrer votre première passkey
::note
Comme `APP_URL` pointe déjà vers votre futur domaine public, l'enregistrement de la passkey peut vous demander d'ouvrir Pocket ID depuis ce domaine. Exposez-le d'abord (voir plus bas) si la configuration ne se termine pas en local.
::
## Exposer Pocket ID avec Swag
Les autres applications doivent joindre Pocket ID en HTTPS pour finaliser le processus de connexion OIDC, il doit donc être exposé même si vous ne l'utilisez que depuis chez vous.
::note
Nous partons du principe que vous avez le sous-domaine `id.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).
::
::steps{level="3"}
### Ajouter le réseau de Pocket ID à SWAG
Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau de Pocket ID :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- pocket-id # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
pocket-id: # Nom du réseau déclaré
name: pocket-id_default # Nom réel du réseau externe
external: true # Le marque comme défini à l'extérieur
```
Redéployez la stack et attendez que SWAG soit pleinement opérationnel.
::note
Nous partons ici du principe que le nom du réseau de Pocket ID est `pocket-id_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `id.subdomain.conf` :
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ utilisez **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/id.subdomain.conf
```
Collez la configuration suivante :
```nginx [id.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name id.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app pocket-id;
set $upstream_port 1411;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
::caution
Ne mettez pas Pocket ID derrière une autre couche d'authentification (TinyAuth, auth HTTP...). C'est le fournisseur d'identité lui-même, le verrouiller empêcherait quiconque, vous compris, de se connecter.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Visiter votre nouveau sous-domaine
Attendez quelques minutes, puis ouvrez `https://id.mondomaine.fr` dans votre navigateur.
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
### Terminé !
::
## Enregistrer un client OIDC
Pour qu'une autre application (par exemple [TinyAuth](/serveex/security/tinyauth)) se connecte via Pocket ID, vous devez l'enregistrer comme client OIDC :
::steps{level="3"}
### Se connecter à Pocket ID
Allez sur `https://id.mondomaine.fr` et connectez-vous avec votre passkey.
### Créer le client OIDC
Allez dans _Administration > OIDC Clients_, puis cliquez sur _Add OIDC Client_. Renseignez un nom (par exemple `TinyAuth`) et l'URL de callback de l'application (fournie par l'application que vous protégez).
### Conserver les identifiants du client
Enregistrez, puis copiez le __Client ID__ et le __Client Secret__ générés. Vous en aurez besoin dans la configuration de l'autre application.
### Terminé !
::
## Connecter Pocket ID à TinyAuth
[TinyAuth](/serveex/security/tinyauth) peut déléguer sa connexion à Pocket ID plutôt que (ou en plus de) son identifiant/mot de passe local, de sorte que quiconque visite une application protégée s'authentifie avec une passkey et se retrouve redirigé.
::steps{level="3"}
### Enregistrer TinyAuth comme client OIDC
[Enregistrez un client OIDC](#enregistrer-un-client-oidc) nommé `TinyAuth`, avec cette URL de callback :
```text
https://tinyauth.mondomaine.fr/api/oauth/callback/pocketid
```
### Ajouter le fournisseur Pocket ID dans TinyAuth
Copiez le __Client ID__ et le __Client Secret__ que Pocket ID vous donne, puis modifiez le fichier `.env` de TinyAuth :
```bash [Terminal]
sudo nano /srv/docker/tinyauth/.env
```
Ajoutez ceci :
```properties [.env]
TINYAUTH_OAUTH_PROVIDERS_POCKETID_NAME=Pocket ID
TINYAUTH_OAUTH_PROVIDERS_POCKETID_CLIENTID=
TINYAUTH_OAUTH_PROVIDERS_POCKETID_CLIENTSECRET=
TINYAUTH_OAUTH_PROVIDERS_POCKETID_AUTHURL=https://id.mondomaine.fr/authorize
TINYAUTH_OAUTH_PROVIDERS_POCKETID_TOKENURL=https://id.mondomaine.fr/api/oidc/token
TINYAUTH_OAUTH_PROVIDERS_POCKETID_USERINFOURL=https://id.mondomaine.fr/api/oidc/userinfo
TINYAUTH_OAUTH_PROVIDERS_POCKETID_REDIRECTURL=https://tinyauth.mondomaine.fr/api/oauth/callback/pocketid
TINYAUTH_OAUTH_PROVIDERS_POCKETID_SCOPES=openid email profile
```
| Variable | Valeur |
|----------|-------|
| `CLIENTID`{lang=properties} | Le client ID copié depuis Pocket ID |
| `CLIENTSECRET`{lang=properties} | Le client secret copié depuis Pocket ID |
| `AUTHURL` / `TOKENURL` / `USERINFOURL`{lang=properties} | L'URL publique de Pocket ID, avec les chemins indiqués ci-dessus |
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Redéployer la stack
Redéployez la stack TinyAuth. À votre prochaine visite sur `https://tinyauth.mondomaine.fr`, vous verrez une option « Login with Pocket ID » à côté du formulaire de connexion local.
::tip{icon=""}
✨ Pour aller directement sur Pocket ID et masquer le formulaire de connexion local, ajoutez `TINYAUTH_OAUTH_AUTOREDIRECT=pocketid` au même fichier `.env`.
::
### Terminé !
::
Et voilà ! TinyAuth propose désormais une connexion sans mot de passe via Pocket ID pour chaque application qu'il protège.
@@ -1,35 +1,31 @@
---
title: Uptime-Kuma
description: Installer Uptime-Kuma pour surveiller la disponibilité de vos services auto-hébergés, configurer des alertes et protéger le tableau de bord avec Authentik.
description: Installer Uptime-Kuma pour surveiller la disponibilité de vos services auto-hébergés, configurer des alertes et protéger éventuellement le tableau de bord avec Tinyauth ou Authentik
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Uptime-Kuma
::note
🎯 __Objectifs :__
- Installer et déployer Uptime-Kuma
- Exposer Uptime Kuma
- (Optionnel) Protéger Uptime-Kuma avec Authentik
::
[Uptime-Kuma ](https://github.com/louislam/uptime-kuma)est un conteneur dédié au monitoring de services. Le principe est d'envoyer des requêtes régulières à vos services afin de déterminer s'ils sont en lignes ou non, et de vous alerter le cas échéant. Uptime-Kuma est développé par le meme développeur que Dockge.
![picture](https://user-images.githubusercontent.com/1336778/212262296-e6205815-ad62-488c-83ec-a5b0d0689f7c.jpg)
## Installation
Structure des dossiers
```text [Arborescence]
root
└── docker
└── uptime-kuma
├── date
└── compose.yaml
```
::file-tree
---
tree:
/:
- srv:
- docker:
- uptime-kuma:
- data/
- compose.yaml
---
::
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `uptime-kuma` puis copiez collez ceci :
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `uptime-kuma`, puis copiez-collez ce qui suit :
```yaml [compose.yaml]
---
@@ -38,13 +34,14 @@ services:
image: louislam/uptime-kuma:2-slim
container_name: uptime-kuma
volumes:
- /docker/uptime-kuma/uptime-kuma-data:/app/data
- /srv/docker/uptime-kuma/uptime-kuma-data:/app/data
ports:
- 3200:3001 # <Host Port>:<Container Port>
- 3200:3001 # <Port hôte>:<Port conteneur>
restart: always
```
::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:
@@ -53,39 +50,47 @@ services:
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Vous n'avez plus qu'à accéder à l'outil via `http://ipdevotreserveur:3200`.
### Accéder à l'interface web
Vous pouvez maintenant accéder à l'outil via `http://ipdevotreserveur:3200`.
::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.
::
### Terminé !
::
## Exposer avec Swag
---
::note
::note{icon=""}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez le sous-domaine `stats.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/fr/general/networking/nat).
Nous partons du principe que vous avez le sous-domaine `stats.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 pointer vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat).
::
::warning
Uptime-Kuma n'utilise pas d'authentification multifacteur. Exposer Uptime-Kuma sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Uptime-Kuma n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines qu'il surveille. Ne le faites que si vous utilisez un système 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).
::
::steps{level="3"}
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `stats.subdomain.conf`.
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
```
Collez la configuration ci-dessous :
Collez la configuration suivante :
```nginx [stats.subdomain.conf]
## Version 2023/12/19
@@ -137,9 +142,12 @@ server {
}
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau d'Uptime-Kuma :
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Ajouter le réseau d'Uptime-Kuma à SWAG
Dans Dockge, modifiez le compose de SWAG et ajoutez le réseau d'Uptime-Kuma :
```yaml [compose.yaml]
---
@@ -147,33 +155,103 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks: # Relie le conteneur au réseau personnalisé
# ...
- uptime-kuma # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
- uptime-kuma # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
uptime-kuma: # Nom du réseau déclaré dans la stack
name: uptime-kuma_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
uptime-kuma: # Nom du réseau déclaré
name: uptime-kuma_default # Nom réel du réseau externe
external: true # Précise qu'il s'agit d'un réseau externe
```
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.
::note
Ici nous partons du principe que le nom du réseau de Uptime-Kuma est `uptime-kuma_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
Nous partons ici du principe que le nom du réseau d'Uptime-Kuma est `uptime-kuma_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
Et voilà, vous avez exposé Uptime-Kuma, vous pouvez y accéder en tapant `https://stats.mondomaine.fr`
### Terminé !
::
Et voilà ! Uptime-Kuma est maintenant exposé, et vous pouvez y accéder via `https://stats.mondomaine.fr`.
## Protéger Uptime-Kuma avec TinyAuth
[TinyAuth](/serveex/security/tinyauth) peut se placer devant Uptime-Kuma comme devant n'importe quelle autre application, mais ici nous voulons aussi que la page de statut publique (et les ressources dont elle a besoin pour s'afficher) reste joignable sans se connecter. Cela utilise la même technique de `location` en expression régulière que [Laisser certains chemins publics](/serveex/security/tinyauth#leaving-specific-paths-public), appliquée directement à `stats.subdomain.conf`.
::steps{level="3"}
### Ouvrir le fichier subdomain.conf
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
```
### Ajouter la vérification forward-auth et les chemins publics
Remplacez le contenu du fichier par ce qui suit. Le bloc `location ~ ^/(...)` correspond à la page de statut publique d'Uptime-Kuma et à ses ressources, et est servi directement, sans jamais atteindre la vérification `auth_request` du `location /` :
```nginx [stats.subdomain.conf]{9-16,32-33}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name stats.*;
include /config/nginx/ssl.conf;
location ~ ^/(status|assets|icon\.svg|api|upload|metrics) {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app uptime-kuma;
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
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;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app uptime-kuma;
set $upstream_port 3001;
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é.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Redéployez la stack. Uptime-Kuma sera alors joignable publiquement via `https://stats.mondomaine.fr`, avec la page de statut ouverte et tout le reste derrière TinyAuth.
::tip{icon=""}
✨ __Astuce :__
<br/><br>
Vous pouvez protéger cette app avec Authentik en ouvrant `stats.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy). Si vous souhaitez que la page publique de stats soit joignable par tout le monde sans authentification:
- Editez le fournisseur d'Uptime-Kuma
- Dans *paramètres avancés du protocole > chemins authentifiés*, saisissez :
✨ __Astuce :__ vous pouvez aussi protéger cette application avec [Authentik](/serveex/advanced/authentik) à la place : ouvrez `stats.subdomain.conf` et décommentez les lignes `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](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). Modifiez ensuite le provider Uptime-Kuma, et dans *Advanced Protocol Settings > Authenticated Paths*, saisissez :
```properties
^/$
@@ -183,13 +261,10 @@ Vous pouvez protéger cette app avec Authentik en ouvrant `stats.subodmain.conf`
^/icon.svg
^/api/.*
^/upload/.*
^/metrics
^/metrics
```
::
Déployez à nouveau la stack.
Uptime-Kuma sera ainsi joignable directement depuis internet en tapant `https://stats.mondomaine.fr`.
::tip{icon=""}
__Astuce :__ Si vous utilisez Authentik et que vous ne craignez pas d'exposer votre panneau admin à votre réseau local, vous pouvez désactiver l'authentification d'Uptime-Kuma via les paramètres, afin de ne garder que celle d'Authentik.
__Astuce :__ si vous utilisez [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik) et que l'exposition du panneau d'administration à votre réseau local ne vous dérange pas, vous pouvez désactiver l'authentification native d'Uptime-Kuma dans ses réglages et vous reposer uniquement sur celui qui le protège.
::
+132 -41
View File
@@ -1,33 +1,35 @@
---
title: Dozzle
description: Installer Dozzle pour surveiller les logs des conteneurs Docker en temps réel depuis une interface web épurée, exposée via SWAG.
description: Installer Dozzle pour surveiller les logs de vos conteneurs Docker en temps réel depuis une interface web claire, exposée via SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Dozzle
::note
🎯 __Objectifs :__
- Installer Dozzle
- Exposer Dozzle avec Swag
::
[Dozzle](https://dozzle.dev/) est un conteneur permettant d'accéder au logs de vos conteneurs et de les afficher en temps réel de via une interface user-friendly. C'est une manière simple de naviguer entre les logs et de retrouver des informations dans l'historique.
[Dozzle](https://dozzle.dev/) est un conteneur qui permet d'accéder aux logs de vos autres conteneurs et de les afficher en temps réel dans une interface agréable. C'est un moyen simple de parcourir les logs et de retrouver des informations dans l'historique.
![Dozzle](https://blog.unixhost.pro/wp-content/uploads/2023/03/image-5.png)
## Installation
Structure des dossiers
```text [Arborescence]
root
└── docker
└── dozzle
└── data
```
::file-tree
---
tree:
/:
- srv:
- docker:
- dozzle:
- compose.yaml
- .env
- data/
---
::
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `dozzle` puis copiez collez ceci :
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `dozzle`, puis copiez-collez ce qui suit :
```yaml [compose.yaml]
---
@@ -46,7 +48,7 @@ services:
```
::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:
@@ -58,30 +60,38 @@ services:
```
::
Renseignez le `.env` votre nom de domaine, par exemple
### Renseigner vos variables d'environnement
Renseignez votre nom de domaine dans le fichier `.env`, par exemple :
```properties [.env]
DOMAIN=dozzle.mondomaine.fr
```
Déployez le conteneur et rendez-vous sur `http://ipduserveur:9135`. Et voilà, votre instance Dozzle en webui est disponible !
Déployez le conteneur. Allez sur `http://ipdevotreserveur:9135`. Et voilà, votre interface web Dozzle est en route !
### Terminé !
::
## Exposer Dozzle avec Swag
::warning
Dozzle n'utilise pas d'authentification multifacteur. Exposer Dozzle sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Dozzle n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faites que si vous utilisez un système d'authentification multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::
Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer Dozzle via Swag.
Vous voudrez peut-être accéder à Dozzle à distance et sur tous vos appareils. Pour cela, nous allons exposer Dozzle via Swag.
::note
::note{icon=""}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `dozzle.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
Nous partons du principe que vous avez créé un sous-domaine du type `dozzle.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr` et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), vous avez redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat).
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Dozzle :
::steps{level="3"}
### Ajouter le réseau de Dozzle à SWAG
Allez dans Dockge et modifiez le fichier compose de SWAG pour y ajouter le réseau de Dozzle :
```yaml [compose.yaml]
---
@@ -89,32 +99,34 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks: # Rattache le conteneur à un réseau personnalisé
# ...
- dozzle # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
- dozzle # Nom du réseau déclaré dans la stack
networks: # Définit le réseau personnalisé
# ...
dozzle: # Nom du réseau déclaré dans la stack
name: dozzle_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
dozzle: # Nom du réseau déclaré dans la stack
name: dozzle_default # Nom réel du réseau externe
external: true # Indique qu'il s'agit d'un réseau 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 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 Dozzle est `dozzle_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
Nous partons du principe que le nom du réseau de Dozzle est `dozzle_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
Dans les dossiers de Swag, créez le fichier `dozzle.subdomain.conf`.
### Créer le fichier subdomain.conf
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
Dans le dossier de Swag, créez le fichier `dozzle.subdomain.conf`.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __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 /docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf
```
Collez la configuration ci-dessous :
@@ -169,10 +181,89 @@ server {
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé Dozzle !
### Terminé !
::
Et voilà, Dozzle est maintenant exposé !
## Protéger Dozzle avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `dozzle.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [dozzle.subdomain.conf]{26-38,41-42}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name dozzle.*;
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 dozzle;
set $upstream_port 8080;
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 app avec Authentik en ouvrant `dozzle.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/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 `dozzle.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).
::
@@ -1,37 +1,37 @@
---
title: Speedtest Tracker
description: Installer Speedtest Tracker pour mesurer et enregistrer automatiquement la vitesse de votre connexion internet dans le temps, exposé avec SWAG.
description: Installer Speedtest Tracker pour mesurer et historiser automatiquement le débit de votre connexion internet, exposé avec SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Speedtest Tracker
::note
🎯 __Objectifs :__
- Installer Speedtest Tracker
- Exposer Speedtest Tracker avec Swag
::
[Speedtest Tracker](https://docs.speedtest-tracker.dev/) est un conteneur permettant de programmer des speedtest régulier afin d'historiser l'état de la connexion internet de votre serveur.
[Speedtest Tracker](https://docs.speedtest-tracker.dev/) est un conteneur qui permet de planifier des tests de débit réguliers afin d'historiser l'état de la connexion internet de votre serveur.
![speedtest-tracker](/img/serveex/speedtest-tracker.avif)
## Installation
::note
::note{to="https://docs.linuxserver.io/images/docker-speedtest-tracker/"}
Nous utiliserons l'image docker maintenue par [LinuxServer.io](https://docs.linuxserver.io/images/docker-speedtest-tracker/)
Nous utiliserons l'image Docker maintenue par **LinuxServer.io**
::
Structure des fichiers
::file-tree
---
tree:
/:
- srv:
- docker:
- speedtest-tracker:
- compose.yaml
- .env
- data:
- config/
---
::
```text [Arborescence]
root
└── docker
└── speedtest-tracker
└── data
└── config
```
::steps{level="3"}
### Générer une clé d'application
Dans un terminal, générez une clé avec la commande suivante :
@@ -41,7 +41,9 @@ echo -n 'base64:'; openssl rand -base64 32;
Notez la clé.
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `speedtest-tracker` puis copiez collez ceci :
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `speedtest-tracker`, puis collez ce qui suit :
```yaml [compose.yaml]
---
@@ -60,51 +62,59 @@ services:
- DB_CONNECTION=sqlite
- SPEEDTEST_SCHEDULE=${SCHEDULE}
volumes:
- /docker/speedtest-tracker/data/config:/config
- /srv/docker/speedtest-tracker/data/config:/config
```
Trouvez votre `PUID` et votre `GUID` en tapant la commande suivante :
### Renseigner vos variables d'environnement
Trouvez vos `PUID` et `GUID` avec la commande suivante :
```bash [Terminal]
id nomdutilisateur
id votreutilisateur
```
Dans `.env` renseignez la variable `API_KEY` avec la clé que vous avez générée et un planning de test au format cron, ainsi que vos `PUID` et `GUID`, par exemple :
Dans le fichier `.env`, renseignez la variable `API_KEY` avec la clé générée et ajoutez une planification des tests au format cron, ainsi que vos `PUID` et `GUID`, par exemple :
```properties [.env]
SCHEDULE=15 */6 * * * # toutes les 6h
SCHEDULE=15 */6 * * * # toutes les 6 heures
API_KEY=base64:zihejehkj8_nzhY/OjeieR= # votre clé
PUID=1000
GUID=1000
PORT=3225 # port d'accès à la webui
PORT=3225 # port d'accès à l'interface web
```
::tip{icon=""}
__Astuce :__ vous pouvez configurer d'autres variables d'environnements en consultant la [documentation officielle](https://docs.speedtest-tracker.dev/getting-started/environment-variables).
::tip{icon="" to="https://docs.speedtest-tracker.dev/getting-started/environment-variables"}
**Astuce :** vous pouvez configurer d'autres variables d'environnement en vous référant à la **documentation officielle**.
::
Déployez le conteneur et rendez-vous sur http://ipduserveur:3225. Connectez vous avec le compte `admin@exemple.com` et le mot de passe `password`. N'oubliez pas de changer votre id et votre mot de apsse une fois connecté !
Déployez le conteneur et allez sur `http://ipdevotreserveur:3225`. Connectez-vous avec le compte `admin@exemple.com` et le mot de passe `password`. N'oubliez pas de changer votre identifiant et votre mot de passe une fois connecté !
## Exposer Speedtest Tracker
### Terminé !
::
## Exposer Speedtest Tracker avec SWAG
::note
📋 __Prérequis :__ <br/></br>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `speedtest.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), que vous avez déjà redirigé le port `443` de votre box vers le `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
📋 **Prérequis :**
Nous partons du principe que vous avez déjà créé un sous-domaine du type `speedtest.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr`, et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), vous avez aussi redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat).
::
Il s'agit maintenant d'exposer Speedtest Tracker sur internet, afin de pouvoir y accéder sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configuré un sous domaine `speedtest.mondomaine.fr` dans votre zone DNS dont le `CNAME` pointe sur `mondomaine.fr`.
Nous voulons maintenant exposer Speedtest Tracker sur internet pour y accéder à distance. Nous partons du principe que vous avez configuré le `CNAME` DNS de `speedtest.mondomaine.fr` pointant vers `mondomaine.fr`.
::warning
Speedtest Tracker n'utilise pas d'authentification multifacteur. Exposer Speedtest Tracker sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Speedtest Tracker n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les appareils connectés. Ne le faites que si vous utilisez un système multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, évitez SWAG et préférez un VPN comme [Wireguard](/serveex/core/wireguard).
::
Ouvrez le fichier speedtest.subdomain.conf :
::steps{level="3"}
### Créer le fichier subdomain.conf
Ouvrez le fichier `speedtest.subdomain.conf` :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf
```
Paramétrez le comme tel :
Configurez-le comme ceci :
```nginx [speedtest.subdomain.conf]
## Version 2023/12/19
@@ -112,8 +122,7 @@ Paramétrez le comme tel :
server {
listen 443 ssl;
listen [::]:443 ssl;
# indique que le sous-domaine doit être dirigé
server_name speedtest.*;
include /config/nginx/ssl.conf;
@@ -122,79 +131,144 @@ server {
#if ($lan-ip = yes) { set $geo-whitelist yes; }
#if ($geo-whitelist = no) { return 404; }
# indique que les pays dans la blacklist sont intedits
if ($geo-blacklist = no) { return 404; }
# enable for ldap auth (requires ldap-location.conf in the location block)
# Authentication options (uncomment as needed)
#include /config/nginx/ldap-server.conf;
# enable for Authelia (requires authelia-location.conf in the location block)
#include /config/nginx/authelia-server.conf;
# enable for Authentik (requires authentik-location.conf in the location block)
#include /config/nginx/authentik-server.conf;
location / {
# enable the next two lines for http auth
# Basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
# Per-location authentication
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app speedtest-tracker; # Nom du conteneur
set $upstream_port 3225; # Port interne conteneur
set $upstream_app speedtest-tracker;
set $upstream_port 3225;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Sauvegardez et quittez. La configuration va se mettre à jour en quelques secondes.
Enregistrez et quittez. La configuration se met à jour en quelques secondes.
### Ajouter le réseau de Speedtest Tracker à SWAG
::note
Par défaut, swag ne connait pas le nom "speedtest-tracker". Pour qu'il puisse y accéder, vous devez rajouter le réseau de Speedtest Tracker dans le `compose.yml` de SWAG.
Par défaut, SWAG ne connaît pas le nom « speedtest-tracker ». Pour autoriser l'accès, vous devez ajouter le réseau de Speedtest Tracker au `compose.yml` de SWAG.
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Speedtest Tracker :
Allez dans Dockge et modifiez le compose de SWAG pour y inclure le réseau de Speedtest Tracker :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- speedtest-tracker # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
container_name: # ...
# ...
networks:
# ...
- speedtest-tracker
networks:
# ...
speedtest-tracker: # Nom du réseau déclaré dans la stack
name: speedtest-tracker_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
speedtest-tracker:
name: speedtest-tracker_default
external: true
```
Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.
Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit complètement démarré.
::note
Ici nous partons du principe que le nom du réseau de Speedtest Tracker est `speedtest-tracker_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
Ceci suppose que le réseau de Speedtest Tracker s'appelle `speedtest-tracker_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
Patientez puis tapez `https://speedtest.mondomaine.fr` dans votre navigateur, vous devriez être redirigé vers speedtest-tracker. Vous pouvez vérifier le statut du service via le dashboard (depuis votre réseau local, http://ipdevotreserveur:81).
### Terminé !
::
Patientez un instant, puis visitez `https://speedtest.mondomaine.fr` dans votre navigateur. Vous devriez être redirigé vers Speedtest Tracker. Vous pouvez vérifier l'état du service via le tableau de bord (`http://ipdevotreserveur:81` depuis le réseau local).
## Protéger Speedtest Tracker avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `speedtest.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [speedtest.subdomain.conf]{22-34,37-38}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name speedtest.*;
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; }
# Authentication options (uncomment as needed)
#include /config/nginx/ldap-server.conf;
#include /config/nginx/authelia-server.conf;
#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;
# Basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# Per-location authentication
#include /config/nginx/ldap-location.conf;
#include /config/nginx/authelia-location.conf;
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app speedtest-tracker;
set $upstream_port 3225;
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 app avec Authentik en ouvrant `speedtest.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `speedtest.subdomain.conf` et en décommentant
`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](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::
+161 -86
View File
@@ -1,40 +1,37 @@
---
title: Beszel
description: Installer Beszel pour surveiller CPU, RAM, disques et réseau de vos serveurs y compris à distance via un tableau de bord web léger.
description: Installer Beszel pour surveiller CPU, RAM, disques et réseau de vos serveurs, y compris à distance, via un tableau de bord web léger.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Beszel
::note
🎯 __Objectifs :__
[Beszel](https://beszel.dev/) est un conteneur qui donne accès en temps réel aux informations matérielles de vos serveurs et permet leur suivi historique. Activité du processeur, occupation des disques, températures, RAM : rien n'échappe à votre surveillance. Beszel permet aussi de configurer des notifications et des alertes au dépassement des seuils que vous définissez.
- Installer Beszel
- Monitorer le serveur local
- Monitorer un serveur distant
- Exposer Beszel avec Swag
::
[Beszel](https://beszel.dev/) est un conteneur permettant d'accéder aux informations du hardware de vos serveurs en temps réel et de les historiser. Activité CPU, usages des disques, températures, RAM, vous ne raterez rien de l'état de votre serveur. Beszel permet également de paramétrer des notifications et alertes en cas de dépassement de limites que vous avez choisies.
Beszel dispose d'un hub avec une webui et d'un agent qui permet de collecter les données depuis votre serveur ou sur un serveur distant.
Beszel comprend un hub avec une interface web et un agent qui collecte les données de votre serveur ou d'un serveur distant.
![Beszel](/img/serveex/beszel.png)
## Installation
Structure des dossiers
::file-tree
---
tree:
/:
- srv:
- docker:
- beszel:
- compose.yaml
- .env
- data/
- socket/
---
::
```text [Arborescence]
root
└── docker
└── beszel
├── data
└── socket
::steps{level="3"}
### Déployer la stack
```
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `beszel` puis copiez collez ceci :
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `beszel`, et collez ce qui suit :
```yaml [compose.yaml]
---
@@ -59,57 +56,63 @@ services:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LISTEN: /beszel_socket/beszel.sock
# Do not remove quotes around the key
# Ne retirez pas les guillemets autour de la clé
KEY: ${KEY}
```
::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:
beszel:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
```yaml [compose.yaml]
---
services:
beszel:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Renseignez le `.env`, par exemple :
### Renseigner vos variables d'environnement
Remplissez le fichier `.env`, par exemple :
```properties [.env]
PORT=8090 # port de la webui
KEY= # clé privée à récupérer dans Beszel lors que vous ajoutez un système
PORT=8090 # port de l'interface web
KEY= # clé privée à récupérer dans Beszel lors de l'ajout d'un système
```
Pour la valeur `KEY`, il faudra lancer Beszel une première fois pour la saisir.
Déployez le conteneur et rendez-vous sur `http://ipduserveur:8090`. Et voilà, votre instance Beszel en webui est disponible !
Pour la valeur de `KEY`, il faudra lancer Beszel une première fois pour l'obtenir.
Déployez le conteneur et allez sur `http://ipdevotreserveur:8090`. Votre interface web Beszel est maintenant accessible !
### 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.
::
### Ajouter les informations du serveur local
Maintenant que la webui est accessible, vous devez faire remonter les informations du serveur dedans. Pour cela, il vous suffit d'ajouter une machine dans la webui et de paraméter comme ceci :
Maintenant que l'interface web est accessible, il faut y pousser les informations du serveur local. Ajoutez simplement une machine via l'interface web et configurez-la ainsi :
![Beszel add system](/img/serveex/beszel-add.png)
Note la clé privée et validez. Renseignez la clé dans votre `.env` dans dockge, et redéployez la stack. Lorsque vous retournerez sur la webui, votre serveur apparaitra :
Notez la clé privée et validez. Renseignez la clé dans votre fichier `.env` dans Dockge et redéployez la stack. Une fois fait, votre serveur apparaîtra dans l'interface web :
![Beszel add system](/img/serveex/beszel-system.png)
![Beszel system](/img/serveex/beszel-system.png)
### Ajouter les informations d'un serveur distant
### Ajouter un serveur distant
Vous pouvez également monitorer un serveur distant. Pour cela vous avez juste à faire tourner l'agent sur le serveur distant. Pour cela, ajoutez une nouvelle machine dans Beszel et renseignez :
Vous pouvez aussi surveiller un serveur distant. Pour cela, faites tourner l'agent sur le serveur distant. Ajoutez une nouvelle machine dans Beszel et renseignez :
- Le nom qui s'affichera dans Beszel pour votre serveur distant
- L'adresse IP ou le nom de domaine de votre serveur distant
- Le port d'écoute de votre serveur distant (dans notre exemple cela sera `45876`)
- Le nom affiché pour votre serveur distant
- L'adresse IP ou le nom de domaine du serveur distant
- Le port d'écoute (par exemple `45876`)
Beszel vous proposera de copier directement le `compose.yaml` à déployer sur votre serveur distant, ou vous pouvez le configurer comme suit :
Beszel vous proposera un `compose.yaml` à déployer sur le serveur distant, ou vous pouvez utiliser :
```yaml [compose.yaml]
---
@@ -129,67 +132,74 @@ services:
Et dans le `.env` :
```properties [.env]
PORT=45876 # port de communication entre votre hub et l'agent à distance
KEY= # clé privée à récupérer dans Beszel lors que vous ajoutez un système
PORT=45876 # port de communication entre le hub et l'agent distant
KEY= # clé privée fournie par Beszel lors de l'ajout du système
```
Déployez la stack sur votre serveur distant. Les informations du serveur distant remontront au bout de quelques secondes dans votre webui.
Déployez la stack sur le serveur distant. Les données commenceront à remonter dans l'interface web après quelques secondes.
::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.
::
## Exposer Beszel avec Swag
::warning
Beszel n'utilise pas d'authentification multifacteur. Exposer Beszel sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
Beszel ne gère pas l'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines connectées. Ne le faites que si vous utilisez un système 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).
::
Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer Beszel via Swag.
Si vous voulez accéder à Beszel à distance depuis tous vos appareils, exposez-le avec Swag.
::note
::note{icon="" to="/general/networking/nat"}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `beszel.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
Vous devez avoir créé un sous-domaine DNS du type `beszel.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr`. À moins d'utiliser Cloudflare Zero Trust, vous devez aussi avoir redirigé le port `443` de votre box vers le port `443` de votre serveur via les **règles NAT**.
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Beszel :
::steps{level="3"}
### Ajouter le réseau de Beszel à SWAG
Dans Dockge, modifiez le fichier compose de Swag et ajoutez le réseau de Beszel :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- beszel # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
networks:
# ...
- beszel # réseau déclaré dans la stack
networks:
# ...
beszel: # Nom du réseau déclaré dans la stack
name: beszel_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
beszel:
name: beszel_default # nom réel du réseau externe
external: true
```
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 beszel est `beszel_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
Nous partons du principe que le nom du réseau est `beszel_default`. Vous pouvez vérifier la connectivité en visitant le tableau de bord de Swag sur `http://ipdevotreserveur:81`.
::
Dans les dossiers de Swag, créez le fichier `beszel.subdomain.conf`.
### Créer le fichier subdomain.conf
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
Dans les dossiers de configuration de Swag, créez `beszel.subdomain.conf`.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ utilisez **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/beszel.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/beszel.subdomain.conf
```
Collez la configuration ci-dessous :
Collez :
```nginx [beszel.subdomain.conf]
## Version 2023/12/19
@@ -208,27 +218,21 @@ server {
#if ($geo-whitelist = no) { return 404; }
if ($geo-blacklist = no) { return 404; }
# enable for ldap auth (requires ldap-location.conf in the location block)
# enable for ldap auth
#include /config/nginx/ldap-server.conf;
# enable for Authelia (requires authelia-location.conf in the location block)
# enable for Authelia
#include /config/nginx/authelia-server.conf;
# enable for Authentik (requires authentik-location.conf in the location block)
# enable for Authentik
#include /config/nginx/authentik-server.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
@@ -237,15 +241,86 @@ server {
set $upstream_port 8090;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé Beszel !
### Terminé !
::
Et voilà ! Beszel est maintenant exposé !
## Protéger Beszel avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `beszel.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [beszel.subdomain.conf]{26-38,41-42}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name beszel.*;
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
#include /config/nginx/ldap-server.conf;
# enable for Authelia
#include /config/nginx/authelia-server.conf;
# enable for Authentik
#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;
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
#include /config/nginx/ldap-location.conf;
#include /config/nginx/authelia-location.conf;
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app beszel;
set $upstream_port 8090;
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 app avec Authentik en ouvrant `beszel.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `beszel.subdomain.conf` et 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](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::
+133 -44
View File
@@ -1,34 +1,34 @@
---
title: UpSnap
description: Installer UpSnap pour allumer à distance des machines de votre réseau local via Wake-on-LAN, exposé avec SWAG.
description: Installer UpSnap pour réveiller à distance les machines de votre réseau local via Wake-on-LAN, exposé avec SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# UpSnap
::note
🎯 __Objectifs :__
- Installer UpSnap
- Exposer UpSnap avec Swag
::
[UpSnap](https://github.com/seriousm4x/UpSnap) est un conteneur permettant d'allumer, éteindre, ou mettre en veille vos machines à distance. Il utilise essentiellement le systeme de Wake-On-Lan (WoL) par le réseau et dispose d'autres fonctions avancées.
[UpSnap](https://github.com/seriousm4x/UpSnap) est un conteneur qui permet d'allumer, d'éteindre ou de mettre en veille vos machines à distance. Il utilise principalement le Wake-On-Lan (WoL) sur le réseau et propose des fonctions avancées.
![Beszel](/img/serveex/upsnap.webp)
## Installation
Structure des dossiers
::file-tree
---
tree:
/:
- srv:
- docker:
- upsnap:
- compose.yaml
- .env
- data/
---
::
```text [Arborescence]
root
└── docker
└── upsnap
└── data
```
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `upsnap` puis copiez collez ceci :
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `upsnap`, puis copiez-collez ce qui suit :
```yaml [compose.yaml]
---
@@ -39,7 +39,7 @@ services:
network_mode: host
restart: unless-stopped
volumes:
- /docker/upsnap/data:/app/pb_data
- /srv/docker/upsnap/data:/app/pb_data
environment:
- TZ=Europe/Paris
- UPSNAP_SCAN_RANGE=${SCAN_RANGE}
@@ -54,7 +54,7 @@ services:
```
::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:
@@ -66,36 +66,44 @@ services:
```
::
Renseignez le `.env`, par exemple :
### Renseigner vos variables d'environnement
Remplissez le `.env`, par exemple :
```properties [.env]
RANGE=192.168.1.0/24 # scan toutes les machines sur le réseau local ayant une adresse IP comprise entre 192.168.0.1 et 192.168.1.255
DNS=192.168.1.1 # IP du dns à utiliser pour résoudre les noms de domaines, ici dans l'exemple c'est généralement l'IP du routeur
RANGE=192.168.1.0/24 # scanne tous les appareils du réseau local ayant une IP entre 192.168.0.1 et 192.168.1.255
DNS=192.168.1.1 # IP du DNS pour résoudre les noms de domaine, typiquement l'IP de votre box
```
Déployez le conteneur et rendez-vous sur `http://ipduserveur:8095`. Vous n'avez plus qu'à suivre les instructions pour créer votre compte !
Déployez le conteneur et allez sur `http://ipdevotreserveur:8095`. Suivez simplement les étapes pour créer votre compte !
### 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.
::
## Exposer UpSnap avec Swag
::warning
UpSnap n'utilise pas d'authentification multifacteur. Exposer UpSnap sur internet pourrait compromettre les machines auxquel il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
UpSnap ne gère pas l'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines connectées. Ne le faites que si vous utilisez un système d'authentification multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, évitez de l'exposer avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::
Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer UpSnap via Swag.
Vous voudrez peut-être y accéder à distance depuis tous vos appareils. Pour cela, nous allons exposer UpSnap via Swag.
::note
::note{icon=""}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `upsnap.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
Nous partons du principe que vous avez créé un sous-domaine dans votre [zone DNS](/general/networking/dns), du type `upsnap.mondomaine.fr` avec un `CNAME` vers `mondomaine.fr`. Par ailleurs, à moins d'utiliser Cloudflare Zero Trust, vous devriez 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).
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de UpSnap :
::steps{level="3"}
### Ajouter le réseau d'UpSnap à SWAG
Allez dans Dockge et modifiez le compose de SWAG en y ajoutant le réseau d'UpSnap :
```yaml [compose.yaml]
---
@@ -103,34 +111,36 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks: # Rattache le conteneur au réseau personnalisé
# ...
- upsnap # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
networks: # Définit le réseau personnalisé
# ...
upsnap: # Nom du réseau déclaré dans la stack
name: upsnap_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
name: upsnap_default # Nom réel du réseau externe
external: true # Indique qu'il s'agit d'un réseau externe
```
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 upsnap est `upsnap_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
Nous partons ici du principe que le nom du réseau d'upsnap est `upsnap_default`. Vous pouvez vérifier la connexion dans le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `upsnap.subdomain.conf`.
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichiers et éditer vos documents plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf
```
Collez la configuration ci-dessous :
Et collez la configuration suivante :
```nginx [upsnap.subdomain.conf]
## Version 2023/12/19
@@ -183,10 +193,89 @@ server {
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé UpSnap !
### Terminé !
::
Et voilà ! Vous avez exposé UpSnap !
## Protéger UpSnap avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `upsnap.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [upsnap.subdomain.conf]{26-38,41-42}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name upsnap.*;
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 upsnap;
set $upstream_port 8095;
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 app avec Authentik en ouvrant `upsnap.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `upsnap.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).
::
+264
View File
@@ -0,0 +1,264 @@
---
title: Jellyfin
description: Installer Jellyfin, un serveur multimédia libre et open source, pour diffuser vos films et séries depuis n'importe où sans abonnement payant.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
![Jellyfin](/img/serveex/jellyfin.png)
[Jellyfin](https://jellyfin.org) est une alternative libre et open source à Plex et Emby. Contrairement à Plex, il n'a pas d'offre payante, pas de télémétrie, et n'exige pas de compte en ligne pour utiliser ou administrer votre serveur : tout tourne en local et reste chez vous.
Il couvre les mêmes bases : une médiathèque avec métadonnées et jaquettes, le transcodage (accélération matérielle comprise), et des applications pour TV, Android, iOS, Windows et macOS.
Comme toujours, nous utiliserons l'[image linuxserver.io](https://docs.linuxserver.io/images/docker-jellyfin).
::note{to="/serveex/core/wireguard"}
Contrairement à Plex, Jellyfin n'a pas de relais cloud : pour accéder à votre serveur en dehors de votre réseau local, vous devez l'exposer vous-même (voir plus bas), ou utiliser un VPN comme **Wireguard**.
::
## Installer Jellyfin
::file-tree
---
tree:
/:
- srv:
- docker:
- jellyfin:
- compose.yaml
- .env
- 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
```
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `jellyfin`, et ajoutez la configuration suivante :
```yaml [compose.yaml]
---
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=${PUID}
- PGID=${GUID}
- TZ=Europe/Paris
volumes:
- /srv/docker/jellyfin/config:/config
- /media:/media
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
ports:
- 8096:8096
```
::tip{icon=""}
✨ Ajoutez le label Watchtower pour automatiser les mises à jour :
```yaml [compose.yaml]
---
services:
jellyfin:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
### Renseigner vos variables d'environnement
Trouvez vos PUID et GUID en lançant :
```bash [Terminal]
id utilisateur
```
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 sur `http://ipdevotreserveur:8096`.
::note{to="https://docs.linuxserver.io/images/docker-jellyfin/#hardware-acceleration"}
Le périphérique `/dev/dri` n'est nécessaire que pour le transcodage accéléré matériellement sur GPU Intel/AMD. Retirez-le si votre serveur n'en a pas, ou adaptez-le pour un GPU NVIDIA en suivant la **documentation de linuxserver.io**.
::
### Terminé !
::
## Configurer Jellyfin
À la première visite, Jellyfin vous guide dans un assistant de configuration :
- Choisissez une langue d'affichage et créez votre compte administrateur.
- Ajoutez une médiathèque, en pointant `/media/movies` pour les films et `/media/tvseries` pour les séries.
Et voilà ! Ajoutez vos médias dans `/media/movies` et `/media/tvseries` sur votre serveur. Voir plus bas pour commencer à regarder, à la maison ou à distance.
::note{to="/general/networking/samba"}
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 Jellyfin puisse y accéder.
::
## Transcodage matériel
Jellyfin réencode la vidéo à la volée dès qu'un client ne peut pas lire un fichier tel quel : la résolution de l'écran de l'appareil est inférieure à celle de la source, sa connexion réseau est trop lente pour le débit du fichier, ou il ne prend pas en charge le codec, le format HDR ou le type de sous-titres du fichier. C'est ce qu'on appelle le **transcodage**. Fait uniquement en logiciel, sur le processeur, c'est lent et cela peut saturer un serveur modeste avec seulement un ou deux flux simultanés. Le **transcodage matériel** délègue ce travail au GPU intégré à votre processeur (Intel QuickSync, sur la plupart du matériel de homelab), qui s'en occupe bien plus vite et laisse le CPU libre pour tout le reste.
Le **tone mapping** est une fonction liée mais distincte : convertir une vidéo HDR (qui a besoin d'un écran HDR compatible pour rendre correctement) en SDR pour qu'elle s'affiche correctement sur un écran, une TV ou un client qui ne gère pas le HDR, au lieu de paraître délavée ou trop sombre.
::note{to="https://docs.linuxserver.io/images/docker-jellyfin/#hardware-acceleration"}
Cela ne concerne que les GPU intégrés Intel (et certains AMD) passés au conteneur avec `/dev/dri`, déjà présent dans le `compose.yaml` de ce tutoriel. Les GPU NVIDIA demandent une configuration entièrement différente, traitée dans la **documentation de linuxserver.io**. Si votre serveur n'a pas de GPU compatible, le transcodage fonctionne quand même, entièrement sur le CPU.
::
::steps{level="3"}
### Ajouter le mod OpenCL
Le tone mapping a spécifiquement besoin d'un runtime OpenCL Intel, que cette image n'embarque pas par défaut. Ajoutez le mod dédié à votre `compose.yaml` :
```yaml [compose.yaml]
services:
jellyfin:
environment:
- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
```
::note
N'utilisez pas le mod générique `universal-package-install` avec `intel-opencl-icd` pour ça : il installe un runtime plus ancien issu des dépôts d'Ubuntu, connu pour causer des bugs de tone mapping. Le mod dédié en fournit un plus récent et prévu pour.
::
Redéployez la stack pour que le mod prenne effet.
### Activer l'accélération matérielle
Dans Jellyfin, allez dans _Tableau de bord > Lecture_ et réglez **Accélération matérielle** sur **Intel QuickSync (QSV)** (ou **VA-API**, si QSV n'est pas disponible pour votre génération de processeur).
Décochez ensuite tout codec que votre GPU ne sait pas décoder matériellement. La [page d'accélération matérielle Intel](https://jellyfin.org/docs/general/administration/hardware-acceleration/intel/) liste précisément les codecs pris en charge par chaque génération de processeur.
### Activer le tone mapping
Plus bas sur la même page, activez le **Tone mapping**. Il ne prend effet qu'une fois le mod OpenCL ci-dessus installé et la stack redéployée ; l'activer sans cette étape préalable fera échouer les transcodages HDR au lieu de simplement ignorer le tone mapping.
### Terminé !
::
## Regarder à la maison
Tant que vous êtes connecté à votre réseau domestique (Wi-Fi ou Ethernet, sur le même réseau local que votre serveur), aucune exposition ni VPN n'est nécessaire. Utilisez [Moonfin](https://github.com/Moonfin-Client/Moonfin-Core) partout où il est disponible (téléphones, tablettes, Android TV/Google TV, ordinateur, web) plutôt que l'application Jellyfin officielle : il a la même apparence et le même fonctionnement partout, et peut synchroniser vos réglages entre appareils via son propre plugin serveur. Connectez-vous sur `http://iplandevotreserveur:8096`.
Samsung Tizen et LG webOS ont droit à une [application Moonfin](https://github.com/Moonfin-Client/Smart-TV) séparée et dédiée (même nom, base de code différente), et l'Apple TV est mieux servie par [Neptune](https://apps.apple.com/us/app/neptune-media-player/id6756797773), un client tvOS dédié avec décodage natif HEVC/AV1/VP9 et passthrough Atmos complet. Là où aucun de ces clients n'existe (Fire TV, Roku, Kodi), voir le tableau ci-dessous :
| Plateforme | Application recommandée |
|----------|-----------------|
| Téléphone / Tablette (Android, iOS) | [Moonfin](https://github.com/Moonfin-Client/Moonfin-Core) (Play Store / App Store) |
| Android TV / Google TV | [Moonfin](https://github.com/Moonfin-Client/Moonfin-Core) (Play Store ou APK) |
| Apple TV | [Neptune](https://apps.apple.com/us/app/neptune-media-player/id6756797773) (App Store) |
| Samsung Tizen / LG webOS | [Moonfin](https://github.com/Moonfin-Client/Smart-TV) (sideloadé) ; les applications officielles existent mais sont en retard |
| Fire TV | Application Jellyfin officielle (Amazon Appstore) |
| Roku | Application Jellyfin officielle |
| Kodi | [Jellyfin pour Kodi](https://jellyfin.org/docs/general/clients/kodi/) (synchronise votre médiathèque dans Kodi), ou [JellyCon](https://github.com/jellyfin/jellycon) pour les boîtiers plus légers en streaming seul |
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
## Regarder en dehors de chez soi
::warning
Jellyfin ne sera pas exposé sur internet dans ce site, contrairement à la plupart des autres applications. Ses applications natives (téléphone, TV, Chromecast...) dialoguent directement avec son API plutôt qu'avec un navigateur, si bien qu'une couche de forward-auth comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik) ne peut pas se placer devant sans casser la connexion et la lecture sur ces clients, et Jellyfin lui-même n'a ni 2FA ni OIDC intégré pour compenser. Plutôt que de l'exposer, nous l'atteindrons donc via le [VPN WireGuard](/serveex/core/wireguard) déjà mis en place plus tôt dans ce guide.
::
Plutôt que de faire passer tout le trafic d'un appareil par le VPN, ou même tout le sous-réseau VPN `10.8.0.0/24`, nous utiliserons un **split tunnel** plus serré : chaque appareil distant ne route par le tunnel que le trafic destiné à l'adresse VPN de votre serveur. Tout le reste (navigation, autres applications) reste sur la connexion normale de l'appareil, et le VPN ne sert jamais qu'à joindre cette seule machine.
::note{to="/serveex/core/wireguard#client-server-setup"}
Ceci suppose que votre serveur Jellyfin fait déjà tourner son propre client WireGuard, le reliant à votre VPN comme décrit dans **Client Server Setup**. Notez l'adresse VPN que wg-easy lui a attribuée (par exemple `10.8.0.2`) ; c'est l'adresse que viseront tous les appareils ci-dessous.
::
::caution{to="#restreindre-un-pair-tiers-à-jellyfin-uniquement"}
Ce split tunnel est une convention côté client, pas une frontière de sécurité imposée par le serveur : `AllowedIPs` est un réglage de routage, et wg-easy n'ajoute aucune règle de pare-feu pour l'appuyer par défaut. Quiconque a accès à un appareil (ou à son fichier `.conf`) pourrait remettre `AllowedIPs` sur quelque chose de plus large et atteindre tout ce que votre serveur WireGuard sait router, y compris les autres pairs connectés. Si un pair est l'un de vos propres appareils, c'est en général un risque acceptable. Si vous confiez un pair à un tiers (un ami, un membre de la famille) qui ne doit jamais atteindre que Jellyfin, voir **Restreindre un pair tiers à Jellyfin uniquement** plus bas pour une façon de l'imposer réellement côté serveur.
::
::steps{level="3"}
### Créer un client dans wg-easy pour chaque appareil
En suivant [Récupérer les fichiers de configuration](/serveex/core/wireguard#retrieve-configuration-files), créez un client par appareil (téléphone, ordinateur, TV/boîtier multimédia) et téléchargez son fichier de configuration.
### Restreindre le tunnel au seul serveur
Ouvrez chaque fichier `.conf` téléchargé et remplacez sa ligne `AllowedIPs` pour qu'elle ne couvre que l'adresse VPN de votre serveur Jellyfin, en `/32` (une seule IP, pas une plage) :
```properties [wg0.conf]
AllowedIPs = 10.8.0.2/32
```
::note
Remplacez `10.8.0.2` par l'adresse que votre serveur a réellement obtenue. Laisser le `10.8.0.0/24` par défaut ici ferait passer par le tunnel le trafic de tous les pairs VPN, pas seulement de votre serveur.
::
### Importer la configuration sur chaque appareil
- **Téléphone :** installez l'application WireGuard, puis importez le fichier `.conf` modifié (ou scannez un QR code généré à partir de celui-ci).
- **Ordinateur :** installez le [client WireGuard](https://www.wireguard.com/install/) et importez le fichier.
- **TV :** si elle tourne sous Android TV ou Google TV, installez WireGuard depuis le Play Store. Copiez le fichier `.conf` sur une clé USB, branchez-la sur la TV ou le boîtier, puis utilisez l'option **Ajouter depuis un fichier** de l'application pour parcourir la clé et l'importer. La plupart des autres systèmes de TV (Tizen, webOS...) ne peuvent pas installer de client VPN directement, passez donc plutôt par un appareil qui a déjà le tunnel actif (un boîtier Android TV, ou du cast depuis un téléphone ou un ordinateur connecté).
::warning
Un fichier `.conf` est un identifiant, pas un simple fichier de réglages : quiconque le possède peut se connecter à votre VPN en tant que cet appareil. Une fois importé, supprimez-le de la clé USB (et de partout où vous l'avez copié, comme les dossiers Téléchargements), et ne le partagez jamais avec qui que ce soit.
::
### Terminé !
::
### Restreindre un pair tiers à Jellyfin uniquement
[wg-easy](/serveex/core/wireguard) (v15.3+) sait l'imposer lui-même, avec une vraie règle de pare-feu à l'intérieur de son propre conteneur plutôt qu'un réglage côté client. C'est la bonne approche quand le pair appartient à quelqu'un d'autre, et non à l'un de vos appareils.
::steps{level="4"}
#### Activer le pare-feu par client
Dans le panneau d'administration de [wg-easy](/serveex/core/wireguard), allez dans les réglages de l'interface et activez **Per-Client Firewall**. Il est marqué expérimental, mais fonctionne en générant une chaîne `iptables` dédiée dans le conteneur wg-easy.
#### Restreindre la destination autorisée du pair
Modifiez le client du tiers et réglez ses **Firewall Allowed IPs** sur l'adresse VPN de votre serveur Jellyfin, par exemple `10.8.0.2`, ou plus restrictif encore, `10.8.0.2:8096/tcp` pour restreindre aussi le port et le protocole.
::note
Laisser ce champ vide retombe sur les `AllowedIPs` du client, ce qui n'est pas restrictif : il doit être renseigné explicitement pour ce pair. Cela coupe aussi l'accès internet classique de ce pair à travers le tunnel, puisque seul le trafic vers Jellyfin est désormais autorisé, ce qui est bien l'effet recherché pour un pair invité.
::
#### Vérifier que la règle est appliquée
```bash [Terminal]
docker exec wg-easy iptables -L WG_CLIENTS -n -v
```
Vous devriez voir une ligne `ACCEPT` pour l'IP de ce pair pointant uniquement vers votre serveur Jellyfin, suivie d'un `DROP` fourre-tout.
#### Terminé !
::
Une fois connecté, ouvrez l'application Jellyfin ou `http://10.8.0.2:8096` (l'adresse VPN de votre serveur) depuis cet appareil. Seul le trafic vers cette adresse passe par le VPN, le reste de la connexion de l'appareil n'est pas touché.
-303
View File
@@ -1,303 +0,0 @@
---
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.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Plex
::note
🎯 __Objectifs :__
- Installer Plex
- Installer Tautulli
- Accéder aux media depuis l'exterieur
::
[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.
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.
![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.
- [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/)
::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.
::
## 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 :
```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 :
```yaml [compose.yaml]
---
services:
linuxserver_plex:
image: ghcr.io/linuxserver/plex:amd64-latest
container_name: plex
network_mode: host
environment:
- PUID=${PUID}
- PGID=${GUID}
- TZ=Europe/Paris
- VERSION=docker
volumes:
- /docker/plex/config:/config
- /docker/plex/transcode:/transcode
- /media:/media
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:
- PUID=${PUID}
- PGID=${GUID}
- TZ=Europe/Paris
volumes:
- /docker/tautulli/config:/config
ports:
- 8181:8181
restart: unless-stopped
```
::tip{icon=""}
✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
plex:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
tautulli:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Trouvez votre PUID et votre GUID en tapant la commande suivante :
```bash [Terminal]
id nomdutilisateur
```
Et renseignez le `.env` avec les infos que vous avez trouvé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`.
::warning
Vous devez impérativement être sur votre réseau local au moment du premier setup de Plex, sans quoi l'url vous renverra sur votre compte Plex sans detecter votre serveur. Un VPN ne vous sauvera pas. Si vous ne pouvez pas faire autrement, [vous pouvez gérer l'installation à distance via un tunnel SSH](https://support.plex.tv/articles/200288586-installation/#toc-2).
::
## 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_.
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.
![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](/fr/general/networking/nat).
- Une fois fait, retournez dans Plex afin de vérifier que la connexion est bien opérationnelle
::caution
__En cas d'échec :__ vérifiez les règles de votre pare-feu et autorisez le port `32400` de 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.
Et voilà, vous avez un 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 !
::note
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](/fr/general/networking/samba) afin 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.
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](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Tautulli :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- tautulli # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
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
```
Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement 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`.
::
Copiez en renommant le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf` et éditez le :
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo cp /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
sudo nano /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
```
Et vérifiez que la configuration correspond bien à ceci, sinon éditez le fichier :
```nginx [tautulli.subdomain.conf]
## Version 2023/05/31
# make sure that your tautulli container is named tautulli
# make sure that your dns has a cname set for tautulli
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tautulli.*;
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 / {
# 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 tautulli;
set $upstream_port 8181;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/tautulli)?/api {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app tautulli;
set $upstream_port 8181;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/tautulli)?/newsletter {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app tautulli;
set $upstream_port 8181;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/tautulli)?/image {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app tautulli;
set $upstream_port 8181;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
::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](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
::
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Patientez quelques minutes puis tapez dans votre navigateur `http://tautulli.mondomaine.fr`.
::caution
__En cas d'échec :__ vérifiez les règles de votre pare-feu.
::
Et voilà !
+14 -21
View File
@@ -3,15 +3,8 @@ title: Qbittorrent
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}
# Qbittorrent
::note
🎯 __Objectifs :__
- Installer et configurer Qbittorrent
- Etre relié au réseau bittorent en toute sécurité avec Gluetun et Proton VPN
::
![Picture](/img/serveex/qbit-vue.jpeg)
@@ -73,7 +66,7 @@ services:
- GSP_QBT_USERNAME=${ID}
- GSP_QBT_PASSWORD=${PW}
volumes:
- /docker/seedbox/qbittorrent/config:/config
- /srv/docker/seedbox/qbittorrent/config:/config
- /media:/media
depends_on:
- gluetun
@@ -84,7 +77,7 @@ services:
restart: unless-stopped
mem_limit: 4g
volumes:
- /docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
- /srv/docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
devices:
- /dev/net/tun:/dev/net/tun
ports:
@@ -101,7 +94,7 @@ services:
- WIREGUARD_PRIVATE_KEY=${PR_KEY}
- SERVER_COUNTRIES=France
- PORT_FORWARD_ONLY=on
```
::tip{icon=""}
@@ -134,16 +127,16 @@ A cet effet, ouvrez un terminal. Nous allons à présent générer une clé d'au
sudo docker run --rm qmcgaw/gluetun genkey
```
Notez la clé. Puis créez le dossier `/docker/gluetun`
Notez la clé. Puis créez le dossier `/srv/docker/gluetun`
```bash [Terminal]
sudo mkdir /docker/gluetun
sudo mkdir /srv/docker/gluetun
```
Et créez le fichier `config.toml`
```bash [Terminal]
sudo nano /docker/gluetun/config.toml
sudo nano /srv/docker/gluetun/config.toml
```
Éditez le comme suit en ajoutant la clée que vous avez générée :
@@ -205,14 +198,14 @@ Lorsque vous lancez un téléchargement, n'oubliez pas de préciser le bon répe
::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](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
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).
::
Afin de lancer des téléchargement hors de chez vous, sans VPN, vous pouvez exposer la webui 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](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
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).
::
Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Gluetun :
@@ -226,7 +219,7 @@ services:
networks: # Relie le conteneur au réseau custom
# ...
- seedbox # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
seedbox: # Nom du réseau déclaré dans la stack
@@ -243,12 +236,12 @@ Ici nous partons du principe que le nom du réseau de la seedbox est `seedbox_de
Puis nous allons créer et éditer le fichier `seedbox.subdomain.conf`.
::tip{icon=""}
✨ __Astuce pour les allergiques au terminal :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
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 :
@@ -304,7 +297,7 @@ 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](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ 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).
::
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
+17 -23
View File
@@ -1,16 +1,10 @@
---
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 Overseerr pour films et séries.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Servarr
::note
🎯 __Objectifs :__
Automatiser les téléchargements de films et de séries avec Radarr, Sonarr, Bazarr, Prowlarr et Overseerr.
::
[Servarr](https://wiki.servarr.com/) est une collection d'applications développées dans le but d'automatiser le téléchargement, la mise à jour et la gestions des media. Ici nous allons porter notre attention sur les films et séries avec comme objectif :
@@ -76,8 +70,8 @@ services:
- VERSION=docker
- PLEX_CLAIM= #optional
volumes:
- /docker/plex/config:/config
- /docker/plex/transcode:/transcode #optional
- /srv/docker/plex/config:/config
- /srv/docker/plex/transcode:/transcode #optional
- ${MEDIA_PATH}:/media
labels:
- com.centurylinklabs.watchtower.enable=true
@@ -93,11 +87,11 @@ services:
environment:
- TZ=Europe/Paris
volumes:
- /docker/tautulli/config:/config
- /srv/docker/tautulli/config:/config
ports:
- 8181:8181
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
@@ -106,7 +100,7 @@ services:
- PGID=${PGID}
- TZ=Europe/Paris
volumes:
- /docker/sonarr/config:/config
- /srv/docker/sonarr/config:/config
- ${MEDIA_PATH}:/media
ports:
- 8989:8989
@@ -120,7 +114,7 @@ services:
- PGID=${PGID}
- TZ=Europe/Paris
volumes:
- /docker/radarr/config:/config
- /srv/docker/radarr/config:/config
- ${MEDIA_PATH}:/media
ports:
- 7878:7878
@@ -134,7 +128,7 @@ services:
- PGID=${PGID}
- TZ=Europe/Paris
volumes:
- /docker/prowlarr/data:/config
- /srv/docker/prowlarr/data:/config
ports:
- 9696:9696
restart: unless-stopped
@@ -150,7 +144,7 @@ services:
- PGID=${PGID}
- TZ=Europe/Paris
volumes:
- /docker/overseerr/config:/config
- /srv/docker/overseerr/config:/config
ports:
- 5055:5055
restart: unless-stopped
@@ -164,7 +158,7 @@ services:
- PGID=1000
- TZ=Europe/Paris
volumes:
- /docker/bazarr/config:/config
- /srv/docker/bazarr/config:/config
- ${MEDIA_PATH}:/media
ports:
- 6767:6767
@@ -180,7 +174,7 @@ services:
labels:
- com.centurylinklabs.watchtower.enable=true
tautulli:
#...
labels:
@@ -389,7 +383,7 @@ Il peut etre intéressant d'exposer Overseerr, si vous souhaitez pouvoir faire d
::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](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/fr/general/networking/nat).
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).
::
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 :
@@ -403,7 +397,7 @@ services:
networks: # Relie le conteneur au réseau custom
# ...
- plex # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
plex: # Nom du réseau déclaré dans la stack
@@ -420,12 +414,12 @@ Ici nous partons du principe que le nom du réseau de Tautulli est `plex_default
Créez le fichier `films.subdomain.conf` et éditez le :
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::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.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/films.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/films.subdomain.conf
```
Collez la configuration suivante :
+92 -48
View File
@@ -3,61 +3,69 @@ title: Immich
description: Installer Immich, une alternative auto-hébergée à Google Photos et iCloud avec reconnaissance faciale, géolocalisation et synchronisation multi-appareils.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Immich
::note
🎯 __Objectifs :__ installer [Immich](https://immich.app/docs/overview/introduction) pour gérer vos photos sur tout vos appareils.
::
[Immich](https://immich.app/docs/overview/introduction) est une solution de gestion de photos et de vidéos que vous pouvez installer directement sur votre serveur. Cette solution remplace les clouds type Google Photo ou iCloud. Elle dispose de nombreuse fonctionnalités comme la reconnaissance de visage ou la géolocalisation.
[Immich](https://immich.app/docs/overview/introduction) est une solution auto-hébergée de gestion de photos et de vidéos qui remplace les services cloud comme Google Photos ou iCloud. Elle propose des fonctions puissantes comme la reconnaissance faciale et la géolocalisation.
![Picture](/img/serveex/immich.png)
## Installation
Structure des dossiers
```text [Arborescence]
root
└── docker
└── immich
├── library
├── compose.yaml
└── .env
```
::file-tree
---
tree:
/:
- srv:
- docker:
- immich:
- library/
- compose.yaml
- .env
---
::
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `immich` puis copiez collez le contenu du dernier `docker-compose.yml` [publié ici](https://github.com/immich-app/immich/blob/main/docker/docker-compose.yml).
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `immich`, puis copiez-collez le dernier `docker-compose.yml` [publié ici](https://github.com/immich-app/immich/blob/main/docker/docker-compose.yml).
::warning
__Attention__ : n'ajoutez pas le label de Watchtower à la stack d'Immich. Immich étant une solution en perpetuelle évolution, des mises à jour automatiques risqueraient de casser votre installation.
__Attention__ : n'ajoutez pas le label Watchtower à la stack Immich. Immich évolue rapidement, et les mises à jour automatiques peuvent casser votre installation.
::
Configurer le `.env` en copiant collant le contenu de la dernière version [publiée ici](https://github.com/immich-app/immich/blob/main/docker/example.env) et suivez les commentaires indiqués dans le fichier.
### Renseigner vos variables d'environnement
::note
Configurez le fichier `.env` en copiant la dernière version [depuis ici](https://github.com/immich-app/immich/blob/main/docker/example.env) et suivez les commentaires du fichier.
Si vous avez un NAS ou un disque réseau partagé via [samba](/fr/general/networking/samba) pour stocker vos données, remplacez la valeur de `UPLOAD_LOCATION`{lang=properties} par le chemin d'accès de votre dossier partagé.
::note{to="/general/networking/samba/"}
Si vous utilisez un NAS ou un disque partagé sur le réseau via **Samba** pour stocker vos données, remplacez la valeur de `UPLOAD_LOCATION`{lang=properties} par le chemin de votre dossier partagé.
::
::tip{icon=""}
✨ __Astuce :__ si votre CPU/iGPU/GPU le supporte, Immich permet d'utiliser l'accélération matérielle pour lire les vidéos ou pour la reconnaissance d'images. Ces fonctionnalités peuvent tripler les performances d'Immich. Plus d'infos sur le [Transcoding](https://immich.app/docs/features/hardware-transcoding/) et sur le [Machine learning](https://immich.app/docs/features/ml-hardware-acceleration).
__Astuce :__ si votre CPU/iGPU/GPU le permet, Immich peut utiliser l'accélération matérielle pour la lecture vidéo et la reconnaissance d'images. Cela peut tripler les performances. En savoir plus sur le [transcodage](https://immich.app/docs/features/hardware-transcoding/) et le [machine learning](https://immich.app/docs/features/ml-hardware-acceleration).
::
Déployez le conteneur.
Déployez le conteneur. Vous pouvez vous connecter et suivre les instructions de configuration sur `http://ipdevotreserveur:2283`.
Et voilà, vous pouvez vous connecter et suivre les instructions sur `http://ipduserveur:2283`
### Terminé !
::
## Exposer Immich 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 Immich via Swag.
## Exposer Immich avec SWAG
Le principal intérêt de cette installation est de pouvoir accéder à Immich à distance sur tous vos appareils. Nous allons exposer Immich avec SWAG.
::note
::note{icon=""}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez le sous-domaine `immich.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/fr/general/networking/nat).
Nous partons du principe que vous avez un sous-domaine `immich.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Par ailleurs, à moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), assurez-vous que le port `443` de votre box est redirigé vers le port `443` de votre serveur via 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 immich :
::steps{level="3"}
### Ajouter le réseau d'Immich à SWAG
Dans Dockge, ouvrez la stack SWAG et modifiez le fichier compose pour y ajouter le réseau d'Immich :
```yaml [compose.yaml]
---
@@ -65,35 +73,37 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks: # Rattache le conteneur au réseau personnalisé
# ...
- immich # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
- immich # Nom du réseau défini dans la stack
networks: # Définit le réseau personnalisé
# ...
immich: # Nom du réseau déclaré dans la stack
name: immich_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
immich: # Nom du réseau défini dans la stack
name: immich_default # 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 immich est `immich_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
Nous partons du principe que le réseau d'Immich s'appelle `immich_default`. Vous pouvez vérifier la connectivité 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 complètement initialisé.
Dans les dossiers de Swag, créez le fichier `immich.subdomain.conf`.
### Créer le fichier subdomain.conf
::tip{icon=""}
Dans les dossiers de SWAG, créez un fichier nommé `immich.subdomain.conf`.
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __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 /docker/swag/config/nginx/proxy-confs/immich.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/immich.subdomain.conf
```
Collez la configuration ci-dessous :
Puis collez la configuration suivante :
```nginx [immich.subdomain.conf]
## Version 2023/12/19
@@ -141,7 +151,6 @@ server {
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/immich)?/api {
@@ -151,15 +160,50 @@ server {
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé Immich ! N'oubliez pas d'installer les applications [iOS](https://apps.apple.com/us/app/immich/id1613945652)/[Android](https://play.google.com/store/apps/details?id=app.alextran.immich) afin de synchroniser vos appareils.
### Terminé !
::
::tip{icon=""}
__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/immich/).
Et voilà ! Immich est maintenant accessible depuis internet. N'oubliez pas d'installer les applications [iOS](https://apps.apple.com/us/app/immich/id1613945652) / [Android](https://play.google.com/store/apps/details?id=app.alextran.immich) pour synchroniser vos appareils.
## Protéger Immich avec Pocket ID
Immich gère OIDC nativement, vous pouvez donc exiger une connexion Pocket ID avant de laisser qui que ce soit accéder à vos photos, plutôt qu'avec (ou en plus de) les comptes propres à l'application.
::steps{level="3"}
### Enregistrer Immich comme client OIDC
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `immich`, avec ces trois URL de callback :
```text
https://immich.mondomaine.fr/auth/login
https://immich.mondomaine.fr/user-settings
app.immich:///oauth-callback
```
La troisième URL est celle qui permet à l'application mobile de se connecter aussi.
### Activer OAuth dans Immich
Dans Immich, allez dans _Administration > Settings > Authentication Settings > OAuth_, activez-le, et renseignez :
| Champ | Valeur |
|-------|-------|
| Issuer URL | L'URL de découverte OIDC de Pocket ID |
| Client ID | Le client ID copié depuis Pocket ID |
| Client Secret | Le client secret copié depuis Pocket ID |
### Terminé !
::
::tip{icon="" to="/serveex/advanced/authentik"}
✨ Vous pouvez utiliser **Authentik** plutôt que Pocket ID :
1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé `immich`, avec les trois mêmes redirect URI que ci-dessus (de type `Strict`).
2. Notez les __Client ID__, __Client Secret__ et __Slug__ du provider.
3. Dans les réglages OAuth d'Immich, mettez `https://authentik.mondomaine.fr/application/o/<slug>/` comme Issuer URL, puis renseignez le Client ID et le Client Secret.
::
+120 -65
View File
@@ -1,38 +1,39 @@
---
title: Nextcloud
description: Installer Nextcloud pour auto-héberger vos fichiers, photos et agenda une alternative respectueuse de la vie privée à Google Drive, OneDrive et iCloud.
description: Installer Nextcloud pour auto-héberger vos fichiers, photos et agenda, une alternative respectueuse de la vie privée à Google Drive, OneDrive et iCloud.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Nextcloud
::note
🎯 __Objectifs :__ installer [Nextcloud](https://nextcloud.com/) pour gérer vos photos sur tout vos appareils.
::
[Nextcloud](https://nextcloud.com/) est une solution qui vous permet d'accéder à vos données sur tout vos appareils, et de les synchroniser. Nexctloud dispose également de fonctionnalités de collaboration, de calendrier et bien d'autres. Cette solution remplace des solutions du type Google Drive, iCloud, ou encore OneDrive.
[Nextcloud](https://nextcloud.com/) est une solution auto-hébergée qui permet d'accéder à vos données et de les synchroniser sur tous vos appareils. Elle inclut aussi des fonctions de collaboration, un agenda, et bien plus. C'est une excellente alternative à des services comme Google Drive, iCloud ou OneDrive.
![Picture](/img/serveex/nextcloud.png)
## Installation
::note
::note{to="https://docs.linuxserver.io/images/docker-nextcloud/"}
Nous utiliserons l'image docker maintenue par [LinuxServer.io](https://docs.linuxserver.io/images/docker-nextcloud/)
Nous utiliserons l'image Docker maintenue par **LinuxServer.io**
::
Structure des fichiers
::file-tree
---
tree:
/:
- srv:
- docker:
- nextcloud:
- config/
- data/
- compose.yaml
- .env
---
::
```text [Arborescence]
root
└── docker
└── nextcloud
├── config
├── data
├── compose.yaml
└── .env
```
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `nextcloud` puis copiez collez ceci :
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `nextcloud` et collez ce qui suit :
```yaml [compose.yaml]
---
@@ -45,24 +46,27 @@ services:
- PGID=${GUID}
- TZ=Etc/UTC
volumes:
- /docker/nextcloud/config:/config
- /docker/nextcloud/data:/data
- /srv/docker/nextcloud/config:/config
- /srv/docker/nextcloud/data:/data
ports:
- ${PORT}:443
restart: unless-stopped
```
::note
::note{to="/general/networking/samba"}
Si vous avez un NAS ou un disque réseau partagé via [samba](/fr/general/networking/samba) pour stocker vos données, remplacez `/docker/nextcloud/data` par le chemin d'accès de votre dossier partagé.
Si vous utilisez un NAS ou un disque partagé sur le réseau via **Samba**, remplacez `/srv/docker/nextcloud/data` par le chemin de votre dossier partagé.
::
Trouvez votre `PUID` et votre `GUID` en tapant la commande suivante :
### Renseigner vos variables d'environnement
Trouvez vos `PUID` et `GUID` avec la commande suivante :
```bash [Terminal]
id nomdutilisateur
id utilisateur
```
Et renseignez le `.env` avec le port souhaité, et les infos que vous avez trouvées, par exemple :
Remplissez ensuite le fichier `.env` avec le port de votre choix et les valeurs trouvées ci-dessus, par exemple :
```properties [.env]
PUID=1000
@@ -70,22 +74,28 @@ GUID=1000
PORT=4545
```
Déployez la stack et rendez-vous sur `http://ipduserveur:4545` et suivez les instructions.
Déployez la stack et visitez `http://ipdevotreserveur:4545` pour terminer la configuration.
### 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.
::
## Exposer Nextcloud 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 Nextcloud via Swag.
L'objectif de cette installation est d'accéder à Nextcloud à distance depuis tous vos appareils. Nous allons utiliser Swag pour exposer l'application.
::note
Nous partons du principe que vous avez le sous-domaine `nextcloud.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/fr/general/networking/nat).
Nous partons du principe que vous avez un sous-domaine `nextcloud.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et à 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 via 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 nextcloud :
::steps{level="3"}
### Ajouter le réseau de Nextcloud à SWAG
Dans Dockge, allez sur votre stack SWAG et modifiez le compose pour y ajouter le réseau de Nextcloud :
```yaml [compose.yaml]
---
@@ -93,57 +103,65 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks:
# ...
- nextcloud # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
- nextcloud
networks:
# ...
nextcloud: # Nom du réseau déclaré dans la stack
name: nextcloud_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
nextcloud:
name: nextcloud_default
external: true
```
::note
Ici nous partons du principe que le nom du réseau de nextcloud est `nextcloud_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
Nous partons du principe que le réseau de Nextcloud s'appelle `nextcloud_default`. Vous pouvez confirmer la connectivité 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 et attendez que SWAG soit pleinement opérationnel.
Dans les fichiers de nextcloud, éditez le fichier `config.php`.
### Configurer les proxys de confiance
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
Dans les fichiers de Nextcloud, modifiez le fichier `config.php` :
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/nextcloud/config/www/nextcloud/config/config.php
sudo nano /srv/docker/nextcloud/config/www/nextcloud/config/config.php
```
Copiez les informations suivantes __avant__ `);`.
Collez ce qui suit avant le `);` final :
```php [config.php]
'trusted_proxies' => [gethostbyname('swag')], 'overwrite.cli.url' => 'https://nextcloud.example.com/',
'trusted_proxies' => [gethostbyname('swag')],
'overwrite.cli.url' => 'https://nextcloud.example.com/',
'overwritehost' => 'nextcloud.example.com',
'overwriteprotocol' => 'https',
```
Ajoutez également votre nom de domaine dans la section `array` , cela devrait ressembler à ceci
```php [config.php]
array (
0 => '192.168.0.1:444', # Cette ligne est surement différente chez vous, ne la modifiez pas !
1 => 'nextcloud.mondomaine.fr', # Renseignez votre domaine
),
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Ajoutez également votre domaine dans la section `array`. Cela devrait ressembler à ceci :
Dans les dossiers de Swag, créez le fichier `nextcloud.subdomain.conf`.
```php [config.php]
array (
0 => '192.168.0.1:444', # Cette ligne peut différer, n'y touchez pas !
1 => 'nextcloud.mondomaine.fr', # Ajoutez votre domaine ici
),
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `nextcloud.subdomain.conf` :
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
```
Collez la configuration ci-dessous :
Collez ce qui suit :
```nginx [nextcloud.subdomain.conf]
## Version 2024/04/25
@@ -165,23 +183,60 @@ server {
set $upstream_proto https;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
# Hide proxy response headers from Nextcloud that conflict with ssl.conf
# Uncomment the Optional additional headers in SWAG's ssl.conf to pass Nextcloud's security scan
# Masque les en-têtes de réponse de Nextcloud qui entrent en conflit avec ssl.conf
proxy_hide_header Referrer-Policy;
proxy_hide_header X-Content-Type-Options;
proxy_hide_header X-Frame-Options;
proxy_hide_header X-XSS-Protection;
# Disable proxy buffering
# Désactive la mise en tampon du proxy
proxy_buffering off;
}
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé Nextcloud ! Et n'oubliez pas d'installer [les applications pour ordinateurs et mobiles](https://nextcloud.com/fr/install/).
### Terminé !
::
::tip{icon=""}
__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/nextcloud/).
Et voilà ! Vous avez exposé Nextcloud ! N'oubliez pas d'installer [les applications bureau et mobiles](https://nextcloud.com/install/).
## Protéger Nextcloud avec Pocket ID
Nextcloud peut aussi déléguer la connexion à un fournisseur OIDC plutôt qu'à (ou en plus de) ses propres comptes.
::steps{level="3"}
### Installer l'application OpenID Connect
Dans Nextcloud, allez dans _Apps > Integration_ et installez __OpenID Connect user backend__ (`user_oidc`).
### Enregistrer Nextcloud comme client OIDC
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `Nextcloud`, avec cette URL de callback :
```text
https://nextcloud.mondomaine.fr/apps/user_oidc/code
```
### Ajouter le fournisseur dans Nextcloud
Dans Nextcloud, allez dans _Administration > OpenID Connect_, cliquez sur le bouton `+`, et renseignez :
| Champ | Valeur |
|-------|-------|
| Identifier | `PocketID` |
| Client ID | Le client ID copié depuis Pocket ID |
| Client secret | Le client secret copié depuis Pocket ID |
| Discovery endpoint | L'URL de découverte OIDC de Pocket ID |
| Scope | `openid email profile groups` |
### Terminé !
::
::tip{icon="" to="/serveex/advanced/authentik"}
✨ Vous pouvez utiliser **Authentik** plutôt que Pocket ID :
1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé `Nextcloud`, avec une redirect URI (de type `Strict`) valant `https://nextcloud.mondomaine.fr/apps/user_oidc/code`.
2. Notez les __Client ID__, __Client Secret__ et __Slug__ du provider.
3. Dans les réglages OpenID Connect de Nextcloud, mettez `https://authentik.mondomaine.fr/application/o/<slug>/.well-known/openid-configuration` comme Discovery endpoint, puis renseignez le Client ID et le Client Secret.
::
@@ -0,0 +1,286 @@
---
title: File Browser Quantum
description: Installer File Browser Quantum, un fork modernisé de File Browser, pour parcourir et gérer les fichiers de votre serveur depuis une interface web rapide.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
[File Browser Quantum](https://github.com/gtsteffaniak/filebrowser) est un fork communautaire de [File Browser](/recycled/deprecated/file-browser), réécrit pour de meilleures performances (recherche indexée, moins de mémoire consommée) et configuré via un unique fichier `config.yaml` plutôt qu'uniquement par une base de données.
![file-browser-quantum](/img/serveex/filebrowser-quantum.png)
## Installation
::file-tree
---
tree:
/:
- srv:
- docker:
- filebrowser-quantum:
- compose.yaml
- data:
- config.yaml
- filebrowser.sqlite
---
::
::steps{level="3"}
### Créer le fichier de configuration
Créez le dossier de données :
```bash [Terminal]
sudo mkdir -p /srv/docker/filebrowser-quantum/data
```
Créez le fichier `config.yaml` :
```bash [Terminal]
sudo nano /srv/docker/filebrowser-quantum/data/config.yaml
```
Collez ce qui suit, en ajoutant une entrée `sources` par dossier que vous voulez parcourir :
```yaml [config.yaml]
server:
cacheDir: /home/filebrowser/data/tmp
sources:
- path: /srv/docker
config:
defaultEnabled: true
- path: /media
config:
defaultEnabled: true
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `filebrowser-quantum`, puis copiez-collez ce qui suit :
```yaml [compose.yaml]
---
services:
filebrowser-quantum:
container_name: filebrowser-quantum
image: gtstef/filebrowser:beta
restart: unless-stopped
volumes:
- /srv/docker:/srv/docker
- /media:/media
- /srv/docker/filebrowser-quantum/data:/home/filebrowser/data
ports:
- 8020:80
```
::note
Montez chaque dossier listé sous `sources` dans `config.yaml` au même chemin à l'intérieur du conteneur (ici `/srv/docker` et `/media`), sans quoi File Browser Quantum ne les trouvera pas.
::
::tip{icon=""}
✨ __Astuce :__ ajoutez le label watchtower pour automatiser les mises à jour.
```yaml [compose.yaml]
services:
filebrowser-quantum:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Déployez le conteneur et allez sur `http://ipdevotreserveur:8020`. Connectez-vous avec les identifiants par défaut `admin` / `admin`, puis changez immédiatement le mot de passe dans les réglages de votre profil.
### Terminé !
::
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
## Exposer File Browser Quantum avec Swag
::warning
File Browser Quantum ne gère pas l'authentification multifacteur. L'exposer publiquement pourrait mettre vos systèmes en danger. Ne le faites 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).
::
Vous voudrez peut-être accéder à File Browser Quantum à distance depuis tous vos appareils. Pour cela, nous allons l'exposer à travers Swag.
::note{icon=""}
📋 __Au préalable :__ nous partons du principe que vous avez déjà créé un sous-domaine du type `fbq.mondomaine.fr` dans votre [zone DNS](/general/networking/dns), pointant vers `mondomaine.fr` avec un `CNAME`. À moins d'utiliser Cloudflare Zero Trust, nous partons aussi du principe que vous avez déjà redirigé le port `443` de votre box vers le port `443` de votre serveur avec les [règles NAT](/general/networking/nat).
::
::steps{level="3"}
### Ajouter le réseau de File Browser Quantum à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de File Browser Quantum :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- filebrowser-quantum # Nom du réseau déclaré dans la stack
networks: # Définit le réseau personnalisé
# ...
filebrowser-quantum: # Nom du réseau déclaré dans la stack
name: filebrowser-quantum_default # Nom réel du réseau externe
external: true # Précise qu'il s'agit d'un réseau externe
```
::note
Nous partons ici du principe que le nom du réseau de File Browser Quantum est `filebrowser-quantum_default`. Vous pouvez confirmer que la connexion fonctionne en accédant au tableau de bord de SWAG sur http://ipdevotreserveur:81.
::
Redémarrez la stack en cliquant sur « deploy » et attendez que SWAG soit complètement initialisé.
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `fbq.subdomain.conf`.
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/fbq.subdomain.conf
```
Et collez la configuration suivante :
```nginx [fbq.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fbq.*;
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 / {
# 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 filebrowser-quantum;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Et voilà ! File Browser Quantum est maintenant exposé.
## Protéger File Browser Quantum avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `fbq.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [fbq.subdomain.conf]{22-34,37-38}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fbq.*;
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 filebrowser-quantum;
set $upstream_port 80;
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 application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `fbq.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).
::
@@ -1,159 +0,0 @@
---
title: File Browser
description: Installer File Browser pour parcourir et gérer les fichiers de votre serveur depuis une interface web, exposée de manière sécurisée avec SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# File Browser
::note
🎯 __Objectifs :__
- Installer File Browser
- Exposer File Browser avec Swag
::
[File Browser](https://github.com/filebrowser/filebrowser) est une interface permettant d'accéder aux fichiers de votre serveur et de les éditer.
![File Browser](/img/serveex/filebrowser.png)
## Installation
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `filebrowser` puis copiez collez ceci :
```yaml [compose.yaml]
---
services:
filebrowser:
container_name: filebrowser
volumes:
- /docker/filebrowser/config:/config/
- /chemin/vers/vos/dossiers:/vosdossiers #ajoutez ici les dossiers que vous voulez voir apparaitre dans filebrowser
ports:
- 8010:80
image: filebrowser/filebrowser:s6
```
::tip{icon=""}
✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
filebrowser:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Déployez le conteneur et rendez-vous sur `http://ipduserveur:8010`. Et voilà, votre instance File Browser en webui est disponible !
::caution
__En cas d'échec :__ vérifiez les règles de votre pare-feu.
::
## Exposer File Browser avec Swag
::warning
File Browser n'utilise pas d'authentification multifacteur. Exposer File Browser sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faite que si vous utilisez un systeme d'authentification multifacteur comme [Authentik](/fr/serveex/security/authentik). Sinon, n'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/fr/serveex/security/wireguard).
::
Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer IT Tools via Swag.
::note
__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `files.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
::
Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de filebrowser :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- filebrowser # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
filebrowser: # Nom du réseau déclaré dans la stack
name: filebrowser_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
```
::note
Ici nous partons du principe que le nom du réseau de filebrowser est `filebrowser_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
::
Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.
Dans les dossiers de Swag, créez le fichier `files.subdomain.conf`.
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/files.subdomain.conf
```
Collez la configuration ci-dessous :
```nginx [files.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name files.*;
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 / {
# 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 filebrowser;
set $upstream_port 80;
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"}.
Et voilà, vous avez exposé File Browser !
::tip{icon=""}
✨ __Astuce :__ vous pouvez protéger cette app avec Authentik en ouvrant `files.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
::
+104 -55
View File
@@ -1,24 +1,21 @@
---
title: Pingvin
description: Installer Pingvin Share, une plateforme d'envoi de fichiers auto-hébergée pour partager des fichiers de façon sécurisée sans WeTransfer ni Google Drive.
description: Installer Pingvin Share, une plateforme de partage de fichiers auto-hébergée pour envoyer des fichiers en toute sécuri sans passer par WeTransfer ou Google Drive.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Pingvin
::note
🎯 __Objectifs :__
[Pingvin](https://github.com/stonith404/pingvin-share) est un outil pour partager rapidement des fichiers, à la manière de WeTransfer. Ses nombreuses options de partage (mot de passe, durée d'expiration, lien personnalisé, etc.) en font l'outil idéal pour partager des fichiers rapidement. Pingvin peut aussi créer des _demandes d'envoi_, c'est-à-dire un lien partageable à envoyer à quelqu'un pour qu'il dépose ses fichiers et que vous les récupériez.
- Installer Pingvin
- Exposer Pingvin
::
[Pingvin](https://github.com/stonith404/pingvin-share) est un outil permettant de partager rapidement des fichiers, à la manière de WeTransfer. Ses nombreuses options de partage (mot de passe, durée d'expiration, personnalisation du lien...) en font l'outil idéal pour partager rapidement des fichiers. Pingvin permet également de créer des _demandes de dépot_, c'est à dire un lien partageable à envoyer à quelqu'un de votre choix pour qu'il puisse téléverser ses fichiers afin que vous puissiez les récupérer.
![File Browser](/img/serveex/pingvin.png)
![picture](/img/serveex/pingvin.png)
## Installation
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `pingvin` puis copiez collez ceci :
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `pingvin`, puis copiez-collez ceci :
```yaml [compose.yaml]
---
@@ -30,9 +27,9 @@ services:
ports:
- 3600:3000
volumes:
- /docker/pingvin/data:/opt/app/backend/data
- /docker/pingvin/data/img:/opt/app/frontend/public/img
- /docker/pingvin/uploads:/opt/app/backend/uploads # chemin du dossier dans lequel vous souhaitez stocker les fichiers uploadés dans pingvin. A changer selon vos préférences.
- /srv/docker/pingvin/data:/opt/app/backend/data
- /srv/docker/pingvin/data/img:/opt/app/frontend/public/img
- /srv/docker/pingvin/uploads:/opt/app/backend/uploads # chemin du dossier où stocker les fichiers envoyés à pingvin. À adapter à votre convenance.
depends_on:
clamav:
condition: service_healthy
@@ -45,11 +42,11 @@ services:
```
::note
Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
À partir d'ici, nous partons du principe que le nom du réseau de Swag est `swag_default`.
::
::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:
@@ -58,7 +55,7 @@ Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
labels:
- com.centurylinklabs.watchtower.enable=true
clamav:
#...
labels:
@@ -67,23 +64,28 @@ Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
```
::
Déployez le conteneur et rendez-vous sur `http://ipduserveur:3600`. Et voilà, votre instance File Browser en webui est disponible !
Déployez le conteneur et allez sur `http://ipdevotreserveur:3600`. Et voilà ! Votre instance web Pingvin est en route !
### 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.
::
## Exposer Immich 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 Pingvin via Swag.
## Exposer Pingvin avec Swag
Tout l'intérêt d'une solution comme celle-ci est de pouvoir y accéder à distance, depuis tous vos appareils. Pour cela, nous allons exposer Pingvin à travers Swag.
::note
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez le sous-domaine `pingvin.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/fr/general/networking/nat).
::note{icon=""}
📋 __Au préalable :__ <br/><br/>
Nous partons du principe que vous avez le sous-domaine `pingvin.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), que le port `443` de votre box est redirigé vers le port `443` de votre serveur via 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 pingvin :
::steps{level="3"}
### Ajouter le réseau de Pingvin à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de pingvin :
```yaml [compose.yaml]
---
@@ -91,33 +93,35 @@ services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
networks: # Rattache le conteneur au réseau personnalisé
# ...
- pingvin # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
networks: # Définit le réseau personnalisé
# ...
pingvin: # Nom du réseau déclaré dans la stack
name: pingvin_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
name: pingvin_default # Nom réel du réseau externe
external: true # Précise qu'il s'agit d'un réseau à chercher à l'extérieur
```
::note
Ici nous partons du principe que le nom du réseau de pingvin est `pingvin_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
À partir d'ici, nous partons du principe que le nom du réseau de pingvin est `pingvin_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 complètement démarré.
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `pingvin.subdomain.conf`.
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichiers et éditer vos documents plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf
```
Collez la configuration ci-dessous :
@@ -173,34 +177,79 @@ server {
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Et voilà, vous avez exposé Pingvin !
## Sécuriser Pingvin avec Authentik
## Protéger Pingvin avec Pocket ID
Pingvin gère OIDC nativement, vous pouvez donc exiger une connexion Pocket ID avant de laisser qui que ce soit partager ou recevoir des fichiers, plutôt qu'avec (ou en plus de) les comptes propres à l'application.
Vous pouvez protéger cette app avec Authentik de façon native en suivant les instructions ci-dessous.
::steps{level="3"}
### Enregistrer Pingvin comme client OIDC
1. Dans votre espace admin authentik, créez un fournisseur OAuth2/OpenID.
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `pingvin`, avec cette URL de callback :
2. Remplissez chaque section comme suit en remplaçant `mondomaine.fr` par votre domaine. Copiez quelque part le contenu des champs `ID du client` et `Secret du client`.
```text
https://pingvin.mondomaine.fr/api/oauth/callback/oidc
```
![Picture](/img/serveex/pingvin-auth1.png)
![Picture](/img/serveex/pingvin-auth2.png)
![Picture](/img/serveex/pingvin-auth3.png)
### Activer le Social Login dans Pingvin
3. Enregistrez et créez une application `pingvin` comme suit.
Dans Pingvin, allez dans _Administration > Configuration > Social Login_ et renseignez :
![Picture](/img/serveex/pingvin-auth4.png)
| Champ | Valeur |
|-------|-------|
| OpenID Connect | Activé |
| Discovery URI | L'URL de découverte OIDC de Pocket ID |
| Scope | `openid email profile groups` |
4. Enregistrez et aller dans la liste de vos avant-postes. Ajoutez le fournisseur pingvin` à votre avant-poste.
### Terminé !
::
5. Quittez authentik, et allez dans l'interface d'administration de Pingvin.
Et voilà ! Désormais, quand vous vous connectez à Pingvin, un bouton « Open ID » est disponible sous le formulaire de connexion.
6. Dans la section _« Identifiant social »_ renseignez les champs suivant :
- `URI de découverte OpenID` avec `https://pingvin.mondomaine.fr/application/o/pingvin/.well-known/openid-configuration` (n'oubliez pas de remplacer `mondomaine.fr` par votre domaine)
- `Revendication du nom dutilisateur OpenID` avec `preferred_username`
- `ID du client OpenID` avec l'ID que vous avez copié en étape 2.
- `Secret du client OpenID` avec le token que vous avez copié en étape 2.
::::tip{icon=""}
✨ Vous pouvez utiliser [Authentik](/serveex/advanced/authentik) plutôt que Pocket ID :
Et voilà, désormais lorsque vous vous connectez à Pingvin, un bouton "Open ID" sera disponible en dessous de la mire de connexion.
:::collapsible{name="les étapes de configuration Authentik"}
::steps{level="4"}
#### Créer un provider OAuth2/OpenID
Dans l'espace d'administration d'Authentik, créez un provider OAuth2/OpenID.
#### Configurer le provider
Remplissez chaque section comme suit, en remplaçant `mondomaine.fr` par votre propre domaine. Copiez les champs `Client ID` et `Client Secret` en lieu sûr.
![picture](/img/serveex/pingvin-auth1.png)
![picture](/img/serveex/pingvin-auth2.png)
![picture](/img/serveex/pingvin-auth3.png)
#### Créer l'application
Enregistrez et créez une application `pingvin` comme suit.
![picture](/img/serveex/pingvin-auth4.png)
#### Ajouter le provider à votre outpost
Enregistrez et allez sur votre liste d'outposts. Ajoutez le provider pingvin à votre outpost.
#### Configurer les réglages OAuth de Pingvin
Quittez Authentik et allez dans l'interface d'administration de Pingvin. Dans la section _« OAuth »_, renseignez les champs suivants :
- `OpenID discovery URI` avec `https://pingvin.mondomaine.fr/application/o/pingvin/.well-known/openid-configuration` (n'oubliez pas de remplacer `mondomaine.fr` par votre propre domaine)
- `OpenID username claim` avec `preferred_username`
- `OpenID client ID` avec l'ID copié à l'étape 2.
- `OpenID client secret` avec le token copié à l'étape 2.
#### Terminé !
::
:::
::::
@@ -1,18 +1,10 @@
---
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, montez des dossiers et exposez-le de manière sécurisée avec SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Code-Server
::note
🎯 __Objectifs :__
- Installer code-server
- Monter des dossiers dans vscode
- Exposer code-server avec Swag
::
[code-server](https://github.com/linuxserver/docker-code-server) est un conteneur permettant d'accéder à [vscode](https://code.visualstudio.com/) en web-ui dans un environnement linux. C'est littéralement vscode et vos projets directement dans votre poche, disponibles partout.
@@ -48,7 +40,7 @@ services:
- TZ=Etc/UTC
- HASHED_PASSWORD=${PW}
volumes:
- /docker/code-server/config:/config
- /srv/docker/code-server/config:/config
# ajoutez vos dossier à monter dans vscode
# - /chemin/vers/dossier:/dossier
ports:
@@ -119,7 +111,7 @@ Tout l'intérêt d'une telle solution, c'est de pouvoir y accéder à distance e
::note
__Au préalable :__ Nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `code.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
__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).
::
Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de code-server :
@@ -133,7 +125,7 @@ services:
networks: # Relie le conteneur au réseau custom
# ...
- 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éclaré dans la stack
@@ -150,12 +142,12 @@ Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soi
Dans les dossiers de Swag, créez le fichier `code.subdomain.conf`.
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::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.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/code.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/code.subdomain.conf
```
Collez la configuration ci-dessous :
@@ -215,5 +207,5 @@ Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez a
Et voilà, vous avez exposé code-server !
::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](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ __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).
::
@@ -0,0 +1,250 @@
---
title: Forgejo
description: Installer Forgejo, un service Git auto-hébergé et léger pour gérer vos dépôts de code en privé sur votre propre serveur.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
[Forgejo](https://forgejo.org/) est une plateforme DevOps auto-hébergée qui permet de gérer des dépôts à la manière de GitHub, mais sur votre propre infrastructure. C'est un fork communautaire de Gitea.
![forgejo](/img/serveex/forgejo.png)
## Installation
::file-tree
---
tree:
/:
- srv:
- docker:
- forgejo:
- compose.yaml
- .env
- data/
---
::
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `forgejo`, et collez le contenu suivant :
```yaml [compose.yaml]
---
networks:
forgejo:
external: false
services:
server:
image: codeberg.org/forgejo/forgejo:11
container_name: forgejo
environment:
- USER_UID=${UID}
- USER_GID=${GID}
- TZ=Europe/Paris
restart: unless-stopped
networks:
- forgejo
volumes:
- ./data:/data
ports:
- 3333:3000
- 222:22
```
### Renseigner vos variables d'environnement
Remplissez le fichier `.env` avec les informations nécessaires, par exemple :
```properties [.env]
UID=1000
GID=1000
```
Déployez le conteneur et allez sur `http://ipdevotreserveur:3333`. Votre instance Forgejo est en route !
### Terminé !
::
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
## Exposer Forgejo avec Swag
L'intérêt de cette installation est de pouvoir y accéder à distance depuis n'importe lequel de vos appareils. Pour cela, nous allons exposer Forgejo à travers Swag.
::note
__Au préalable :__ nous partons du principe que vous avez créé un sous-domaine du type `forgejo.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr`, et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), vous avez déjà redirigé le port `443` de votre box vers le port `443` de votre serveur dans les [règles NAT](/general/networking/nat).
::
::steps{level="3"}
### Ajouter le réseau de Forgejo à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose en y ajoutant le réseau de Forgejo :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- forgejo # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
forgejo: # Nom du réseau déclaré
name: forgejo_default # Nom réel du réseau externe
external: true # Indique qu'il s'agit d'un réseau externe
```
::note
Nous partons du principe que le nom du réseau de Forgejo est `forgejo_default`. Vous pouvez vérifier la connectivité en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81.
::
Redéployez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel.
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `forgejo.subdomain.conf`.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __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/forgejo.subdomain.conf
```
Collez la configuration ci-dessous :
```nginx [forgejo.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name forgejo.*;
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 / {
# 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 forgejo;
set $upstream_port 3000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/forgejo)?/info/lfs {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app forgejo;
set $upstream_port 3000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Configurer le domaine de Forgejo
Ouvrez maintenant le fichier `app.ini` depuis le système de fichiers du conteneur :
```bash [Terminal]
sudo nano /srv/docker/forgejo/data/gitea/conf/app.ini
```
Puis modifiez la section server avec les informations de votre domaine :
```properties [app.ini]
[server]
DOMAIN = forgejo.mondomaine.fr
SSH_DOMAIN = forgejo.mondomaine.fr
ROOT_URL = https://forgejo.mondomaine.fr/
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter, puis redémarrez le conteneur.
### Terminé !
::
Et voilà ! Forgejo est maintenant exposé sur le web.
## Protéger Forgejo avec Pocket ID
Forgejo peut aussi déléguer la connexion à un fournisseur OIDC plutôt qu'à (ou en plus de) ses propres comptes.
::steps{level="3"}
### Enregistrer Forgejo comme client OIDC
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `Forgejo`, avec cette URL de callback :
```text
https://forgejo.mondomaine.fr/user/oauth2/PocketID/callback
```
::note
Le `PocketID` de l'URL de callback doit correspondre exactement au champ __Authentication Name__ que vous renseignerez à l'étape suivante.
::
### Ajouter la source d'authentification dans Forgejo
En tant qu'administrateur, allez dans _Site Administration > Identity & Access > Authentication Sources_, cliquez sur _Add Authentication Source_, et renseignez :
| Champ | Valeur |
|-------|-------|
| Authentication Type | `OAuth2` |
| Authentication Name | `PocketID` |
| OAuth2 Provider | `OpenID Connect` |
| Client ID (Key) | Le client ID copié depuis Pocket ID |
| Client Secret | Le client secret copié depuis Pocket ID |
| OIDC Discovery URL | L'URL de découverte OIDC de Pocket ID |
| Additional Scopes | `openid email profile` |
Activez également __Skip local 2FA__.
### Terminé !
::
::tip{icon="" to="/serveex/advanced/authentik"}
✨ Vous pouvez utiliser **Authentik** plutôt que Pocket ID :
1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé `Forgejo`, avec une redirect URI (de type `Strict`) valant `https://forgejo.mondomaine.fr/user/oauth2/authentik/callback`.
2. Notez les __Client ID__, __Client Secret__ et __Slug__ du provider.
3. Dans la source d'authentification de Forgejo, mettez `authentik` dans __Authentication Name__, `https://authentik.mondomaine.fr/application/o/<slug>/.well-known/openid-configuration` dans __OIDC Discovery URL__, puis renseignez le Client ID, le Client Secret et les Additional Scopes `email profile`.
::
@@ -1,194 +0,0 @@
---
title: Gitea
description: Installer Gitea, un service Git auto-hébergé léger pour gérer vos dépôts de code de façon privée sur votre propre serveur.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Gitea
::note
🎯 __Objectifs :__
- Installer Gitea
- Exposer Gitea avec Swag
::
[Gitea](https://https://about.gitea.com/) est une plateforme DevOps, permettant de gérer des dépots, à la manière de GitHub mais chez vous en selfhost.
![gitea](https://about.gitea.com/img/home-screenshot.png)
## Installation
Structure des dossiers
```text [Arborescence]
root
└── docker
└── gitea
└── data
```
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `gitea` puis copiez collez ceci :
```yaml [compose.yaml]
---
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.22.0
container_name: gitea
environment:
- USER_UID=${UID}
- USER_GID=${GID}
- TZ=Europe/Paris
restart: unless-stopped
networks:
- gitea
volumes:
- ./data:/data
ports:
- 3333:3000
- 222:22
```
Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple :
```properties [.env]
UID=1000
GID=1000
```
Déployez le conteneur et rendez-vous sur `http://ipduserveur:3333`. Et voilà, votre instance Gitea est disponible !
::caution
__En cas d'échec :__ vérifiez les règles de votre pare-feu.
::
## Exposer Gitea 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 Gitea via Swag.
::note
__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `gitea.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
::
Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de gitea :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- gitea # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
gitea: # Nom du réseau déclaré dans la stack
name: gitea_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
```
::note
Ici nous partons du principe que le nom du réseau de gitea est `gitea_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
::
Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.
Dans les dossiers de Swag, créez le fichier `gitea.subdomain.conf`.
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/gitea.subdomain.conf
```
Collez la configuration ci-dessous :
```nginx [gitea.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name gitea.*;
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 / {
# 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 gitea;
set $upstream_port 3000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/gitea)?/info/lfs {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app gitea;
set $upstream_port 3000;
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"}.
Ouvrez le fichier `app.ini` dans les fichiers du conteneur
```bash [Terminal]
sudo nano /docker/gitea/data/gitea/conf/app.ini
```
Et modifiez la section serveur avec les infos de votre domaine
```properties [app.ini]
[server]
DOMAIN = gitea.mondomaine.fr
SSH_DOMAIN = gitea.mondomaine.fr
ROOT_URL = https://gitea.mondomaine.fr/
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Relancez le conteneur.
Et voilà, vous avez exposé Gitea !
::tip{icon=""}
__Astuce :__ Vous pouvez protéger cette app avec Authentik de façon native en [suivant ces instructions](https://docs.goauthentik.io/integrations/services/gitea/).
::
+119 -35
View File
@@ -1,25 +1,21 @@
---
title: IT-Tools
description: Installer IT Tools, une collection auto-hébergée d'utilitaires pratiques pour développeurs convertisseurs, encodeurs, formateurs et plus encore.
title: IT Tools
description: Installer IT Tools, une collection auto-hébergée d'utilitaires pratiques pour développeurs, convertisseurs, encodeurs, formateurs et plus encore.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# IT Tools
::note
🎯 __Objectifs :__
- Installer IT-Tools
- Exposer IT Tools avec Swag
::
[IT Tools](https://github.com/CorentinTh/it-tools) est un conteneur exposant une page web permettant d'accéder à un grand nombre d'outil de développement.
[IT Tools](https://github.com/CorentinTh/it-tools) est un conteneur qui expose une page web donnant accès à une large panoplie d'outils de développement.
![IT Tools](/img/serveex/it-tools.png)
## Installation
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `it-tools` puis copiez collez ceci :
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `it-tools`, et collez ce qui suit :
```yaml [compose.yaml]
---
@@ -33,7 +29,7 @@ services:
```
::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 activer les mises à jour automatiques.
```yaml [compose.yaml]
services:
@@ -45,61 +41,70 @@ services:
```
::
Déployez le conteneur et rendez-vous sur `http://ipduserveur:3222`. Et voilà, votre instance IT Tools en webui est disponible !
Déployez le conteneur et visitez `http://ipdevotreserveur:3222`. Voilà, votre instance web IT Tools est en route !
### 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.
::
## Exposer IT Tools avec Swag
Vous aurez peut-etre envie d'y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer IT Tools via Swag.
Vous voudrez peut-être y accéder à distance sur tous vos appareils. Pour cela, nous allons exposer IT Tools avec Swag.
::note
__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `tools.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
__Au préalable :__ nous partons du principe que vous avez créé un sous-domaine du type `tools.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` réglé sur `mondomaine.fr`. Par ailleurs, à moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), assurez-vous d'avoir déjà redirigé le port `443` de votre box vers le port `443` de votre serveur dans 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 it-tools :
::steps{level="3"}
### Ajouter le réseau d'IT Tools à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau d'IT Tools :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- it-tools # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
- it-tools # Nom du réseau tel que défini dans la stack IT Tools
networks: # Définit le réseau personnalisé
# ...
it-tools: # Nom du réseau déclaré dans la stack
name: it-tools_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
it-tools: # Nom du réseau tel que défini dans la stack IT Tools
name: it-tools_default # 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 it-tools est `it-tools_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
Nous partons du principe que le réseau d'IT Tools s'appelle `it-tools_default`. Vous pouvez vérifier la connectivité en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81.
::
::note
Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
Nous partons aussi du principe que le réseau de SWAG s'appelle `swag_default`.
::
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
Dans les dossiers de Swag, créez le fichier `tools.subdomain.conf`.
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __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 /docker/swag/config/nginx/proxy-confs/tools.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tools.subdomain.conf
```
Collez la configuration ci-dessous :
```nginx [tools.subdomain.conf]
@@ -153,10 +158,89 @@ server {
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé it-tools !
### Terminé !
::
Et voilà ! IT Tools est maintenant exposé !
## Protéger IT Tools avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `tools.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [tools.subdomain.conf]{26-38,41-42}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tools.*;
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 it-tools;
set $upstream_port 80;
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 `tools.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
✨ __Astuce :__ vous pouvez sécuriser cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `tools.subdomain.conf` et en décommentant les lignes `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](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::
+13 -22
View File
@@ -3,17 +3,8 @@ title: Adguard Home
description: Installer AdGuard Home pour bloquer publicités et trackers à l'échelle du réseau avec DNS-over-HTTPS, gestion des clients et règles de filtrage personnalisées.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Adguard Home
::note
🎯 __Objectifs :__
- Installer et déployer Adguard
- Exposer Adguard
- Sécuriser les requêtes avec SSL/TLS
- Configurer les appareils clients
::
[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) est un serveur DNS anti-pub et anti-traçage qui fonctionne au niveau du système. Une fois configuré, il couvrira TOUS vos appareils domestiques et vous n'aurezbesoin d'aucun logiciel côté client pour cela.
@@ -50,7 +41,7 @@ root
::note
Nous monterons aussi le dossier `/docker/swag/config/etc/letsencrypt` afin d'avoir accès au certificat SSL de Swag.
Nous monterons aussi le dossier `/srv/docker/swag/config/etc/letsencrypt` afin d'avoir accès au certificat SSL de Swag.
::
Ouvrez Dockge, et cliquez sur `compose`
@@ -60,7 +51,7 @@ Nommez la stack `adguardhome` et copiez la configuration ci-dessous
```yaml [compose.yaml]
---
services:
adguardhome:
container_name: adguard
image: adguard/adguardhome
@@ -72,9 +63,9 @@ services:
- 853:853/tcp
- 3000:3000/tcp
volumes:
- /docker/adguardhome/confdir:/opt/adguardhome/conf
- /docker/adguardhome/workdir:/opt/adguardhome/work
- /docker/swag/config/etc/letsencrypt:/swag-ssl:ro
- /srv/docker/adguardhome/confdir:/opt/adguardhome/conf
- /srv/docker/adguardhome/workdir:/opt/adguardhome/work
- /srv/docker/swag/config/etc/letsencrypt:/swag-ssl:ro
```
@@ -102,7 +93,7 @@ Pour être utilisable hors de chez vous, vous devez exposer Adguard
::note
__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/fr/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](/fr/general/networking/nat). Redirigez également le port `53` et le port `853` vers votre serveur. Ces ports serviront à router les requêtes DNS.
__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.
::
::warning
@@ -121,7 +112,7 @@ services:
networks: # Relie le conteneur au réseau custom
# ...
- adguard # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
adguard: # Nom du réseau déclaré dans la stack
@@ -135,16 +126,16 @@ Ici nous partons du principe que le nom du réseau d'adguard est `adguard_defaul
::
Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.
Créez et ouvrez le fichier `adguard.subdomain.conf`
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf
```
Copiez la configuration ci-dessous :
@@ -228,7 +219,7 @@ server {
::tip{icon=""}
✨ __Astuce :__
<br/><br/>
Vous pouvez protéger cette app avec Authentik en ouvrant `adguard.subdomain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. n'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy). Il vous faudra exclure l'url `https://adguard.mondomaine.fr/dns-query` de l'authentification :
Vous pouvez protéger cette app avec Authentik en ouvrant `adguard.subdomain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. n'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy). Il vous faudra exclure l'url `https://adguard.mondomaine.fr/dns-query` de l'authentification :
- Editez le fournisseur d'Adguard
- Dans *paramètres avancés du protocole > chemins authentifiés*, saisissez `^/dns-query`
+167 -75
View File
@@ -1,34 +1,36 @@
---
title: Vaultwarden
description: Installer Vaultwarden, un gestionnaire de mots de passe auto-hébergé compatible Bitwarden pour remplacer les gestionnaires Google ou Apple sur tous vos appareils.
description: Installer Vaultwarden, un gestionnaire de mots de passe auto-hébergé compatible Bitwarden, pour remplacer ceux de Google ou d'Apple sur tous vos appareils.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Vaultwarden
::note
🎯 __Objectifs :__ Installer [Vaultwarden](https://github.com/dani-garcia/vaultwarden) pour gérer vos mot de passe sur tout vos appareils (remplace la gestion de mot de passe Google ou Apple).
::
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
![Vaultwarden](/img/serveex/vaultwarden.png)
[Vaultwarden](https://github.com/dani-garcia/vaultwarden) est une solution de gestion de vos mot de passe (génération, saisie semi-automatique...) que vous pouvez installer directement sur votre serveur. Cette solution remplace les gestionnaires comme Google, Apple ou Keepass. Cette solution permet de synchroniser tout vos mots de passe sur vos différentes machines, avec un chiffrement de bout en bout.
[Vaultwarden](https://github.com/dani-garcia/vaultwarden) est une solution de gestion de mots de passe (génération, remplissage automatique...) que vous pouvez héberger directement sur votre serveur. Elle remplace les gestionnaires du type Google, Apple ou Keepass. Vaultwarden synchronise vos mots de passe sur tous vos appareils avec un chiffrement de bout en bout.
Vaultwarden est un fork de la solution [Bitwarden](https://bitwarden.com/fr-fr/help/).
Vaultwarden est un fork de [Bitwarden](https://bitwarden.com/fr-fr/help/).
## Installation
Structure des dossiers
```text [Arborescence]
root
└── docker
└── vaultwarden
├── data
├── compose.yaml
└── .env
```
::file-tree
---
tree:
/:
- srv:
- docker:
- vaultwarden:
- data/
- compose.yaml
- .env
---
::
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `vaultwarden` puis copiez collez ceci :
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `vaultwarden`, et collez ce qui suit :
```yaml [compose.yaml]
---
@@ -57,94 +59,104 @@ services:
- SIGNUPS_VERIFY=true
- SIGNUPS_VERIFY_RESEND_TIME=3600
- SIGNUPS_VERIFY_RESEND_LIMIT=5
```
::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:
vaultwarden:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
```yaml [compose.yaml]
---
services:
vaultwarden:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Nous allons maintenant générer un hash de mot de passe, qu'il faudra renseigner dans la variable `TOKEN` du `.env`
### Renseigner vos variables d'environnement
Générez ensuite un hash de mot de passe à mettre dans la variable `TOKEN` du `.env` :
```bash [Terminal]
echo -n 'votremotdepasse' | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
```
Copiez le résultat précieusement et gardez en tête le mot de passe que vous avez choisi.
Copiez le résultat en lieu sûr.
Dans le `.env`, renseignez les variables suivantes :
Dans le fichier `.env`, renseignez les variables suivantes :
```properties [.env]
URL=
TOKEN=
```
| Variable | Valeur | Exemple |
|-------------------------|---------------------------------------------------------|----------------------------|
| `URL`{lang=properties} | L'url de votre serveur vaultwarden | `https://vault.domaine.fr` |
| `TOKEN`{lang=properties} | Le token que vous avez précédemment copié précieusement | `'$argon2id$v=19$m=65540,t=3,p=4$bXBGME` |
| Variable | Valeur | Exemple |
|----------|-------|---------|
| `URL` | L'URL de votre serveur Vaultwarden | `https://vault.mondomaine.fr` |
| `TOKEN` | Le token copié précédemment | `'$argon2id$v=19$m=65540,t=3,p=4$bXBGME...` |
Puis déployez le conteneur.
Déployez ensuite le conteneur.
Depuis quelques temps, Vaultwarden ne permet pas d'etre accéder sans certificat SSL, ce qui empeche d'y accéder via son IP local. Nous y accèderons donc après l'avoir exposé avec SWAG, qui ajoute lui même un certificat SSL.
Depuis peu, Vaultwarden exige du SSL pour être accessible, ce qui empêche l'accès via une IP locale. Nous allons l'exposer avec SWAG, qui fournit un certificat SSL.
### 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.
::
## Exposer Vaultwarden 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 Vaultwarden via [SWAG](/fr/serveex/core/swag).
Le principal intérêt de Vaultwarden est de pouvoir y accéder à distance depuis n'importe quel appareil. Nous allons l'exposer à travers [SWAG](/serveex/core/swag).
::note
__Au préalable :__ nous partons du principe que vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `vault.mondomaine.fr` avec pour `CNAME` `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
::note{icon="" to="/general/networking/nat"}
📋 __Au préalable :__ assurez-vous d'avoir créé un sous-domaine DNS du type `vault.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` et (à moins d'utiliser Cloudflare Zero Trust) d'avoir redirigé le port `443` de votre box vers le `443` de votre serveur via les **règles NAT**.
::
Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de vaultwarden :
::steps{level="3"}
### Ajouter le réseau de Vaultwarden à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de Vaultwarden :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Relie le conteneur au réseau custom
# ...
- vaultwarden # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- vaultwarden # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
vaultwarden: # Nom du réseau déclaré dans la stack
name: vaultwarden_default # Nom véritable du réseau externe
external: true # Précise que c'est un réseau à rechercher en externe
vaultwarden: # Nom du réseau déclaré
name: vaultwarden_default # Nom réel du réseau externe
external: true
```
::note
Ici nous partons du principe que le nom du réseau de vaultwarden est `vaultwarden_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
Nous partons du principe que le nom du réseau est `vaultwarden_default`. Vous pouvez vérifier la connectivité 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.
Dans les dossiers de Swag, créez le fichier `vault.subdomain.conf`.
### Créer le fichier subdomain.conf
::tip{icon=""}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
Dans le dossier de configuration de SWAG, créez le fichier `vault.subdomain.conf` :
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ utilisez **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
```
Collez la configuration ci-dessous :
Et collez la configuration suivante :
```nginx [vault.subdomain.conf]
server {
@@ -171,13 +183,13 @@ server {
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
# enable for ldap auth
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
# enable for Authelia
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
# enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
@@ -186,7 +198,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ ^(/vaultwarden)?/admin {
@@ -194,13 +205,13 @@ server {
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
# enable for ldap auth
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
# enable for Authelia
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
# enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
@@ -209,7 +220,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/vaultwarden)?/api {
@@ -219,7 +229,6 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/vaultwarden)?/notifications/hub {
@@ -229,17 +238,100 @@ server {
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Ente"}, puis quittez avec :kbd{value="Ctrl+X"}.
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Et voilà, vous avez exposé Vaultwarden ! Accédez au panneau d'administration via `https://vault.mondomaine.fr/admin` et collez le mot de passe que vous avez choisi pour générer l'`ADMIN_TOKEN`. Plus d'info sur les fonctionnalités de [Bitwarden](https://bitwarden.com/help/).
N'oubliez pas d'installer les extensions Bitwarden (elles sont compatibles avec Vaultwarden) pour [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) ou pour [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/) ainsi que les applications [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) et [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) afin de synchroniser vos mot de passe.
::tip{icon=""}
✨ __Astuce :__ vous pouvez protéger cette app avec Authentik en ouvrant `tools.subodmain.conf` et en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy).
### Terminé !
::
Et voilà ! Vaultwarden est maintenant exposé ! Rendez-vous sur `https://vault.mondomaine.fr/admin` pour accéder au panneau d'administration et collez le mot de passe que vous avez indiqué lors de la génération de l'`ADMIN_TOKEN`. Pour plus d'informations, voir la [documentation Bitwarden](https://bitwarden.com/help/).
N'oubliez pas d'installer les extensions navigateur Bitwarden (elles fonctionnent avec Vaultwarden) pour [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) et [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/), ainsi que les applications [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) et [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) pour synchroniser vos mots de passe.
## Protéger Vaultwarden avec Pocket ID
Contrairement à la plupart des applications de ce site, Vaultwarden gère OIDC nativement, il n'y a donc pas besoin ici du proxy forward-auth de TinyAuth ni de l'astuce reverse-proxy d'Authentik : Vaultwarden lui-même peut exiger une connexion OIDC avant de laisser qui que ce soit entrer dans le coffre.
::steps{level="3"}
### Enregistrer Vaultwarden comme client OIDC
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) (ou dans Authentik, ou tout autre fournisseur OIDC) avec cette URL de callback :
```text
https://vault.mondomaine.fr/identity/connect/oidc-signin
```
### Ajouter les variables SSO
Modifiez le fichier `.env` de Vaultwarden :
```bash [Terminal]
sudo nano /srv/docker/vaultwarden/.env
```
Ajoutez ceci :
```properties [.env]
SSO_ENABLED=true
SSO_ONLY=true
SSO_AUTHORITY=https://id.mondomaine.fr
SSO_CLIENT_ID=
SSO_CLIENT_SECRET=
```
| Variable | Valeur |
|----------|-------|
| `SSO_AUTHORITY`{lang=properties} | L'URL publique de votre fournisseur OIDC (Pocket ID ici) |
| `SSO_CLIENT_ID`{lang=properties} | Le client ID copié depuis votre fournisseur |
| `SSO_CLIENT_SECRET`{lang=properties} | Le client secret copié depuis votre fournisseur |
::note
Mettez plutôt `SSO_ONLY=false` si vous préférez garder aussi la possibilité de vous connecter avec un mot de passe maître local.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Redéployer la stack
Redéployez Vaultwarden. Votre prochaine visite sur `https://vault.mondomaine.fr` demandera une connexion SSO plutôt que (ou en plus de) le mot de passe maître local.
### Terminé !
::
::note{to="https://github.com/dani-garcia/vaultwarden/wiki/Enabling-SSO-support-using-OpenId-Connect"}
Voir le **wiki SSO de Vaultwarden** pour la liste complète des options, y compris l'application par organisation et les politiques de mot de passe maître.
::
::::tip{icon=""}
✨ Vous pouvez utiliser [Authentik](/serveex/advanced/authentik) plutôt que Pocket ID :
:::collapsible{name="les étapes de configuration Authentik"}
::steps{level="4"}
#### Créer un scope mapping pour le claim email
Dans Authentik, créez un scope mapping nommé `email` avec l'expression `return {"email": request.user.email, "email_verified": True}` (Vaultwarden exige ce claim).
#### Créer l'application et le provider
Créez une application et un provider OAuth2/OpenID Connect nommé `Vaultwarden`, avec une redirect URI (de type `Strict`) valant `https://vault.mondomaine.fr/identity/connect/oidc-signin`. Dans les Advanced protocol settings, réglez la validité du token d'accès à plus de 5 minutes, remplacez le scope email par défaut par votre mapping personnalisé, et ajoutez le scope mapping `offline_access`.
#### Renseigner les variables d'environnement de Vaultwarden
Notez les __Client ID__, __Client Secret__ et __Slug__ du provider, puis utilisez-les dans le `.env` de Vaultwarden :
```properties [.env]
SSO_AUTHORITY=https://authentik.mondomaine.fr/application/o/<slug>/
SSO_CLIENT_ID=
SSO_CLIENT_SECRET=
SSO_SCOPES=email profile offline_access
```
#### Terminé !
::
:::
::::
@@ -0,0 +1,2 @@
title: Avancé
icon: i-lucide-flask-conical
@@ -1,18 +1,10 @@
---
title: Authentik
description: Installer Authentik comme fournisseur d'identité auto-hébergé configurer le MFA et protéger vos services avec du SSO et l'authentification via reverse proxy.
description: Installer Authentik comme fournisseur d'identité auto-hébergé, configurer le MFA et protéger vos services avec du SSO et l'authentification via reverse proxy.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Authentik
::note
🎯 __Objectifs :__
- Installer et exposer Authentik
- Paramétrer le Multi-Facteur
- Protéger une app native ou via reverse proxy
::
[Authentik](https://goauthentik.io) est un outil d'authentification unique permettant de vous logger une seule fois sur les plateformes compatibles OpenID. Il permet également de sécuriser l'accès aux services que vous exposez, en s'injectant via SWAG aux requetes vers vos services.
@@ -53,10 +45,10 @@ root
Créez les dossiers :
```bash [Terminal]
sudo mkdir -p /docker/authentik/media /docker/authentik/certs /docker/authentik/custom-template /docker/authentik/ssh
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 /docker/authentik` et générez un mot de passe et une clé secrete que l'on va intégrer dans le .env :
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 :
```bash [Terminal]
sudo echo "PG_PASS=$(openssl rand 36 | base64)" >> .env
@@ -66,7 +58,7 @@ sudo echo "AUTHENTIK_SECRET_KEY=$(openssl rand 60 | base64)" >> .env
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 :
```bash [Terminal]
sudo nano /docker/authentik/compose.yml
sudo nano /srv/docker/authentik/compose.yml
```
::
@@ -113,7 +105,7 @@ services:
timeout: 3s
volumes:
- redis:/data
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2}
container_name: authentik-server
@@ -190,18 +182,18 @@ Pour être utilisable hors de chez vous, vous devez exposer authentik.
::note
📋 __Au préalable :__ <br/><br/>
Nous partons du principe quer vous avez créé dans votre [zone DNS](/fr/general/networking/dns) un sous domaine du type `auth.mondomaine.fr` avec pour CNAME `mondomaine.fr` et, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/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](/fr/general/networking/nat).
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).
::
Ouvrez le fichier `authentik-server.conf`.
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo nano /docker/swag/config/nginx/authentik-server.conf
sudo nano /srv/docker/swag/config/nginx/authentik-server.conf
```
Vérifiez que dans chaque cas les variables ci-dessous sont correctes :
@@ -216,7 +208,7 @@ Si ce n'est pas le cas, éditez-les, puis enregistrez avec :kbd{value="Ctrl+O"}
Créez le fichier `auth.subdomain.conf`
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/auth.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/auth.subdomain.conf
```
@@ -273,7 +265,7 @@ services:
networks: # Relie le conteneur au réseau custom
# ...
- authentik # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
# ...
authentik: # Nom du réseau déclaré dans la stack
@@ -287,7 +279,7 @@ Et voilà ! Vous pouvez accéder à authentik via `https://auth.mondomaine.fr`
## 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.
- Rendez vous sur `https://auth.mondomaine.fr`
- Identifiez-vous
- Rendez-vous dans _paramètres_
@@ -333,7 +325,7 @@ Pourquoi le faire alors que Dockge a déjà une page d'authentification ? Tout s
Ensuite rendez-vous dans le fichier `dockge.mondomaine.fr`.
```bash [Terminal]
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
```
Puis enlevez les `#` des deux lignes `#include /config/nginx/authentik-server.conf;`{lang=nginx}.
@@ -356,24 +348,24 @@ Voilà votre nouvelle architecture :
![Picture](/img/serveex/authentik.svg)
## Protéger un service sur un serveur distant
Dans le cas d'une application [native](/fr/serveex/security/authentik#protéger-une-app-native) (via OAuth 2.0 ou autre), rien ne change.
Dans le cas d'une application [native](/serveex/advanced/authentik#protéger-une-app-native) (via OAuth 2.0 ou autre), rien ne change.
Dans le cas d'une application non native à protéger derrière un reverse proxy, vous devrez déployer un __avant-poste__. Un avant-poste est un conteneur qui jouera le rôle de proxy local, c'est à dire que c'est vers ce conteneur que les requêtes d'authentification de vos applications seront redirigées. C'est le seul qui est autorisé à dialoguer avec l'API de votre instance authentik.
::note
Pré-requis :
- Avoir installé [docker](/fr/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](/fr/serveex/core/swag).
- 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).
::
Ce conteneur redirigera ensuite les requetes vers votre instance [Authentik](/fr/serveex/security/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 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.
![auth-outpost](/img/serveex/auth-outpost.svg)
### Configuration d'Authentik
Créez vos [fournisseurs et applications](/fr/serveex/security/authentik#protéger-une-app-native) comme nous l'avons vu plus haut.
Créez vos [fournisseurs et applications](/serveex/advanced/authentik#protéger-une-app-native) comme nous l'avons vu plus haut.
Puis, dans votre panneau admin, allez dans la rubrique _Applications > Avant-postes_, puis créez un nouvel avant-poste.
@@ -406,27 +398,27 @@ Sur l'écran affichant les avant-postes créés, vous verrez le nouvel avant-pos
### Configuration de la machine distante
Nous partons du principe que vous avez déjà installé [Docker](/fr/serveex/core/docker) et [SWAG](/fr/serveex/core/swag) sur cette 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.
Sur votre machine distante, à l'aide de [Dockge](/fr/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez une stack `authentik-outpost`.
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`.
Si vous n'avez pas installé [Dockge](/fr/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs), créez un dossier `/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 /docker/authentik-outpost
sudo mkdir -P /srv/docker/authentik-outpost
```
::tip{icon=""}
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
Créez le fichier `compose.yaml` ou copiez la configuration directement dans le champs si vous avez [Dockge](/fr/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs)
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)
En ligne de commande :
```bash [Terminal]
sudo nano /docker/authentik-outpost/compose.yaml
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.
@@ -455,10 +447,10 @@ services:
# 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](/fr/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`) :
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`) :
```bash [Terminal]
sudo nano /docker/swag/compose.yaml
sudo nano /srv/docker/swag/compose.yaml
```
```yaml [compose.yaml]
@@ -470,7 +462,7 @@ services:
networks: # Relie le conteneur au réseau custom
- authentik-outpost # Nom du réseau déclaré dans la stack
networks: # Définit le réseau custom
#...
authentik-outpost: # Nom du réseau déclaré dans la stack
@@ -485,21 +477,21 @@ Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez a
Ici nous partons du principe que le nom du réseau de dockge est `authentik-outpost_default`.
::
Si vous avez [Dockge](/fr/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), relancez SWAG.
Si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), relancez SWAG.
Sinon, via le terminal :
```bash [Terminal]
cd /docker/swag/
cd /srv/docker/swag/
sudo docker compose up -d
```
Creez (ou remplissez directement si vous avez [Dockge](/fr/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs)) le fichier `.env` dans le dossier de l'avant poste authentik :
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 :
En ligne de commande :
```bash [Terminal]
sudo nano /docker/authentik-outpost/.env
sudo nano /srv/docker/authentik-outpost/.env
```
Collez la configuration suivante
@@ -517,12 +509,12 @@ Remplissez comme suit
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Si vous avez [Dockge](/fr/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), déployez la stack.
Si vous avez [Dockge](/serveex/core/docker#installer-dockge-pour-g"rer-et-d"ployer-les-conteneurs), déployez la stack.
Sinon, via le terminal :
```bash [Terminal]
cd /docker/authentik-outpost/
cd /srv/docker/authentik-outpost/
sudo docker compose up -d
```
@@ -533,7 +525,7 @@ Nous allons a présent configurer SWAG.
Ouvrez le fichier `authentik-server.conf`.
```bash [Terminal]
sudo nano /docker/swag/config/nginx/authentik-server.conf
sudo nano /srv/docker/swag/config/nginx/authentik-server.conf
```
Dans le fichier, changez `authentik-server` par `authentik-outpost` comme suit :
@@ -545,7 +537,7 @@ proxy_pass http://$upstream_authentik:9000;
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Ensuite, configurez les applications à protéger selon si elles sont [natives](/fr/serveex/security/authentik#protéger-une-app-native) ou par [proxy](/fr/serveex/security/authentik#protéger-une-app-par-reverse-proxy) comme vous l'avez fait sur votre serveur principal.
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.
## Migrer une base authentik
Sur la machine d'origine, dumper la bdd :
@@ -0,0 +1,344 @@
---
title: Arcane
description: Installer Arcane, une interface web moderne de gestion Docker et Compose, comme alternative plus avancée à Dockge avec gestion multi-hôtes et connexion OIDC.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
::note{to="/serveex/core/docker#installer-dockge-pour-gérer-et-déployer-les-conteneurs"}
C'est une alternative avancée à **Dockge** : il peut gérer plusieurs hôtes Docker distants depuis une seule instance, et prend en charge la connexion OIDC nativement plutôt que de dépendre d'un proxy de forward-auth séparé.
::
[Arcane](https://github.com/getarcaneapp/arcane) est une interface web auto-hébergée pour gérer les conteneurs, images, volumes et stacks Compose de Docker.
![Arcane](/img/serveex/arcane.png)
- [Documentation d'Arcane](https://getarcane.app/docs/)
- [Arcane sur GitHub](https://github.com/getarcaneapp/arcane)
::note{to="https://docs.linuxserver.io/images/docker-socket-proxy/"}
Arcane a besoin d'accéder au socket Docker pour gérer les conteneurs, ce qui équivaut à un accès root sur votre hôte. Plutôt que de monter le socket directement, ce tutoriel place **Docker Socket Proxy** devant, en n'autorisant que les permissions d'API dont Arcane a réellement besoin. Quoi que vous utilisiez, assurez-vous qu'Arcane lui-même ne soit jamais joignable sans authentification.
::
## Installation
::file-tree
---
tree:
/:
- srv:
- docker:
- arcane:
- compose.yaml
- .env
- data/
---
::
::steps{level="3"}
### Générer une clé de chiffrement
```bash [Terminal]
openssl rand -base64 32
```
Gardez le résultat, vous en aurez besoin pour le fichier `.env` ci-dessous.
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `arcane`, et ajoutez la configuration suivante. Elle inclut le socket proxy : `arcane` ne touche jamais directement à `/var/run/docker.sock`, seul `docker-socket-proxy` le fait, et il n'autorise que les permissions dont Arcane a besoin (conteneurs, images, réseaux, volumes, exec, build/commit), sur leur propre réseau interne :
```yaml [compose.yaml]
---
services:
arcane:
image: ghcr.io/getarcaneapp/manager:latest
container_name: arcane
restart: unless-stopped
cgroup: host
env_file:
- .env
volumes:
- /srv/docker/arcane/data:/app/data
networks:
- arcane-internal
ports:
- 3552:3552
depends_on:
- docker-socket-proxy
docker-socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: arcane-docker-proxy
security_opt:
- no-new-privileges:true
networks:
- arcane-internal
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- EXEC=1
- BUILD=1
- COMMIT=1
- INFO=1
- SYSTEM=1
- POST=1
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
arcane-internal:
name: arcane-internal
```
::note
`POST=1` est l'autorisation d'écriture globale nécessaire pour créer et supprimer conteneurs, images, réseaux et volumes ; `ALLOW_START`/`ALLOW_STOP`/`ALLOW_RESTARTS` couvrent séparément les actions sur le cycle de vie des conteneurs. Tout le reste (Swarm, secrets, configs, auth) est laissé à sa valeur par défaut `0`, puisque ce site ne les utilise pas.
::
::tip{icon=""}
✨ Ajoutez le label Watchtower pour automatiser les mises à jour :
```yaml [compose.yaml]
---
services:
arcane:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
### Renseigner vos variables d'environnement
Remplissez le fichier `.env` :
```properties [.env]
APP_URL=https://arcane.mondomaine.fr
ENCRYPTION_KEY=
DOCKER_HOST=tcp://docker-socket-proxy:2375
PUID=1000
PGID=1000
```
| Variable | Valeur | Exemple |
|----------|-------|---------|
| `APP_URL`{lang=properties} | L'URL publique par laquelle vous joindrez Arcane (voir l'exposition plus bas), sans port | `https://arcane.mondomaine.fr` |
| `ENCRYPTION_KEY`{lang=properties} | La clé générée ci-dessus | `Q2pVEqsTNRkJSO9SkJzU3KZ2...` |
| `DOCKER_HOST`{lang=properties} | Pointe Arcane vers le socket proxy plutôt qu'un socket monté | `tcp://docker-socket-proxy:2375` |
| `PUID` / `PGID`{lang=properties} | Vos identifiants d'utilisateur et de groupe, via `id votreutilisateur` | `1000` |
Déployez la stack. L'interface locale est disponible sur `http://ipdevotreserveur:3552`.
### Terminé !
::
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
## Exposer Arcane avec SWAG
Le principal intérêt de cette installation est de pouvoir accéder à Arcane à distance depuis tous vos appareils. Nous allons l'exposer avec SWAG.
::warning
La connexion locale d'Arcane n'a pas d'authentification multifacteur. Ne l'exposez que si vous utilisez [Pocket ID](/serveex/security/pocket-id) (voir plus bas) ou [Authentik](/serveex/advanced/authentik) pour la connexion. Sinon, ne l'exposez pas avec SWAG. Utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard), surtout vu le niveau d'accès qu'Arcane a sur votre hôte.
::
::note
Nous partons du principe que vous avez le sous-domaine `arcane.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).
::
::steps{level="3"}
### Ajouter le réseau d'Arcane à SWAG
Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau d'Arcane :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- arcane # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
arcane: # Nom du réseau déclaré
name: arcane_default # Nom réel du réseau externe
external: true # Le marque comme défini à l'extérieur
```
Redéployez la stack et attendez que SWAG soit pleinement opérationnel.
::note
Nous partons ici du principe que le nom du réseau d'Arcane est `arcane_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `arcane.subdomain.conf` :
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ utilisez **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal.
::
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/arcane.subdomain.conf
```
Collez la configuration suivante :
```nginx [arcane.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name arcane.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app arcane;
set $upstream_port 3552;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
::note
Les mises à jour en direct d'Arcane passent par un websocket, d'où les en-têtes `Upgrade`/`Connection` ci-dessus, en plus de l'inclusion habituelle de `proxy.conf`.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Et voilà ! Arcane est maintenant accessible depuis internet.
## Connecter un hôte distant
Arcane peut gérer plusieurs hôtes Docker depuis une seule instance. Chaque hôte distant fait tourner un conteneur **agent** léger qui se reconnecte à Arcane. Plutôt que d'exposer cette connexion sur internet, nous la ferons passer par le [VPN WireGuard](/serveex/core/wireguard) déjà mis en place plus tôt, ainsi le trafic de l'agent ne quitte jamais votre réseau privé.
::note{to="/serveex/core/wireguard#client-server-setup"}
Ceci suppose que l'hôte Arcane et l'hôte distant font déjà tourner leur propre client WireGuard, connectés à votre VPN comme décrit dans **Client Server Setup**. Notez l'adresse VPN que wg-easy a attribuée à l'__hôte Arcane__ (par exemple `10.8.0.3`) ; c'est l'adresse que visera l'agent distant ci-dessous.
::
::steps{level="3"}
### Ajouter l'environnement distant dans Arcane
Dans Arcane, allez dans _Environments > Add Environment_. Arcane génère un __Agent Token__ à usage unique et le bout de configuration compose à déployer sur l'hôte distant.
### Déployer l'agent sur l'hôte distant
Sur l'hôte distant, ouvrez Dockge, cliquez sur `compose`, nommez la stack `arcane-agent`, et ajoutez la configuration suivante, en remplaçant le token par celui qu'Arcane vous a donné et l'URL par l'adresse VPN de votre hôte Arcane :
```yaml [compose.yaml]
---
services:
arcane-agent:
image: ghcr.io/getarcaneapp/agent:latest
container_name: arcane-agent
restart: unless-stopped
environment:
- EDGE_AGENT=true
- EDGE_TRANSPORT=poll
- AGENT_TOKEN=arc_votretoken
- MANAGER_API_URL=http://10.8.0.3:3552
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /srv/docker/arcane-agent/data:/app/data
```
::note
C'est le « mode edge » : l'agent se connecte vers Arcane plutôt que l'inverse, il fonctionne donc derrière un NAT sans rien rediriger sur la box de l'hôte distant. Utiliser l'adresse VPN plutôt qu'un domaine public fait que cette connexion reste sur le tunnel WireGuard même si l'agent est techniquement en mode « edge ». Contrairement au manager ci-dessus, l'agent a besoin du vrai socket Docker monté directement, puisque c'est lui qui exécute réellement les commandes sur cet hôte ; il n'existe pas d'option socket-proxy documentée pour lui.
::
Déployez la stack.
### Vérifier la connexion
De retour dans Arcane, le nouvel environnement devrait apparaître comme connecté en quelques secondes. Basculez dessus depuis le sélecteur d'environnement pour gérer les conteneurs et les stacks de cet hôte.
### Terminé !
::
## Connecter Pocket ID
Arcane gère OIDC nativement, vous pouvez donc exiger une connexion Pocket ID avant de laisser qui que ce soit gérer vos conteneurs, plutôt qu'avec (ou en plus de) les comptes propres à l'application.
::steps{level="3"}
### Enregistrer Arcane comme client OIDC
[Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `arcane`, avec cette URL de callback :
```text
https://arcane.mondomaine.fr/auth/oidc/callback
```
### Activer OIDC dans Arcane
Modifiez le fichier `.env` d'Arcane et ajoutez :
```properties [.env]
OIDC_ENABLED=true
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_ISSUER_URL=https://id.mondomaine.fr
OIDC_SCOPES=openid email profile
OIDC_PROVIDER_NAME=Pocket ID
```
| Variable | Valeur |
|----------|-------|
| `OIDC_CLIENT_ID`{lang=properties} | Le client ID copié depuis Pocket ID |
| `OIDC_CLIENT_SECRET`{lang=properties} | Le client secret copié depuis Pocket ID |
| `OIDC_ISSUER_URL`{lang=properties} | L'URL publique de Pocket ID, sans slash final ; Arcane découvre le reste via `.well-known/openid-configuration` |
Redéployez la stack.
::tip{icon=""}
✨ Pour aller directement sur Pocket ID et masquer le formulaire de connexion local, mettez `OIDC_AUTO_REDIRECT_TO_PROVIDER=true`, ou désactivez complètement la connexion locale dans _Settings > Authentication_ pour un accès uniquement OIDC.
::
### Terminé !
::
Et voilà ! Arcane propose désormais une option « Login with Pocket ID » à côté du formulaire de connexion local.
::tip{icon="" to="/serveex/advanced/authentik"}
✨ Vous pouvez utiliser **Authentik** plutôt que Pocket ID :
1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé `Arcane`, avec une redirect URI (de type `Strict`) valant `https://arcane.mondomaine.fr/auth/oidc/callback`.
2. Notez les __Client ID__ et __Client Secret__ du provider.
3. Dans le `.env` d'Arcane, mettez `OIDC_ISSUER_URL=https://authentik.mondomaine.fr/application/o/arcane/`, puis renseignez le Client ID et le Client Secret.
::