{"config":{"lang":["fr"],"separator":"[\\s\\-\\.]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Bienvenue sur Djeex Lab","text":"
Djeex Lab est le site regroupant la documentation de mon home lab, pens\u00e9 \u00e0 l'origine pour retrouver facilement mes configurations et commandes.
Actuellement, Djeex Lab est compos\u00e9 des \u00e9l\u00e9ments suivants :
La documentation fournie ici est distribu\u00e9e \u00e0 titre exp\u00e9rimentale, dans un esprit de partage d'exp\u00e9rience. Elle n'est en aucun cas faite pour construire une architecture de production ou pour de l'industrialisation. Il est possible qu'elle contienne des erreurs et/ou des approximations.
Evidemment l'usage de cette documentation doit strictement se limiter au cadre l\u00e9gal.
"},{"location":"#documentation-disponible-ou-en-cours","title":"Documentation disponible ou en cours","text":"Cette doc n'est pas exempt d'erreurs ou de points obscurs, vous \u00eates libre de la la corriger et/ou d'apporter vos lumi\u00e8res.
Djeex/DjeexLab
Contribuer
Objectifs
Lorsque vous naviguez sur un site, ou une application, des requ\u00eates sont \u00e9mises vers un ou des domaines afin d'afficher le contenu de votre page. Votre appareil ne connait pas les adresses IP de ces serveurs \u00e0 joindre. Pour les connaitre, il va contacter un serveur de nom (Domain Name Server) qui lui va lui r\u00e9pondre avec l'adresse IP la plus \u00e0 jour pour le domaine de la requ\u00eate.
La zone DNS, c'est une sorte de registre avec des panneaux qui redirige vos requ\u00eates vers la bonne destination.
"},{"location":"dns/#la-zone-dns","title":"La zone DNS","text":"Lorsque vous r\u00e9servez un domaine chez votre registrar (cloudflare, ovh...), ce registrar vous attribue une zone DNS que vous pouvez personnaliser.
Vous pouvez rentrer des enregistrements dans cette zone DNS qui permettront d'orienter les requ\u00eates au bon endroit. Vous trouverez plus d'information ici.
Exemple d'une zone DNS du domaine mondomaine.fr:
$TTL 3600\n@ IN SOA ns1.dns.me. dns.net. (2024051800 86400 3600 3600000 60)\n IN NS ns1.dns.me.\n IN NS ns2.dns.me.\n IN A 203.0.113.0\nwww IN CNAME mondomaine.fr\nsousdomaine IN CNAME mondomaine.fr\n
Dans cet exemple :
$TTL 3600
indique aux diff\u00e9rents serveurs de noms de la plan\u00e8te que les enregistrement sont valides 1h (et qu'au-del\u00e0 il faudra rev\"rifier).IN SOA ns1.dns.me. dns.net. (2024051800 86400 3600 3600000 60)
indique que ns1.dns.me
est le serveur dns principal, et les nombres sont des indications de rafraichissement.IN NS ns1.dns.me.
et IN NS ns2.dns.me.
indique que ns1.dns.me
et ns2.dns.me
sont des serveurs de noms pour ce domaine.IN A 203.0.113.0
signifie que mondomaine.fr
pointe vers l'IP 203.0.113.0
sousdomaine IN CNAME mondomaine.fr
signifie que sousdomaine.mondomaine.fr
pointe vers mondomaine.fr
et donc vers l'IP 203.0.113.0
.Ainsi, si vous choisissez de pointer le domaine mondomaine.fr
vers votre serveur, vous pouvez le faire en ajoutant un enregistrement A
pointant vers l'IP publique de votre serveur.
Attention
Si votre serveur est chez vous:
Et si vous ajoutez un sous-domaine qui doit pointer vers votre serveur, vous pouvez utiliser un enregistrement CNAME
vers mondomaine.fr
.
Pourquoi ne pas utiliser un enregistrement A pour le sous-domaine ?
Si votre sous domaine pointe sur le meme serveur que mondomaine.fr, il vaut mieux utiliser un enregistrement CNAME
car en cas de changement d'IP du serveur, il n'y aura aucune autre manipulation \u00e0 faire.
La plupart des registrar proposent des interfaces plus lisbles pour modifier ces informations. Renseignez-vous aupr\u00e8s de la documentation de votre registrar.
"},{"location":"nat/","title":"Routeur et NAT","text":"Objectifs
Les ports sont diff\u00e9rents canaux par lesquels votre routeur envoie et re\u00e7oit des donn\u00e9es, ce qui permet d'utiliser plusieurs services en meme temps. Lorsqu'il re\u00e7oit une donn\u00e9e via un port, otre routeur transmet ensuite les donn\u00e9es \u00e0 la machine qui : - soit a \u00e9mis la requ\u00eate de d\u00e9part - soit est configur\u00e9e pour recevoir les donn\u00e9es re\u00e7ues par un port sp\u00e9cifique du routeur
Votre routeur dispose de plus de 65 000 ports \u00e0 utiliser.
Certains programmes et applications sont con\u00e7us pour utiliser des ports sp\u00e9cifiques. Par exemple, lorsque votre r\u00e9seau envoie des donn\u00e9es \u00e0 partir d'une page HTML, le routeur les recevra via le port num\u00e9ro 80 (non s\u00e9curis\u00e9) ou 443 (s\u00e9curis\u00e9 via SSL).
Le routeur sert donc de plateforme d'aiguillage des donn\u00e9es entre internet et votre machine.
"},{"location":"nat/#la-redirection-de-port","title":"La redirection de port","text":"Rediriger un port
, c'est \u00e9mettre une r\u00e8gle qui sp\u00e9cifie que telle source
peut envoyer des donn\u00e9es \u00e0 tel port
de votre routeur, qui redirigera les donn\u00e9es sur tel port
de telle machine
. Les sources
et la machine de destination
sont identifi\u00e9es par leur adresse IP
.
machine source
IP de la machine source (sur internet) All
123.45.67.89
port source
Port d'arriv\u00e9e sur le routeur 443
port de destination
Port d'arriv\u00e9e sur la machine de destination 3000
machine de destination
IP de la machine de destination (sur votre r\u00e9seau local) 192.168.1.50
Selon ce tableau, si on enl\u00e8ve le All
et que l'on garde l'ip 123.45.67.89
en provenance d'internet, tout le traffic envoy\u00e9 depuis cette IP sur le port 443
du routeur sera redirig\u00e9 vers le port 3000
de l'IP locale 192.168.1.50
.
Si on enl\u00e8ve l'IP de l'exemple et qu'on laisse le All
, tout le traffic d'internet envoy\u00e9 au port 443
du routeur sera redirig\u00e9 vers le port 3000
de l'IP locale 192.168.1.50
.
C'est utile si par exemple vous avez un serveur qui a un service qui n\u00e9cessite d'etre accessible par internet. Par exemple, un site web. Le web utilise le port 80
(non s\u00e9curis\u00e9) et le port 443 (s\u00e9curis\u00e9 par certificat SSL) pour communiquer. Ainsi, si je veux que mon site internet soit accessible, je vais faire en sorte que lorsqu'on tape le nom de domaine de mon site, le routeur redirige bien vers mon serveur local (avec l'exemple de l'IP locale du tableau). Par exemple, imaginons que mon service est sur le port 3000
de mon routeur (accessible en local via http://192.168.1.50:3000
), je vais donc rediriger comme dans l'exemple toutes les sources (All) qui passent par le port 443
du routeur vers le port 3000
de mon serveur local.
Attention
Si vous avez plusieurs services \u00e0 rendre accessible, avec par exemple sousdomaine1.mondomaine.fr
et sousdomaine2.mondomaine.fr
, votre routeur ne peut pas rediriger vers plusieurs port selon la requ\u00eate. Vous devrez utiliser un Reverse Proxy qui selon la requete redirigera vers le bon service de votre serveur.
A chaque fois que vous connectez un appareil sur votre r\u00e9seau local, votre routeur lui attribue une adresse IP via les r\u00e8gles DHCP. Celle-ci est al\u00e9atoire selon des r\u00e8gles pr\u00e9d\u00e9finies. A chaque red\u00e9marrage de l'appareil, l'IP peut changer. C'est embetant si vous exposez un service et que vous avez une redirection de port dans votre routeur car si l'IP change, la redirection enverra les donn\u00e9es dans le vide. Le serveur DHCP de votre box permet d'attribuer une IP fixe \u00e0 un appareil.
Chaque appareil a une adresse physique dite \"adressse MAC\". Pour fixer l'IP, vous devez connaitre l'adresse physique de votre appareil (visible dans votre routeur si votre machine est connect\u00e9e au r\u00e9seau), et lui attribuer une adresse IP fixe, ce qu'on appel un \"bail DHCP fixe\".
Ainsi, l'IP de votre machine ne changera jamais et la redirection de port sera toujours effective.
Variable Description ExempleIP
IP locale fixe \u00e0 attribuer 192.168.1.50
Adresse Mac
Adresse physique de la machine 5E:FF:56:A2:AF:15
Pour plus d'information sur ces sujets, consultez la documentation de votre routeur.
"},{"location":"samba/","title":"Samba","text":"Samba est un protocole permettant d'acc\u00e8der \u00e0 un dossier situ\u00e9 sur un disque r\u00e9seau. Il peut \u00eatre configur\u00e9 sous Mac, Windows ou Linux.
De nombreux tutorials existent pour configurer Samba sous windows ou sur un NAS type Synology, ici nous nous concentrons sur Debian.
Objectifs
Info
Ici, nous allons partager le dossier /video
d'une machine distant que nous appelerons machine-distante
. Nous acc\u00e9derons \u00e0 ce dossier par la machine nomm\u00e9e machine-locale
. L'utilisateur de connexion au disque r\u00e9seau sera sambauser
.
$ sudo apt update && sudo apt upgrade\n$ sudo apt install samba smbclient cifs-utils\n
"},{"location":"samba/#creer-le-dossier-video","title":"Cr\u00e9er le dossier /video
","text":"$ sudo mkdir /video\n
"},{"location":"samba/#configuration-du-partage","title":"Configuration du partage","text":"Ensuite nous allons \u00e9diter le fichier /etc/samba/smb.conf
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vim /etc/samba/smb.conf\n
Localisez la variable workgroup
puis passez en mode modification en appuyant sur i
et nommez votre worgroup, par exemple workgroup = WORKGROUP
Puis allez \u00e0 la fin du fichier et collez la configuration suivante
[video]\n comment = Dossier video\n path = /video\n writable = yes\n guest ok = no\n valid users = @smbshare\n force create mode = 770\n force directory mode = 770\n inherit permissions = yes\n
Appuyez sur Echap
pour quitter le mode notification puis tapez :x
et appuyez sur Entr\u00e9e
pour sauvegarder et quitter."},{"location":"samba/#creer-un-utilisateur-et-un-groupe-pour-samba","title":"Cr\u00e9er un utilisateur et un groupe pour Samba","text":"Comme nous avons configfur\u00e9 un partage s\u00e9curis\u00e9, nous allons devoir cr\u00e9er un utilisateur et un groupe pour pouvoir y acc\u00e9der \u00e0 distance.
Creez le groupe.
$ sudo groupadd smbshare\n
Nous allons maintenant permettre au groupe d'avoir le controle sur le dossier /video
.
$ sudo chgrp -R smbshare /video\n
Et maintenant nous allons donner les permissions n\u00e9cessaires aux dossiers et fichier h\u00e9rit\u00e9s.
$ sudo chmod 2775 /public\n
A pr\u00e9sent nous allons ajouter un utilisateur nologin c'est \u00e0 dire que cet utilisateur ne pourra pas se connecter sur le serveur pour faire des op\u00e9rations, mais pourra tout de meme se connecter au service samba.
$ sudo useradd -M -s /sbin/nologin sambauser\n
Puis nous ajoutons l'utilisateur au groupe sambashare
que nous avons cr\u00e9\u00e9 pr\u00e9c\u00e9demment.
$ sudo usermod -aG smbshare sambauser\n
Et nous allons configurer un mot de passe. $ sudo smbpasswd -a sambauser\n
Et enfin nous allons activer le compte que nous venons de cr\u00e9er. $ sudo smbpasswd -e sambauser\n
Attention
Si vous utilisez un pare-feu, comme ufw, n'oubliez pas d'autoriser les IP des machines qui acc\u00e9deront \u00e0 votre dossier partag\u00e9 :
$ sudo ufw allow from ipdelamachine to any app Samba\n
"},{"location":"samba/#acceder-a-un-dossier-partage","title":"Acc\u00e9der \u00e0 un dossier partag\u00e9","text":"Info
A pr\u00e9sent, nous sommes sur votre machine-locale
qui n\u00e9cessite d'acc\u00e9der au dossier partag\u00e9 /video
pr\u00e9sent sur la machine-distante
.
$ sudo apt update && sudo apt upgrade\n$ sudo apt install cifs-utils\n
"},{"location":"samba/#creer-le-dossier-de-destination","title":"Cr\u00e9er le dossier de destination","text":"Nous allons cr\u00e9er un dossier sur notre serveur sur lequel sera mont\u00e9 le dossier partag\u00e9 de notre machine-distante. C'est \u00e0 dire que dans ce dossier nous retrouverons le contenu du dossier partag\u00e9 de notre
machine-distante. Ici nous appellerons ce dossier
/mnt/video`.
$ sudo mkdir /mnt/video\n
"},{"location":"samba/#preparer-le-fichier-credentials","title":"Pr\u00e9parer le fichier .credentials","text":"Afin de ne pas avoir syst\u00e9matiquement \u00e0 rentrer notre utilisateur et mot de passe, nous allons cr\u00e9er un fichier .credentials` stockant ces informations.
Nous allons le cr\u00e9er dans le dossier /smb
.
$ sudo mkdir /smb\n$ sudo vi /smb/.credentials\n
Passez en mode modification en appuyant sur i
et configurez comme suit : username=smbuser\npassword=motdepasse\n
smbuser
: L'utilisateur que nous avons configur\u00e9 sur la machine-distante
motdepasse
: Le mot de passe que nous avons configur\u00e9 sur la machine-distante
Appuyez sur Echap
afin de quitter le mode modification, puis tapez :x
et appuyez sur Entr\u00e9e
pour sauvegarder et quitter.
Nous allons modifier les permissions du dossier afin que seul le propri\u00e9taire puis lire et \u00e9crire dans ce fichier.
$ sudo chmod 600 /smb/.credentials\n
"},{"location":"samba/#monter-le-dossier-partager","title":"Monter le dossier partager","text":"A pr\u00e9sent nous allons monter le dossier.
$ sudo mount -t cifs -a credentials=/smb/.credentials //ip-machine-distante/video /mnt/video\n
Remplacez ip-machine-distante
par l'adresse IP de votre machine-distante
V\u00e9rifiez que cela a fonctionn\u00e9 en tapant :
$ sudo mount -t cifs\n
Vous verrez diff\u00e9rentes informations qui confirmerons le succ\u00e8s du montage. Et voil\u00e0, \u00e0 pr\u00e9sent vous acc\u00e9dez au dossier /video de votre machine-distante
, depuis votre machine-locale
!
Par d\u00e9faut, les dossiers pattag\u00e9s ne sont pas connect\u00e9s automatiquement au red\u00e9marrage. Pour autoamtiser cet aspect, nous allons modifier le fichier /etc/fstab
.
D'abord, sauvegardons notre fichier fstab
.
$ sudo cp /etc/fstab /etc/fstab.bak\n
Puis nous allons ajouter une ligne \u00e0 la fin du fichier comportant les informations de montages dans le fichier fstab
.
$ sudo echo //ip-machine-distante/video /mnt/video cifs _netdev,nofail,credentials=/smb/.credentials,x-systemd.automount,x-systemd.device-timeout=15 0 0 >> /etc/fstab\n
Red\u00e9marrez.
$ sudo reboot\n
Une fois red\u00e9marr\u00e9, v\u00e9rifiez que le montage est correct
$ sudo mount -t cifs\n
Et voil\u00e0 !
"},{"location":"samba/#demonter-le-dossier-partage","title":"D\u00e9monter le dossier partag\u00e9","text":"$ sudo umount -t cifs /mnt/video\n
"},{"location":"serveex/adguard/","title":"Adguard Home","text":"Objectif
AdGuard Home est un serveur DNS anti-pub et anti-tra\u00e7age qui fonctionne au niveau du syst\u00e8me. Une fois configur\u00e9, il couvrira TOUS vos appareils domestiques et vous n'aurezbesoin d'aucun logiciel c\u00f4t\u00e9 client pour cela.
Il fonctionne comme un serveur DNS qui redirige les domaines de suivi vers un \u00abblack hole\u00bb, emp\u00eachant ainsi vos appareils de se connecter \u00e0 ces serveurs.
En pratique, une fois en place, il vous faudra juste configurer les serveurs DNS de vos appareils, pour que ces derniers l'utilisent.
Rappel sur le fonctionnement d'un DNS :
Lorsque vous naviguez sur un site, ou une application, des requ\u00eates sont \u00e9mises vers un ou des domaines afin d'afficher le contenu de votre page. Les publicit\u00e9s notamment. Votre appareil ne connait pas les adresses IP de ces serveurs \u00e0 joindre. Pour les connaitre, il va contacter un serveur de nom (Domain Name Server) qui lui va lui r\u00e9pondre avec l'adresse IP la plus \u00e0 jour pour le domaine de la requ\u00eate.
Par d\u00e9faut, votre appareil utilise le serveur votre fournisseur d'acc\u00e8s, param\u00e9tr\u00e9 dans votre box ou directement sur le CGNAT de votre op\u00e9rateur si appareil mobile. Cela peut etre chang\u00e9 directement dans les r\u00e9glages de votre navigateur, mais aussi dans le syst\u00e8me de votre appareil, et parfois directement dans votre box si votre FAI le permet.
Adguard lui, va s'intercaler entre le serveur de nom et votre appareil. Si vous param\u00e9trez vos appareil, ils contacteront d'abord adguard qui filtrera les requetes, via des listes r\u00e9guli\u00e8rement mises \u00e0 jour :
C'est ainsi que les pubs et domaines malveillants sont bloqu\u00e9s : leurs domaines sont pr\u00e9sents dans la blocklist, le reste de la page lui charge correctement.
"},{"location":"serveex/adguard/#installation","title":"Installation","text":"Structure des dossiers :
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 adguard\n \u251c\u2500\u2500 confdir\n \u251c\u2500\u2500 workdir\n \u251c\u2500\u2500 compose.yaml\n \u2514\u2500\u2500 .env\n
Note
Nous monterons aussi le dossier /docker/swag/config/etc/letsencrypt
afin d'avoir acc\u00e8s au certificat SSL de Swag.
Ouvrez Dockge, et cliquez sur compose
Nommez la stack adguard
et copiez la configuration ci-dessous
version: \"2\"\nservices:\n\n adguardhome:\n container_name: adguard\n image: adguard/adguardhome\n restart: unless-stopped\n ports:\n - 53:53/udp\n - 8080:80/tcp\n - 4443:443/tcp\n - 853:853/tcp\n - 3000:3000/tcp\n volumes:\n - /docker/adguardhome/confdir:/opt/adguardhome/conf\n - /docker/adguardhome/workdir:/opt/adguardhome/work\n - /docker/swag/config/etc/letsencrypt:/swag-ssl:ro\n networks:\n - swag\n\nnetworks:\n swag:\n name: swag_default\n external: true\n
Note
Nous avons ajout\u00e9 le r\u00e9seau de Swag afin que les deux puissent communiquer ensemble. Assurez-vous que le nom du r\u00e9seau soit correct. Nous partons du principe qu'il se nomme swag_default
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n adguardhome:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
D\u00e9ployez la stack.
Rendez-vous sur http//ipduserveur:3000
et suivez les instructions
Et voil\u00e0, vous avez d\u00e9ploy\u00e9 Adguard !
"},{"location":"serveex/adguard/#exposer-adguard-avec-swag","title":"Exposer Adguard avec Swag","text":"Pour \u00eatre utilisable hors de chez vous, vous devez exposer Adguard
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type adguard.mondomaine.fr
avec pour CNAME
mondomaine.fr
et que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT. Redirigez \u00e9galement le port 53
et le port 853
vers votre serveur. Ces ports serviront \u00e0 router les requ\u00eates DNS.
Tunnels cloudflare
N'utilisez pas les tunnels cloudflare pour exposer Adguard, et d\u00e9sactivez tout proxy.
Cr\u00e9ez et ouvrez le fichier adguard.subdomain.conf
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf\n
Editez le fichier en appuyant sur i
puis copiez la configuration ci-dessous :
## Version 2023/05/31\n# make sure that your adguard container is named adguard\n# make sure that your dns has a cname set for adguard\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name adguard.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app adguard;\n set $upstream_port 3000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location /control {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app adguard;\n set $upstream_port 3000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location /dns-query {\n # to properly use this please set `allow_unencrypted_doh: true` and `force_https: false` in adguard\n # see https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app adguard;\n set $upstream_port 3000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Il vous faudra exclure l'url https://adguard.mondomaine.fr/dns-query de l'authentification :
^/dns-query
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
Et voil\u00e0, vous exposez Adguard \u00e0 pr\u00e9sent !
"},{"location":"serveex/adguard/#configurer-le-chiffrement-ssltls","title":"Configurer le chiffrement SSL/TLS","text":"Le chiffrement est essentiel si vous souhaitez garder priv\u00e9es les requ\u00eates que vous faites vers adguard. Chiffrer ces requ\u00eates c'est vous assurez que personne, meme votre FAI ne connaissent votre historique. C'est aussi vous assurer que personne d'autre que votre serveur vous r\u00e9pond.
Afin de configurer le chiffrement :
/swag-ssl/live/mondomaine.fr/fullchain.pem
en rempla\u00e7ant mondomaine.fr
par votre domaine principal./swag-ssl/live/mondomaine.fr/privkey.pem
en rempla\u00e7ant mondomaine.fr
par votre domaine principal.Et voil\u00e0 ! Vous avez prot\u00e9g\u00e9 vos futures requ\u00eates DNS !
"},{"location":"serveex/adguard/#configurer-les-appareils","title":"Configurer les appareils","text":"Pour configurer vos appareils, vous avez plusieurs choix (que vous pouvez cumuler).
"},{"location":"serveex/adguard/#securiser-le-reseau-local","title":"S\u00e9curiser le r\u00e9seau local","text":"Vous pouvez s\u00e9curiser votre r\u00e9seau local avec adguard en configurant votre box pour que chaque requ\u00eate DNS soit dirig\u00e9e par d\u00e9faut vers adguard plutot que les services de votre FAI. Attention, votre box doit pouvoir permettre le changement de DNS (Orange ne le permet pas).
G\u00e9n\u00e9ralement cette option est dans les param\u00e8tres DHCP de votre box. Pensez bien \u00e0 ajouter un serveur secondaire tel que :
1.1.1.1
8.8.8.8
En effet, sans cela, si votre serveur tombe, vos appareils n'arriveraient plus \u00e0 se connecter \u00e0 internet.
Note
Des appareils peuvent avoir un autre DNS param\u00e9tr\u00e9 et ne pas utiliser ceux de la box.
"},{"location":"serveex/adguard/#forcer-un-navigateur-a-utiliser-adguard","title":"Forcer un navigateur \u00e0 utiliser Adguard","text":"Dans votre navigateur, vous pouvez configurer un DNS pour le forcer \u00e0 utiliser adguard home. Dans les param\u00e8tres, il vous faudra renseigner l'adressehttps://adguard.mondomaine.fr/dns-query
Dans windows, vous devez param\u00e9trer Adguard pour chaque carte r\u00e9seau que vous souhaitez utiliser.
Manuel
Tous les programmes de votre machine utilisant cette carte r\u00e9seau seront filtr\u00e9s par Adguard.
"},{"location":"serveex/adguard/#ajouter-des-filtres","title":"Ajouter des filtres","text":"Objectifs
Authentik est un outil d'authentification unique permettant de vous logger une seule fois sur les plateformes compatibles OpenID. Il permet \u00e9galement de s\u00e9curiser l'acc\u00e8s aux services que vous exposez, en s'injectant via SWAG aux requetes vers vos services.
Ainsi, si vous exposez Dockge sur internet via dockge.mondomaine.fr
, au moment de l'acc\u00e8s \u00e0 cette page, vous tomberez sur une page de login d'authentik. Si vous avez d\u00e9j\u00e0 \u00e9t\u00e9 identifi\u00e9 sur un autre service s\u00e9curis\u00e9 par authentik auparavant, alors vous serez d\u00e9j\u00e0 identifi\u00e9. cela permet d'avoir \u00e0 vous identifiez qu'une seule fois par jour sur l'ensemble des services prot\u00e9g\u00e9s par authentik.
Authentik permet aussi d'utiliser le multi-facteur, notamment par TOTP (code g\u00e9n\u00e9r\u00e9 par une application d'authentification de votre choix. Enfin, authentik permet aussi de se connecter directement via un compte Microsoft ou Google, si vous avez configur\u00e9 une application d'un de ces services.
C'est une bonne mani\u00e8re de se passer de VPN pour exposer vos services, et d'exposer des services qui ne sont pas prot\u00e9g\u00e9s par du MFA voir pas prot\u00e9g\u00e9s par des login (comme le dashboard de swag).
Authentik dipose d'une doc tr\u00e8s fournie et des fabuleux tuto de Cooptonian. Ici, nous montrerons juste les bases, avec l'exemple de l'exposition de Dockge.
Deux modes principaux sont \u00e0 connaitre:
Les deux modes son configurables application par application.
"},{"location":"serveex/authentik/#installation","title":"Installation","text":"Structure des dossiers :
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 authentik\n \u251c\u2500\u2500 .env\n \u251c\u2500\u2500 compose.yml\n \u251c\u2500\u2500 media\n \u251c\u2500\u2500 certs\n \u251c\u2500\u2500 custom-template\n \u2514\u2500\u2500 ssh\n
Cr\u00e9ez les dossiers :
$ sudo mkdir -p /docker/authentik/media /docker/authentik/certs /docker/authentik/custom-template /docker/authentik/ssh\n
Positionnez vous dans le dossier authentik
et g\u00e9n\u00e9rez un mot de passe et une cl\u00e9 secrete que l'on va int\u00e9grer dans le .env :
$ sudo echo \"PG_PASS=$(openssl rand 36 | base64)\" >> .env\n$ sudo echo \"AUTHENTIK_SECRET_KEY=$(openssl rand 60 | base64)\" >> .env\n
Info
Afin de g\u00e9n\u00e9rer la cl\u00e9, nous avons cr\u00e9\u00e9 les dossiers en amont du d\u00e9ploiement via Dockge. Dockge vous empechera de cr\u00e9er une stack du meme nom dans ces dossiers s'il n'existe pas de compose.yml
. Il faut donc cr\u00e9er un compose.yml
vide afin que ce dernier la reconnaisse comme existante dans les stacks inactives :
$ sudo vi /docker/authentik/compose.yml\n
Ouvrez dockge, et cherchez \"authentik\" dans les stack inactives. Nommez la stack authentik et collez la configuration suivante, en changeant les chiffres de {AUTHENTIK_TAG:-2024.2.3}
par la derni\u00e8re version de Authentik.
version: \"3.4\"\nservices:\n\n postgresql:\n image: docker.io/library/postgres:12-alpine\n container_name: authentik-postgresql\n restart: unless-stopped\n healthcheck:\n test:\n - CMD-SHELL\n - pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}\n start_period: 20s\n interval: 30s\n retries: 5\n timeout: 5s\n volumes:\n - database:/var/lib/postgresql/data\n environment:\n POSTGRES_PASSWORD: ${PG_PASS:?database password required}\n POSTGRES_USER: ${PG_USER:-authentik}\n POSTGRES_DB: ${PG_DB:-authentik}\n env_file:\n - .env\n networks:\n - swag\n\n redis:\n image: docker.io/library/redis:alpine\n container_name: authentik-redis\n command: --save 60 1 --loglevel warning\n restart: unless-stopped\n healthcheck:\n test:\n - CMD-SHELL\n - redis-cli ping | grep PONG\n start_period: 20s\n interval: 30s\n retries: 5\n timeout: 3s\n volumes:\n - redis:/data\n networks:\n - swag\n\n server:\n image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.3}\n container_name: authentik-server\n restart: unless-stopped\n command: server\n environment:\n AUTHENTIK_REDIS__HOST: redis\n AUTHENTIK_POSTGRESQL__HOST: postgresql\n AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}\n AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}\n AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}\n volumes:\n - ./media:/media\n - ./custom-templates:/templates\n - ./auth.css:/web/dist/custom.css\n - ./ssh:/authentik/.ssh\n env_file:\n - .env\n ports:\n - ${COMPOSE_PORT_HTTP:-9000}:9000\n - ${COMPOSE_PORT_HTTPS:-9443}:9443\n depends_on:\n - postgresql\n - redis\n networks:\n - swag\n\n worker:\n image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.3}\n container_name: authentik-worker\n restart: unless-stopped\n command: worker\n environment:\n AUTHENTIK_REDIS__HOST: redis\n AUTHENTIK_POSTGRESQL__HOST: postgresql\n AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}\n AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}\n AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}\n # `user: root` and the docker socket volume are optional.\n # See more for the docker socket integration here:\n # https://goauthentik.io/docs/outposts/integrations/docker\n # Removing `user: root` also prevents the worker from fixing the permissions\n # on the mounted folders, so when removing this make sure the folders have the correct UID/GID\n # (1000:1000 by default)\n user: root\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - ./media:/media\n - ./certs:/certs\n - ./custom-templates:/templates\n - ./auth.css:/web/dist/custom.css\n - ./ssh:/authentik/.ssh\n env_file:\n - .env\n depends_on:\n - postgresql\n - redis\n networks:\n - swag\n\nvolumes:\n database:\n driver: local\n redis:\n driver: local\n
Note
Ici nous partons du principe que le r\u00e9seau de Swag est swag_default
.
Dans le point .env
, les variables PG_PASS
et AUTHENTIK_SECRET_KEY
sont d\u00e9j\u00e0 remplies. D\u00e9ployez la stack.
Vous pouvez alors commencer le set-up d'authentik en tappant http://ipduserveur:9000/if/flow/initial-setup/
.
Attention
Il est conseill\u00e9 de cr\u00e9er un nouveau compte admin, et de d\u00e9sactiver le compte admin de base akadmin
.
Pour \u00eatre utilisable hors de chez vous, vous devez exposer authentik.
Au pr\u00e9alable
Nous partons du principe quer vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type auth.mondomaine.fr
avec pour CNAME mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Ouvrez le fichier authentik-server.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/authentik-server.conf\n
V\u00e9rifiez que dans chaque cas les variables ci-dessous sont correctes :
set $upstream_authentik authentik-server;\nproxy_pass http://$upstream_authentik:9000;\n
Si ce n'est pas le cas, passez en mode modification en tapant i
et \u00e9ditez les. Sauvegardez et quittez en tapant sur Echap
puis :x
.
Cr\u00e9ez le fichier auth.subdomain.conf
$ sudo vi /docker/swag/config/nginx/proxy-confs/auth.subdomain.conf\n
Appuyez sur i
pour rentrer en mode modification puis collez la configuration suivante :
## Version 2023/05/31\n# make sure that your authentik container is named authentik-server\n# make sure that your dns has a cname set for authentik\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name auth.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n location / {\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app authentik-server;\n set $upstream_port 9000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/authentik)?/api {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app authentik-server;\n set $upstream_port 9000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Sauvegardez et quittez en appuyant sue Echap
puis en tapant :x
Et voil\u00e0 ! Vous pouvez acc\u00e9der \u00e0 authentik via https://auth.mondomaine.fr
Tout l'int\u00e9r\u00eat de authentik c'est de disposer du multifacteur pour toutes les apps que l'on prot\u00e8gera.
https://auth.mondomaine.fr
Et voil\u00e0, vous serez invit\u00e9 \u00e0 saisir un code \u00e0 usage unique \u00e0 chaque connexion.
"},{"location":"serveex/authentik/#proteger-une-app-native","title":"Prot\u00e9ger une app native","text":"Authentik est compatible nativement avec un certain nombre d'application, vous retrouverez la liste et le support ici
"},{"location":"serveex/authentik/#proteger-une-app-par-reverse-proxy","title":"Prot\u00e9ger une app par reverse proxy","text":"Swag permet d'intercaler la page d'authentik entre la requ\u00eate et l'acc\u00e8s \u00e0 votre service. Pour cela il va falloir :
Pourquoi le faire alors que Dockge a d\u00e9j\u00e0 une page d'authentification ? Tout simplement parce que l'authentification HTTP utilis\u00e9e par Dockge est faible. Avec Authentik, vous aurez directement une authentification forte par MFA, et vous serez logg\u00e9 automatiquement \u00e0 toutes vos apps d\u00e9j\u00e0 prot\u00e9g\u00e9es par authentik. Cela permet de s\u00e9curiser l'acc\u00e8s \u00e0 Dockge et aux autres apps que vous prot\u00e9gerez, sans avoir \u00e0 passer par un VPN.
"},{"location":"serveex/authentik/#configuration-de-authentik","title":"Configuration de Authentik","text":"dockge
en la faisant passer \u00e0 droite et validez.Ensuite rendez-vous dans le fichier dockge.mondomaine.fr
.
$ sudo vi /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf\n
Puis entrez en modification en appuyant sur i
et enlevez les #
des deux lignes #include /config/nginx/authentik-server.conf;
.
Appuyez sur Echap
puis tapez :x
et appuyez sur Entr\u00e9e
pour sauvegarder et quitter.
Et voil\u00e0 ! En tapant https://dockge.mondomaine.fr
, vous tomberez \u00e0 pr\u00e9sent sur la mire d'authentification de authentik.
Astuce
Dans Dockge, dans les param\u00e8tres, vous pouvez d\u00e9sactiver l'authentification de Dockge afin de ne pas avoir \u00e0 vous identifier deux fois. Attention, cela voudra dire que si vous avez expos\u00e9 un port sur votre r\u00e9seau local, il n'y aura plus aucune authentification.
Note
Vous pouvez r\u00e9p\u00e9tez l'op\u00e9ration pour chaque application que vous souhaitez prot\u00e9ger (si elle ne dipose pas d'int\u00e9gration directe avec Authentik).
Voil\u00e0 votre nouvelle architecture :
"},{"location":"serveex/authentik/#proteger-un-service-sur-un-serveur-distant","title":"Prot\u00e9ger un service sur un serveur distant","text":"Dans le cas d'une application native (via OAuth 2.0 ou autre), rien ne change.
Dans le cas d'une application non native \u00e0 prot\u00e9ger derri\u00e8re un reverse proxy, vous devrez d\u00e9ployer un avant-poste. Un avant-poste est un conteneur qui jouera le r\u00f4le de proxy local, c'est \u00e0 dire que c'est vers ce conteneur que les requ\u00eates d'authentification de vos applications seront redirig\u00e9es. C'est le seul qui est autoris\u00e9 \u00e0 dialoguer avec l'API de votre instance authentik.
Pr\u00e9requis
Pour d\u00e9ployer cet avant-poste, vous aurez besoin :
Ce conteneur redirigera ensuite les requetes vers votre instance Authentik principale, \u00e0 travers le web (ou votre r\u00e9seau local). Le serveur executera les controle et renverra la r\u00e9ponse \u00e0 l'avant-poste, qui bloquera ou non la connexion \u00e0 l'app prot\u00e9g\u00e9e.
"},{"location":"serveex/authentik/#configuration-dauthentik","title":"Configuration d'Authentik","text":"Cr\u00e9ez vos fournisseurs et applications comme nous l'avons vu plus haut.
Puis, dans votre panneau admin, allez dans la rubrique Applications > Avant-postes, puis cr\u00e9ez un nouvel avant-poste.
Remplissez comme suit :
Champs ValeurNom
Le nom que vous souhaitez Type
Proxy
Int\u00e9gration
Laissez vide Applications
S\u00e9lectionnez le ou les applications que vous avez cr\u00e9\u00e9es pr\u00e9c\u00e9demment Dans la section Param\u00e8tres avanc\u00e9s
, supprimez l'existant, et compl\u00e9tez comme suit :
log_level: info\ndocker_labels: null\nauthentik_host: https://domaine_de_votre_serveur_authentik/\nobject_naming_template: ak-outpost-%(name)s\nauthentik_host_insecure: false\ncontainer_image:\ndocker_network: null\ndocker_map_ports: true\ndocker_labels: null\n
Enrtegistrez et quittez.
Sur l'\u00e9cran affichant les avant-postes cr\u00e9\u00e9s, vous verrez le nouvel avant-poste que vous venez de cr\u00e9er. A la fin de la ligne, cliquez sur afficher les informations, et copiez pr\u00e9cieusement le jeton d'acc\u00e8s.
"},{"location":"serveex/authentik/#configuration-de-la-machine-distante","title":"Configuration de la machine distante","text":"Nous partons du principe que vous avez d\u00e9j\u00e0 install\u00e9 Docker et SWAG sur cette machine distante.
Sur votre machine distante, \u00e0 l'aide de Dockge, cr\u00e9ez une stack authentik-outpost
.
Si vous n'avez pas install\u00e9 Dockge, cr\u00e9ez un dossier /docker/authentik-outpost
, ou directement en ligne de commande :
$ sudo mkdir -P /docker/authentik-outpost\n
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
Cr\u00e9ez le fichier compose.yaml
ou copiez la configuration directement dans le champs si vous avez Dockge Dockge)
En ligne de commande :
$ sudo vi /docker/authentik-outpost/compose.yaml\n
Entrez en mode modification avec i
et collez la configuration suivante, en changeant les chiffres de {AUTHENTIK_TAG:proxy:2024.2.3}
par la meme version que celle de votre serveur Authentik. version: \"3.5\"\nservices:\n authentik_proxy:\n container_name: authentik-outpost\n image: ghcr.io/goauthentik/proxy:2024.2.3\n # Optionally specify which networks the container should be\n # might be needed to reach the core authentik server\n restart: unless-stopped\n env_file:\n - .env\n networks:\n - swag_default\n # - foo\n ports:\n - 9000:9000\n - 9443:9443\n environment:\n AUTHENTIK_HOST: ${HOST}\n AUTHENTIK_INSECURE: \"false\"\n AUTHENTIK_TOKEN: ${TOKEN}\n # Starting with 2021.9, you can optionally set this too\n # when authentik_host for internal communication doesn't match the public URL\n # AUTHENTIK_HOST_BROWSER: https://external-domain.tld\nnetworks:\n swag_default:\n name: swag_default\n external: true\n
Appuyez sur Echap
puis tapez :x
et appuyez sur Entr\u00e9e
pour sauvegarder et quitter.
Note
Ici nous partons du principe que le r\u00e9seau de Swag est swag_default
.
Creez (ou remplissez directement si vous avez Dockge) le fichier .env
dans le m\u00eame dossier.
En ligne de commande :
$ sudo vi /docker/authentik-outpost/.env\n
Entrez en mode modification avec i
et collez la configuration suivante
HOST=\nTOKEN=\n
Remplissez comme suit Variable Valeur Exemple HOST=
L'url de votre serveur authentik https://auth.domaine.fr
TOKEN=
Le token que vous avez pr\u00e9c\u00e9demment copi\u00e9 pr\u00e9cieusement Q2pVEqsTNRkJSO9SkJzU3KZ2
Appuyez sur Echap
puis tapez :x
et appuyez sur Entr\u00e9e
pour sauvegarder et quitter.
Si vous avez Dockge, d\u00e9ployez la stack.
Sinon, via le terminal :
$ cd /docker/authentik-outpost/\n$ sudo docker compose up -d\n
Le conteneur est en route, vous pouvez v\u00e9rifier son \u00e9tat dans votre panneau admin de votre instance Authentik, section Applications > Avant-postes.
Nous allons a pr\u00e9sent configurer SWAG.
Ouvrez le fichier authentik-server.conf
.
$ sudo vi /docker/swag/config/nginx/authentik-server.conf\n
Dans le fichier, passez en mode modification en tapant i
et changez authentik-server
par authentik-outpost
comme suit :
set $upstream_authentik authentik-outpost;\nproxy_pass http://$upstream_authentik:9000;\n
Sauvegardez et quittez en tapant sur Echap
puis :x
et sur Entr\u00e9e
.
Ensuite, configurez les applications \u00e0 prot\u00e9ger selon si elles sont natives ou par proxy comme vous l'avez fait sur votre serveur principal.
"},{"location":"serveex/authentik/#migrer-une-base-authentik","title":"Migrer une base authentik","text":"Sur la machine d'origine, dumper la bdd :
$ sudo docker exec authentik-postgres pg_dump -U authentik -F t authentik > /path/to/mydb.tar\n
Puis l'envoyer sur la machine cible. Sur la machine cible, copier le fichier dans le container docker
$ cp /path/to/mydb.tar authentik-postgres:/path/to/wherever\n
(Optionnel) Purgez les tables existantes :
$ sudo docker exec -i authentik-postgres psql -U authentik -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'authentik' AND pid <> pg_backend_pid();\" && \\\n$ sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c \"DROP DATABASE IF EXISTS authentik;\" && \\\n$ sudo docker exec -i authentik-postgres psql -U authentik -d postgres -c \"CREATE DATABASE authentik;\" && \\\n
Restaurez la bdd
$ sudo docker exec authentik-postgresql pg_restore -U authentik -d authentik /path/to/wherever/mydb.tar\n
"},{"location":"serveex/cloudflare/","title":"Cloudflare Zero Trust","text":"Objectifs
L'architecture Zero Trust est la pratique consistant \u00e0 concevoir des syst\u00e8mes fond\u00e9s sur le principe de \u00ab ne jamais faire confiance, toujours v\u00e9rifier \u00bb, par opposition au principe traditionnel de \u00ab confiance, mais v\u00e9rifier \u00bb. Ce concept est devenu tr\u00e8s populaires r\u00e9cemment, \u00e0 la suite des attaques toujours plus nombreuses concernant les donn\u00e9es des utilisateurs. C'est un concept tr\u00e8s large, nous nous concentrerons sur l\u2019application du Zero Trust aux services Web que nous h\u00e9bergeons.
Les tunnels Cloudflare offrent un moyen simple d'arriver au Zero Trust, en s'appuyant sur SWAG et Authentik.
Pour le dire simplement, les Tunnels Cloudflare permettent notamment de :
Ici, nous expliquerons comment associer SWAG aux tunnels Cloudflare.
Limitations
Avant toute chose, vous devez d\u00e9finir Cloudflare comme gestionnaire de votre zone DNS. Si vous avez r\u00e9serv\u00e9 votre nom de domaine chez Cloudflare, c'est d\u00e9j\u00e0 le cas. Sinon, renseignez vous aupr\u00e8s de votre registrar sur comment ajouter des DNS externes. Cloudflare dispose d'une documentation expliquant pas \u00e0 pas comment param\u00e9trer une Zone DNS, que vous ayez un domaine externe ou reserv\u00e9 chez Cloudflare.
Si vous avez qu'un seul serveur \u00e0 prot\u00e9ger derri\u00e8re Cloudflare, vous pouvez supprimer l'ensemble des enregistrement DNS existant, par d\u00e9faut le domaine et tout ses sous-domaines seront directement redirig\u00e9s vers le tunnel.
Si vous avez des sous-domaines \u00e0 rediriger vers d'autres serveurs, vous pourrez toujours les d\u00e9clarer dans la zone DNS \u00e0 l'aide d'un enregistrement A.
Si vous avez plusieurs serveurs et donc plusieurs tunnels pour un meme domaine principal, voyez ici.
"},{"location":"serveex/cloudflare/#cle-api","title":"Cl\u00e9 API","text":"Pour commencer, nous devons cr\u00e9er un nouveau jeton API pour Cloudflare et r\u00e9cup\u00e9rer nos identifiants de zone et de compte.
Sur le tableau de bord de Cloudflare, dans la page de pr\u00e9sentation de votre domaine, vous pouvez voir les identifiants de zone
et de compte
en bas \u00e0 droite de l'\u00e9cran. Copiez pr\u00e9cieusement ces deux identifiants.
Juste en dessous d'eux, il y a un lien intitul\u00e9 Obtenez votre jeton API. Cliquez dessus. Le p\u00e9rim\u00e8tre dont nous avons besoin pour le jeton doit inclure Zone:DNS:Edit
et Account:Cloudflare Tunnel:Edit
. Assurez-vous que votre page de cr\u00e9ation de token ressemble \u00e0 celle illustr\u00e9e dans la capture d'\u00e9cran ci-dessous.
Une fois que nous aurons enregistr\u00e9, notre jeton sera affich\u00e9 une fois. copiez le pr\u00e9cieusement, car vous ne pourrez plus le revoir apr\u00e8s la fermeture.
"},{"location":"serveex/cloudflare/#cloudflare-zero-trust_1","title":"Cloudflare Zero Trust","text":"Vous devez vous inscrire \u00e0 Cloudflare Teams pour pouvoir acc\u00e9der au tableau de bord Zero Trust qui g\u00e8re les tunnels et les politiques d'acc\u00e8s. Il s'agit d'un service premium, mais ils proposent un forfait gratuit pour un maximum de 50 utilisateurs, ce qui devrait suffire pour votre Home Lab. Gardez \u00e0 l\u2019esprit que puisqu\u2019il s\u2019agit d\u2019une fonctionnalit\u00e9 premium, ils demandent une carte de cr\u00e9dit valide lors de l\u2019inscription, mais avec le forfait gratuit, il n'y aura aucun frais.
Inscrivez-vous via ce lien.
"},{"location":"serveex/cloudflare/#configuration-de-swag","title":"Configuration de Swag","text":"Info
Nous partons du principe que vous avez le domaine mondomaine.fr
avec les DNS qui pointent bien vers ceux de Cloudflare, comme vu pr\u00e9c\u00e9demment.
SWAG dispose de deux Docker Mods
permettant d'y int\u00e9grer :
Ces deux mods, fusionn\u00e9s dans le conteneur de SWAG, n\u00e9cessitent un peu de configuration.
"},{"location":"serveex/cloudflare/#configuration-du-tunnel","title":"Configuration du tunnel","text":"Pour configurer les tunnels, nous aurons besoin de cr\u00e9er un fichier tunnelconfig.yml
auquel nous ferons appel dans le compose.yaml
de SWAG.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/tunnelconfig.yml\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous
ingress:\n - hostname: mondomaine.fr\n service: https://mondomaine.fr\n - hostname: \"*.mondomaine.fr\"\n service: https://mondomaine..fr\n - service: http_status:404\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
A pr\u00e9sent, nous allons configurer le bon fonctionnement du mode Cloudflare Real IP
Ouvrez le fichier nginx.conf
$ sudo vi /docker/swag/config/nginx/nginx.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous \u00e0 la fin de la section http
real_ip_header X-Forwarded-For;\nreal_ip_recursive on;\ninclude /config/nginx/cf_real-ip.conf;\nset_real_ip_from 127.0.0.1;\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
."},{"location":"serveex/cloudflare/#docker-compose","title":"Docker compose","text":"Ouvrez Dockge, \u00e9ditez la stack SWAG avec cette configuration
version: \"3.8\"\nservices:\n swag:\n image: lscr.io/linuxserver/swag:latest\n container_name: swag\n cap_add:\n - NET_ADMIN\n env_file:\n - .env\n environment:\n - DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload|linuxserver/mods:universal-cloudflared|linuxserver/mods:swag-cloudflare-real-ip\n - PUID=${PUID}\n - PGID=${PGID}\n - TZ=Europe/Paris\n - URL=${DOMAIN}\n - SUBDOMAINS=wildcard\n - VALIDATION=dns\n - DNSPLUGIN=${PLUGIN}\n - EMAIL=${EMAIL}\n - CF_ZONE_ID=${ZONE_ID}\n - CF_ACCOUNT_ID=${ACCOUNT_ID}\n - CF_API_TOKEN=${API_TOKEN}\n - CF_TUNNEL_NAME=${TUNNEL_NAME}\n - CF_TUNNEL_PASSWORD=${TUNNEL_PW}\n - FILE__CF_TUNNEL_CONFIG=/config/tunnelconfig.yml\n extra_hosts:\n - ${DOMAIN}:127.0.0.1\n ports:\n - 81:81\n volumes:\n - /docker/swag/config:/config\n - /docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro\n restart: unless-stopped\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n swag:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Et renseignez le .env
les infos que vous avez trouv\u00e9es et not\u00e9es tout au long de ce guide
PUID=\nPGID=\nDOMAIN=\nPLUGIN=\nEMAIL=\nZONE_ID=\nACCOUNT_ID=\nAPI_TOKEN=\nTUNNEL_NAME=\nTUNNEL_PW=\n
Variable Valeur Exemples PUID=
A renseigner avec les infos de votre user (trouvables via la commande $ id nomdutilisateur
) 1000
GUID=
A renseigner avec les infos de votre user (trouvables via la commande $ id nomdutilisateur
) 1000
DOMAIN=
Le domaine que vous avez r\u00e9serv\u00e9 mondomaine.fr
PLUGIN=
Le fournisseur de zone DNS, ici Cloudflare. Pensez \u00e0 renseigner cloudflare.ini
(voir guide de swag) cloudflare
EMAIL=
Votre email pour le certificat votre@email.fr
ZONE_ID=
L'ID de Zone que vous avez not\u00e9 pr\u00e9c\u00e9demment aNhcz1l3JfWbFZo2XMpzQlP2iOqk
ACCOUNT_ID=
L'ID de Compte que vous avez not\u00e9 pr\u00e9c\u00e9demment buKsjNHLyzKMM1qYnzOy4s7SHfly
API_TOKEN=
Le jeton d'API que vous avez not\u00e9 pr\u00e9c\u00e9demment 53ydYus9TFFk1DOXNdP87iIcJtQjoW
TUNNEL_NAME=
Le nom de votre tunnel mon_tunnel
TUNNEL_PW=
Un mot de passe fort g\u00e9n\u00e9r\u00e9 al\u00e9atoirement iSzKRmP4VbnlsMvdSdgBEJiJi
Une fois fait, d\u00e9ployez la stack. Cela prendra un peu de temps, v\u00e9rifiez les logs, vous devriez arriver \u00e0 serveur ready
Une fois le conteneur en ligne, v\u00e9rifiez dans cloudflare que votre tunnel est bien pr\u00e9sent dans la section Networks > Tunnels de Cloudflare Zero Trust. Par d\u00e9faut, l'ensemble des sous domaine sont redirig\u00e9s vers le tunnel, sans avoir besoin de les d\u00e9clarer dans votre zone DNS.
Astuce
Si vous voulez exposer un service sans tunnel, vous pouvez toujours d\u00e9clarer un enregistrement A dans votre zone DNS. En cas de probl\u00e8me de r\u00e9solution, d\u00e9sactivez la fonction proxy pour cet enregistrement. Par exemple pour sous.mondomaine.fr
Par d\u00e9faut, l'ensemble des sous domaine de votre nom de domaine pointent vers le tunnel que vous avez cr\u00e9\u00e9. 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.
Vous devrez ensuite dans votre zone DNS rediriger les sous domaine souhait\u00e9 vers le bon tunnel. Pour cela, faites comme suit.
Rendez-vous dans dans la section Networks > Tunnels de Cloudflare Zero Trust.
Notez les deux ID des tunnels
Rendez-vous \u00e0 pr\u00e9sent dans la section DNS de cloudflare, apr\u00e8s avoir cliqu\u00e9 sur le nom de domaine concern\u00e9.
Cliquez sur ajouter un enregistrement
et ajoutez deux enregistrements comme suit en ajoutant bien .cfargotunnel.com
apr\u00e8s vos id de tunnels.
CNAME
sousdomaine1
votreiddetunnel1.cfargotunnel.com
CNAME
sousdomaine2
votreiddetunnel2.cfargotunnel.com
Si vous avez de nombreux sous-domaines, vous pouvez d\u00e9clarer un seul sous domaine par tunnel comme ci-dessus, puis d\u00e9clarer vos autres sous domaine en les faisant pointer vers ces sous domaines de r\u00e9f\u00e9rence.
Ainsi, en cas de changement d'id de tunnel, vous n'aurez qu'\u00e0 le changer que pour un seul sous-domaine. Par exemple :
Le serveur de sousdomaine1
doit egalement etre la cible de sub1, et sub2 :
CNAME
sub1
sousdomaine1
CNAME
sub2
sousdomaine1
Le serveur de sousdomaine2
doit egalement etre la cible de sub3, et sub4 :
CNAME
sub3
sousdomaine2
CNAME
sub4
sousdomaine2
Objectifs
code-server est un conteneur permettant d'acc\u00e9der \u00e0 vscode en web-ui dans un environnement linux. C'est litt\u00e9ralement vscode et vos projets directement dans votre poche, disponibles partout.
"},{"location":"serveex/code-server/#installation","title":"Installation","text":"Info
Pour cette installation nous utiliserons l'image maintenue par LinuxServer.io.
Structure des dossiers
root\n\u251c\u2500\u2500 docker\n\u2502 \u2514\u2500\u2500 code-server\n\u2502 \u2514\u2500\u2500 config\n\u2514\u2500\u2500 #n'importe quel dossier \u00e0 monter dans vscode\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack code-server
puis copiez collez ceci :
services:\n code-server:\n image: lscr.io/linuxserver/code-server:latest\n container_name: code-server\n environment:\n - PUID=${PUID}\n - PGID=${GUID}\n - TZ=Etc/UTC\n - HASHED_PASSWORD=${PW}\n volumes:\n - /docker/code-server/config:/config\n # ajoutez vos dossier \u00e0 monter dans vscode\n # - /chemin/vers/dossier:/dossier\n ports:\n - 8443:8443\n restart: unless-stopped\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n code-server:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Choisissez un mot de passe et g\u00e9n\u00e9rez un hash
$ echo -n \"votremotdepasse\" | npx argon2-cli -e\n
Notez pr\u00e9cieusement le r\u00e9sultat. Trouvez votre PUID et votre GUID en tapant la commande suivante :
$ id nomdutilisateur\n
Et renseignez le .env
avec les infos que vous avez trouv\u00e9es, par exemple :
PW='$argon2i$v=19$m=4096,t=3,p=1$wST5QhBgk2lu1ih4DMuxvg$LS1alrVdIWtvZHwnzCM1DUGg+5DTO3Dt1d5v9XtLws4'\nPUID=1000\nGUID=1000\n
Attention
Pensez \u00e0 mettre un guillemet simple '
au debut et \u00e0 la fin du hash
D\u00e9ployez le conteneur et rendez-vous sur http://ipduserveur:8443
. Et voil\u00e0, votre instance code-server en webui est disponible !
Vous pouvez monter les dossiers \u00e0 partager dans vscode en ajoutant les volumes concern\u00e9s dans le compose.yaml (ou via dockge), et en red\u00e9ployant le conteneur.
services:\n code-server:\n #...\n volumes:\n - /chemin/vers/dossier:/dossier\n
Une fois dans vscode, vous pourrez acc\u00e9der au dossier."},{"location":"serveex/code-server/#exposer-code-server-avec-swag","title":"Exposer code-server avec Swag","text":"Tout l'int\u00e9r\u00eat d'une telle solution, c'est de pouvoir y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer coder-server via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type code.mondomaine.fr
avec pour CNAME
mondomaine.fr
et \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans Dockge ouvrez la stack code-server
et ajoutez le r\u00e9seau de Swag. Pour rappel
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les dossiers de Swag, cr\u00e9ez le fichier code.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/code.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name code.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app code-server;\n set $upstream_port 8443;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 code-server !
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant code.subodmain.conf
et en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Docker, pour installer des services d\u00e9ployables en quelques secondes, et les manager en quelques commandes/clics.
Objectif
Installez les repo Docker et la cl\u00e9 GPG
# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\n\n# Add the repository to Apt sources:\necho \\\n \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \\\n $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | \\\n sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\nsudo apt-get update\n
Installez les package $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n
Et voil\u00e0 ! Plus d'options Installer docker pour Debian 12
Info
Dans toute la suite, on part du principe que les stacks sont install\u00e9es dans le dossier /docker
, cr\u00e9\u00e9 grace \u00e0 la commande :
$ sudo mkdir /docker\n
"},{"location":"serveex/docker/#installer-dockge-pour-gerer-et-deployer-les-conteneurs","title":"Installer dockge pour g\u00e9rer et d\u00e9ployer les conteneurs","text":"Dockge est un outil web permettant de cr\u00e9er, configurer, lancer et g\u00e9rer des conteneurs pour Docker. C'est une interface simple, intuitive, qui est plus l\u00e9g\u00e8re et plus facile pour les d\u00e9butants que d'utiliser docker en CLI ou Portainer.
"},{"location":"serveex/docker/#configuration","title":"Configuration","text":"Plan des fichiers que nous allons modifier :
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 dockge \n \u2514\u2500\u2500 compose.yml\n
Cr\u00e9ez le dossier de la stack :
$ cd /docker\n$ sudo mkdir dockge\n
Puis cr\u00e9ez le fichier compose.yml
dans ce dossier avec l'outil vim que vous avez install\u00e9 pr\u00e9alablement (dans les outils CLI)
$ cd /docker/dockge\n$ sudo vi compose.yml\n
Appuyer sur i
pour rentrer en modif et copiez-collez ceci. version: \"4\"\nservices:\n dockge:\n image: louislam/dockge:1\n restart: unless-stopped\n container_name: dockge\n ports:\n - 3555:5001 # (1)!\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /docker/dockge/data:/app/data\n - /docker:/docker\n environment:\n - DOCKGE_STACKS_DIR=/docker\n
Appuyez sur Echap
pour quitter le mode modif et tapez :x
pour enregistrer et quitter
Pour lancer le conteneur, tapez :
$ cd /docker/dockge\n$ sudo docker compose up -d\n
Une fois lanc\u00e9, tapez dans votre navigateur http://ipduserveur:3555
et vous tomberez sur la page de login. Plus d'info sur dockge et comment l'utiliser
Et voil\u00e0, vous avez install\u00e9 docker et un outil facile pour manager vos conteneurs !
"},{"location":"serveex/docker/#watchtower-pour-mettre-a-jour-automatiquement-les-conteneurs","title":"Watchtower, pour mettre \u00e0 jour automatiquement les conteneurs","text":"Watchtower est un conteneur qui permet de v\u00e9rifier les mise \u00e0 jour et d'installer les nouvelles images sans effort, en ajoutant un simple label dans les fichiers compose.yml
de vos conteneurs.
compose
watchtower
version: \"2.3\"\nservices:\n watchtower:\n container_name: watchtower\n image: containrrr/watchtower:latest\n restart: unless-stopped\n env_file:\n - .env\n environment:\n - TZ=Europe/Paris\n - WATCHTOWER_SCHEDULE=${SCHEDULE}\n - WATCHTOWER_LABEL_ENABLE=true # (1)!\n - WATCHTOWER_CLEANUP=true\n - WATCHTOWER_REMOVE_VOLUMES=true\n #Notifications Discord - d\u00e9commenter si utilis\u00e9\n #- WATCHTOWER_NOTIFICATIONS=slack\n #- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower\n #- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL}\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n
com.centurylinklabs.watchtower.enable=true
Puis remplissez les donn\u00e9es ci-dessous dans l'encart \".env\" de Dockge
SCHEDULE=\nWH_URL=\n
Propri\u00e9t\u00e9 Valeur Exemples SCHEDULE
Format cron 0 0 6 * * *
(tous les jours \u00e0 6h du matin) WH_URL
URL du webhook de votre serveur Discord - ajouter /slack
\u00e0 la fin https://serveurdiscord/valeur/slack
Pour que Watchtower surveille vos autres conteneurs, ajoutez ceci \u00e0 vos conteneurs dans leur compose.yml :
labels:\n - com.centurylinklabs.watchtower.enable=true\n
Puis relancez les stacks modifi\u00e9s. Et voil\u00e0, vous avez une bonne carcasse pour commencer \u00e0 installer les services qui vous plaisent !
"},{"location":"serveex/dozzle/","title":"Dozzle","text":"Objectifs
Dozzle est un conteneur permettant d'acc\u00e9der au logs de vos conteneurs et de les afficher en temps r\u00e9el de via une interface user-friendly. C'est une mani\u00e8re simple de naviguer entre les logs et de retrouver des informations dans l'historique.
"},{"location":"serveex/dozzle/#installation","title":"Installation","text":"Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 dozzle\n \u2514\u2500\u2500 data\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack dozzle
puis copiez collez ceci :
version: \"3\"\nservices:\n dozzle:\n container_name: dozzle\n image: amir20/dozzle:latest\n ports:\n - 9135:8080\n env_file:\n - .env\n environment:\n - DOZZLE_AUTH_PROVIDER=simple\n - DOZZLE_HOSTNAME=${DOMAIN}\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /docker/dozzle/data:/data\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n dozzle:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Renseignez le .env
votre nom de domaine, par exemple
DOMAIN=dozzle.mondomaine.fr\n
D\u00e9ployez le conteneur et rendez-vous sur http://ipduserveur:9135
. Et voil\u00e0, votre instance Dozzle en webui est disponible !
Vous aurez peut-etre envie d'y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer Dozzle via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type dozzle.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans Dockge ouvrez la stack dozzle
et ajoutez le r\u00e9seau de Swag. Pour rappel
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les dossiers de Swag, cr\u00e9ez le fichier dozzle.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name dozzle.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app dozzle;\n set $upstream_port 8080;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 Dozzle !
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant dozzle.subodmain.conf
et en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Objectifs
File Browser est une interface permettant d'acc\u00e9der aux fichiers de votre serveur et de les \u00e9diter.
"},{"location":"serveex/filebrowser/#installation","title":"Installation","text":"Ouvrez Dockge, cliquez sur compose
, appelez la stack filebrowser
puis copiez collez ceci :
services:\n filebrowser:\n container_name: filebrowser\n volumes:\n - /:/srv\n - /docker/filebrowser/config:/config/\n ports:\n - 8010:80\n image: filebrowser/filebrowser:s6\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n filebrowser:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
D\u00e9ployez le conteneur et rendez-vous sur http://ipduserveur:8010
. Et voil\u00e0, votre instance File Browser en webui est disponible !
Vous aurez peut-etre envie d'y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer IT Tools via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type files.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans Dockge ouvrez la stack filebrowser
et ajoutez le r\u00e9seau de Swag. Pour rappel
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les dossiers de Swag, cr\u00e9ez le fichier files.subdomain.conf
.
$ sudo vi /docker/swag/config/nginx/proxy-confs/files.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name files.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app filebrowser;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 File Browser !
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant files.subodmain.conf
et en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Objectifs
Gitea est une plateforme DevOps, permettant de g\u00e9rer des d\u00e9pots, \u00e0 la mani\u00e8re de GitHub mais chez vous en selfhost.
"},{"location":"serveex/gitea/#installation","title":"Installation","text":"Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 gitea\n \u2514\u2500\u2500 data\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack gitea
puis copiez collez ceci :
version: \"3\"\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:1.22.0\n container_name: gitea\n environment:\n - USER_UID=${UID}\n - USER_GID=${GID}\n - TZ=Europe/Paris\n restart: unless-stopped\n networks:\n - gitea\n volumes:\n - ./data:/data\n ports:\n - 3333:3000\n - 222:22\n
Et renseignez le .env
avec les infos que vous avez trouv\u00e9es, par exemple : UID=1000\nGID=1000\n
D\u00e9ployez le conteneur et rendez-vous sur http://ipduserveur:3333
. Et voil\u00e0, votre instance Gitea est disponible !
Tout l'int\u00e9r\u00eat d'une telle solution, c'est de pouvoir y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer Gitea via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type gitea.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans Dockge ouvrez la stack gitea
et ajoutez le r\u00e9seau de Swag. Pour rappel
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les dossiers de Swag, cr\u00e9ez le fichier gitea.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/gitea.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name gitea.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app gitea;\n set $upstream_port 3000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/gitea)?/info/lfs {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app gitea;\n set $upstream_port 3000;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Ouvrez le fichier app.ini
dans les fichiers du conteneur
$ sudo vi /docker/gitea/data/gitea/conf/app.ini
Entrez en modification avec la touche i
et et modifiez la section serveur avec les infos de votre domaine
[server]\nDOMAIN = gitea.mondomaine.fr\nSSH_DOMAIN = gitea.mondomaine.fr\nROOT_URL = https://gitea.mondomaine.fr/\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
. Relancez le conteneur.
Et voil\u00e0, vous avez expos\u00e9 Gitea !
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik de fa\u00e7on native en suivant ces instructions.
"},{"location":"serveex/immich/","title":"Immich","text":"Objectifs
Installer Immich pour g\u00e9rer vos photos sur tout vos appareils.
Immich est une solution de gestion de photos et de vid\u00e9os que vous pouvez installer directement sur votre serveur. Cette solution remplace les clouds type Google Photo ou iCloud. Elle dispose de nombreuse fonctionnalit\u00e9s comme la reconnaissance de visage ou la g\u00e9olocalisation.
"},{"location":"serveex/immich/#installation","title":"Installation","text":"Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 immich\n \u251c\u2500\u2500 library\n \u251c\u2500\u2500 compose.yaml\n \u2514\u2500\u2500 .env\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack immich
puis copiez collez ceci :
#\n# WARNING: Make sure to use the docker-compose.yml of the current release:\n#\n# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml\n#\n# The compose file on main may not be compatible with the latest release.\n#\n\nname: immich\n\nservices:\n immich-server:\n container_name: immich_server\n image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}\n # extends:\n # file: hwaccel.transcoding.yml\n # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding\n volumes:\n - ${UPLOAD_LOCATION}:/usr/src/app/upload\n - /etc/localtime:/etc/localtime:ro\n env_file:\n - .env\n ports:\n - 2283:3001\n depends_on:\n - redis\n - database\n restart: always\n networks:\n - swag\n\n immich-machine-learning:\n container_name: immich_machine_learning\n # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.\n # Example tag: ${IMMICH_VERSION:-release}-cuda\n image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}\n # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration\n # file: hwaccel.ml.yml\n # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable\n volumes:\n - model-cache:/cache\n env_file:\n - .env\n restart: always\n networks:\n - swag\n\n redis:\n container_name: immich_redis\n image: docker.io/redis:6.2-alpine@sha256:328fe6a5822256d065debb36617a8169dbfbd77b797c525288e465f56c1d392b\n healthcheck:\n test: redis-cli ping || exit 1\n restart: always\n networks:\n - swag\n\n\n database:\n container_name: immich_postgres\n image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0\n environment:\n POSTGRES_PASSWORD: ${DB_PASSWORD}\n POSTGRES_USER: ${DB_USERNAME}\n POSTGRES_DB: ${DB_DATABASE_NAME}\n POSTGRES_INITDB_ARGS: '--data-checksums'\n volumes:\n - ${DB_DATA_LOCATION}:/var/lib/postgresql/data\n healthcheck:\n test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum=\"$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')\"; echo \"checksum failure count is $$Chksum\"; [ \"$$Chksum\" = '0' ] || exit 1\n interval: 5m\n start_interval: 30s\n start_period: 5m\n command: [\"postgres\", \"-c\" ,\"shared_preload_libraries=vectors.so\", \"-c\", 'search_path=\"$$user\", public, vectors', \"-c\", \"logging_collector=on\", \"-c\", \"max_wal_size=2GB\", \"-c\", \"shared_buffers=512MB\", \"-c\", \"wal_compression=on\"]\n restart: always\n networks:\n - swag\n\nnetworks:\n swag:\n name: swag_default\n external: true\n\nvolumes:\n model-cache:\n
Note
Nous avons ajout\u00e9 le r\u00e9seau de Swag afin que les deux puissent communiquer ensemble. Assurez-vous que le nom du r\u00e9seau soit correct. Nous partons du principe qu'il se nomme swag_default
Attention
N'ajoutez pas le label de Watchtower. Immich \u00e9tant une solution en perpetuelle \u00e9volution, des mises \u00e0 jour automatiques risqueraient de casser votre installation.
Configurer le .env
comme suit et suivez les commentaires indiqu\u00e9s dans le fichier :
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables\n\n# The location where your uploaded files are stored\nUPLOAD_LOCATION=./library\n# The location where your database files are stored\nDB_DATA_LOCATION=./postgres\n\n# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List\n# TZ=Etc/UTC\n\n# The Immich version to use. You can pin this to a specific version like \"v1.71.0\"\nIMMICH_VERSION=release\n\n# Connection secret for postgres. You should change it to a random password\nDB_PASSWORD=postgres\n\n# The values below this line do not need to be changed\n###################################################################################\nDB_USERNAME=postgres\nDB_DATABASE_NAME=immich\n
Info
Si vous avez un NAS ou un disque r\u00e9seau partag\u00e9 via samba pour stocker vos donn\u00e9es, remplacez la valeur de UPLOAD_LOCATION=
par le chemin d'acc\u00e8s de votre dossier partag\u00e9.
Acc\u00e9l\u00e9ration mat\u00e9rielle
Si votre CPU/iGPU/GPU le supporte, Immich permet d'utiliser l'acc\u00e9l\u00e9ration mat\u00e9rielle pour lire les vid\u00e9os ou pour la reconnaissance d'images. Ces fonctionnalit\u00e9s peuvent tripler les performances d'Immich.
D\u00e9ployez le conteneur.
Et voil\u00e0, vous pouvez vous connecter et suivre les instructions sur http://ipduserveur:2283
Tout l'int\u00e9r\u00eat d'une telle solution, c'est de pouvoir y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer Immich via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type immich.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans les dossiers de Swag, cr\u00e9ez le fichier immich.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/immich.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name immich.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app immich_server;\n set $upstream_port 3001;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/immich)?/api {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app immich_server;\n set $upstream_port 3001;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 Immich ! N'oubliez pas d'installer les applications iOS/Android afin de synchroniser vos appareils.
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik de fa\u00e7on native en suivant ces instructions.
"},{"location":"serveex/installation/","title":"Debian 12","text":"Objectif
Avoir install\u00e9 Debian 12 et les d\u00e9pendances principales pour avoir un OS pret \u00e0 l'emploi, joignable en SSH.
"},{"location":"serveex/installation/#installation","title":"Installation","text":"Installer sudo et ajouter un utilisateur au groupe sudo, pour les privil\u00e8ges administrateurs
Installer sudo :
Se connecter en root :
$ su -
mettre son mot de passe puis taper :
# apt install sudo
Ajouter l'utilisateur au groupe sudo :
# adduser <nomdutilisateur> sudo
La prochaine fois que l'utilisateur se connectera, il pourra utiliser la commande sudo
et ainsi executer des commandes avec les privil\u00e8ges administrateurs.
Tout savoir sur la connexion \u00e0 distance \u00e0 la console (SSH)
Quelques app que vous utiliserez forc\u00e9ment \u00e0 un moment donn\u00e9, autant les installer d\u00e8s le d\u00e9part
$ sudo apt update\n$ sudo apt upgrade\n$ sudo apt install vim btop ranger git duf neofetch samba cifs-utils tree unzip ufw\n
En plus :
$ sudo rsync -avhHSP /source /destination\n
Note
Ajoutez --exclude @eaDir
si la source est un NAS Synology
Serveex c'est avant tout un projet personnel visant \u00e0 h\u00e9berger chez soi le plus de services possibles du quotidien sans passer par des plateformes propri\u00e9taires (Google, Apple, Netflix...). L'id\u00e9e \u00e9tait d'exp\u00e9rimenter, d'apprendre, et de documenter chaque \u00e9tape. C'est un projet purement pour la science, et n'a pas vocation \u00e0 \u00eatre utilis\u00e9 en production.
Un grand merci \u00e0 Nipah, pour le partage de ses connaissances infinies, et surtout pour sa patience.
Pr\u00e9-requis
Poss\u00e9der un VPS en ligne ou une machine locale : id\u00e9alement un mini PC (on trouve des N100 pour 100\u20ac), mais fonctionne aussi sur laptop ou une machine virtuelle. Les Freebox Delta/Ultra proposent des machines virtuelles.
Pour l'acc\u00e8s ext\u00e9rieur :
L'objectif etant d'etre facilement d\u00e9ployable et facile \u00e0 migrer, voici sa structure :
"},{"location":"serveex/introduction/#le-coeur-du-serveur","title":"Le coeur du serveur","text":"Syst\u00e8me d'exploitation
Installer et configurer Debian 12
Commencer
Moteur de conteneur
Installer Docker
Commencer
Interface docker
Installer et d\u00e9ployer Dockge
Commencer
Reverse Proxy
Installer et configurer SWAG
Commencer
VPN
Installer et d\u00e9ployer Wireguard
Commencer
SSO & MFA
Installer et d\u00e9ployer Authentik
Commencer
Tunnels
Utiliser Cloudflare Zero Trust
Commencer
Etat des services
Installer et d\u00e9ployer Uptime-Kuma
Commencer
Gestion des logs
Installer et d\u00e9ployer Dozzle
Commencer
Media
Installer et d\u00e9ployer Plex
Commencer
Seedbox
Installer et d\u00e9ployer Qbittorent
Commencer
Drive
Installer et d\u00e9ployer Nextcloud
Commencer
Photos
Installer et d\u00e9ployer Immich
Commencer
Visual Studio Code
Installer et d\u00e9ployer code-server
Commencer
Git Repository
Installer et d\u00e9ployer Gitea
Commencer
IT Tools
Installer et d\u00e9ployer IT Tools
Commencer
DNS anti-pub et filtres
Installer et d\u00e9ployer Adguard Home
Commencer
Explorateur de fichier
Installer et d\u00e9ployer File Browser
Commencer
Vaultwarden
Installer et d\u00e9ployer Vaultwarden
Commencer
Objectifs
IT Tools est un conteneur exposant une page web permettant d'acc\u00e9der \u00e0 un grand nombre d'outil de d\u00e9veloppement.
"},{"location":"serveex/it-tools/#installation","title":"Installation","text":"Ouvrez Dockge, cliquez sur compose
, appelez la stack it-tools
puis copiez collez ceci :
version: \"3.3\"\nservices:\n it-tools:\n container_name: it-tools\n restart: unless-stopped\n image: corentinth/it-tools:latest\n ports:\n - 3222:80\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n it-tools:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
D\u00e9ployez le conteneur et rendez-vous sur http://ipduserveur:3222
. Et voil\u00e0, votre instance IT Tools en webui est disponible !
Vous aurez peut-etre envie d'y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer IT Tools via Swag.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type tools.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans Dockge ouvrez la stack tools
et ajoutez le r\u00e9seau de Swag. Pour rappel
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les dossiers de Swag, cr\u00e9ez le fichier tools.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/tools.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name tools.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app it-tools;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 it-tools !
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant tools.subodmain.conf
et en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Objectifs
Installer Nextcloud pour g\u00e9rer vos photos sur tout vos appareils.
Nextcloud est une solution qui vous permet d'acc\u00e9der \u00e0 vos donn\u00e9es sur tout vos appareils, et de les synchroniser. Nexctloud dispose \u00e9galement de fonctionnalit\u00e9s de collaboration, de calendrier et bien d'autres. Cette solution remplace des solutions du type Google Drive, iCloud, ou encore OneDrive.
"},{"location":"serveex/nextcloud/#installation","title":"Installation","text":"Info
Nous utiliserons l'image docker maintenue par LinuxServer.io
Structure des fichiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 nextcloud\n \u251c\u2500\u2500 config\n \u251c\u2500\u2500 data\n \u251c\u2500\u2500 compose.yaml\n \u2514\u2500\u2500 .env\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack nextcloud
puis copiez collez ceci :
---\nservices:\n nextcloud:\n image: lscr.io/linuxserver/nextcloud:latest\n container_name: nextcloud\n environment:\n - PUID=${PUID}\n - PGID=${GUID}\n - TZ=Etc/UTC\n volumes:\n - /docker/nextcloud/config:/config\n - /docker/nextcloud/data:/data\n ports:\n - ${PORT}:443\n restart: unless-stopped\n
Info
Si vous avez un NAS ou un disque r\u00e9seau partag\u00e9 via samba pour stocker vos donn\u00e9es, remplacez /docker/nextcloud/data
par le chemin d'acc\u00e8s de votre dossier partag\u00e9.
Trouvez votre PUID et votre GUID en tapant la commande suivante :
$ id nomdutilisateur\n
Et renseignez le .env
avec le port souhait\u00e9, et les infos que vous avez trouv\u00e9es, par exemple : PUID=1000\nGUID=1000\nPORT=4545\n
D\u00e9ployez la stack et rendez-vous sur http://ipduserveur:4545
et suivez les instructions.
Tout l'int\u00e9r\u00eat d'une telle solution, c'est de pouvoir y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer Nextcloud via Swag.
Info
Nous partons du principe que vous avez le sous-domaine nextcloud.mondomaine.fr
avec un CNAME
qui pointe vers mondomaine.fr
dans votre zone DNS. Et que bien s\u00fbr, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, le port 443
de votre box pointe bien sur le port 443
de votre serveur via les r\u00e8gles NAT.
Dans Dockge, modifiez la stack netxcloud
, et ajoutez le r\u00e9seau de swag. Pour rappel :
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Dans les fichiers de nextcloud, \u00e9ditez le fichier config.php
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/nextcloud/config/www/nextcloud/config/config.php\n
Entrez en modification avec la touche i
et copiez les informations suivantes avant );
.
'trusted_proxies' => [gethostbyname('swag')], 'overwrite.cli.url' => 'https://nextcloud.example.com/',\n'overwritehost' => 'nextcloud.example.com',\n'overwriteprotocol' => 'https',\n
Ajoutez \u00e9galement votre nom de domaine dans la section array
, cela devrait ressembler \u00e0 ceci
array (\n 0 => '192.168.0.1:444', # Cette ligne est surement diff\u00e9rente chez vous, ne la modifiez pas !\n 1 => 'nextcloud.mondomaine.fr', # Renseignez votre domaine\n ),\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
. Dans les dossiers de Swag, cr\u00e9ez le fichier nextcloud.subdomain.conf
.
$ sudo vi /docker/swag/config/nginx/proxy-confs/nexctloud.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2024/04/25\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name nextcloud.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n location / {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app nextcloud;\n set $upstream_port 443;\n set $upstream_proto https;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n # Hide proxy response headers from Nextcloud that conflict with ssl.conf\n # Uncomment the Optional additional headers in SWAG's ssl.conf to pass Nextcloud's security scan\n proxy_hide_header Referrer-Policy;\n proxy_hide_header X-Content-Type-Options;\n proxy_hide_header X-Frame-Options;\n proxy_hide_header X-XSS-Protection;\n\n # Disable proxy buffering\n proxy_buffering off;\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 Nextcloud ! Et n'oubliez pas d'installer les applications pour ordinateurs et mobiles.
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik de fa\u00e7on native en suivant ces instructions.
"},{"location":"serveex/plex/","title":"Plex","text":"Objectif
Plex est une plateforme de streaming vid\u00e9o d\u00e9ployable chez vous, pour manager votre biblioth\u00e8que de films ou de s\u00e9rie, et les lire en locale ou \u00e0 distance. Plex dispose d'applications TV, Android, iOS, Window et Mac OS, permettant la lecture de vos biblioth\u00e8ques, \u00e0 la Netflix.
Avec le plexpass, vous pouvez \u00e9galement organsier et lire vos contenus audio, \u00e0 la spotify, la diff\u00e9rence \u00e9tant que c'est bien votre contenu qui est h\u00e9berg\u00e9 et lu depuis chez vous.
On installera \u00e9galement Tautulli, un outil qui permet d'avoir des stats pouss\u00e9es sur Plex. On utilisera, comme d\u00e8s qu'on le peut, les images de linuxserver.io.
Note
Vous serez amen\u00e9s \u00e0 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\u00e9rable directement depuis votre compte.
"},{"location":"serveex/plex/#installer-plex","title":"Installer Plex","text":"Structure des dossiers :
root\n\u251c\u2500\u2500 docker\n\u2502 \u251c\u2500\u2500 plex \n\u2502 \u2502 \u251c\u2500\u2500 compose.yml\n\u2502 \u2502 \u251c\u2500\u2500 .env\n\u2502 \u2502 \u251c\u2500\u2500 config\n\u2502 \u2502 \u2514\u2500\u2500 transcode\n\u2502 \u2514\u2500\u2500 tautulli\n\u2502 \u2514\u2500\u2500 config\n\u2514\u2500\u2500 video\n \u251c\u2500\u2500 tvseries\n \u251c\u2500\u2500 movies\n \u2514\u2500\u2500 library\n
Ouvrez Dockge dans votre navigeateur, et cliquez sur compose
. Nommez la stack plex
et ajoutez la config suivante :
version: \"2.1\"\nservices:\n linuxserver_plex:\n image: ghcr.io/linuxserver/plex:amd64-latest\n container_name: plex\n network_mode: host\n environment:\n - PUID=${PUID}\n - PGID=${GUID}\n - TZ=Europe/Paris\n - VERSION=docker\n volumes:\n - /docker/plex/config:/config\n - /docker/plex/transcode:/transcode\n - /video/tvseries:/data/tvshows:ro\n - /video/movies:/data/movies:ro\n - /video/library:/data/library:ro\n restart: unless-stopped\n mem_limit: 4096m\n mem_reservation: 2048m\n devices:\n - /dev/dri:/dev/dri\n\n tautulli:\n image: lscr.io/linuxserver/tautulli:latest\n container_name: tautulli\n environment:\n - PUID=${PUID}\n - PGID=${GUID}\n - TZ=Europe/Paris\n volumes:\n - /docker/tautulli/config:/config\n ports:\n - 8181:8181\n restart: unless-stopped\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n plex:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n\n tautulli:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Trouvez votre PUID et votre GUID en tapant la commande suivante :
$ id nomdutilisateur\n
Et renseignez le .env
avec les infos que vous avez trouv\u00e9es, par exemple : PUID=1000\nGUID=1000\n
D\u00e9ployez la stack. L'interface locale est disponible via http://ipduserveur:32400/web/index.html
. L'interface de Tautulli est joignable via http://ipduserveur:8181
.
Echec
Vous devez imp\u00e9rativement \u00eatre sur votre r\u00e9seau 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\u00e9rer l'installation \u00e0 distance via un tunnel SSH.
"},{"location":"serveex/plex/#parametrer-plex","title":"Param\u00e9trer Plex","text":"Plex propose tout une gamme de film/s\u00e9rie gratuitement. Apr\u00e8s avoir cr\u00e9\u00e9 votre compte, et pour ne pas polluer votre biblioth\u00e8que, je vous conseille de tout d\u00e9sactiver dans la section Services en ligne.
Ensuite rendez-vous dans la section Acc\u00e8s \u00e0 distance et choisissez un port manuellement (ici cela sera 1234
). Il est pr\u00e9f\u00e9rable de ne pas garder le port d'origine.
TCP
source 1234
vers le port 32400
, vers l'IP de votre serveur via les r\u00e8gles NAT.Si cela ne fonctionne pas
V\u00e9rifiez les r\u00e8gles de votre pare-feu et autorisez le port 32400
de votre serveur.
/data/movies
pour les films et /data/tvshows
pour les s\u00e9ries.Et voil\u00e0, vous avez un Plex fonctionnel !
Vous n'avez plus qu'a remplir les dossiers /video
et /tvseries
sur votre serveur de vos m\u00e9dia favoris. Vous pourrez alors t\u00e9l\u00e9charger l'application Plex sur vos appareils et lire vos m\u00e9dia favoris, chez vous ou \u00e0 distance !
Note
Si pour stocker vos m\u00e9dia vous utilisez un disque r\u00e9seau (par exemple un stockage sur un NAS ou un disque dur externe branch\u00e9 ailleurs sur le r\u00e9seau), veuillez consulter la section montage samba afin que Plex puisse y acc\u00e9der.
"},{"location":"serveex/plex/#exposer-tautulli-avec-swag","title":"Exposer Tautulli avec Swag","text":"Plex n'a pas besoin d'etre expos\u00e9, \u00e9tant joignable directement depuis votre compte Plex sur plex.tv.
En revanche, vous pouvez d\u00e9sirer exposer Tautulli, afin d'acc\u00e9der aux stats m\u00eame si vous n'est pas chez vous, depuis une simple url.
Info
Nous partons du principe que vous avez le sous-domaine tautulli.mondomaine.fr
avec un CNAME
qui pointe vers mondomaine.fr
dans zone DNS. Et que bien s\u00fbr, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, le port 443
de votre box pointe bien sur le port 443
de votre serveur dans les r\u00e8gles NAT.
Ouvrez Dockge et ajoutez le r\u00e9seau de swag au conteneur de Tautulli dans la conf de la stack Plex. Rappel sur comment ajouter un r\u00e9seau pr\u00e9-existant :
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Info
Ici nous partons du principe que le nom du r\u00e9seau de Swag est swag_default
.
Puis d\u00e9ployez \u00e0 nouveau la stack.
Copiez en renommant le fichier tautulli.subdomain.conf.sample
en tautulli.subdomain.conf
et \u00e9ditez le :
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo cp /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf\n$ sudo vi /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf\n
Et v\u00e9rifiez que la configuration correspond bien \u00e0 ceci, sion \u00e9ditez le fichier en appuyant sur i
:
## Version 2023/05/31\n# make sure that your tautulli container is named tautulli\n# make sure that your dns has a cname set for tautulli\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name tautulli.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app tautulli;\n set $upstream_port 8181;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/tautulli)?/api {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app tautulli;\n set $upstream_port 8181;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/tautulli)?/newsletter {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app tautulli;\n set $upstream_port 8181;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/tautulli)?/image {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app tautulli;\n set $upstream_port 8181;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik
Appuyez sur Echap
puis sauvegardez et quittez en tappant :x
Patientez quelques minutes puis tapez dans votre navigateur http://tautulli.mondomaine.fr
.
En cas d'echec
V\u00e9rifiez vos r\u00e8gles de pare-feu.
Et voil\u00e0 !
"},{"location":"serveex/qbittorrent/","title":"Qbittorrent","text":"Objectif
Afin de t\u00e9l\u00e9chargez vos media favoris en toute s\u00e9curit\u00e9, nous allons monter un syst\u00e8me \u00e0 base de :
Nous monterons ici le syst\u00e8me ci-dessous :
"},{"location":"serveex/qbittorrent/#configuration","title":"Configuration","text":"Structure des dossiers
root\n\u251c\u2500\u2500 docker\n\u2502 \u2514\u2500\u2500 seedbox\n\u2502 \u251c\u2500\u2500 qbittorent\n\u2502 \u2502 \u2514\u2500\u2500 config\n\u2502 \u251c\u2500\u2500 gluetun\n\u2502 \u251c\u2500\u2500 downloads #vos t\u00e9l\u00e9chargements g\u00e9n\u00e9riques\n\u2502 \u251c\u2500\u2500 compose.yaml\n\u2502 \u2514\u2500\u2500 .env\n\u2514\u2500\u2500 video #reli\u00e9 \u00e0 plex\n \u251c\u2500\u2500 movies #\u00e0 selectionner dans l'interface pour t\u00e9l\u00e9charger vos films\n \u2514\u2500\u2500 tvseries #\u00e0 selectionner dans l'interface pour t\u00e9l\u00e9charger vos s\u00e9ries\n
Ouvrez Dockge, cliquez sur compose
et nommez la stack seedbox
. Collez la config ci-dessous : version: \"2.1\"\nservices:\n qbit:\n image: ghcr.io/linuxserver/qbittorrent:latest\n container_name: qbittorrent\n restart: unless-stopped\n network_mode: service:gluetun\n mem_limit: 1g\n environment:\n - TZ=Europe/Paris\n - PUID=${PUID}\n - PGID=${GUID}\n - WEBUI_PORT=${UI_PORT}\n - DOCKER_MODS=ghcr.io/gabe565/linuxserver-mod-vuetorrent\n volumes:\n - /docker/seedbox/qbittorrent/config:/config\n - /docker/seedbox/downloads:/downloads\n - /video/movies:/movies\n - /video/tvseries:/tvseries\n depends_on:\n - gluetun\n\n gluetun:\n image: qmcgaw/gluetun:v3.38\n container_name: gluetun\n restart: unless-stopped\n mem_limit: 1g\n volumes:\n - /docker/seedbox/gluetun:/gluetun\n ports:\n - ${UI_PORT}:5695 # (1)!\n - 8000:8000 # (2)!\n cap_add:\n - NET_ADMIN\n environment:\n - TZ=Europe/Paris\n - VPN_SERVICE_PROVIDER=custom\n - VPN_TYPE=wireguard\n - VPN_ENDPOINT_IP=${IP}\n - VPN_ENDPOINT_PORT=${PORT}\n - WIREGUARD_PUBLIC_KEY=${PU_KEY}\n - WIREGUARD_PRIVATE_KEY=${PR_KEY}\n - WIREGUARD_ADDRESSES=${IP_MASK}\n - VPN_PORT_FORWARDING=on\n - VPN_PORT_FORWARDING_PROVIDER=protonvpn\n - UPDATER_PERIOD=6h\n - BLOCK_MALICIOUS=off\n - BLOCK_SURVEILLANCE=off\n - BLOCK_ADS=off\n - DOT=off\n - HEALTH_VPN_DURATION_INITIAL=20s\n - HEALTH_VPN_DURATION_ADDITION=15s\n - HEALTH_SUCCESS_WAIT_DURATION=10s\n\n qbittorrent-port-update:\n image: technosam/qbittorrent-gluetun-port-update:latest\n container_name: qbittorrent_port_update\n network_mode: service:gluetun\n environment:\n - QBITTORRENT_WEBUI_PORT=${UI_PORT}\n - QBITTORRENT_WEBUI_USERNAME=${ID}\n - QBITTORRENT_WEBUI_PASSWORD=${PW}\n restart: unless-stopped\n depends_on:\n - gluetun\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n qbittorent:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n gluetun:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n qbittorrent-port-update:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Et renseignez dans .env
:
PUID=\nGUID=\nIP=\nPORT=\nUI_PORT=\nPU_KEY=\nPR_KEY=\nIP_MASK=\nID=\nPW=\n
En d\u00e9tails :
Variable Valeur ExemplesPUID=
A renseigner avec les infos de votre user (trouvables via la commande $ id nomdutilisateur
) 1000
GUID=
A renseigner avec les infos de votre user (trouvables via la commande $ id nomdutilisateur
) 1000
IP=
l'IP du endpoint de Proton, fournie par Proton. Les serveurs les plus performants \u00e9tant en Suisse, je vous conseille d'en s\u00e9lectionner un l\u00e0 bas. 123.45.67.89
PORT=
Le port de Wireguard, ici 51820
pour Proton 51820
UI_PORT=
Le port d'acc\u00e8s \u00e0 la web ui, elle sera joignable via http//ipduserveur:port
5695
PU_KEY=
La cl\u00e9e publique fournie par Proton aNhcz1l3JfWbFZo2XMpzQlP2iOqk
PR_KEY=
La cl\u00e9e priv\u00e9e fournie par Proton buKsjNHLyzKMM1qYnzOy4s7SHfly
IP_MASK=
L'IP fournie par Proton et son masque 10.2.0.2/32
ID=
Nom d'utilisateur que vous devrez reporter ensuite dans l'interface de Qbittorent. Attention \u00e0 bien renseigner la meme chose dans Qbittorent. monuser
PW=
Mot de passe que vous devrez reporter ensuite dans l'interface de Qbittorent. Attention \u00e0 bien renseigner la meme chose dans Qbittorent. monmotdepasse
"},{"location":"serveex/qbittorrent/#deploiement","title":"D\u00e9ploiement","text":"Une fois fait, d\u00e9ployez le conteneur.
Attention
Dans les logs de lancement, vous trouverez un mot de passe temporaire pour l'utilisateur admin
Loggez vous sur http://ipduserveur:5695
(ou le port que vous avez configur\u00e9).
En cas d'echec
V\u00e9rifiez les r\u00e8gles de votre pare-feu.
Changez votre nom d'utilisateur et votre mot de passe par ceux que vous avez configur\u00e9 dans le .env
Relancez la stack afin de vous assurer que le conteneur qui met \u00e0 jour le port s'est bien connect\u00e9 avec vos identifiants
Et voil\u00e0 ! Lorsque vous lancez un t\u00e9l\u00e9chargement, n'oubliez pas de pr\u00e9ciser le bon r\u00e9pertoire de t\u00e9l\u00e9chargement afin que Plex puisse synchroniser correctement sa biblioth\u00e8que.
"},{"location":"serveex/qbittorrent/#exposer-la-webui","title":"Exposer la webui","text":"Afin de lancer des t\u00e9l\u00e9chargement hors de chez vous, sans VPN, vous pouvez exposer la webui de Qbittorent.
Info
Nous partons du principe que vous avez renseign\u00e9 un sous-domaine seedbox.mondomaine.fr
avec un CNAME
pointant sur mondomaine.fr dans les enregistrement DNS de votre registrar. Et que bien s\u00fbr, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, le port 443
de votre box pointe bien sur le port 443
de votre serveur via les r\u00e8gles NAT.
Pour cela, ajoutez le r\u00e9seau de swag \u00e0 gluetune via Dockge en ajoutant manuellement comme dans cet exemple :
services:\n gluetun:\n container_name: gluetun\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Note
Ici nous partons du principe que le nom du r\u00e9seau de Swag est swag_default. Puis d\u00e9ployez \u00e0 nouveau la stack.
Puis nous allons cr\u00e9er et \u00e9diter le fichierseedbox.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf\n
Entrez en modification en appuyant sur i
et copiez la configuration ci-dessous, en prenant soin de v\u00e9rifier le port :
## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name seedbox.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app gluetun;\n set $upstream_port 5555;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
. Patientez quelques minutes puis tapez dans votre navigateur https://seedbox.mondomaine.fr
, vous arriverez sur l'interface de Qbittorent.
Et voil\u00e0, vous avez un mediacenter pret \u00e0 l'emploi !
"},{"location":"serveex/swag/","title":"SWAG","text":"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'\u00e9mission des certificats SSL (pour garder des connexions chiffr\u00e9es), du routage des requ\u00eates et de la s\u00e9curisation des acc\u00e8s (par authent HTTP ou par SSO comme Authelia ou Authentik). Toute la doc n\u00e9cessaire ce situe ici.
Ci-dessous, vous trouverez un exemple, exposant Dockge.
Objectif
Info
Ce tutoriel part du principe que vous avez un nom de domaine qui pointe vers votre serveur, et que votre box a une r\u00e8gle NAT qui redirige le port 443
vers l'adresse IP et le port 443
de votre serveur. Le nom de domaine d'exemple sera mondomaine.fr
.
Nous installerons SWAG, ainsi que le mod dbip servant \u00e0 bloquer les connexions en fonction de la g\u00e9oloc, ainsi que le mod dashboard qui permet de piloter le fonctionnement de swag, fail2ban et la g\u00e9oloc.
Principe d'un reverse proxy et application dans notre cas :
"},{"location":"serveex/swag/#installation","title":"Installation","text":"Plan des fichiers que nous allons modifier :
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 swag\n \u251c\u2500\u2500 config\n \u2502 \u251c\u2500\u2500 dns-conf\n \u2502 \u2502 \u2514\u2500\u2500 ovh.ini\n \u2502 \u2514\u2500\u2500 nginx\n \u2502 \u251c\u2500\u2500 dbip.conf\n \u2502 \u251c\u2500\u2500 nginx.conf\n \u2502 \u2514\u2500\u2500 proxy-confs\n \u2502 \u2514\u2500\u2500 dockge.subdomain.conf \n \u251c\u2500\u2500 compose.yml\n \u2514\u2500\u2500 .env\n
Ouvrez Dockge dans votre navigateur, cliquez sur compose
, nommez la stack swag
et copiez la conf ci-dessous
version: \"2\"\nservices:\n swag:\n image: lscr.io/linuxserver/swag:latest\n container_name: swag\n cap_add:\n - NET_ADMIN\n env_file:\n - .env\n environment:\n - TZ=Europe/Paris\n - URL=${DOMAIN}\n - EXTRA_DOMAINS=${DOMAINS}\n - SUBDOMAINS=wildcard # (1)!\n - VALIDATION=dns\n - DNSPLUGIN=${PLUGIN}\n - EMAIL=${EMAIL}\n - DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload\n volumes:\n - /docker/swag/config:/config\n ports:\n - 80:80\n - 443:443\n - 81:81 # (2)!\n restart: unless-stopped\n networks:\n - swag\n\nnetworks:\n swag:\n name: swag_default\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n swag:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Puis dans le .env
:
DOMAIN=\nDOMAINS=\nEMAIL=\nPLUGIN=\n
Remplissez comme suit
Propri\u00e9t\u00e9 Valeur ExemplesDOMAIN
Votre domaine (cela couvre aussi tous les sous-domaines) mondomaine.fr
DOMAINS
Vos \u00e9ventuels autres domaines monsecondomaine.fr
EMAIL
Votre email, pour g\u00e9n\u00e9rer le certificat votre@email.fr
PLUGIN
Le plugin pour g\u00e9n\u00e9rer le certificat, li\u00e9 \u00e0 votre fournisseur de zone DNS ovh
cloudflare
Ici nous partons du principe que votre zone DNS est chez OVH. D\u00e9ployez la stack une premiere fois. Dans les logs vous verrez qu'il n'arrivera pas \u00e0 cr\u00e9er de certificat SSL car le fichier ovh.ini renvoi une erreur. Arretez la stack.
En CLI, allez dans le dossier dns-conf et \u00e9ditez le fichier ovh.ini
:
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/dns-conf/ovh.ini\n
Voici ce qui s'affiche :
# Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-ovh/certbot_dns_ovh/__init__.py#L20\n# Replace with your values\ndns_ovh_endpoint = ovh-eu\ndns_ovh_application_key = \ndns_ovh_application_secret = \ndns_ovh_consumer_key = \n
Authentifiez vous et cr\u00e9ez votre token ici. Les permissions \u00e0 configurer sont les suivantes :
GET /domain/zone/*
PUT /domain/zone/*
POST /domain/zone/*
DELETE /domain/zone/*
Notez les 3 cl\u00e9s temporairement et renseignez le fichier ovh.ini
. (avec vim, i
pour passer en modif, Echap
quand c'est fini, :x
pour sauvegarder et quitter)
Sauvegardez et quittez le fichier.
Configurez aussi swag pour qu'il acc\u00e8de \u00e0 DBIP, le module de gestion des acc\u00e8s par g\u00e9olocalisation /Ouvrez le fichier nginx.conf
$ sudo vi /docker/swag/config/nginx/nginx.conf\n
Et ajoutez la ligne suivante en dessous de la section http
:
include /config/nginx/dbip.conf\n
Relancez la stack dans Dockge, cette fois le certificat SSL est bien \u00e9mis ! V\u00e9rifiez dans les logs que le serveur est bien ready.
"},{"location":"serveex/swag/#dashboard","title":"Dashboard","text":"Accedez au dashboard via votre r\u00e9seau local en tapant http//ipdevotreserveur:81
A gauche, vous trouverez la liste des services actuellement \"proxied\" (aucun pour le moment). A droite, les IP bannies. En-dessous, une liste d'indicateurs. pour le d\u00e9tail, c'est par ici.
DBIP permet de bloquer les connexions en fonction des pays. Il s'appuie sur le fichier de config nomm\u00e9 dbip.conf
dans /docker/swag/config/nginx
. Plus d'info ici.
Dans cet exemple, nous allons le configurer pour bloquer une liste de pays connus pour etre \u00e0 l'origine de la plupart des connexions malveillantes. Nous allons \u00e9galement configurer une variable au cas o\u00f9 nous souhaiterions permettre au r\u00e9seau interne du serveur, au r\u00e9seau local de votre box ainsi qu'\u00e0 un \u00e9ventuel vpn en 10.x.x.x de pouvoir acc\u00e9der \u00e0 vos services, mais pas directement \u00e0 internet.
La configuration est activable ou d\u00e9sactivable pour chaque service qui sera proxied (voir exemple de Dockge plus bas).
Ouvrez dbip.conf
:
$ sudo vi /docker/swag/config/nginx/dbip.conf\n
Faites vos modifications (voir documentation), ou prenez l'exemple suivant:
geoip2 /config/geoip2db/dbip-country-lite.mmdb {\n auto_reload 1w;\n $geoip2_data_continent_code continent code;\n $geoip2_data_country_iso_code country iso_code;\n}\n\n# Country Codes: https://en.wikipedia.org/wiki/ISO_3166-2\n\nmap $geoip2_data_country_iso_code $geo-whitelist {\n # default yes;\n # Example for whitelisting a country, comment out 'default yes;' above and uncomment 'default no;' and the whitelisted country below\n default no;\n FR yes;\n}\n\nmap $geoip2_data_country_iso_code $geo-blacklist {\n default yes;\n # Example for blacklisting a country, uncomment the blacklisted country below\n CN no; #China\n RU no; #Russia\n HK no; #Hong Kong\n IN no; #India\n IR no; #Iran\n VN no; #Vietnam\n TR no; #Turkey\n EG no; #Egypt\n MX no; #Mexico\n JP no; #Japan\n KR no; #South Korea\n KP no; #North Korea\n PE no; #Peru\n BR no; #Brazil\n UA no; #Ukraine\n ID no; #Indonesia\n TH no; #Thailand\n }\n\ngeo $lan-ip {\n default no;\n 10.0.0.0/8 yes;\n 172.16.0.0/12 yes;\n 192.168.0.0/16 yes;\n 127.0.0.1 yes;\n}\n
Sauvegardez et quittez. Red\u00e9marrez la stack.
Dans les fichiers de conf des domaines (section suivante), vous pourrez activer ou d\u00e9sactiver la whitelist ou la blacklist (voir documentation ici). Dans notre cas, la whitelist laisse uniquement passer les requ\u00eates fran\u00e7aises. La blacklist laisse passer tout le monde sauf la liste de pays mentionn\u00e9e. On utilisera donc la blacklist, sur ce mod\u00e8le :
server {\n listen 443 ssl;\n listen [::]:443 ssl;\n\n server_name some-app.*;\n include /config/nginx/ssl.conf;\n client_max_body_size 0;\n\n if ($geo-blacklist = no) { return 404; }\n\n location / {\n
"},{"location":"serveex/swag/#exposer-dockge","title":"Exposer Dockge","text":"Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type dockge.mondomaine.fr
avec pour CNAME
mondomaine.fr
et \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Il s'agit maintenant d'exposer Dockge sur internet, afin de pouvoir y acc\u00e9der et g\u00e9rer vos conteneurs sans que vous soyez chez vous. Pour cela, nous partons du principe que vous avez configur\u00e9 un sous domaine dockge.mondomaine.fr
dans votre zone DNS dont le CNAME
pointe sur mondomaine.fr
.
Ouvrez le fichier dockge.subdomain.conf :
$ sudo vi /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf\n
Param\u00e9trez le comme tel :
## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n # indique que le sous-domaine doit \u00eatre dirig\u00e9\n server_name dockge.*; \n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n # indique que les pays dans la blacklist sont intedits\n if ($geo-blacklist = no) { return 404; } \n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n\n set $upstream_app dockge; # (1)!\n set $upstream_port 5001; # (2)!\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Sauvegardez et quittez. La configuration va se mettre \u00e0 jour en quelques secondes.
Info
Par d\u00e9faut, swag ne connait pas le nom \"dockge\". Pour qu'il puisse y acc\u00e9der, vous devez rajouter le r\u00e9seau de swag dans le compose.yml
de dockge.
Rendez-vous sur la stack de dockge, puis cliquez sur \u00e9diter
, et ajouter le r\u00e9seau de Swag dans le fichier de conf sur ce modele (les champs networks
) :
services:\n dockge:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Info
Ici nous partons du principe que le nom du r\u00e9seau de Swag est swag_default
.
D\u00e9ployez \u00e0 nouveau la stack.
Patientez puis tapez https://dockge.mondomaine.fr
dans votre navigateur, vous devriez \u00eatre redirig\u00e9 vers dockge. Vous pouvez v\u00e9rifier le statut du service via le dashboard (depuis votre r\u00e9seau local, http://ipdevotreserveur:81)
Swag dispose de modeles pour la plupart des services connus, nomm\u00e9s nomduservice.subdomain.conf.sample
. Il vous suffit de cr\u00e9er 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
.
$ cd /docker/swag/config/proxy-confs\n$ sudo cp nomduservice.subdomain.conf.sample nomduservice.subdomain.conf\n
Si le sous domaine n'est pas redirig\u00e9 correctement
\u00e9ditez le fichier et v\u00e9rifiez notamment le nom du conteneur dans set $upstream_app nomduconteneur;
v\u00e9rifiez que vous avez bien ajout\u00e9 le r\u00e9seau de swag dans le compose.yml
du conteneur (via Dockge par exemple).
Vous pouvez aussi choisir le sous-domaine en changeant la variable server_name votresousdomaine.*;
et en renommant le fichier votresousdomaine.subdomain.conf
.
Objectif
Uptime-Kuma est un conteneur d\u00e9di\u00e9 au monitoring de services. Le principe est d'envoyer des requ\u00eates r\u00e9guli\u00e8res \u00e0 vos services afin de d\u00e9terminer s'ils sont en lignes ou non, et de vous alerter le cas \u00e9ch\u00e9ant. Uptime-Kuma est d\u00e9velopp\u00e9 par le meme d\u00e9veloppeur que Dockge.
"},{"location":"serveex/uptime-kuma/#installation","title":"Installation","text":"Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 uptime-kuma\n \u251c\u2500\u2500 date\n \u2514\u2500\u2500 compose.yaml\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack uptime-kuma
puis copiez collez ceci :
version: \"3.3\"\nservices:\n uptime-kuma:\n image: louislam/uptime-kuma:1\n container_name: uptime-kuma\n volumes:\n - /docker/uptime-kuma/uptime-kuma-data:/app/data\n ports:\n - 3200:3001 # <Host Port>:<Container Port>\n restart: always\n
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n uptime-kuma:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Vous n'avez plus qu'\u00e0 acc\u00e9der \u00e0 l'outil via http://ipdevotreserveur:3200
.
Info
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. Et que bien s\u00fbr, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, le port 443
de votre box pointe bien sur le port 443
de votre serveur via les r\u00e8gles NAT.
Dans les dossiers de Swag, cr\u00e9ez le fichier stats.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/stats.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : ## Version 2023/12/19\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name stats.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 0;\n\n #if ($lan-ip = yes) { set $geo-whitelist yes; }\n #if ($geo-whitelist = no) { return 404; }\n if ($geo-blacklist = no) { return 404; }\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app uptime-kuma;\n set $upstream_port 3001;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
. Dans Dockge, modifiez la stack Uptime-Kuma
, et ajoutez le r\u00e9seau de swag. Pour rappel :
services:\n nomduservice:\n container_name: #...\n # ... \n networks: # (1)!\n - swag # (2)!\n\nnetworks: # (3)!\n swag: # (6)!\n name: swag_default # (4)!\n external: true # (5)!\n
Info
Ici nous partons du principe que le nom du r\u00e9seau de Swag est swag_default
.
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant stats.subodmain.conf
et en retirant les #
devant include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Si vous souhaitez que la page publique de stats soit joignable par tout le monde sans authentification:
^/$\n^/status\n^/assets/\n^/assets\n^/icon.svg\n^/api/.*\n^/upload/.*\n^/metrics\n
D\u00e9ployez \u00e0 nouveau la stack.
Uptime-Kuma sera ainsi joignable directement depuis internet en tapant https://stats.mondomaine.fr
.
Astuce
Si vous utilisez Authentik et que vous ne craignez pas d'exposer votre panneau admin \u00e0 votre r\u00e9seau local, vous pouvez d\u00e9sactiver l'authentification d'Uptime-Kuma via les param\u00e8tres, afin de ne garder que celle d'Authentik.
"},{"location":"serveex/vaultwarden/","title":"Vaultwarden","text":"Objectifs
Installer Vaultwarden pour g\u00e9rer vos mot de passe sur tout vos appareils (remplace la gestion de mot de passe Google ou Apple).
Vaultwarden est une solution de gestion de vos mot de passe (g\u00e9n\u00e9ration, 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\u00e9rentes machines, avec un chiffrement de bout en bout.
Vaultwarden est un fork de la solution Bitwarden.
"},{"location":"serveex/vaultwarden/#installation","title":"Installation","text":"Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 vaultwarden\n \u251c\u2500\u2500 data\n \u251c\u2500\u2500 compose.yaml\n \u2514\u2500\u2500 .env\n
Ouvrez Dockge, cliquez sur compose
, appelez la stack vaultwarden
puis copiez collez ceci :
version: \"3\"\nservices:\n vaultwarden:\n container_name: vaultwarden\n image: vaultwarden/server:latest\n restart: unless-stopped\n env_file:\n - .env\n volumes:\n - ./data/:/data/\n ports:\n - 3050:80\n environment:\n - DOMAIN=${URL}\n - LOGIN_RATELIMIT_MAX_BURST=10\n - LOGIN_RATELIMIT_SECONDS=60\n - ADMIN_RATELIMIT_MAX_BURST=10\n - ADMIN_RATELIMIT_SECONDS=60\n - ADMIN_TOKEN=${TOKEN}\n - SENDS_ALLOWED=true\n - EMERGENCY_ACCESS_ALLOWED=true\n - WEB_VAULT_ENABLED=true\n - SIGNUPS_ALLOWED=false\n - SIGNUPS_VERIFY=true\n - SIGNUPS_VERIFY_RESEND_TIME=3600\n - SIGNUPS_VERIFY_RESEND_LIMIT=5\n\nnetworks:\n swag:\n name: swag_default\n external: true\n
Note
Nous avons ajout\u00e9 le r\u00e9seau de Swag afin que les deux puissent communiquer ensemble. Assurez-vous que le nom du r\u00e9seau soit correct. Nous partons du principe qu'il se nomme swag_default
Astuce
Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises \u00e0 jour
services:\n vauktwarden:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Nous allons maintenant g\u00e9n\u00e9rer un hash de mot de passe, qu'il faudra renseigner dans la variable TOKEN=
du .env
$ echo -n \"votremotdepasse\" | argon2 \"$(openssl rand -base64 32)\" -e -id -k 65540 -t 3 -p 4\n
Copiez le r\u00e9sultat pr\u00e9cieusement.
Dans le .env
, renseignez les variables suivantes :
URL=\nTOKEN=\n
Variable Valeur Exemple URL=
L'url de votre serveur vaultwarden https://vault.domaine.fr
TOKEN=
Le token que vous avez pr\u00e9c\u00e9demment copi\u00e9 pr\u00e9cieusement '$argon2id$v=19$m=65540,t=3,p=4$bXBGMENBZUVzT3VUSFErTzQzK25Jck1BN2Z0amFuWjdSdVlIQVZqYzAzYz0$T9m73OdD2mz9+aJKLuOAdbvoARdaKxtOZ+jZcSL9/N0'
Puis d\u00e9ployez le conteneur.
Acc\u00e9dez au panneau d'administration via http://ipduserveur:3050
et cr\u00e9ez votre compte. Plus d'info sur les fonctionnalit\u00e9s de Bitwarden.
Tout l'int\u00e9r\u00eat d'une telle solution, c'est de pouvoir y acc\u00e9der \u00e0 distance et sur tout vos appareils. Pour cela, nous allons exposer Vaultwarden via SWAG.
Au pr\u00e9alable
Nous partons du principe que vous avez cr\u00e9\u00e9 dans votre zone DNS un sous domaine du type vault.mondomaine.fr
avec pour CNAME
mondomaine.fr
et, \u00e0 moins que vous utilisiez Cloudflare Zero Trust, que que vous avez d\u00e9j\u00e0 redirig\u00e9 le port 443
de votre box vers le 443
de votre serveur dans les r\u00e8gles NAT.
Dans les dossiers de Swag, cr\u00e9ez le fichier vault.subdomain.conf
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo vi /docker/swag/config/nginx/proxy-confs/vault.subdomain.conf\n
Entrez en modification avec la touche i
et collez la configuration ci-dessous : server {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n server_name vault.*;\n\n include /config/nginx/ssl.conf;\n\n client_max_body_size 128M;\n\n # enable for ldap auth (requires ldap-location.conf in the location block)\n #include /config/nginx/ldap-server.conf;\n\n # enable for Authelia (requires authelia-location.conf in the location block)\n #include /config/nginx/authelia-server.conf;\n\n # enable for Authentik (requires authentik-location.conf in the location block)\n #include /config/nginx/authentik-server.conf;\n\n location / {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app vaultwarden;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ ^(/vaultwarden)?/admin {\n # enable the next two lines for http auth\n #auth_basic \"Restricted\";\n #auth_basic_user_file /config/nginx/.htpasswd;\n\n # enable for ldap auth (requires ldap-server.conf in the server block)\n #include /config/nginx/ldap-location.conf;\n\n # enable for Authelia (requires authelia-server.conf in the server block)\n #include /config/nginx/authelia-location.conf;\n\n # enable for Authentik (requires authentik-server.conf in the server block)\n #include /config/nginx/authentik-location.conf;\n\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app vaultwarden;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/vaultwarden)?/api {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app vaultwarden;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n\n location ~ (/vaultwarden)?/notifications/hub {\n include /config/nginx/proxy.conf;\n include /config/nginx/resolver.conf;\n set $upstream_app vaultwarden;\n set $upstream_port 80;\n set $upstream_proto http;\n proxy_pass $upstream_proto://$upstream_app:$upstream_port;\n\n }\n}\n
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entr\u00e9e
.
Et voil\u00e0, vous avez expos\u00e9 Vaultwarden ! N'oubliez pas d'installer les extensions Bitwarden (elles sont compatibles avec Vaultwarden) pour Chrome ou pour Firefox ainsi que les applications iOS et Android afin de synchroniser vos mot de passe.
Prot\u00e9ger avec Authentik
Vous pouvez prot\u00e9ger cette app avec Authentik en ouvrant tools.subodmain.conf
et en retirant les #
devant chacune des lignes include /config/nginx/authentik-server.conf;
et include /config/nginx/authentik-location.conf;
N'oubliez pas de cr\u00e9er une application et un fournisseur dans Authentik.
Objectif
L'utilisation d'un VPN permet d'acc\u00e9der \u00e0 distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une mani\u00e8re propre de s\u00e9curiser l'acc\u00e8s \u00e0 la console SSH, plutot que d'exposer le port sur internet. C'est permettre de pouvoir se connecter \u00e0 son r\u00e9seau o\u00f9 que l'on soit, de maniere s\u00e9curiser, et de faire dialoguer des machines qui sont sur des r\u00e9seaux diff\u00e9rents.
Ici nous utiliserons Wireguard, un serveur VPN s\u00e9curis\u00e9 et tr\u00e8s performant, \u00e0 l'aide des conteneurs :
Il existe aussi des clients Windows, MacOS, iOS et Android.
Le principe est le suivant :
Pour cela nous allons cr\u00e9er un r\u00e9seau priv\u00e9 virtuel, ou VPN, c'est \u00e0 dire un tunnel s\u00e9curis\u00e9 auquel personne n'a acc\u00e8s \u00e0 part les machines que vous relierez entre elles. Elles feront partie d'un nouveau r\u00e9seau et pourront dialoguer entre elle comme dans un r\u00e9seau local.
D'autre part, vous pourrez ajouter votre t\u00e9l\u00e9phone, un ordinateur portable ou n'importe quel appareil au r\u00e9seau pour pouvoir utiliser vos ressources depuis vos appareils quotidiens, o\u00f9 que vous soyiez.
Dans cette illustration, la machine 1 est sur deux r\u00e9seaux :
192.168.x.x
donc ici la machine 1 et la machine 2)10.8.x.x
donc ici la machine 1 et 4)On peut aussi faire en sorte que les machines reli\u00e9es au r\u00e9seau virtuel partagent les acces \u00e0 leur r\u00e9seau local. Ici nous ne le ferons pas, pour des raisons de s\u00e9curit\u00e9, et de complexit\u00e9 en terme de sous-r\u00e9seau (si les deux machines distantes ont des machines locales qui utilisent la meme adresse IP locale, par exemple 192.168.1.1
, cela posera des conflits).
Ainsi, sur le r\u00e9seau virtuel, seules les machines directement reli\u00e9es pourront dialoguer entre elle depuis ce r\u00e9seau. Elles ne pourront pas dialoguer avec une machine situ\u00e9es sur un autre r\u00e9seau local et non reli\u00e9e au VPN.
"},{"location":"serveex/wireguard/#cote-serveur","title":"C\u00f4t\u00e9 serveur","text":"A v\u00e9rifier au pr\u00e9alable
V\u00e9rifiez si le port 51820 UDP
est libre sur votre serveur, et bien rout\u00e9 dans le NAT de la box Source 51820 UDP -> Destination 51820 UDP -> Serveur
. En effet, votre serveur \u00e9tant derri\u00e8re votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connect\u00e9 \u00e0 votre VPN.
V\u00e9rifiez aussi que le port 51821 TCP
est libre sur le serveur pour acc\u00e9der \u00e0 la web ui.
Dysfonctionnement
En cas d'\u00e9chec, v\u00e9rifiez les r\u00e8gles du pare-feu
Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 wg-easy\n \u251c\u2500\u2500 config\n \u2502 \u2514\u2500\u2500 etc_wireguard\n \u251c\u2500\u2500 compose.yaml\n \u2514\u2500\u2500 .env\n
Le conteneur sera en mode HOST
, c'est \u00e0 dire qu'il occupera les ports de votre host comme s'il n'etait pas dans un conteneur mais directement install\u00e9 sur la machine, sans passer par un sous-r\u00e9seau.
Ouvrez Dockge, cliquez sur compose
et nommez la stack wg_easy
.
Copiez la configuration suivante :
version: \"3.8\"\nvolumes:\n etc_wireguard:\nservices:\n wg-easy:\n network_mode: host\n env_file:\n - .env\n environment:\n - LANG=en\n - WG_HOST=${HOST}\n - PASSWORD_HASH=${PW}\n - WG_DEFAULT_ADDRESS=${ADDRESS}\n - WG_HIDE_KEYS=never\n - WG_ALLOWED_IPS=${IPS}\n - WG_DEFAULT_DNS=\n - UI_TRAFFIC_STATS=true\n - UI_CHART_TYPE=1\n image: ghcr.io/wg-easy/wg-easy\n container_name: wg-easy\n volumes:\n - /docker/wg_easy/config/etc_wireguard:/etc/wireguard\n restart: unless-stopped\n cap_add:\n - NET_ADMIN\n - SYS_MODULE\n
Astuce
Ajoutez le label de watchtower afin d'automatiser les mises \u00e0 jour
services\n wg-easy:\n #...\n labels:\n - com.centurylinklabs.watchtower.enable=true\n
Dans .env
:
HOST=\nPW=\nADDRESS=\nIPS=\n
Variable Valeur Exemples HOST=
Domaine de l'host mondomaine.fr
PW=
Hash du mot de passe, \u00e0 g\u00e9n\u00e9rer ici. ATTENTION: doubler les $
$$2a$$12$$FF6T4QqSP9HoiAVlFb.TCehAHPyThBTMU3fYtGdegD0Khx4xKKSqO
ADDRESS=
Plage d'adresse que le DHCP du VPN peut attribuer, le x
doit etre pr\u00e9sent, on peut changer les autres chiffres ou les remplacer par x
aussi 10.8.0.x
IPS=
les IPs qui doivent etre rout\u00e9es par les clients vers le VPN. Dans notre cas, on veut que seul le traffic vers le serveur et clients du VPN soit rout\u00e9, on veut pas de leurs r\u00e9seau local et on veut conserver l'acc\u00e8s \u00e0 internet direct sans passer par le VPN.Si vous voulez tout de meme ajouter toutes les machines connect\u00e9es aux appareils en local, ajoutez la plage 192.168.0.0/16
en s\u00e9parant les deux plages par une virgule. 10.8.0.0/24
Puis d\u00e9ployez la stack.
"},{"location":"serveex/wireguard/#activation-du-forwarding-depuis-lhost","title":"Activation du forwarding depuis l'host","text":"Pour que l'host autorise les clients \u00e0 communiquer entre eux, vous devez activer les param\u00e8ttres suivants :
$ sudo sysctl net.ipv4.ip_forward=1\n$ sudo sysctl net.ipv4.conf.all.src_valid_mark=1\n
"},{"location":"serveex/wireguard/#recuperation-des-fichiers-de-conf","title":"Recuperation des fichiers de conf","text":"Afin de configurer les clients, vous devez t\u00e9l\u00e9charger les fichiers de conf g\u00e9n\u00e9r\u00e9s par l'host :
http://ipduserveur:51821
wg0.conf
Info
Nous partons du principe que le serveur client est un serveur linux avec Docker install\u00e9
Structure des dossiers
root\n\u2514\u2500\u2500 docker\n \u2514\u2500\u2500 wireguard\n \u2514\u2500\u2500 config\n \u2502 \u2514\u2500\u2500 wg_confs\n \u2514\u2500\u2500 compose.yaml\n
Creez le dossier /docker/wireguard/config/wg_confs
.
Astuce pour les allergiques au terminal
Vous pouvez utiliser File Browser pour naviguer dans vos fichier et \u00e9diter vos documents au lieu d'utiliser les commandes du terminal.
$ sudo mkdir -p /docker/wireguard/config/wg_confs\n
Copiez le fichierwg0.conf
t\u00e9l\u00e9charg\u00e9 pr\u00e9c\u00e9demment.
Astuce
Le moyen le plus simple est de transf\u00e9rer le fichier par sftp dans le dossier /home/nomdutilisateur
puis de le copier dans le bon dossier :
$ sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs\n
Creez le compose.yaml
dans /docker/wireguard
:
$ sudo vi /docker/wireguard/compose.yaml\n
Appuyez sur i
pour rentrer en modification et copiez la configuration ci-dessous services:\n wireguard:\n image: lscr.io/linuxserver/wireguard:latest\n container_name: wireguard\n network_mode: host\n cap_add:\n - NET_ADMIN\n - SYS_MODULE #optional\n environment:\n - TZ=Europe/Paris\n volumes:\n - /docker/wireguard/config:/config\n - /lib/modules:/lib/modules #optional\n restart: unless-stopped\n
Appuyez sur Echap
puis tapez :x
pour quitter et sauvegarder.
Lancez le conteneur :
$ cd /docker/wireguard\n$ sudo docker compose up -d\n
Note
A r\u00e9p\u00e9ter pour chaque client
"},{"location":"serveex/wireguard/#autres-appareils","title":"Autres appareils","text":"Attention
Si des machines clientes sont sur le meme r\u00e9seau local que le serveur (derriere la box) :
wg0.conf
upload\u00e9 sur cette machine en changeant avec l'adresse locale du serveur : Endpoint = ipduserveur:51820
Et voil\u00e0 ce que cela peut donner !
"}]}