Mirror the French docs onto the English structure
This commit is contained in:
@@ -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
|
||||
|
||||

|
||||

|
||||
|
||||
**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
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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é.
|
||||
|
||||

|
||||
|
||||
_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.
|
||||
|
||||

|
||||
|
||||
::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.
|
||||
|
||||

|
||||
|
||||
#### 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.
|
||||
|
||||

|
||||
|
||||
::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.
|
||||
::
|
||||
|
||||

|
||||
|
||||
#### GRUB
|
||||
|
||||
Installez-le sur le disque que vous venez de partitionner (`/dev/sda`, `/dev/nvme0n1`...), pas sur une partition.
|
||||
|
||||

|
||||
|
||||
#### 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**.
|
||||
::
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
### 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
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 !
|
||||
|
||||
+11
-19
@@ -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
|
||||

|
||||
|
||||
## 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
|
||||
+58
-59
@@ -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
|
||||
::
|
||||
|
||||

|
||||
|
||||
## Introduction
|
||||
L'architecture _Zero Trust_ est la pratique consistant à concevoir des systèmes fondés sur le principe de __« ne jamais faire confiance__, __toujours vérifier »__, par opposition au principe traditionnel de __« confiance, mais vérifier »__. Ce concept est devenu très populaires récemment, à la suite des attaques toujours plus nombreuses concernant les données des utilisateurs. C'est un concept très large, nous nous concentrerons sur l’application du _Zero Trust_ aux services Web que nous hébergeons.
|
||||
|
||||
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`.
|
||||

|
||||
::
|
||||
|
||||
### 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 :
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
::
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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.
|
||||
|
||||

|
||||
|
||||
## 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).
|
||||
::
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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 :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||

|
||||
|
||||
### 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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).
|
||||
::
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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).
|
||||
::
|
||||
|
||||
@@ -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](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é.
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
- 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à !
|
||||
@@ -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
|
||||
::
|
||||
|
||||

|
||||
|
||||
@@ -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"}.
|
||||
|
||||
@@ -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 :
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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.
|
||||
::
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
## 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).
|
||||
::
|
||||
@@ -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écurité 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.
|
||||
|
||||

|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||

|
||||

|
||||

|
||||
### 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 :
|
||||
|
||||

|
||||
| 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 d’utilisateur 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.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
#### Créer l'application
|
||||
|
||||
Enregistrez et créez une application `pingvin` comme suit.
|
||||
|
||||

|
||||
|
||||
#### 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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
## 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/).
|
||||
::
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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).
|
||||
::
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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](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="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
|
||||
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
|
||||
|
||||
Et voilà, vous avez exposé 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
|
||||
+38
-46
@@ -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 :
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
- [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.
|
||||
::
|
||||
Reference in New Issue
Block a user