Post

🟢 SearxNG - ttrss - calibre - Proxmox 103 (pvm-alpine02)

🟢 SearxNG - ttrss - calibre - Proxmox 103 (pvm-alpine02)

VM Alpine Linux

Proxmox VM

VM pvm-alpine02

Créer une VM avec Alpine sous Proxmox

Télécharger l’image ISO
local (pve) –> Images ISO –> Télécverser alpine-standard-3.22.2-x86_64.iso

Créer une VM avec alpine3.22 - Modèle (Disque 5GB , Ram 128MB)

Se connecter en utilisateur rad

Connexion ssh sur un autre port avec un jeu de clés

Générer une paire de clé sur l’ordinateur de bureau PC1
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec la machine virtuelle pvm-alpine02

1
2
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/pvm-alpine02
chmod 600 ~/.ssh/pvm-alpine02

Copier la clé publique cat ~/.ssh/pvm-alpine02.pub dans le presse-papier

1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM8yWNeyiKIOG/HIc0oOmyOvEOUo/C8wR0c1KcCCw4OF yann@pc

On se connecte sur la machine virtuelle alpine linux “pvm-alpine02” en proxy avec le serveur cwwk (192.168.0.205)

1
ssh rad@192.168.0.222

Créer le répertoire et ouvrir nouveau fichier

1
2
mkdir -p $HOME/.ssh/
nano $HOME/.ssh/authorized_keys

Coller le contenu du presse-papier , sauver le fichier et sortir

Modifier les droits

1
chmod 600 $HOME/.ssh/authorized_keys

Passer en mode su

1
su -

Modifier la configuration serveur SSH

1
nano /etc/ssh/sshd_config

Modifier

1
2
Port = 55222
PasswordAuthentication no

Relancer le serveur

1
service sshd restart

Test connexion depuis un poste sur le réseau

1
ssh rad@192.168.0.222 -p 55222 -i /home/yann/.ssh/pvm-alpine02

Passer en root

1
su -

Ajout dépôt communauté
Editer la configuration des dépôts

1
nano /etc/apk/repositories

Trouvez maintenant la ligne qui se termine dans /community
Ensuite, retirez le # au début de la ligne.
Le fichier résultant devrait ressembler à ceci

1
2
3
#/media/cdrom/apks
http://mirrors.ircam.fr/pub/alpine/v3.20/main
http://mirrors.ircam.fr/pub/alpine/v3.20/community

Installer sudo

1
2
apk update
apk add sudo

Ajouter un utilisateur avec les privlèges root

1
echo "rad     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-rad

