Ok, y’a déjà whatmille solutions de recommandations et découverte de contenus : les listes prises à droite à gauche et ajoutées aux arrs ou à ListSync, Overseerr/Jellyseerr, Suggestarr etc BAH EN VOICI UNE DE PLUS !
Recommendarr de fingerthief permet d’avoir des recommandations faites par une IA à partir des contenus vus sous Plex/Jellyfin, Trakt, Tautulli (eh non ! pas encore mort) et de ceux indexés par Radarr et Sonarr. Attention, tous les synopsis etc sont en anglais.
Quand je parle d’IA, c’est vaste et comprend l’autohébergé (j’ai testé avec OpenAI) :
Services d’IA compatibles
Vous pouvez utiliser n’importe lequel de ces services avec une API compatible OpenAI :
OpenAI : URL par défaut (https://api.openai.com/v1) avec votre clé API OpenAI
LM Studio : URL locale (ex. http://localhost:1234/v1) exécutant des modèles sur votre ordinateur
Ollama : URL locale (ex. http://localhost:11434/v1) pour des modèles hébergés en local
Anthropic Claude : API d’Anthropic avec l’URL de base appropriée
Auto-hébergé : votre propre serveur d’API LLM compatible avec OpenAI
Mistral, Groq, Cohere : la plupart des fournisseurs d’IA avec des endpoints compatibles OpenAI
Honnêtement, vu que je passe 90% de mon temps à tester des trucs plutôt qu’à profiter de mon setup, les recommandations que j’ai sont certes logiques (plus que celles de TMDB, en bas des fiches du moins) mais je ne sais pas si elles reflètent vraiment la qualité de cet outil. Ce dont je ne doute pas.
L’installation est simple puisque tout se configure via la WebUI
Et ensuite on peut connecter ses outils/comptes. Dans mon cas Trakt, TMDB, Jellyfin et Radarr/Sonarr. Je pense que ça venait de mon navigateur mais impossible d’accéder à la configuration en cliquant sur un autre bouton que Configure AI Service ou le menu des paramètres.
Pour l’IA j’ai utilisé mon compte OpenAI avec le modèle gpt-5-chat-latest (pas comme sur le screen). Choix complètement fait au pifomètre, je suis preneur de conseils.
Et ensuite…. magie…. Ou presque. L’IA ne fera qu’aller chercher des contenus par rapport à notre demande. Il faut donc paramétrer la demande. Au moins le nombre de recommandations.
Dans la partie IA, en sus du modèle à choisir et son degré de précision, on peut demander à ce que Recommandarr utilise un sous-ensemble de la bibliothèque afin de réduire l’utilisation de jetons tout en fournissant des recommandations pertinentes.
On sélectionne la catégorie visée (films/séries) et le nombre de recommandations souhaitées.
Puis on peut affiner la recherche en sélectionnant des genres.
Puis sélectionner un prompt pré-défini ou en créer
Style « Vibe »
Se concentre sur l’atmosphère émotionnelle et l’expérience sensorielle du contenu de votre bibliothèque. Les recommandations privilégient la correspondance avec le ressenti et l’ambiance de vos films/séries préférés plutôt que le simple genre ou la similarité de l’intrigue. Idéal pour : Trouver du contenu qui évoque la même sensation, capturant des tons et atmosphères spécifiques.
Style analytique
Procède à une analyse détaillée des structures narratives, des motifs thématiques et des techniques formelles. Les recommandations reposent sur une analyse en profondeur des éléments cinématographiques et télévisuels qui relient les œuvres à un niveau plus substantiel. Idéal pour : Une exploration intellectuelle et la découverte de contenus partageant une approche artistique ou une profondeur thématique similaire.
Style créatif
Dépasse les catégorisations classiques pour trouver des liens inattendus entre les œuvres. Met en avant les parcours émotionnels, la vision artistique et les approches narratives originales. Idéal pour : Découvrir des recommandations surprenantes, qui peuvent sembler éloignées au premier abord mais partagent une même essence créative.
Style technique
Se focalise sur l’artisanat de la production, les techniques de réalisation et l’exécution technique. Analyse les méthodes de mise en scène, la cinématographie, les styles de montage et les éléments de production. Idéal pour : L’appréciation des aspects techniques et la recherche de contenus offrant une qualité de production ou une innovation technique similaire.
Comme souvent on peut sélectionner la langue préférée du contenu (séries plutôt en langue française etc). On pourra aussi de temps en temps rescanner les bibliothèques.
Et enfin, découvrir les reco. À noter qu’on ne peut pas les ajouter à Radarr/Sonarr directement, sans passer par Overseerr/Jellyseerr/whatever.
Voici par exemple pour les films
Évidemment, avec Decypharr, ça tombe en quelques secondes.
Et pour les séries, on peut évidemment sélectionner les saisons
C’est sympa à tester, on peut y créer plusieurs utilisateurs donc c’est intéressant mais avec un LLM autohébergé ça doit consommer pas mal de ressources. Avec OpenAI ça ne consomme en revanche rien que le serveur donc je vais le garder dans un coin mais je doute l’utiliser tous les jours, avec tout le reste…
L’idéal serait de couler ça à Overseerr/Jellyseerr…
Pour nos bibliothèques Jellyfin on peut tout simplement changer les affiches (bases), configurer et ajouter tout ou au choix la résolution, l’audio, les notes et les récompenses.
Avec la totale, ça peut donner ceci.
Ça ne fonctionne évidemment pas sur les affiches des collections vu que ces badges concernent une vidéo donnée.
Pour répondre à nos besoins, sommaires vu que je connais mes règles Radarr/Sonarr, je n’affiche que les notes et récompenses.
Via la WebUI on peut planifier des opérations (cron) pour appliquer tout ou partie des badges sur les bibliothèques sélectionnées. En reprenant ou non les éléments déjà traités. En revanche, pour la modification des affiches, c’est à faire manuellement, par grappes de 50 (ouais, léger…).
L’installation est relativement simple, j’ai cependant rencontré pas mal de soucis en ne configurant que via la WebUI pour Jellyfin. J’ai tout décommenté/renseigné dans le .env et ça roule.
Comme indiqué sur le GitHub, il faut télécharger le compose et son .env. Je mets ça dans /home/aerya/docker/aphrodite
# Créer le dossier entrer dedans
mkdir /home/aerya/docker/aphrodite && cd /home/aerya/docker/aphrodite
# Télécharger le docker-compose et le .env
curl -L https://github.com/jackkerouac/aphrodite/releases/latest/download/docker-compose.yml -o docker-compose.yml
curl -L https://github.com/jackkerouac/aphrodite/releases/latest/download/default.env.example -o .env
Et on passe à l’édition du compose. Par rapport au compose de base, j’ai juste modifié les volumes sur la base de /home/aerya/docker/aphrodite/…
Mis en always pour « restart » et ajouté la MàJ auto d’Aphrodite avec watchtower. Pas la peine pour Postgre et Redis vu que ça va chercher des versions précises. Tout le reste se modifie dans .env qui suit
Et le fameux .env. Comme expliqué plus haut, après plusieurs tests, il faut y paramétrer le serveur Jellyfin et également décommenter les informations liées à Postgre et Redis. J’ai passé les logs en DEBUG vu les soucis que je rencontrais au début.
Pour créer la SECRET_KEY : (en console) openssl rand -hex 64
Et ne pas oublier de mettre le mot de passe POSTGRES_PASSWORD dans la partie DATABASE_URL Créer une clé API dans Jellyfin via le menu tout en bas du Tableau de bord
Et récupérer l’ID utilisateur qui sera utilisée pour connecter Aphrodite. Dans Tableau de bord/Utilisateurs, cliquer sur le user et l’ID est à la fin de l’URL
# =============================================================================
# Docker Image Configuration
# =============================================================================
# Leave blank to always pull the latest version from GitHub Container Registry
# APHRODITE_IMAGE=ghcr.io/jackkerouac/aphrodite:latest
# =============================================================================
# Database Configuration
# =============================================================================
# IMPORTANT: Change POSTGRES_PASSWORD to a secure password!
# This password will be used to create the database user
POSTGRES_DB=aphrodite
POSTGRES_USER=aphrodite
POSTGRES_PASSWORD=motdepassedelamortquitue
POSTGRES_PORT=5432
# =============================================================================
# Redis Configuration
# =============================================================================
REDIS_PORT=6379
# =============================================================================
# Security Configuration (REQUIRED)
# =============================================================================
SECRET_KEY=4c887cda6e10bac46eb61a961e38f4626609c9caeca08123ed1d6d876c6b14c20a11118cec534f26d5d5de4f5b6935fa07ff8887b91322058c20f95705025fa0
# =============================================================================
# Application Configuration
# =============================================================================
# Port to run Aphrodite on (default: 8000)
APHRODITE_PORT=8000
# API Configuration
API_HOST=0.0.0.0
API_PORT=8000
# Environment
ENVIRONMENT=production
# Logging level (debug, info, warning, error)
LOG_LEVEL=debug
DEBUG=true
# Network Configuration
ALLOWED_HOSTS=*
CORS_ORIGINS=*
# =============================================================================
# Background Jobs Configuration
# =============================================================================
ENABLE_BACKGROUND_JOBS=true
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/1
# =============================================================================
# Database & Redis URLs (Advanced - Override defaults if needed)
# =============================================================================
DATABASE_URL=postgresql+asyncpg://aphrodite:motdepassedelamortquitue@postgres:5432/aphrodite
REDIS_URL=redis://redis:6379/0
# =============================================================================
# Jellyfin Integration (Optional - Configure via Web Interface)
# =============================================================================
# You can set these here or configure them in the web interface
JELLYFIN_URL=https://jelly.domaine.tld
JELLYFIN_API_KEY=xxx
JELLYFIN_USER_ID=xxx
On peut ensuite lancer la Docker et aller visiter les paramètres d’Aphrodite. Mon screen date de ma 1ère installation aussi je ne sais plus si les paramètres de Jellyfin sont déjà remplis par le biais du .env
Il faut aller récupérer (ou créer) ses clés API : – OMDB : version gratuite, clé dans le mail qu’on reçoit suite à l’inscription – TMDB : le token, pas la clé – MDBList : en bas de page – AniDB si vous avez des mangas : j’ai pas regardé plus que ça pour créer une clé API
C’est par ailleurs dans cette partie qu’on peut configurer les badges à mettre en overlay sur les affiches. Je ne rentre pas dans les détails, il y a tellement de personnalisation possible que c’est propre à chacun. Aphrodite étant tout jeune, les notes ne sont pour l’instant disponibles qu’à partir d’IMDb, Metacritic, MyAnimeList, Rotten Tomatoes et TMDb. C’est déjà pas mal même si je suis impatient de voir Trakt arriver. TMDb et Trakt.tv ont maintenant un nombre d’utilisateurs suffisant pour avoir plusieurs centaines de votes et les rendre qualitatifs. Il n’y a évidemment pas AlloCiné, pardon pour ceux qui y bossent, mais c’est bien trop franco-nombriliste-français pour avoir une quelconque utilité dans la galaxie des *arrs et du streaming.
Pour l’audio et la vidéo, Aphrodite peut détecter les données via l’analyse des fichiers. Faut évidemment avoir la machine qui le permet sans que ça prenne des heures.
On peut générer un aperçu de sa configuration via le menu Preview
Avant d’aller plus loin, il faut prendre le temps de vérifier l’import des bibliothèques suite à la connexion avec Jellyfin, dans le menu Poster Manager. C’est ballot, j’ai pas pensé à faire de screen avant de modifier mes affiches…
Ici on peut modifier les affiches, par lots de 50 donc faut être patient… C’est sympa, ça change mais on ne peut pas faire de choix et, pour l’instant, il n’y a pas MediUX d’intégré. Mais le projet est jeune, ça a le temps de venir.
C’est également dans ce menu qu’on peut lancer à la demande l’application des badges, toujours par lots de 50 affiches. Ça peut être intéressant pour tester ou s’occuper des bibliothèques spécifiques avec peu de contenus.
Et ensuite passer aux choses sérieuses avec la mise en place de tâches (ou d’une seule, c’est selon) via les Schedules
Après avoir testé plusieurs configurations, j’ai créé une tâche qui se répète toutes les heures pour mes 2 bibliothèques, pour les contenus non encore « badgés » et seulement les notes et récompenses, comme expliqué au début de mon article.
On peut déclencher le travail directement, sans attendre la prochaine planification et mes bibliothèques passent d’affiches simples
à des badgées selon mes préférences ! Il y a eu l’ajout de collections entre temps également, depuis Jellyfin.
Au final ça tourne très bien, il y a presque trop de réglages possibles quand on est comme moi un éternel insatisfait ^^’
Aphrodite est encore jeune et en sus de l’utiliser je suivrai assurément ses évolutions !
Un petit mémo sur comment automatiser l’affichage de l’OS d’une VM dans la partie note de Proxmox. Par défaut, l’interface graphique n’affiche pas cette information : on y retrouve le nom de la VM, son ID, ses ressources, mais pas le système invité. Heureusement, il est possible de récupérer et d’afficher la version de l’OS […]
KDE publie la première version alpha de KDE Linux, sa nouvelle distribution Linux officielle est désormais ouverte au test public, dérivée d'Arch Linux, mais qui se distingue par son caractère immuable
KDE a dévoilé la première version alpha de KDE Linux, sa distribution officielle étant désormais ouverte au test public. Dérivée d'Arch Linux, la distribution est présentée comme une implémentation de référence pour le bureau KDE Plasma, les applications KDE et les outils de développement. Elle est...
KDiskMark est un outil libre et open-source pour GNU/Linux qui permet de tester les performances des disques durs et SSD, comme CrystalDiskMark sur Windows. L’application propose une interface graphique avec des réglages prédéfinis. Elle s’appuie sur FIO pour effectuer les tests et permet de configurer la taille des blocs, le nombre de files d’attente et […]
Il y a quelque temps on m’a demandé si je connaissais un agrégateur et lecteur de vidéos auto-hébergé. Après avoir parlé des classiques Plex, Emby, Jellyfin, Kodi, j’ai compris que c’était comme prendre un tank pour aller chercher le pain… vu qu’il s’agissait d’avoir une interface de lecture de vidéos X.
Le fait est que je n’ai rien trouvé de probant, simple, assez récent, puis ça m’a saoulé. J’ai donc créé MiniVid, présenté ici et dont le code est publié sur GitHub !
Bien évidemment, ça s’adapte parfaitement à d’autres vidéos comme des clips, documentaires, téléchargements YouTube, Twitch etc.
MàJ du 05.09.25 : j’ai publié le Docker sur GitHub, y’a plus à build localement, vous pouvez utiliser ghcr.io/aerya/minivid:latest
MàJ du 08.09.25 : j’ai ajouté un script Windows-MiniVid.cmd – Il installera si nécessaire Docker Desktop sur la machine,
– Guidage complet pour la configuration de MiniVid (édition complète disponible),
– Ajout de dossiers locaux comme distants (SMB/CIFS avec ou sans user:pwd).
📂 Navigation par dossiers
Accédez à vos vidéos avec une arborescence claire.
🔖 Tags automatiques extraits des noms de fichiers
Tags globaux par dossier
Tags individuels par fichier
Multi-sélection et recherche par tags
Blacklist configurable pour supprimer les mots inutiles (and, the, source, etc.)
🔍 Recherche avancée
Par nom de fichier
Par tags multiples
Par favoris
Par statut Lue / Non lue
🗂 Filtres et tris personnalisables
Nom
Taille
Date de modification
Statut Lues / Non lues
⭐ Favoris
Marquez vos vidéos d’un clic (★)
Accédez à la vue dédiée « Favoris »
🎥 Lecteur intégré (HTML5 natif)
Supporte mp4, webm et mkv (Chrome/Chromium)
Les fichiers non compatibles avec Firefox (.mkv, .avi, .flv, .m2ts) sont automatiquement basculés en remux/transcodage à la volée avec ffmpeg si activé
🖼 Miniatures automatiques
Générées avec ffmpeg
Capture par défaut à 5 secondes (pour éviter logos/intro)
Ajustable via variables (MINI_THUMB_OFFSET, MINI_THUMB_MAX)
📱 Interface responsive
Desktop, tablette et mobile
🌙 Mode clair / sombre
Bascule instantanée
🛠 Page Maintenance
Rescan complet de la bibliothèque
Purge des miniatures
Journal d’événements en direct (logs des actions)
⏱ Scan automatique
Toutes les heures par défaut
Intervalle configurable via MINI_SCAN_INTERVAL
🔐 Authentification optionnelle
Mode public ou mono-utilisateur avec identifiant/mot de passe
⚙ Configuration simple
Tout se règle via variables d’environnement dans votre docker-compose.yml
Variable
Valeur par défaut
Description
MEDIA_DIRS
(vide)
Liste des dossiers vidéos (séparés par `
MEDIA_NAMES
Dossier 1, Dossier 2…
Noms affichés pour chaque dossier (même ordre que MEDIA_DIRS)
MINI_ALLOWED_EXT
.mp4,.webm,.mkv,.avi,.flv,.m2ts
Extensions autorisées
MINI_BANNED_TAGS
(vide)
Liste de mots à ignorer lors de la génération de tags (and,the,source,…)
DATA_DIR
/data
Dossier de stockage interne (état, favoris, prefs)
THUMB_DIR
/cache/thumbs
Dossier cache des miniatures
MINI_USER
(vide)
Identifiant de connexion (optionnel)
MINI_PASS
(vide)
Mot de passe de connexion (optionnel)
SECRET_KEY
(aléatoire)
Clé de session Flask (authentification)
MINI_PLAYBACK
direct
Mode lecture : direct, auto, remux
MINI_TRANSCODE
0
Autoriser le transcodage H.264/AAC (1 = oui, 0 = non)
MINI_FIREFOX_MKV_FALLBACK
1
Force le remux des .mkv dans Firefox
MINI_AUTOSCAN
1
Activer le rescan automatique (1 = oui)
MINI_SCAN_INTERVAL
3600
Intervalle entre scans auto (en secondes)
MINI_THUMB_OFFSET
5
Seconde du screenshot miniature
MINI_THUMB_MAX
30
Offset max (si vidéo longue)
MINI_FFPROBE_TIMEOUT
10
Timeout en secondes pour ffprobe/ffmpeg
API_READ_KEY
(vide)
Clé API (optionnelle) pour accès en lecture seule
Pour l’installation et la configuration, reportez-vous au dépôt GitHub.
Exemple de docker-compose.yml
services:
minivid:
image: ghcr.io/aerya/minivid:latest
container_name: minivid
restart: always
environment:
TZ: Europe/Paris
MEDIA_DIRS: /videos1|/videos2|/videos3|/videos4|/videos5
MEDIA_NAMES: ruTorrent|MeTube|Docs|Concerts|Tests formats vidéo
DATA_DIR: /data
THUMB_DIR: /cache/thumbs
MINI_ALLOWED_EXT: .mp4,.webm,.mkv,.avi,.flv,.m2ts
MINI_PLAYBACK Mode de lecture : auto
MINI_TRANSCODE: 1
MINI_FIREFOX_MKV_FALLBACK: 1
MINI_THUMB_OFFSET: 5
MINI_THUMB_MAX: 30
MINI_AUTOSCAN: 1
# Auth (prises du .env ; si vide => pas d'auth)
MINI_USER: ${MINI_USER}
MINI_PASS: ${MINI_PASS}
SECRET_KEY: 032cb57bd9a0ed97c62a46518aaa3cf2ka9d256da92e17e75e75d282ad5cda87
# Liste noire tags (les mots de moins de 3 lettres sont automatiquement bannis)
MINI_BANNED_TAGS: >
and,the,source,video,videos,vid,vids,film,movie,part,
les,une,des,ils,elles,sur,sous,dans,par,pour,sans,avec,chez,
cet,cette,ces,mon,mes,ton,tes,ses,notre,nos,votre,vos,leur,leurs,
qui,que,quoi,dont,quand,comme,
your,they,for,with,without,into,onto,about,this,that,these,those,
here,there,then,than,are,was,being,been,have,had,just,only,
over,under,very,more,most,less,were,com,net
volumes:
- /mnt/user/rutorrent-direct:/videos1:ro
- /mnt/user/MeTube:/videos2:ro
- /mnt/user/TEST/Docs:/videos3:ro
- /mnt/user/TEST/Concerts:/videos4:ro
- /mnt/user/TEST/Formats:/videos5:ro
- /mnt/user/appdata/MiniVid/data:/data
- /mnt/user/appdata/MiniVid/cache:/cache
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
ports:
- "8080:8080"
# Scan toutes les INTERVAL secondes
minivid-scheduler:
image: curlimages/curl:8.10.1
container_name: minivid-scheduler
depends_on:
- minivid
restart: always
environment:
APP_URL: ${APP_URL}
MINI_USER: ${MINI_USER}
MINI_PASS: ${MINI_PASS}
INTERVAL: ${INTERVAL}
command: >
sh -c '
set -eu;
for i in $(seq 1 60); do curl -fsS "$APP_URL/maintenance" >/dev/null 2>&1 && break || sleep 2; done
while :; do
if [ -n "$MINI_USER" ] && [ -n "$MINI_PASS" ]; then
# login (remember=on)
curl -sS -c /tmp/c.jar -X POST "$APP_URL/login" \
-d "username=$MINI_USER" -d "password=$MINI_PASS" -d "remember=on" -o /dev/null || true
if curl -sS -b /tmp/c.jar "$APP_URL/api/maintenance/progress" | grep -qi "\"running\"\\s*:\\s*true"; then
sleep 120
else
curl -m 5 -sS -b /tmp/c.jar -X POST "$APP_URL/api/maintenance/rescan" -o /dev/null || true
fi
else
curl -m 5 -sS -X POST "$APP_URL/api/maintenance/rescan" -o /dev/null || true
fi
sleep "$INTERVAL"
done
'
Exemple de .env
# URL interne du service
APP_URL=http://minivid:8080
# Auth (laisser vide pour désactiver l'auth)
MINI_USER=admin
MINI_PASS=admin
# Fréquence en secondes (3600 = 1h)
INTERVAL=3600
L’indexation des fichiers se fait à la volée au 1er lancement, plus ou moins rapidement selon la quantité de vidéos et le CPU. Le transcodage sous Firefox/LibreWolf peut faire souffrir le CPU sur une petite machine, je ne l’ai pas optimisé vu qu’il est plus rapide de passer par un autre navigateur.
Aucun appel externe, tout est 100% local. Fonctionne en http://IP:port comme en reverse proxy.
Arnd Bergmann : aucun produit moderne ne justifie encore le recours au 32 bits. pour le responsable général de la compatibilité architecturale dans le noyau Linux, le temps est venu de parler de sa suppression
Pendant des décennies, le 32 bits a incarné la norme dans l'univers informatique. Le noyau Linux, né au début des années 1990 sur des processeurs 386, a grandi en même temps que l'architecture IA-32 et ses dérivés. Pendant longtemps, l'idée même de porter Linux sur une machine 64 bits paraissait...
Quelles listes ? Quasi tout ce qui existe : IMDb, Trakt, MDBList, Letterboxd, Steven Lu
ListSync de Woahai321 permet de gérer de manière simple, complète et franchement belle, des listes de contenus multimédia à télécharger. Listes synchronisées avec Overseerr et/ou Jellyseerr pour automatiser les demandes et téléchargements via les *arrs.
L’application est développement très actif.
Synchronisation automatique
Prise en charge de plusieurs plateformes de watchlist
Compatible avec Overseerr et Jellyseerr
Installation simplifiée avec Docker
Suivi en temps réel – Barres de progression et mises à jour instantanées
Gestion intuitive des listes – Ajoutez, modifiez et organisez vos listes facilement
Analyses complètes – Taux de réussite, indicateurs de performance et données historiques
Configuration via le web – Gérez tous les paramètres depuis le tableau de bord
Interface moderne et responsive – Parfaitement adaptée aux ordinateurs, tablettes et mobiles
Thèmes clair/sombre – Détection automatique des préférences système
Pour cet article, j’installe une instance locale. Mais selon les besoins, le compose et le .env ne sont pas les mêmes. Pour une utilisation/configuration plus poussée, je vous invite à suivre la documentation.
Je place le docker-compose.yml et le .env dans /home/aerya/docker/list-sync. Je n’indique aucune liste dans l’environnement, je ne me servirai que de l’interface Web.
J’utilise la version :main qui est la stable. J’ai ajouté la MàJ automatique du docker via un label Watchtower comme à mon habitude. Et j’ai mis en dur la timzeone mais ça marche aussi via le .env
Et le .env avec les variables. Donc me concernant uniquement l’URL d’Overseerr et ma clé API. Je ferai le reste depuis la WebUI.
#=======================================================================
# ListSync Full Local Deployment Environment Configuration
# This file contains all variables needed for complete local deployment
# Copy this to .env and configure your values
#=======================================================================
# === Core Required Configuration ===
# Your Overseerr/Jellyseerr API key (REQUIRED)
OVERSEERR_API_KEY=xxxMQ==
# Your Overseerr/Jellyseerr URL (REQUIRED)
OVERSEERR_URL=https://demande.domain.tld
# === Optional Discord Notifications ===
# Discord webhook URL for notifications (leave blank to disable)
DISCORD_WEBHOOK_URL=
# Timezone (set to your local timezone)
TZ=UTC+2
#=======================================================================
# === Local Development Domains ===
# Frontend domain (Next.js Dashboard)
FRONTEND_DOMAIN=http://localhost:3222
# Backend API domain (FastAPI Server)
BACKEND_DOMAIN=http://localhost:4222
# === API Configuration ===
# This will be used by the frontend to call the API
NEXT_PUBLIC_API_URL=http://localhost:4222/api
# === CORS Configuration ===
# Allow frontend domain to access backend API
CORS_ALLOWED_ORIGINS=http://localhost:3222,http://0.0.0.0:3222,http://127.0.0.1:3222
#=======================================================================
# === List Configuration ===
# Configure which lists to sync (comma-separated)
# IMDb Lists (examples: "top", "popular", or specific list IDs)
IMDB_LISTS=
# Trakt Lists (specific list IDs)
TRAKT_LISTS=
# Trakt Special Lists (trending, collected, watched)
TRAKT_SPECIAL_LISTS=
TRAKT_SPECIAL_ITEMS_LIMIT=20
# Letterboxd Lists
LETTERBOXD_LISTS=
# MDBList Lists
MDBLIST_LISTS=
# Steven Lu Lists
STEVENLU_LISTS=
# === Sync Configuration ===
# User ID in Overseerr (usually 1 for admin)
OVERSEERR_USER_ID=1
# Sync interval in hours (24 = once per day)
SYNC_INTERVAL=24
# Enable automated mode (true/false)
AUTOMATED_MODE=true
# Enable 4K requests (true/false)
OVERSEERR_4K=false
#=======================================================================
# NOTE: This is the FULL LOCAL DEPLOYMENT configuration
# - Web UI will be available at http://localhost:3222
# - API server will run at http://localhost:4222
# - Core sync functionality will run automatically
# - All services managed by Docker Compose
#=======================================================================
Les options sont sommaires mais suffisantes
Je peux ajouter une liste de test. Attention, les listes peuvent être pratiques mais risquent également d’ajouter un paquet de fichiers en téléchargement d’un coup voire lors d’une mise à jour (toutes les 24h ici). Je teste ça avec Decypharr et le cache d’AllDebrid donc je ne crains rien (hormis indexer des trucs qui ne m’intéressent pas plus que ça) mais il faut faire attention si on télécharge réellement des .torrents, encore plus sur des trackers privés. Idem avec des indexeurs Usenet où on est parfois limité en API hit ou téléchargement, c’est un coup à tuer le quota mensuel en 3 minutes.
Et je l’exécute maintenant, je vais attendre 24h pour terminer ce tuto
Et là… entre l’ajout à Overseerr, l’envoie à Radarr, la rechercher sur Prowlarr, le DL simulé par Decypharr (donc la recherche dans le cache d’AllDebrid), la validation dans Radarr, l’ajout dans Plex et la mise à jour des jaquettes par Kometa, ça a pris environ 3 minutes. LA VACHE ! J’en avais déjà certains, quand même.
Oui. Alors là on visualise bien pourquoi je ne suis pas fan des listes « des autres » pour ma consommation personnelle. Je vais clairement virer Dragons, Elio, KPop et Bad Guys… Chacun ses goûts. En revanche, pour partager ça avec d’autres, c’est pratique de prendre des listes Netflix, Disney, Apple, HBO etc, surtout avec des jaquettes et collections par Kometa. Mais je ne m’aventure pas sur ce terrain là, mon plaisir est de découvrir, tester et partager des « retex ».
De retour sur SyncList, on peut visualiser l’état des synchronisations et les déclencher manuellement (global ici ou par liste sur l’onglet Lists)
J’avais complètement zappé de présenter le fabuleux SugestArr il y a quelques mois, remédions à ça de suite !
On ajoute tous les contenus découverts sur le Web, sur IMDB, TMDB, Trakt, par des connaissances, via des forums, via Overseerr ou Jellyseerr…
Cet outil de guiseppe99barchetta devrait vous ravir puisqu’il permet d’avoir des recommandations personnalisées et est, je trouve, relativement complet :
Prise en charge multi-médias : compatible avec Jellyfin, Plex et Emby pour récupérer le contenu.
Intégration TMDb : recherche de films et séries similaires via TMDb.
Requêtes automatisées : envoie des demandes de téléchargement pour les contenus recommandés vers Jellyseer ou Overseerr.
Interface web : interface conviviale pour la configuration et la gestion.
Journaux en temps réel : visualiser et filtrer les logs en direct (ex. INFO, ERROR, DEBUG).
Sélection des utilisateurs : possibilité de choisir quels utilisateurs peuvent initier des requêtes, avec gestion et validation des contenus demandés automatiquement.
Gestion des tâches cron : modification du planning des cron jobs directement depuis l’interface web.
Pré-validation de configuration : vérifie automatiquement les clés API et les URLs lors de l’installation.
Filtrage de contenu : exclut les demandes de contenus déjà disponibles sur les plateformes de streaming dans votre pays.
Support de bases de données externes : possibilité d’utiliser PostgreSQL ou MySQL en plus de SQLite pour plus de performance et d’évolutivité.
Y’a pas d’application AndroidTV/smarthone mais c’est responsive et on peut automatiser les ajouts.
Pour l’utiliser il faut une clé API TMDB et évidemment une ou des instances Plex/Emby/Jellyfin et Oberseerr/Jellyseerr.
Une fois lancé, on se connecte avec notre lecteur favori, on ajoute une clé TMDB
Dans le cas de Plex, ça liste les serveurs disponibles (pour faire simple j’ai sélectionné un local) et ça en détaille les librairies et utilisateurs. On peut aussi mettre une URL directement
On enchaine avec Overseerr ou Jellyseerr
Je reste sur du SQLite. Si vous voulez une BDD robuste à part, il faut revoir le docker-compose pour l’ajouter
Configuration rapide :
Note minimale sur TMDB et nombre minimum d’avis,
Je n’inclus pas le contenu sans note J’exclus le contenu déjà téléchargé et/ou vu
Je n’exclus aucun genre ni aucun service (Disney+, Netflix, Youtube, Canal+…)
Je sélectionne English pour la langue originale des contenus que je veux en recommandation. Je ne suis absolument pas fan de Plus belle la vie et autres trucs français. Je préfère les séries US notamment. Précision : ça ne limite pas aux contenus produits en langue anglais mais ça la priorise
Et je souhaite des recommandations de contenus produits à partir des années 90
Pour chaque film en historique de lecture je veux 8 suggestions, 5 pour chaque série,
Suggestarr me fera des recommandations par rapport aux 5 derniers contenus lus,
Le Search Size définissant combien de suggestions en tout je demande (si j’ai bien pigé ?) Et le cron, pour l’exécution. J’ai changé après la capture, j’ai mis toutes les 6h (0 */6 * * *)
Et la récap de fin avant le 1er lancement
Et ça ajoute les recommandations dans Overseerr ou Jellyseerr selon votre configuration. Attention du coup si, comme moi, tout est automatiquement validé, ça peut vite accroître les bibliothèques ! Mon setup étant tout récent je n’ai hélas pas de screen à vous montrer mais vous pouvez voir ce que ça donne avec la fin de cette vidéo YouTube avec UNRAiD.
Utilisateurs de qBittorrent, combien de fois avons-nous vu un .torrent marqué « stalled » ? Un téléchargement bloqué pour X raison et Sonarr ou Radarr qui attend… attend… encore et toujours…
Les *arrs n’ont pas d’outil de détection des téléchargements bloqués.
Pour lancer le Docker, on met les instances qu’on souhaite, je teste avec les 2 que j’ai. J’ai mis les IP:port mais on peut mettre une URL sans le backslash de fin
J’ai tout laissé par défaut mais on peut régler les variables
Name
Default
Description
BASEURL
http://127.0.0.1:7878
The URL of a radarr, sonarr or other starr instance.
APIKEY
7f3a8..cbc07
The API key of a radarr, sonarr or other starr instance.
PLATFORM
radarr
Indicates the type of starr platform, either radarr, sonarr, lidarr, readarr or whisparr.
MAX_STRIKES
3
Maximum number of strikes a download can accumulate before it is removed.
SCAN_INTERVAL
10m
How often Swaparr checks for stalled downloads.
MAX_DOWNLOAD_TIME
2h
Maximum allowed download time before it’s considered stalled.
IGNORE_ABOVE_SIZE
25GB
Files larger than this size will be ignored and not monitored.
REMOVE_FROM_CLIENT
true
Remove from both queue and download client (default) OR false only the queue of a starr instance.
DRY_RUN
false
Sandbox mode; try Swaparr without it performing destructive actions on your instances.
Swaparr gère les clients de téléchargement BitTorrent liés aux *arrs, toute les 10 minutes avec cette configuration. Et l’instance *arr pourra donc aller chercher un autre .torrent
aerya@StreamBox:~$ sudo docker logs swaparr-radarr
── Swaparr ─────
╭─╮ Platform: radarr
│ │ Max strikes: 3
│ │ Scan interval: 10m
│ │ Max download time: 2h
│ │ Ignore above size: 25GB
╰─╯ Remove from client: true
╭─╮ Be part of Swaparr's journey ⭐ Star us on GitHub!
╰─╯ Your support strengthens the open-source community.
────────────────
╭──────────────────────────────────────────────────────────────────────────╮
│ No downloads found │
╰──────────────────────────────────────────────────────────────────────────╯
─ Checking again in 10m..
╭──────────────────────────────────────────────────────────────────────────╮
│ No downloads found │
╰──────────────────────────────────────────────────────────────────────────╯
─ Checking again in 10m..
╭──────────────────────────────────────────────────────────────────────────╮
│ No downloads found │
╰──────────────────────────────────────────────────────────────────────────╯
─ Checking again in 10m..
Sonarr est conçu pour chercher automatiquement des épisodes et non des packs. Il peut arriver qu’il manque au moins 1 épisode de saison et c’est… pénible de devoir aller chercher ça à la main. d3v1l1989 a créé SeasonArr qui règle ce problème en permettant de chercher un pack de saison puis remplacer les épisodes déjà télécharger. Cet outil, en 1 clic, remplace la recherche interactive de Sonarr.
Mon setup *arrs/Plex étant tout frais, pour ces séries d’articles, il ne me manque rien en dehors d’épisodes non parus en MULTi/VF donc mes screen ne seront pas révélateurs. « pas de bol »
Il faut préalablement créer une clé JWT soit en console si nodejs est installé (sudo apt install nodejs) soit via ce site par exemple.
Une fois le compte créé on peut lier une ou plusieurs instances Sonarr
Seasonarr indexe alors les séries et on peut lister celles où il manque des épisodes. Comme indiqué plus haut, mon exemple n’est pas révélateur puisqu’il me manque seulement ces 2 épisodes qui existent en VOSTFR mais non en MULTi/VF comme je les veux.
Mais si pour une série il manque des épisodes dans des saisons « parues », on peut alors cliquer sur Season It! et Seasonarr se servira des indexeurs de l’instance Sonarr pour aller chercher des packs complets et remplacer tous les épisodes individuels complétés et manquant pour les saisons sélectionnées. On peut le faire par saison ou pour la série complète.
Il n’y a pas d’automatisation du process vu que ce n’est à faire qu’une fois de temps en temps, en théorie. Les options sont sommaires mais suffisantes.
Je viens de faire le test avec Got, je n’ai pas demandé à Sonarr de chercher les épisodes pour passer directement par Seasonarr
Après avoir cliqué sur Season It! (global, pas apr saison), Sonarr s’est bien mis en recherche
J’aime bien avoir une idée des notes IMDB/TMDB des contenus répertoriés par Plex. Kometa, un script Python empaqueté dans un Docker pour plus de simplicité, permet de m’auditer les jaquettes des contenus indexés et créer celles de collections et playlists. On peut presque faire la même chose sur Emby/Jellyfin, avec Posterizarr qui fonctionne aussi pour Plex)
On peut y mettre les infos qu’on souhaite, à l’endroit qu’on veut et créer/afficher ou non les listes par diffuseur etc. Tout est configurable, pour peu qu’on prenne le temps de lire la documentation.
Je partage ma configuration actuelle, qu’il faudrait encore peaufiner, et vous pouvez en trouver d’autres ici ou là.
Voici un Docker qui fonctionne très bien. Au besoin, pour UNRAiD, Synology, QNAP, Kubernetes, la doc est complète.
Et voici mon config.yml Il faut le domaine Plex + token, les clés API TMDB, FanART et MDBlist. Je voulais tester les playlists, pas encore pris le temps…
Attention, dans la partie « libraries » les noms des librairies doivent être ceux de Plex, ici Films et Séries TV
La Fondation Linux avertit que l'Europe risque de prendre du retard sans une stratégie open source plus forte, dans son rapport 2025 World of Open Source Europe
La Linux Foundation a publié le rapport 2025 World of Open Source Europe Report, qui décrit l'open source comme un avantage stratégique pour l'Europe, mais avertit que l'absence de stratégie cohérente, d'adhésion des dirigeants et d'alignement des politiques pourrait freiner le continent. Il révèle que l'open source est non seulement largement...
Linux 6.17-rc3 est sorti : il est décrit comme « un peu plus volumineux que d'habitude », mais Linus Torvalds a déclaré qu'il restait « bien dans les paramètres normaux »
Linus Torvalds vient d'annoncer la sortie de Linux 6.17-rc3. Le calendrier de sortie était un peu plus inhabituel en raison du programme de voyage de Torvalds, mais il correspondait tout de même au calendrier habituel du dimanche après-midi. La troisième version candidate est considérée comme « un peu plus volumineuse que d'habitude...
Je continue mon tour d’horizon des solutions de streaming à la carte, légales ou non selon les pays, et qui permet de se créer et maintenir une bibliothèque multimédia sans stockage local.
Je n’aborderai pas publiquement les solutions de streaming depuis des .nzb directement.
Je vais détailler ici l’installation manuelle de Decypharr, Prowlarr et Radarr/Sonarr/Plex mais tout est notamment inclus dans le script SSDv2 (avec une grosse et belle nouveauté à venir).
J’en profite pour remercier Laster13 et Teal-C pour leurs réponses à mes questions.
La dernière mouture de Decypharr embarque rClone et sa configuration sera automatisée. Mes tests sont réalisés avec Prowlarr et des indexeurs FR publics dont YGG via « api.eu », le débrideur AllDebrid ; et je ne « tape » que dans le contenu en cache chez AD (donc aucun téléchargement). Verdict : RàS pour les films, quelques saisons de séries manquantes uniquement dans le cache, OK avec le téléchargement.
Le plus important est de bien comprendre que si on demande aux *arrs d’organiser les bibliothèques dans /mnt/Bibliothèques, ils ne vont y mettre que des symlinks vers le montage rClone d’AllDebrid (/mnt/decypharr). Les *arrs, pour traiter les fichiers, tout comme Plex (ou autre) pour leur lecture, doivent avoir accès à ce montage rClone. C’est pourquoi il est impératif de monter ce dossier en volume pour chaque Docker devant y avoir accès.
Bibliothèques : dossier racine pour les *arrs Data/rCloneCache : j’avais déjà le dossier pour autre chose, j’utilise le même
decypharr/alldebrid : montage de mon compte AD decypharr/qbit : dossier de téléchargement (simulé) des fichiers. Les sous-dossiers radarr/sonarr seront ajoutés automatiquement lors de la configuration de Decypharr (tags)
Il faut installer et lancer Decypharr avant le reste vu que tout dépend ensuite du montage du débrideur et des symlinks. Idem s’il faut relancer le Docker Decypharr, il faut relancer les autres ensuite.
/mnt/decypharr/qbit devant être commun aux *arrs et Plex, on y montera /mnt:/mnt dans chaque ainsi que /mnt/decypharr/qbit:/mnt/decypharr/qbit dans les *arrs qui sauront directement où aller chercher les fichiers à traiter.
La configuration n’est pas vraiment expliquée dans la doc, la mienne n’est peut-être pas optimale mais fonctionne.
Je n’ai rien modifié dans l’onglet général. J’ai testé les notifications Discord (attention on voit la passkey des trackers utilisés) mais y’a vraiment pas d’intérêt si on ne fait qu’utilise le cache du débrideur (pas de téléchargement).
Pour la partie débrideur, on fait notre choix, on colle une clé API (ou plusieurs) et j’ai configuré le montage dans
/mnt/decypharr/alldebrid/__all__
On peut ajouter plusieurs débrideurs. On pourra les attribuer à un *arr lié à Decypharr et même les sélectionner lors de l’ajout manuel d’un .torrent
J’utilise le WebDav et je NE COCHE PAS la case Download Uncached pour qu’il ne télécharge aucun fichier (sur AD) mais n’utilise que son cache. Je fais ça parce que je voulais tester le cache d’AD et ne voulais pas télécharger des fichiers sans les partager. On peut tout à fait faire les 2 mais attention, il n’y aura pas de seed (donc ratio 0). A ne pas faire chez les Tier 1 sous peine de voir son compte banni ! Certains ont créé des scripts qui captent les .torrent utilisés pour les mettre en seed depuis un client local ou sur un serveur. Dans ce cas, Decypharr est utilisable sans crainte sur les trackers privés.
Configuration du client qBittorrent émulé. Je met le chemin qui correspond au volume local dont je parlais au début
/mnt/decypharr/qbit
On peut ajouter les *arrs soit depuis Decypharr soit depuis les *arrs eux-mêmes. Je n’ai qu’AD en débrideur j’ai donc laissé la sélection auto mais on peut choisir. Par exemple Radarr sur AD et Sonarr sur RD ou Sonarr4K sur TB etc. Selon les goût de chacun. Ce qui est certain, c’est que le cache de contenu MULTi/FRENCH est évidemment plus important sur AD et RD que sur TB, principalement utilisé par les anglophones pour Stremio.
Le Repair est le contrôle et la réparation des symlinks. Qui peuvent être cassés si le contenu lié est effacé du débrideur. Dans ce cas, selon la config, ça peut soit rechercher sur le débrideur (si le fichier a été renommé, vu que ça fonctionne avec le hash et non le nom) soit ça ira chercher un autre .torrent via les *arrs. Pour l’instant je laisse l’option par défaut à savoir « per torrent » mais il est peut-être préférable d’utiliser « per file ». Dans le cas d’un .torrent de saison complètement, que ça ne recherche que l’épisode manquant (du cache) plutôt que de tout relancer. Je l’ai mis en autotmatique, toutes les 24h.
Et enfin la partie rClone. Le monte globalement dans /mnt/decypharr et souhaite utiliser un cache (100Go) dans un dossier (et disque) qui me sert déjà à ça : /mnt/Data/rCloneCache On peut sans doute améliorer cette configuration mais Plex lit un fichier de 94Go sans broncher…
Avec le mode de téléchargement activé, voici le rendu. PausedUP signifie que le .torrent est complété (et de fait plus en seed).
Je ne montre que l’exemple de configuration de Radarr. Pour Sonarr c’est la même logique. Chez moi c’est derrière un VPN pour des interrogations de sources hors Prowlarr et NZBHydra, il n’y a donc pas de port de publié. Je retire tous les volumes par défaut pour ne monter que /mnt/decypharr/qbit:/mnt/decypharr/qbit et /mnt:/mnt
Configuration du dossier racine : /mnt/Bibliothèques/Films
Configuration du client de téléchargement si on n’a pas ajouté Radarr depuis Decypharr. Il faut sélectionner qBittorrent
Et dans l’adresse il faut mettre l’URL (ou l’IP) de Decypharr et le port (et SSL si vous utilisez une URL et un reverse proxy). Le nom d’utilisateur et le mot de passe sont l’URL de Radarr et sa clé API. La catégorie : radarr (et donc sonarr pour Sonarr ofc!)
Ne surtout pas cocher la case Sequential Order (sinon ça DL localement)
Et comme le même chemin/volume est monté dans chaque Docker, il n’y a aucun Remote Path Mapping à mettre
Lors de l’ajout d’un film, la complétion est quasi instantanée pour peu que le fichier cherché soit déjà dans le cache d’AllDebrid. Si vous activez le téléchargement des fichiers non encore en cache, ça peut prendre quelques minutes.
En regardant de plus près, on voit bien que c’est un symlink vers le cache d’AllDebrid
aerya@StreamBox:/mnt/Bibliothèques/Films$ ls -l Alien\ -\ Romulus\ \(2024\)/
total 4
lrwxrwxrwx 1 root root 208 Aug 25 18:55 Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv -> /mnt/decypharr/alldebrid/__all__/Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY/Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv
ncdu 1.19 ~ Use the arrow keys to navigate, press ? for help
--- /mnt/Bibliothèques/Films/Alien - Romulus (2024)- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ 4.0 KiB [###################################################] Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv
Plus globalement, tous les fichiers sont bien chez AllDebrid, monté via WebDav/rClone et je n’ai localement que des symlinks qui ne prennent aucune place. En théorie, on pourrait se faire cette installation sur une Carte MicroSD de quelques Go
ncdu 1.19 ~ Use the arrow keys to navigate, press ? for help
--- /mnt ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
15.9 TiB [###################################################] /decypharr
4.0 MiB [ ] /Bibliothèques
Pour terminer, la configuration de Plex. Toujours avec /mnt:/mnt de monté pour garantir l’accès aux symlinks.
L'IA s'immisce dans le noyau Linux : innovation nécessaire ou bombe à retardement pour l'écosystème numérique mondial ? Certaines voix s'élèvent pour demander une politique officielle d'urgence
L'intelligence artificielle s'immisce dans tous les recoins de l'informatique : assistants virtuels, génération de code, détection de menaces, automatisation de la maintenance logicielle Désormais, même le noyau Linux, considéré comme l'une des pièces de code les plus critiques au monde, est concerné....
Réflexion issue d’une discussion sur le Discord de Cuistops concernant le fait que Talos pourrait ne pas être le meilleur point de départ pour s’attaquer à cette technologie d’infrastructure qui a balayé le monde de l’orchestration de containers en une petite dizaine d’années. Pour illustrer pourquoi il n’y a pas de réponse absolue à cette question, je me suis dit que vous décrire mon parcours concernant l’univers des containers et Kubernetes en particulier (aussi bien au niveau perso que pro) serait éclairant sur certains points.
Aux origines : Docker
Le moins qu’on puisse dire, c’est que mon entrée dans l’univers des containers, en particulier via docker, n’était pas brillante. Je conserve avec malice le premier billet que j’ai consacré à ce sujet en 2016 pour illustrer à quel point je me trompais sur la technologie, que je n’avais jusque là pas vraiment vu, encore moins au niveau professionnel. J’ai heureusement rattrapé cette erreur depuis, aussi bien à la faveur de formations au travail (merci Thomas Perelle ) qu’au niveau perso, où mes propres expérimentations m’ont conduit à partager ma découverte et mon utilisation de Docker Swarm. J’ai bien rattrapé le coup, hein ?
D’ailleurs, Swarm a été pour moi la découverte de la notion d’orchestration. Que j’ai pu creuser cette fois au niveau pro en 2018 après un premier tout petit pas vers l’univers Kubernetes par la porte OpenShift à la faveur d’un workshop de deux jours par un collègue qui sera réellement un mentor pour les années suivantes, Julien Francoz. Je n’ai malheureusement pas gardé grand chose de ce workshop, étant donné que je n’avais aucune plateforme de ce type dans mon pôle client, encore moins de Kubernetes. Tout juste on commençait à avoir des clients qui cherchaient à déployer leurs applis en mode container sur des serveurs classiques, avec Docker. Sans pratique, la théorie s’efface vite, d’autant qu’en 2018, les usages « domestiques » n’étaient pas légion, donc les articles de blog non plus, encore moins autour d’Openshift. C’est en 2019 que tout change.
2019 : La découverte de Kube, de la containerisation d’applications, d’Azure, de terraform (tout en même temps)
Je vous passe le contexte de comment j’en suis arrivé à cette situation intense qui aura duré 5 mois, mais oui, j’ai découvert Kubernetes d’une façon un peu particulière : service cloud managé, sur Azure, el famoso « AKS« , à devoir migrer des applications précédemment hébergées sur des serveurs virtuels Debian dépassés, avec un cluster déployé manuellement qu’on a tenté de « terraformer » après-coup, avec toute la « qualité » de l’API d’Azure d’alors. Et je remercie encore Julien d’avoir pris autant de temps à me soutenir dans cet apprentissage express (la notion de mentor n’était pas galvaudée, clairement).
Moi pendant la migration du client sur Kubernetes
Service cloud Managé veut dire qu’on ne gère pas certains aspects importants de la vie d’un cluster : tout le control plane est masqué, vous ne voyez que les nœuds, vous ne vous occupez pas trop de certains aspects comme la rotation des certificats, les mises à jour sont automatisées (vous indiquez une version cible, le service s’occupe de la montée de version du control plane, puis des nœuds un par un), et vous bénéficiez d’intégrations avec le reste de l’infra du fournisseur, au niveau du réseau, du stockage, des capacités comme l’autoscaling (vous augmentez et réduisez automatiquement le nombre de nœuds en fonction de la charge ou des réservations de ressources des pods à déployer). L’installation se fait en trois/quatre clics via l’interface web, une ligne de commande avec l’utilitaire maison, ou un peu plus de lignes de code si on le fait via un outil d’infrastructure as code.
Bref, c’est cool, ça permet de se concentrer sur les aspects opérationnels des applications déployées, mais même comme ça, je vous avoue que AKS tel que Microsoft le proposait n’était pas toujours une sinécure. Azure lui-même était pénible, avec des VMs qui mettaient plusieurs minutes à démarrer (quand les concurrents tournaient autour de la minute). Et comme on ne gère pas le control plane, on rate tout un pan de l’architecture et de la gestion de Kubernetes et de ses composants sous-jacents. En plus à l’époque, l’image de l’OS utilisé pour les nœuds était basée sur Ubuntu, pas le plus léger et le « gaspillage » de ressources était réel, au-delà de Kubernetes lui-même.
J’aurais l’occasion de passer encore quelques années, pratiquement trois, à déployer d’autres projets AKS pour d’autres clients, ce qui m’a permis de constater, il faut savoir aussi le reconnaitre, comment Microsoft a cravaché pour amener un niveau de qualité sur le service bien plus en phase avec ce qu’on attend d’un tel fournisseur. Rotation automatique des certificats via les mises à jour (c’était pas le cas, la commande de rotation était à lancer à la main), amélioration générale d’Azure sur les temps de démarrage des nœuds, efficacité des mises à jour, intégrations avancées au niveau réseau (Calico, Istio, etc)… Ce qui n’empêche pas certains pains avec entre autres une API qui accepte certaines valeurs pourtant non supportées et qui m’ont forcé à redéployer des clusters from scratch parce que la communication entre les nœuds étaient devenue impossible (réponse du support : « on va mettre à jour la doc pour indiquer les valeurs supportées »; bravo…). Par la suite, j’ai découvert et encore plus adoré exploiter et déployer du GKE, le service équivalent de Google Cloud; il m’aura permis au passage d’apprendre comment fonctionnait ce fournisseur et tout ce qu’il fait de mieux que Microsoft (et parfois d’AWS). Au point de passer la certification « Professional Architect » au bout de 4 mois seulement de pratiques.
Kube à la maison
Cette expérience en particulier avec Azure ne m’aura pas empêché pas de tomber amoureux de la technologie, au point de remiser Docker Swarm, et de migrer sur K3S. Là aussi un choix particulier, conçu pour les machines très légères, puisque ciblant les Raspberry Pi, j’ai malgré tout fait le déploiement du flemmard, même si j’ai privilégié un déploiement semi-automatisé avec un playbook/role Ansible, et un seul nœud comme control plane (qui était le seul mode de déploiement supporté alors).
Particularité de k3s, regrouper tous les composants « core » de Kubernetes dans un seul binaire, une petite prouesse à la base de son empreinte mémoire réduite, mais pas que : un des éléments les plus critiques d’un cluster, la base de données ETCD, la « mémoire » du cluster, est remplacée par SQlite, bien plus léger, mais évidemment limité à une seul nœud, et moins enclin aux problèmes des bases de données plus complexe. Bien que le mode « multi-master » ait été implémenté par la suite, au passage à mes Raspberry Pi 4, j’ai quand même conservé le même mode de fonctionnement. J’ai eu l’occasion de détailler pas mal de choses concernant K3S sur ce blog, je ne vais donc pas m’étendre beaucoup plus.
Reste qu’à l’occasion d’une volonté de refonte, accélérée par la mort successive des cartes SD des Raspi après 4 ans de bons et loyaux services, j’ai décidé de revenir à un Kubernetes un peu moins simplifié, en partant sur un autre choix particulier, Talos Linux, qui aura fini en machine virtuelle suite à une déconvenue de matériel et de limitations électriques, que je me suis pris en pleine poire en plein live Twitch. Talos propose un déploiement Kubernetes beaucoup plus standardisé dans ses composants de base, mais dont la gestion des nœuds est très particulière : pas d’OS à proprement parler, juste le noyau et une API qui permet de pratiquer toutes les opérations sur la gestion de ces nœuds : pas de SSH, pas de CLI directe, l’utilitaire talosctl est là pour configurer les nœuds à l’envi, permettant de les ajouter/retirer d’un cluster en un clin d’œil, un aspect très important dans une gestion d’infrastructure au sens large (comprendre, en entreprise). Toute la configuration de base se fait au travers de fichiers de configuration YAML, à l’instar de Kubernetes lui-même, permettant une approche « intégration continue » et un versionnement via git.
Actuellement, je me débats avec certains paramétrages par défaut orientés sécurité entre autres qui peuvent limiter/bloquer certains usages sans attention particulière. Il est vrai que par défaut, Kubernetes est une plateforme particulièrement ouverte avec peu de gardes-fous, et c’est à chacun d’adapter cet aspect en fonction de son propre contexte, ce qui amène à devoir exploiter nombre d’extensions et contrôleurs additionnels pour y parvenir. Et comme souvent, la sécurité à un prix…
Et la question de départ ?
On le voit, au final je n’ai que peu choisi comment j’ai découvert et abordé la technologie et son déploiement « dans le monde réel », et j’ai démarré par certaines abstractions qui font que si je m’étais retrouvé face à un cluster « vanilla » (kubeadm, kubespray), et un problème lié au control plane, j’aurais été plus en peine que quelqu’un ayant directement attaqué « the hard way » (z’avez la ref ?). Et d’un certain côté c’est certainement encore le cas encore aujourd’hui, ce qui me vaudrait d’être recalé au recrutement chez Lucca ou Enix. Le livre à venir teasé par Denis Germain (qui ne s’appellera pas 50 Nuances de Kubernetes, ce qui aurait été bien trop cool comme titre) montre bien la diversité d’approches qui ont chacune leurs spécificités, avec la plupart des services dit « managés » abstrayant une bonne partie des composants et concepts de bas-niveau pour vous concentrer sur vos applications ou celles de vos clients.
Est-ce que l’une d’elles est meilleure qu’une autre ? Je considère toujours que la théorie est importante, jusqu’à un certain point, dans la mesure où si on n’a pas de le contrôle sur les éléments, ne pas savoir comment ils fonctionnent de manière sous-jacente n’est pas toujours une grosse tare : ce n’est pas de notre ressort que d’y mettre les mains. Imaginez une corruption de base ETCD sur un service managé. Ma seule préoccupation sera d’être capable éventuellement de restaurer tout ce que j’y ai mis au départ – mes déploiements d’applications, mes secrets, mes CRDs, etc- , là où la préoccupation du provider, sera de réparer cette corruption; dans le pire des cas, s’il n’aura pas été capable de restaurer le service avec un minimum de pertes, il s’agira de restaurer tout ça sur un nouveau cluster.
Nous vivons également dans un monde connecté à la plus grande base de connaissances du monde : Le Web. Je n’ai pas besoin de connaitre l’intégralité des arcanes du moindre bout de logiciel, quelque soit son niveau dans l’environnement où j’évolue, pour être capable de l’exploiter au quotidien, voire de le réparer. Les connaissances déjà acquises sont évidemment importantes, parce qu’elles permettent de définir un état d’esprit, un mode de réflexion, qui est la plupart du temps applicable aux autres technologies que vous rencontrerez. Mais si je rencontre un problème que je n’ai pas déjà vu par le passé, une recherche sur le web m’amène généralement soit à la solution, soit à une piste à creuser pour déterminer la cause. Dès lors, il n’y a pas de réponses simples à apporter à la question « par où démarrer », parce qu’elle peut dépendre aussi de la « fin ».
Par où on attaque ?
Faire un cluster à la mano avec tous les composants en mode « the hard way » ne sert pratiquement à rien si après on évolue dans un contexte de service managé. À l’inverse, un service managé est intéressant en ce sens qu’il permet de gérer les interactions avec d’autres services du fournisseur, et donc le mode de fonctionnement de celui-ci. Sur Kube lui-même vous manquez des choses, mais vous avez quand même pas mal de concepts à intégrer. Est-ce moins pertinent ? Pas forcément si c’est ce que vous manipulez tous les jours. Dans le même esprit, « the hard way » est probablement la pire méthode pour gérer le quotidien sur de l’infra qu’on gère, même si pour le coup on a toutes les tripes du cluster sur la table. On privilégiera donc très vite d’autres outils plus automatisés pour la gestion habituelle. N’est-ce pas tout aussi pertinent de démarrer directement avec ces solutions pour intégrer plus rapidement leurs concepts ?
Par où commencer Kubernetes ? J’ai envie de dire, par la solution qui vous rendra curieux. C’est tout le sel de l’apprentissage, comme de la recherche scientifique, où chaque réponse qu’on trouve amène d’autres questions, tout aussi passionnantes. D’autant plus que quand on démarre, on est amené à faire, défaire, refaire, à comparer. Notre univers informatique au sens large bouge tout le temps, la « galaxie » Kubernetes n’est pas en reste, il y a toujours des dizaines d’angles d’attaque possible, et à de très rares exceptions près, il n’y en a pas nécessairement une qui est plus mauvaise qu’une autre. Et d’autres apparaitront régulièrement, ce qui représente de nouvelles réponses possibles à cette question. Il ne faut pas avoir peur de se faire plaisir de différentes manières
Gros fan et utilisateur du terminal Asbru-CM, j’ai de temps en temps besoin de pouvoir utiliser ça en mobilité. Je m’étais équipé d’une instance de SSHwifty. Cherchant un terminal, gratuit, à héberger et avec plus de fonctionnalités, mon choix s’est arrêté sur Nexterm qui ne manque pas d’options !
CAUTION Nexterm is currently in early development and subject to change. It is not recommended to use it in a production environment.
Identifiants user:pwd ou clés
2FA
Gestion d’utilisateurs
Gestionnaire de sessions et d’identifiants
SSH, sFTP, VNC, RDP, Proxmox (LXC et Qemu)
Gestion de « snippets », raccourcis de commandes à utiliser en terminal
Gestion de scripts avec raccourcis
Possibilité de déployer des Dockers
Intégration de l’IA, par exemple via un compte OpenAI pour avoir de l’aide dans un terminal
Options esthétiques…
Ok, tout n’est pas utile évidemment.
Pour l’installer, il faudra avant générer une clé de chiffrement via openssl rand -hex 32
Aussi disponible via template sous UNRAiD, attention, il manque la variable de clé de chiffrement… Je doute que ça se lance sans d’ailleurs. Il faut ajouter la variable ENCRYPTION_KEY et sa valeur
Une fois un compte créée, on peut paramétrer l’interface
Créer des identités qu’il faudra ensuite lier aux serveurs ajoutés. On peut donc utiliser soit un mot de passe soit une clé SSH.
Comme je l’écrivais, on peut ajouter de l’IA. J’ai testé rapidement, je vous montre ça ensuite.
La partie serveurs, qu’on peut organiser en dossiers, est simple et intuitive.
Choisir ou créer une identité liée
Si on active le monitoring, on l’a sur le panel homonyme avec des infos basiques mais suffisantes. A noter que ça ne me retourne jamais de version de l’OS. Je ne suis pas surpris pour UNRAiD ou Synology mais c’est plus étonnant pour Debian, Garuda (Arch) et Ubuntu. Comme indiqué sur le site, l’outil est encore à un stade de développement peu avancé.
On peut accéder à chaque serveur en même temps, dans un onglet séparé. En revanche attention si un travail est en cours, cliquer sur un autre menu dans le même onglet (du navigateur) ferme toutes les sessions.
Version sFTP, avec téléchargement, création de dossiers, édition/renommage.
On ne peut en revanche pas (encore ?) visualiser de photo ou vidéo. D’un autre côté c’est pas le but d’un FTP…
Après les clés SSH, l’une des options que je cherchais absolument était la possibilité de créer des raccourcis (alias) de commandes, qui soient globaux pour chaque terminal (et non ajouter des alias sur chaque machine). Par exemple taper « upgrade » ou cliquer un bouton (cette option avec Nextrem) qui envoie la commande sudo apt update && sudo apt upgrade -y On peut créer les snippets via le menu et ensuite les utiliser avec l’icône en haut à droite du terminal (qui se voit plus ou moins bien selon le thème…). J’ai pris des exemples basiques pour l’instant, j’ai plus testé qu’utilisé.
Cliquer sur l’icône des snippets et sur celui qu’on souhaite utiliser
Selon les configurations des users et sudoers, il faut évidemment taper le mot de passe
Si l’option d’intégration de l’IA est activée, on y accède depuis un terminal via Ctrl + k. Aucune commande n’est exécutée par l’IA, elles sont juste tapées dans le terminal et l’utilisateur doit l’exécuter.
Je ne suis ni fan ni, du coup, connaisseur, donc j’ai pas testé de demande très compliquée. Même en faisant des fautes dans la demande, elle s’en sort du du basique
Idem pour des installations basiques. Testé sur Arch aussi, c’était bon. Mais je reste sur du très simple.
Semble également fonctionner en français (vu que c’est ChatGPT dans mon test) et l’installation de Docker est correcte. Même si c’est pas optimisé (serveur Apache2n mysql de base etc)
Pour que ce soit « parfait », il faut lui indiquer quels dossiers monter etc. Bref, autant le faire à la main as usual! Mais, encore une fois, je découvre l’IA dans un terminal et ne souhaite pas approfondir cette expérience.
Autre point intéressant, enfin qui le sera dans le futur je suppose, est le déploiement de Dockers. Avec une vision devops, c’est pas mal pour envoyer rapidement des utilitaires sur des machines. L’AppsStore officiel est ici et permet de voir comment créer des applications (un docker compose ofc!). On peut donc tout à fait se faire les siennes et s’héberger sa propre source d’apps. Je ne me vois pas déployer Plex ou Nextcloud comme ça mais pour des utilitaires… Avec un Authelia en sus de tout ça…
Je devrais renommer « Streaming » en « Testing », pauvre machine… Le process est entièrement détaillé en temps réel
On peut visualiser les logs
Et j’y accède bien à la fin. Alors évidemment, aucune auth, aucune sécurité. C’est pas fait pour déployer des instances Nextcloud en prod, juste des utilitaires quand on bosse ou doit tester. Enfin à mon sens c’est le but.
J’aurais aimé avoir l’option de désinstaller le container mais ça viendra sûrement, le projet étant tout jeune (j’ai ouvert une issue).
Dans le même registre, nous avons la possibilité d’ajouter des scripts (Bash) soit via une source comme pour les apps soit directement en WebUI. Ils pourront alors être exécutés sur un serveur.
Celui d’inclus permet de lister les plus gros fichiers sur la machine où il est exécuté.
Pour l’instant on ne peut l’exécuter que sur une machine à la fois.
Pour l’instant je suis fan de l’outil ! Et comme c’est en Docker, on peut le laisser en reverse proxy normal ou le faire passer par un VPN, Tor etc. Très pratique.
Oracle a publié VirtualBox 7.2, avec une prise en charge améliorée d'ARM, une interface utilisateur perfectionnée et une prise en charge des noyaux Linux 6.16/6.17.
Oracle a récemment publié VirtualBox 7.2, qui apporte des mises à jour importantes pour les utilisateurs de virtualisation sur toutes les plateformes. L'interface utilisateur a été raffinée, les outils globaux et des machines virtuelles ont été déplacés des menus hamburgers vers des emplacements plus pratiques. La prise en charge d'ARM...