Ideenquelle

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

  1. Installer les paquets nécessaires
sudo apt update
sudo apt install exfatprogs
  1. 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

  1. Créer le dossier où le disque dur sera accessible Généralement, cela se fait dans un dossier dans /mnt ou dans /mediaavec la commande mkdir (il faut probablement rajouter un petit sudo car de base, vous n’avez pas accès en écriture).
  2. Trouver le UUID de votre disque : sudo blkid /dev/sdb1 vous 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.
  3. Préparer le montage automatique via /etc/fstab/ sudo nano /etc/ftsab Ajouter 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
  4. Tester le processus avec sudo mount -a. Il se peut qu’il faille relancer systemctl avec sudo systemctl reload-daemon et puis tester le processus.

Source

Update automatique

Comment automatiser les mises à jour sans (trop) se prendre la tête ?

  1. S’en passer et faire comme si de rien n’était : non, ce n’est pas une possibilité.
  2. Mettre en place un crontab : oui mais on peut faire mieux
  3. 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 :

  1. Créer un folder /opt/stacks/nginxproxymanager
  2. Rentrer dedans (avec cd)
  3. 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
  1. Lancer le compose : docker compose up -d Il 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.

  2. 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* sh 1. Installer sqlite3 pour modifier la base de données : apt install sqlite3 -y 1. Accéder à la base de données : sqlite3 /data/database.sqlite 1. Supprimer tous les utilisateurs : UPDATE user sets is_deleted=1; 1. Sortir de sqlite : exit; 1. Sortir de l’instance nginx : exit 1. 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 :)

  1. Installation rapide avec apt-get install nginx
  2. Lancement systemctl start nginx
  3. 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.
  4. Ajouter PHP dans nginx en éditant /etc/nginx/sites-enabled/default en 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).

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

  1. 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 qbittorrent ou sudo apt-get qbittorrent-nox

  2. Lancer qBittorrent Cela se fait en utilisant une des commandes : qbittorent ou qbittorrent-nox

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

    1. 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 qbittorrent L’argument -r est utilisé pour signaler que nous voulons un utilisateur système. L’argument -m est utilisé pour créer son répertoire parent/propre.
    2. Il faut rajouter l’utilisateur au groupe qbittorrent juste créé : sudo usermod -a -g qbittorrent $USER L’argument -a est utilisé pour ajouter un attribut à l’utilisateur. L’argument -G est utilisé pour signaler que c’est sur un groupe que l’on travaille.
    3. 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) :
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`
  1. 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.

  2. 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
  1. 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 ?

Pourquoi pas Docker ?

  1. Installation de Docker curl -sSL https://get.docker.com | sh sudo usermod -aG docker $USER Pour 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 :

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

  1. 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).
  2. 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.gz Pour le décompresser (ici, on le met dans /opt) : tar -xzvf serviio-2.4-linux.tar.gar -C /opt
  3. 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/.

  1. Rendre le service accessible avec systemctl enable serviio.service
  2. Vérifier le status avec systemctl status serviio.service. S’il n’est pas lancé, nous le lançons : systemctl start serviio.service.
  3. 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.

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

  2. Ajouter votre user dans le groupe ‘pihole’ : sudo usermod -aG pihole $USER

  3. Configurer Pi-Hole

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

  5. Créer des groupes de clients et assigner les clients au groupe

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

  7. Passer en revue toutes les options dans Settings.

  8. Configurer votre serveur Pi-Hole avec une ip statique.

  9. Configurer votre routeur pourqu’il cède la gestion des DNS et du DHCP à votre Pi-Hole.

  10. Avertir vos utilisateurs que certains sites peuvent être bloqués. Il suffit de vous le signaler ;-)

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 :

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

  1. ajouter le senseur capacitif d’humidité du sol (facile)
  2. écrire le programme pour contenter la plante en eau (plus long).