Ideenquelle ou la Source des idées en Français. Il s’agit juste d’un lieu de partage.
HTTPS en domaine local
Sécurité un jour, sécurité toujours ! Enfin, c’est ce que j’ai essayé de mettre en place. Mon navigateur est configuré par défaut pour forcer le mode HTTPS, y compris sur mes domaines locaux.
Sauf que je n’ai pas de certificat sur mon serveur personnel.
Go ! pour en installer un. Le résultat qui apparait est d’utiliser Let’s encrypt soit directement soit via certbot. Cela semble bien fonctionner … pour autant que vous nommiez vos domaines locaux avec des extensions existantes (.com, .eu, …).
Dans le cas où vous utilisez une extension fantaisistes (.lan), cela ne fonctionnera pas. Il ne reste plus qu’à créer son certificat avec mkcert et l’installer manuellement sur tous les appareils qui vont se rendre sur vos sites. Vu que la durée de vie des certificats peuvent être prolongés jusqu’à 10 ans, une fois l’opération faite, vous oublierez comment vous avez fait (wink wink).
Je ne l’ai pas encore fait. Vu qu’il faut aller sur chaque device pour configurer cela, j’ai mis cette option en bas de la liste :(
Monter un disque dur externe automatiquement
- Installer les paquets nécessaires
sudo apt update
sudo apt install exfatprogs
- Identifier le disque dur externe
lsblk
La commande va vous renseigner tous les devices et leur correspondance dans le système.
Imaginons pour la suite que ce soit /dev/sdb1
- Créer le dossier où le disque dur sera accessible
Généralement, cela se fait dans un dossier dans
/mntou dans/mediaavec la commandemkdir(il faut probablement rajouter un petitsudocar de base, vous n’avez pas accès en écriture). - Trouver le UUID de votre disque :
sudo blkid /dev/sdb1vous renvoie une sortie similaire à :/dev/sdb1/ : LABEL="TOSHIBA EXT" BLOCK_SIZE="512" UUID="62E69DEDE69DC1A9" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="1473b688-909f-4c28-a09f-07146df2ca87"Vous aurez besoin du UUID pour l’étape suivante. - Préparer le montage automatique via
/etc/fstab/sudo nano /etc/ftsabAjouter la ligne suivante (en adaptant au besoin les paramètres trouvés au point précédent :UUID=62E69DEDE69DC1A9 /mnt/mondisquedur ntfs defaults,rw,uid=1000,gid=1000,umask=0002 0 0 - Tester le processus avec
sudo mount -a. Il se peut qu’il faille relancer systemctl avecsudo systemctl reload-daemonet puis tester le processus.
Update automatique
Comment automatiser les mises à jour sans (trop) se prendre la tête ?
- S’en passer et faire comme si de rien n’était : non, ce n’est pas une possibilité.
- Mettre en place un crontab : oui mais on peut faire mieux
- Utiliser un paquet prévu pour cela :
unattended-upgrades
Allons-y pour la dernière possibilité.
Commençons par l’installer : sudo apt-get install unattended-upgrades.
Configurons le paquet : sudo dpkg-reconfigure unattended-upgrades. Cochez “Yes” et confirmez.
Il y a des possibilités pour configurer cela manuellement et plus précisement : voir PeriodicUpdates.
nginx ou nginx Proxy Manager
J’ai tenté d’installer nginx. J’y suis bien arrivé. C’est simple et facile. ** A condition que votre port 80/443 ne soit pas déjà utilisé par un autre service**
Sauf que … je souhaitais une interface graphique (parce que, même si je suis Geek, je me connais : je ne le suis que par phase).
Donc j’ai repéré nginx Proxy Manager (NPM de son petit nom à ne pas confondre avec NPM, le gestionnaire de paquets Node.js). Pour cela, il faut Docker. La méthode proposée est la suivante :
- Créer un folder /opt/stacks/nginxproxymanager
- Rentrer dedans (avec
cd) - Créer *compose.yml avec le contenu suivant :
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
#environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
-
Lancer le compose :
docker compose up -dIl se peut que nginx Proxy Manager ne se lance pas car quelqu’un occupe déjà certains ports (80 ou 443). Modifier cela pour que NPM se lance. -
Si vous oubliez votre mot de passe (oui, cela arrive aux plus distraits et vu le nombre de mot de passe, c’est possible) 1. Ouvrir le terminal du l’instance nginx :
docker exec -it nginx* sh1. Installer sqlite3 pour modifier la base de données :apt install sqlite3 -y1. Accéder à la base de données :sqlite3 /data/database.sqlite1. Supprimer tous les utilisateurs :UPDATE user sets is_deleted=1;1. Sortir de sqlite :exit;1. Sortir de l’instance nginx :exit1. Redémarrer l’instance nginx :docker restart nginx*`
#Update 2025-10-21 Et oui, déjà un update. Nginx Proxy Manager, c’est bien … pour gérer des proxy. Sauf que mon idée, c’est de faire plus que cela, notamment d’héberger des services différents dont du web classique.
Donc retour à nginx :)
- Installation rapide avec
apt-get install nginx - Lancement
systemctl start nginx - Installation de php (sait-on jamais) :
apt-get install php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-zip php8.4-xml; Il y a plus que simplement PHP. Veillez à vérifier la dernière version encore et adapter dans la commande. - Ajouter PHP dans nginx en éditant
/etc/nginx/sites-enabled/defaulten remplacant :
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
#With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
#With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
#}
par :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
A nouveau, il faut vérifier la version de PHP (en 2025-10, c’est la 8.4).
- Recharger nginx avec
systemctl reload nginx
C’est la base.
Tous les sites actifs sont dans /etc/nginx/sites-enabled. Les sites disponibles sont dans /etc/nginx/sites-available.
Idéalement, on prépare puis on rend disponible.
Une manière de faire (ou contourner l’esprit) est de faire des liens symobliques : ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/.
Avant de relanger nginx (avec un systemctl restart nginx), on peut vérifier la configuration avec nginx -t. Plutôt utile !
Et pour le reverse proxy ?
Il suffit de créer un fichier dans /etc/nginx/sites-enabled contenant :
server {
listen 80;
listen [::]:80;
server_name pdf.home.lan pdf.lan;
http2 off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.2:3000;
}
}
Cela permet dont de rediriger discrètement pdf.home.lan vers http://192.168.1.2:3000.
Si je dois rediriger vers un port et un sous-dossier explicitement ?
Pour une raison que j’ignore (et j’ignore beaucoup de choses), la fonction proxy_pass ne fonctionne pas.
J’utilise return 301 http://MON_IP:MON_PORT/MON_DOSSIER :
server {
listen 80;
listen [::]:80;
server_name serviio.home.lan serviio.lan;
http2 off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
return 301 http://serviio.home.lan:23423/console;
}
}
Source
Bolet.io - How I Supercharged My Pi-hole Setup with Nginx Proxy Manager
qBittorent
-
Installer qBittorent Il existe deux versions : une version GUI local (qbittorrent) et une version Web GUI (qbittorrent-nox). Pour installer, il faut invoquer
sudo apt-get install qbittorrentousudo apt-get qbittorrent-nox -
Lancer qBittorrent Cela se fait en utilisant une des commandes :
qbittorentouqbittorrent-nox -
Lancement de qBittorent à chaque redémarrage Pour permettre le lancement de qBittorent à chaque (re-)démarrage du système, il faut le renseigner comme un service.
- Dans les explications que j’ai suivies, il préconise de créer un nouvel utilisateur. J’avoue ne pas avoir compris pourquoi.
sudo useradd -r -m qbittorrentL’argument-rest utilisé pour signaler que nous voulons un utilisateur système. L’argument-mest utilisé pour créer son répertoire parent/propre. - Il faut rajouter l’utilisateur au groupe
qbittorrentjuste créé :sudo usermod -a -g qbittorrent $USERL’argument-aest utilisé pour ajouter un attribut à l’utilisateur. L’argument-Gest utilisé pour signaler que c’est sur un groupe que l’on travaille. - Maintenant, nous pouvons créer le service en créant le fichier suivant
/etc/systemd/system/qbittorrent.service(il faut le créer en tant que sudo) :
- Dans les explications que j’ai suivies, il préconise de créer un nouvel utilisateur. J’avoue ne pas avoir compris pourquoi.
Description=qBittorrent
After=network.target
[Service]
Type=forking
User=qbittorrent
Group=qbittorrent
UMask=002
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure
[Install]
WantedBy=multi-user.target
Personnellement, j'ai d'abord lancé `qbittorrent-nox` et configuré tout dans l'interface via mon utilisateur. J'ai donc modifié l'user pour mettre le mien.
1. Il faut démarrer le service nouvellement créé : `sudo systemctl start qbittorrent`
1. Il est possible de vérifier le status du service : `sudo systemctl status qbittorrent`
1. Pour permettre que le service s'active à chaque démarrage, il faut activer le service : `sudo systemctl enable qbittorrent`
-
Modifier le port pour accéder Si besoin, modifier le port auquel accéder à GUI Web (utile si vous avez de multiples services). Personnellement, je l’ai mis sur 49152.
-
Ignorer l’authentification pour les clients avec une adresse IP spécifique Dans Options/IU Web > Nécessite une authentification, cocher les deux options commençant par “Ignorer […]” et rajouter les lignes suivantes dans l’encadré :
127.0.0.1/32
192.168.1.0/24
- Rediriger l’adresse via nginx J’utilise personnellement nginx Proxy Manager. Aller dans Hosts > Proxy Hosts > Add Proxy Host.
Domain Names : qbit.lan
Scheme : http
IP : 192.168.1.2
Forward port : 49152
Cela fonctionne très bien … sauf avec le point précédent. Pour éviter l’authentification, il faut configurer un Redirection Host
Domaine Names : qbit.lan
Scheme: http # en laissant à 'auto', une erreur est générée
Forward domain: 192.168.1.2:49152
HTTP Code : 308 Permanent redirect
Preserve Path : OK
Docker
Pourquoi Docker ?
- Parce que plein d’applications ne sont plus que diffuser sous ce format
Pourquoi pas Docker ?
- Parce que cela ajoute en complexité (encore un truc à apprendre, à maitriser, à debugger). Naturellement, si tout est sous Docker, l’investissement est plus rentable.
- Installation de Docker
curl -sSL https://get.docker.com | shsudo usermod -aG docker $USERPour avoir les privilèges, il faut se reconnecter/redémarrer la session SSH.
Serveur DLNA
Nous avons une vieille télévision : elle date de 2010. Elle est smart. Sauf que … Avec le temps, les applications smart ont disparu, faute de support des éditeurs de logiciels (RTBF, Arte, …).
Elle possède toute de même une fonctionnalité qui est native : DLNA. Il s’agit de lire des données (vidéo, audio, photo) sur le réseau. Pour cela, il faut un serveur qui émet les données. Chez nous, notre box Internet permet cela nativement pour les supports USB qu’on y insère. Pas pratique si on souhaite modifier régulièrement ce que l’on regarde.
Nous avons trouvé une application : Serviio. Pratique et facile, bref assez simple pour que Madame et moi l’utilisions essentiellement pour les enfants. Ce qui est moins cool, c’est que cela fonctionne sous Java. Lors du passage de Windows à Linux, j’ai cherché une alternative.
Elles existent :
- minidlna
- gebera
Les tutoriels (parfois anciens) fonctionnent assez bien. Il y a pour l’un des deux un soucis dans les tutoriels par rapport aux droits d’accès. Rien à redire mise à part … à moins que ? Naturellement, il y a un “Mais”. Mais, pour une raison que j’ignore, la télévision n’affiche pas les dossiers ; tous les fichiers sont à la racine. ce qui rend impraticable le choix de la vidéo.
Bref, pas de choix: je réinstalle Serviio (sur Linux cette fois) et bim, bam, cela fonctionne. Il ne me reste plus qu’à vérifier s’il est possible d’ajouter des images pour illustrer les dossiers (plus facile pour que le dernier comprenne ce qu’il choisit).
Installation
- Installer les dépendances : Java, sous son package openjdk, ffmpeg et x264.
Cela se fait simplement avec un
apt install openjdk -*-jdk ffmpeg x264. Il faut vérifier la dernière version de openjdk (aujourd’hui, c’est le 25). - Téléchargement et installation de Serviio :
Sur le site de Serviio, il faut vérifier le numéro de la dernière version (aujourd’hui, c’est la 2.4).
Pour le récupérer :
wget http://download.serviio.org/releases/serviio-2.4-linux.tar.gzPour le décompresser (ici, on le met dans/opt) :tar -xzvf serviio-2.4-linux.tar.gar -C /opt - Permettre à Serviio d’être lancé au boot.
Vu que nous avons juste décompressé l’application dans
/opt, le système ne sait pas comment lancer au boot Serviio ni surveiller qu’il fonctionne en continu. Nous allons le renseigner en créant un service pour systemd. Pour commencer, nous allons écrire un fichier dans/lib/systemd/system/serviio.services:
[Unit]
Description=Serviio media Server
After=syslog.target network.target
[Service]
User=serviio
ExecStart=/opt/serviio-2.4/bin/serviio.sh
ExecStop=/opt/serviio-2.4/bin/serviio.sh -stop
[Install]
WantedBy=multi-user.target
Ici, nous lançons l’application avec l’utilisateur serviio.
Il faut créer cet utilisateur avec useradd -r -U -s /bin/false serviio puis lui donner les accès au dossier serviio avec chown -R serviio:serviio /opt/serviio-2.4/.
- Rendre le service accessible avec
systemctl enable serviio.service - Vérifier le status avec
systemctl status serviio.service. S’il n’est pas lancé, nous le lançons :systemctl start serviio.service. - Configurer Serviio via sa console Web. Elle est accessible via
http://IP_Machine:23423/console
Source:
Linuxconfig - How to install Serviio media server on Raspberry Pi
Pi-Hole
PiHole permet de filtrer les requetes depuis le réseau vers l’extérieur. Le routeur Internet ne sert plus qu’à se connecter au réseau. Tout ce qui est DNS (= savoir où se trouve Google.com sur le réseau) et l’attribution des adresses IP sur le réseau (=DHCP) est géré par Pi-Hole.
-
Installation Le site de Pi-Hole renseigne la méthode pour installer Pi-Hole. https://docs.pi-hole.net/main/basic-install/ donne la commande suivant :
curl -sSL https://install.pi-hole.net | bashà lancer dans la ligne de commande en tant que sudo. -
Ajouter votre user dans le groupe ‘pihole’ :
sudo usermod -aG pihole $USER -
Configurer Pi-Hole
-
Ajouter un DNS Alternatif Sebsauvage propose une liste de DNS alternatif : https://sebsauvage.net/wiki/doku.php?id=dns-alternatifs. Personnellement, je n’ai pas su configurer celle de Mullvad.
-
Créer des groupes de clients et assigner les clients au groupe
-
Ajouter des listes de blocages https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts est la liste de base. https://sebsauvage.net/hosts/hosts est celle de SebSauvage. Elle est régulièrement mise à jour. https://github.com/hagezi/dns-blocklists en propose une série. La version Multi Pro est la plus utilisée. Elle peut être complétée avec d’autres sous-listes. Quand toutes les listes sont ajoutées, il faut encore (re-)constituer la base de données de Pi-Hole soit via l’interface web (dans Tools / Update Gravity) soit via la ligne de commande :
pihole -g -
Passer en revue toutes les options dans Settings.
-
Configurer votre serveur Pi-Hole avec une ip statique.
-
Configurer votre routeur pourqu’il cède la gestion des DNS et du DHCP à votre Pi-Hole.
-
Avertir vos utilisateurs que certains sites peuvent être bloqués. Il suffit de vous le signaler ;-)
- De base, Pihole propose son web GUI sur le port 80.
Pratique car c’est le port par défaut quand on surfe. Pas pratique si vous avez d’autres applications qui sont également sur le port 80 (par exemple votre server Web comme nginx ou apache).
Comment modifier ce comportement ?
- Il faut aller dans l’interface Web (http://VotreAdresseIP/admin) dans un des menus de “SYSTEM”;
- Passer de “Basic” en “Expert”;
- Se rendre dans “All Settings” puis “Webserver and API”;
- Modifier le paramètre “webserver.port”; par défault, la valeur est “80o,443os,[::]:80o,[::]:443os”. Si vous souhaitez que le port par défaut soit le 8081, il suffit de mettre “49153o,49154os,[::]:49153o,[::]:49154os”.
Et si je veux donner un nom à mes machines ?
Pourquoi un nom ? Parce que c’est parfois plus facile de retenir cela qu’une adresse IP.
En réalité, la procédure est identique et peut être fait parallèlement.
Pour cela, se rendre dans Settings > DHCP puis activier l’interface Expert en cliquant sur l’onglet vert Basic. Apparait alors tout en bas un cadre Static DHCP configuration. Pour chaque ligne, vous spécifier l’adresse MAC puis l’adresse IP fixe et/ou le nom de la machine. Tout est séparé par une virgule.
Par exemple : d8:d4:3c:f3:c5:49,192.168.1.20,mamachine
Personnellement, j’ai mis :
- à partir de 192.168.1.10, les machines personnelles fixes (desktop & serveur)
- à partir de 192.168.1.20, les machines personnelles portables (laptop, tablette & smartphone)
- à partir de 192.168.1.40, les machines non-personnelles (a priori, elles sont fixes) (télévision, onduleur, console de jeux)
- à partir de 192.168.1.50, les machines non répertoriées.
Pourquoi donner un nom ?
Cela permet alors de fixer le nom dans le menu Clients (plus facilement qu’avec les options proposées dans le drop-down) et donc d’identifier la machine dans Query Log.
Retour d’expérience
Pihole était d’abord installé sur un Raspberry Pi 4 - 4 GO avec Raspberry OS en version desktop. Régulièrement, Pihole affichait une charge importante. J’ai fait l’acquisition du même Raspberry mais avec une version light/sans desktop. La charge est toujours faible et aucun ralentissement. A voir quand il y aura plus d’utilisateurs sur le réseau.
ESP32 & Logging
Cela fait un petit temps que j’aimerai mieux logger toute une série d’informations sortants de mes programmes. Je n’ai pas encore passé le cap en Python. Cela va venir, j’en suis certain.
Pour l’ESP32, j’ai malgré moi passé le cap en étudiant le code de
Faire tourner une pompe 3V
J’ai trouvé deux petites pompes à eau alimentable en 3V3. La première ne fonctionne pas. Dommage. J’attends le retour du vendeur. La deuxième fonctionne parfaitement.
J’ai mis un peu de temps à trouver le bon circuit. La plupart des schéma partent du principe d’une alimentation externe en 12V étant donné que la pompe tourne en 12V également. Personnellement, je n’ai pas besoin d’une grosse pompe dans mon cas. Je veux donc trouver un circuit qui fonctionne en 3V3. Le soucis est que les GPIO ne fournissent moins de 100 mA. Or une pompe cela nécessite plus.
J’aurais pu utiliser un relai (voir ESP32IO - ESP32 controls pump). Un relai, c’est pratique et cela a ses limites. Et comme j’aime me pourrir la vie (et que j’ai vu plein de schéma sans relai), je me suis dit : “Fais un circuit avec un MOFSET !” Sauf comme je l’ai dit, ils sont prévus avec du 12V.
Après deux heures de tests, j’ai enfin trouvé le circuit qui convient.
Le Mofset utilisé est DMT6009LCT car sin V_GS(TH) est compris entre 0.7 et 2V; autrement dit, le MOFSET laissera passer le courant entièrement dès qu’il recevra plus de 2V via son GATE, piloté donc par un GPIO qui sort du 3.3V en position HIGH.
Aucun courant ne passer quand le Gate sera alimenté sous les 0.7 V. Dans ce cas, il suffit de couper le GPIO pour obtenir 0V.
Le MOFSET est à canal N ce qui explique pourquoi il est mis près du GND (ici le Source).
Etape suivante :
- ajouter le senseur capacitif d’humidité du sol (facile)
- écrire le programme pour contenter la plante en eau (plus long).