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