Motd /etc/motd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   ___                                                                       
  / _ \ _ __  ___ __  __ _ __ ___    ___ __  __ /\   /\ /\/\                 
 / /_)/| '__|/ _ \\ \/ /| '_ ` _ \  / _ \\ \/ / \ \ / //    \                
/ ___/ | |  | (_) |>  < | | | | | || (_) |>  <   \ V // /\/\ \               
\/     |_|   \___//_/\_\|_| |_| |_| \___//_/\_\   \_/ \/    \/               
                                       _         _                ___  ____  
 _ __ __   __ _ __ ___           __ _ | | _ __  (_) _ __    ___  / _ \|___ \ 
| '_ \\ \ / /| '_ ` _ \  _____  / _` || || '_ \ | || '_ \  / _ \| | | | __) |
| |_) |\ V / | | | | | ||_____|| (_| || || |_) || || | | ||  __/| |_| |/ __/ 
| .__/  \_/  |_| |_| |_|        \__,_||_|| .__/ |_||_| |_| \___| \___/|_____|
|_|                                      |_|                                 
 _   ___  ____      _   __     ___     ___     ____   ____   ____            
/ | / _ \|___ \    / | / /_   ( _ )   / _ \   |___ \ |___ \ |___ \           
| || (_) | __) |   | || '_ \  / _ \  | | | |    __) |  __) |  __) |          
| | \__, |/ __/  _ | || (_) || (_) |_| |_| |_  / __/  / __/  / __/           
|_|   /_/|_____|(_)|_| \___/  \___/(_)\___/(_)|_____||_____||_____|          

Modifier hosts, hostname et resolv.conf

Fichier /etc/hosts

1
2
127.0.0.1	pxalpi02 localhost localhost.localdomain localhost
::1		localhost localhost.localdomain

Fichier /etc/hostname

1
pxalpi02

Fichier /etc/resolv.conf

1
2
nameserver 192.168.0.205
nameserver 1.1.1.1

Redémarrer la machine

Alpine Linux - Mise à jour automatique

Installer curl

1
sudo apk add curl

En mode su

Pour chaque nouveau serveur Alpine Linux, créer un script shell nommé apk-autoupgrade dans le dossier /etc/periodic/daily/ avec les permissions suivantes : 700

1
2
echo -e "#!/bin/sh\napk upgrade --update | sed \"s/^/[\`date\`] /\" >> /var/log/apk-autoupgrade.log" > /etc/periodic/daily/apk-autoupgrade && \
	chmod 700 /etc/periodic/daily/apk-autoupgrade

Si les tâches cron ne sont pas activées

1
2
rc-service crond start
rc-update add crond

Le script exécute la commande apk upgrade --update une fois par jour, apk par défaut ne demande jamais l’intervention de l’utilisateur.

Additif pour notification ntfy

1
nano /etc/periodic/daily/apk-autoupgrade

Ajouter ce qui suit en fin de ficheir

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
apk upgrade --update | sed "s/^/[`date`] /" >> /var/log/apk-autoupgrade.log
#
curl \
-H "X-Email: ntfy@cinay.eu" \
-H "Title: 💻 `hostname` `ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | head -n 1 | awk '/inet/ {print $2}' | cut -d'/' -f1` - script 'apk-autoupgrade'" \
-H "Authorization: Bearer tk_.............................." \
-H prio:low \
-d "`uname -a`
`cat /etc/motd` 
✔️ Fin exécution script /etc/periodic/daily/apk-autoupgrade" \
https://noti.rnmkcy.eu/yan_infos

NFS - Alpine Linux

Cette page documente la configuration du système de fichiers réseau (NFS) du côté du serveur et du client, y compris les autofs et l’authentification Kerberos.

Création d’un dossier nfs docker-data pour y stocker les donnée des applications docker

Installation

Installez le paquet suivant pour le service client et serveur NFS.

1
sudo apk add nfs-utils

Client NFS

Créer un dossier local de montage

1
mkdir ~/docker-data

Pour monter automatiquement les actions NFS, une entrée doit être faite à /etc/fstab comme suit:

1
192.168.0.205:/sharenfs/docker-data /home/rad/docker-data nfs4 rw,_netdev 0 0

Pour monter nfs share depuis le fichier /etc/fstab au démarrage du système :

1
sudo rc-update add nfsmount

Pour monter les actions de nfs depuis le fichier /etc/fstab :

1
sudo rc-service nfsmount start

Vous pouvez vérifier vos services de démarrage :

1
sudo rc-status

Conseil : netmount est un service général pour tous les systèmes de fichiers basés sur le réseau, tandis que nfsmount est spécialement conçu pour NFS.

Pour utiliser netmount, voici les commandes équivalentes :

1
2
# rc-service netmount démarrage
# rc-update add netmount

En cas d’erreur au montage NFS , REDEMARRER LA MACHINE.

docker et docker-compose

Install docker & docker-compose on Alpine Linux

Passer en root

1
su -

Editer la configuration des dépôts /etc/apk/repositories Trouvez maintenant la ligne qui se termine dans /community Ensuite, retirez le # au début de la ligne.

Installer docker et docker-compose

1
2
apk update
apk add docker docker-compose

Activer autostart sur boot en utilisant

1
rc-update add docker default

puis vous pouvez lancer le service docker en utilisant la commande

1
2
3
/etc/init.d/docker start
# ou
service docker start

Pour exécuter les commandes docker en tant qu’utilisateur non root, vous devez d’abord ajouter votre utilisateur au groupe « docker ».

1
sudo addgroup $USER docker

Se déconnecter puis se reconnecter (prise en charge des changements), vérifcation: id

1
uid=1000(rad) gid=1000(rad) groups=10(wheel),18(audio),23(input),27(video),28(netdev),103(docker),1000(rad)

Watchtower - Mise à jour auto

Watchtower est un outil open-source permettant d’automatiser les mises à jour.

Le paramètre --volume est obligatoire pour que Watchtower puisse communiquer avec le démon Docker sur le système hôte.

Il est possible de lui préciser quand faire les mises à jour, histoire d’éviter une coupure de service (même mineure) en pleine heure de pointe. Le paramètre --schedule prend comme valeur une expression crontab. Sinon, le paramètre --interval peut-être utilisé pour définir le nombre de secondes entre chaque vérification.

À noter également l’option --cleanup qui permet de supprimer les anciennes images afin de ne pas surcharger l’espace disque de l’hôte.

En mode utilisateur, lancer le conteneur Watchtower lui-même en exécutant une commande Docker :

1
2
3
4
5
6
7
8
docker run \
  --name watchtower \
  --restart always \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --detach \
  containrrr/watchtower \
  --schedule "0 0 4 * * *" \
  --cleanup

En cas d’erreur "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"
Tutorial: Solve the error message: “Is the Docker daemon running”

Ainsi, nous exécutons Watchtower en mode détaché, ce qui lui donne accès au socket Docker, qui est nécessaire à Watchtower pour surveiller et mettre à jour les conteneurs.
Notre sortie montre l’identifiant unique du conteneur Watchtower qui s’exécute maintenant en arrière-plan.

1
2
Status: Downloaded newer image for containrrr/watchtower:latest
66ded140d58a02a2a5132b556ee0ca1c42c267a7b75e273e7e6f8fe4992ab420

Plus besoin donc de se soucier de mettre à jour ses containers, Watchtower le fait tout seul, et ça fonctionne parfaitement !

1
docker logs watchtower
1
2
3
4
5
time="2025-11-20T17:16:17Z" level=info msg="Watchtower 1.7.1"
time="2025-11-20T17:16:17Z" level=info msg="Using no notifications"
time="2025-11-20T17:16:17Z" level=info msg="Checking all containers (except explicitly disabled with label)"
time="2025-11-20T17:16:17Z" level=info msg="Scheduling first run: 2025-11-21 04:00:00 +0000 UTC"
time="2025-11-20T17:16:17Z" level=info msg="Note that the first check will be performed in 10 hours, 43 minutes, 42 seconds"

Applications

SearxNG

SearxNg - Installation container

Créer environnement

1
2
3
4
5
6
7
# Create the environment and configuration directories
mkdir -p ./searxng/core-config/
cd ./searxng/
# Fetch the latest compose template
curl  -k -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example

Le fichier .env

1
cp -i .env.example .env

Edition

1
nano .env

Démarrage et arrêt conteneur

1
2
docker compose up -d
docker compose down

Ouvrez le navigateur WEB et visitez l’URL : http://192.168.0.218:8888 cwwk - Proxy nginx /etc/nginx/conf.d/searx.rnmkcy.eu.conf proxy_pass http://192.168.0.218:8888;

SearxNG via https://searx.rnmkcy.eu

Tiny Tiny RSS (ttrss)

Vous aurez besoin des éléments suivants :

  • Un navigateur web moderne. Il s’agit généralement d’un navigateur récent de type Chrome ou compatible
  • Un serveur (Virtuel ou VPS) exécutant Docker

Tiny Tiny RSS utilise un modèle de développement continu basé sur la branche master de git qui est considérée comme stable. Si possible, vous devriez toujours utiliser le dernier code de la branche master.

Avec docker compose
La seule façon supportée d’exécuter tt-rss est sous Docker. Vous pouvez utiliser les images officielles de Docker Hub (AMD64 uniquement).

Cette installation utilise PostgreSQL et exécute tt-rss en utilisant plusieurs conteneurs.

Les fichiers environnement “.env” et “docker-compose.yml” à modifier
Lier le port exposé à 127.0.0.1 pour fonctionner derrière un proxy inverse sur le même hôte. Si vous prévoyez d’exposer le conteneur, supprimez “127.0.0.1 :” dans le fichier .env

Etendre Réduire fichier .env
  
#.env
ADMIN_USER_PASS=Mot_de_passe_admin
ADMIN_USER_ACCESS_LEVEL=10
AUTO_CREATE_USER=ttrss
AUTO_CREATE_USER_PASS=Mot_de_passe_user
AUTO_CREATE_USER_ACCESS_LEVEL=10

# Default database credentials.
TTRSS_DB_USER=postgres
TTRSS_DB_NAME=postgres
TTRSS_DB_PASS=Mot_de_passe_postgres

# You can customize other config.php defines by setting overrides here.
# See tt-rss/.docker/app/Dockerfile for a complete list.

# You probably shouldn't disable auth_internal unless you know what you're doing.
TTRSS_PLUGINS='auth_internal, auth_remote, note'
# TTRSS_SINGLE_USER_MODE=true
# TTRSS_SESSION_COOKIE_LIFETIME=2592000
# TTRSS_FORCE_ARTICLE_PURGE=30
# ...

# Bind exposed port to 127.0.0.1 to run behind reverse proxy on the same host.
# If you plan to expose the container, remove "127.0.0.1:".
#HTTP_PORT=192.168.0.222:8280
HTTP_PORT=8280

# faire fonctionner sans /tt-rss/ dans l'URL
APP_WEB_ROOT=/var/www/html/tt-rss
APP_BASE=

# N’oubliez pas de retirer /tt-rss/de TTRSS_SELF_URL_PATH(si vous l'avez réglé).
TTRSS_SELF_URL_PATH=https://flux.rnmkcy.eu
Etendre Réduire fichier docker-compose.yml
  
services:
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    env_file:
      - .env
    environment:
      - POSTGRES_USER=${TTRSS_DB_USER}
      - POSTGRES_PASSWORD=${TTRSS_DB_PASS}
      - POSTGRES_DB=${TTRSS_DB_NAME}
    volumes:
      - db:/var/lib/postgresql/data

  app:
    image: supahgreg/tt-rss:latest
    # or
    # image: ghcr.io/tt-rss/tt-rss:latest
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - db

  updater:
    image: supahgreg/tt-rss:latest
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - app
    command: /opt/tt-rss/updater.sh

  web-nginx:
    image: supahgreg/tt-rss-web-nginx:latest
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - ${HTTP_PORT}:80
    volumes:
      - app:/var/www/html:ro
    depends_on:
      - app

volumes:
  db:
  app:
  backups:

Démarrez les conteneurs de services.

1
2
cd /home/rad
docker compose up -d

Calibre

Cet article est sous licence CC BY 4.0 par l'auteur.