Vue normale
Quand un ticket réapparaît alors que je l’avais clôturé en toute confiance
Quand ma démo fonctionne uniquement quand personne ne regarde
Quand je découvre que la doc n’a jamais été mise à jour
Quand je relance un service et que tout redevient normal
Quand un ticket "simple" commence à prendre vraiment beaucoup plus de temps que prévu
Quand je relance exactement la même commande en espérant un autre résultat
Quand je dois expliquer le projet à quelqu’un qui vient d’arriver
Dockhand : gestionnaire Docker léger et puissant
Passé par Portainer, Komodo, Dockge et plus récemment Arcane, j’ai toujours pas trouvé LE gestionnaire de Docker qui me convienne : léger, permettant de gérer au moins 3 machines, intuitif tout en restant complet, qui gère les MàJ des Dockers, acceptant directement des compose, etc.
Depuis quelques jours maintenant j’utilise Dockhand (GitHub) et ça coche toutes les cases ; même plus puisqu’il a en option notamment des notifications différenciées et les outils Trivy et Grype pour scanner les dockers à la recherche de vulnérabilités. De mémoire j’avais présenté le 1er y’a des années sur le blog « perdu » effacé par un bon gros blaireau…
Pour le coup je le trouve très bien pensé, avec plus un œil de « geek » que de professionnel si je puis dire. Avec en prime une roadmap et un super Wiki qui va à l’essentiel.


J’ajoute l’environnement local via socket directement.











On peut ajouter des registres avec ses comptes comme DockerHub et GitHub

C’est tout bête mais j’aime bien la possibilité de choisir ses thèmes. Ça me rappelle un peu https://catppuccin.com/ports/


Puisque j’ai lié mon compte GitHub je peux importer mes repos, y compris les privés.

Comme souvent, on peut créer des templates d’installations Docker. J’ai jamais utilisé. Le seul cas, dans mon contexte, où ça pourrait éventuellement être potentiellement utile 2 ou 3 fois (na, pas du tout) ce serait pour créer une template pour les arrs/decypharr etc avec les volumes pré-définis. On est d’accord, j’en n’ai aucune utilité. Mais y’a l’option.

Pour les notifications, je me suis mis Discord. Et on verra après que je ne les utilise que dans le cas des MàJ pour l’instant. Je ne fais pas de MàJ auto pour tous mes Dockers, je suis du coup informé quand y’a une MàJ à faire ou quand celles en automatique ont été réalisées (ou ont échoué).


C’est uniquement en LAN chez moi, j’ai pas testé l’authentification.Idem pour l’ajout de serveurs (Syno et ZimaOS pour l’instant), j’ai utilisé Hawser vu que je suis sur mon réseau.

Et j’obtiens la vue d’ensemble de mes machines

Comme je le disais au début de l’article, j’ai été agréablement surpris de voir l’intégration de Trivy et Grype, sur option, qui permettent de scanner chaque image installée.
Ici l’exemple de mon serveur AdGuardHome que je voulais changer de machine : imthai/adguardhome-unbound-redis


Les vulnérabilités trouvées sont indiquées pour chaque agent avec le lien vers le CVE. Si l’option de scan est globalement activée alors les updates seront aussi scannées. Et on peut à tout moment lancer un scan depuis la liste des images via l’icône de bouclier.
Si tous les Dockers d’une machine seront reportés dans Dockhand, on ne pourra évidemment y éditer que ceux lancés via l’outil.
Pour se faire on peut utiliser la méthode « guidée » où on pull une image et on la gère de manière guidée.




Ou bien on peut importer des stacks/compose depuis un serveur (bouton Adopt) mais j’ai pas testé.

Ou enfin, le plus simple dans mon cas, on peut ajouter son compose directement. On peut même importer son .env
Désolé du caviardage mais j’ai réalisé après coup que je montrais un truc personnel.

Il est également possible d’importer des dépôts depuis les registres configurés

Dockhand permet bien sûr de créer et gérer tous les types de réseaux


Après ces tests, même si c’est toujours en gros développement, je trouve ça plus abouti qu’Arcane, plus simple que Komodo et ça répond plus à mes besoins que Portainer.
C’est une belle découverte que je vais conserver.
![]()
rClone ncdu : quand on ne peut pas installer ncdu sur un OS
Parfois on n’a pas les droits pour installer des utilitaires sur un OS (notamment sur TrueNAS). J’aime particulièrement ncdu qui me permet de rapidement visualiser des tailles de dossiers/montages/backups…
Et on peut donc biaiser en l’utilisant depuis rClone, sur un remote « local » qu’il convient d’ajouter dans rclone.conf
[local]
type = local

On peut cibler des dossiers comme on le ferait directement depuis l’OS
root@HomeBox[/mnt]# ls
Docker Fichiers Usenet
root@HomeBox[/mnt]# rclone ncdu local:Fichiers
rclone ncdu v1.70.2 - use the arrow keys to navigate, press ? for help
-- /mnt/Fichiers ----------------------------------------------------------------------------------------------------------------------------------------------
2.321Ti [##########] /qbittorrentvpn2
381.995Gi [## ] /qbittorrentvpn1
2.180Gi [ ] /metube
360Ki [ ] /seedarr
52Ki [ ] /grabb2rss
e 0 [ ] /books
e 0 [ ] /chaptarrdl
e 0 [ ] /decypharr
e 0 [ ] /rclonecache
e 0 [ ] /riven
![]()
Quand je découvre que le problème venait du cache depuis le début
Pourquoi Nvidia multiplie ses investissements en Europe dans l’IA
L’accélération est spectaculaire. Nvidia a intensifié ses investissements dans les jeunes pousses européennes de l’IA, participant à 14 tours de financement en 2025 ( sur un total de 86), selon la plateforme Dealroom. Un doublement par rapport aux sept opérations de 2024, et une progression fulgurante quand on sait que le fabricant de puces n’avait réalisé aucun investissement sur le continent en 2020 et 2021.
Cette offensive européenne de Jensen Huang s’inscrit dans une stratégie mondiale d’envergure. pour tisser des liens étroits avec les sociétés les plus prometteuses du secteur, en leur apportant non seulement des capitaux, mais aussi une expertise technique et un accès privilégié à sa chaîne d’approvisionnement.
Des montants records déployés
Parmi les opérations les plus marquantes figure le troisième investissement de Nvidia dans le français Mistral AI, qui a levé 1,7 milliard € en septembre 2025, atteignant une valorisation de 11,7 milliards €.
Autre investissement majeur, les 500 millions de livres sterling dans Nscale, annoncé en septembre par Jensen Huang lui-même. Cette startup britannique, qui développe des centres de données et fournit des services de cloud computing pour l’IA, a rapidement bouclé deux tours de financement successifs fin septembre et début octobre, avec Nvidia à chaque fois au capital.
Le géant américain a également soutenu le laboratoire allemand Black Forest Labs en décembre, participant à une levée de 300 millions $ qui a propulsé la valorisation de cette société spécialisée dans les modèles d’IA pour le contenu visuel à 3,25 milliards $. Nvidia était aussi de la partie lors de la levée de fonds de Lovable, une startup travaillant sur le « vibe coding », valorisée à 6,6 milliards $
Autre pari relevé : celui sur Quantinuum, une entreprise d’informatique quantique qui a levé des fonds en septembre avec le soutien de Nvidia, atteignant une valorisation de 10 milliards $. Ces capitaux doivent financer le développement du système quantique de nouvelle génération Helios.
L’Europe, terre d’opportunités pour l’IA physique
Cette tendance s’est poursuivie en 2026. La startup britannique Synthesia a ainsi annoncé la participation de Nvidia à son dernier tour de table.
Pour Jensen Huang, qui s’exprimait récemment au Forum économique mondial de Davos, l’Europe dispose d’atouts considérables dans la robotique et l’intelligence artificielle physique. L’Europe possède une base industrielle et manufacturière particulièrement solide, qu’elle peut désormais fusionner avec l’IA pour se positionner sur ce marché émergent. Cette combinaison permettrait même à l’Europe de rattraper son retard dans le domaine logiciel, dominé par les États-Unis.
Reste un défi majeur : l’énergie. Jensen Huang a martelé ce point à Davos : pour que l’écosystème de l’IA puisse se développer pleinement en Europe, le continent doit résoudre la question de son approvisionnement énergétique. Avec des coûts parmi les plus élevés au monde, l’Europe peine à attirer les investissements massifs nécessaires au déploiement des infrastructures d’IA. Un constat partagé par Satya Nadella, le patron de Microsoft, qui juge que les coûts énergétiques seront déterminants dans la course mondiale à l’IA.
Un écosystème en pleine ébullition
Au-delà de l’Europe, Nvidia s’impose comme le faiseur de rois de l’IA. Les hyperscalers se précipitent pour construire leurs capacités et le groupe dispose de liquidités considérables à déployer. Jensen Huang parle du démarrage du plus grand déploiement d’infrastructures de l’histoire de l’humanité.
Les chiffres parlent d’eux-mêmes. L’année 2025 a enregistré l’un des plus hauts niveaux d’investissement en capital-risque jamais atteints, avec plus de 100 milliards $ déployés dans le monde, essentiellement vers des startups natives de l’IA. Ces entreprises opèrent dans la santé, la robotique, l’industrie manufacturière et les services financiers, des secteurs où les modèles d’IA sont désormais suffisamment matures pour permettre le développement d’applications concrètes.
——
Les principaux investissements de Nvidia en Europe en 2025
| Startup | Pays | Secteur | Montant levé | Valorisation | Date |
|---|---|---|---|---|---|
| Mistral AI | France | Modèles de langage IA open source | 1,7 Md€ | 11,7 Md€ | Sept. 2025 |
| Nscale | Royaume-Uni | Centres de données / Cloud IA | 500 M£ | N.C. | Sept. 2025 |
| Black Forest Labs | Allemagne | Modèles IA pour contenu visuel | 300 M$ | 3,25 Md$ | Déc. 2025 |
| Lovable | N.C. | « Vibe coding » | N.C. | 6,6 Md$ | 2025 |
| Quantinuum | N.C. | Informatique quantique | N.C. | 10 Md$ | Sept. 2025 |
The post Pourquoi Nvidia multiplie ses investissements en Europe dans l’IA appeared first on Silicon.fr.

-
- Decypharr & AllDebrid : No debrid clients available or no slots found + script de nettoyage de magnets par Bouby
Decypharr & AllDebrid : No debrid clients available or no slots found + script de nettoyage de magnets par Bouby
Les versions :latest et :fenrir-xx embarquent une fonctionnalité qui interroge les débrideurs pour connaître le nombre de slots d’upload disponibles sur le compte utilisé.
Problème : AllDebrid ne gère pas ça via son API.
Second effet Kiss Cool : cette option ne peut pour l’instant pas être désactivée, donc AD en erreur d’upload quand un magnet/.torrent n’est pas en cache.
L’astuce consiste à revenir sur une version plus ancienne de Decypharr, la :beta fonctionnant.
services:
decypharr:
image: ghcr.io/sirrobot01/decypharr:beta
#image: cy01/blackhole:fenrir
#image: cy01/blackhole:fenrir-09
container_name: decypharr
restart: always
privileged: true
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
ports:
- 8282:8282
volumes:
- /mnt/:/mnt/:rshared
- /mnt/Fichiers/decypharr/qbit:/mnt/Fichiers/decypharr/qbit
- /mnt/Docker/decypharr/:/app
environment:
- TZ=Europe/Paris
devices:
- /dev/fuse:/dev/fuse:rwm
Et j’en profite pour vous présenter l’excellent script de Bouby, lecteur du blog (\o/), qui permet de nettoyer les magnets liés à un compte AD. En effet, chez AD un compte est limité à 5000 liens. Il faut donc parfois faire un peu de ménage, surtout quand on fait des bibliothèques Plex/Jellyfin où il faut clairement plusieurs comptes AD.
Vous les voyez sur l’onglet Magnets de votre compte ou via l’API

status "success"
data { magnets: (704)[…] }
Un lien est ajouté quand on envoie un magnet ou .torrent sur son compte AD (captain Obvious!) mais aussi à CHAQUE recherche de contenu dessus via les outils Decypharr, DMM, Vortex, les addons sources de Stremio etc. Même si un contenu est en cache, le fait de le chercher en ajoutant un magnet/.torrent crée un lien sur votre compte.
Je n’ai pas cherché et ne sais absolument pas comment AD gère ça côté utilisateurs, si des liens vieux de plus de X mois/années/heures sont retirés ou non.
Quoi qu’il en soit voici le script Python de Bouby (encore merci !). J’ai augmenté les seuils en fonction de la limite de 5000 liens/compte.
#!/usr/bin/env python3
import requests
from datetime import datetime, timedelta
# ----------------------------------------
# CONFIGURATION DU SCRIPT (variables en dur)
# ----------------------------------------
# Clé API AllDebrid — obligatoire pour accéder aux magnets
API_KEY = "xxx"
# Dry-run : True = le script affiche ce qu’il ferait sans supprimer
# False = suppression réelle
DRY_RUN = False
# -----------------------------
# Seuils et limites pour la purge
# -----------------------------
THRESHOLD_HIGH = 4700 # déclenche la purge normale si nombre total de magnets > 900
THRESHOLD_LOW = 2700 # limite minimale après purge pour ne pas trop supprimer =700
MAX_DELETE = 2000 # nombre maximum de magnets à supprimer en mode normal
MIN_AGE_DAYS = 7 # ne supprimer que les magnets plus vieux que X jours (sauf urgence)
# -----------------------------
# Mode urgence
# -----------------------------
EMERGENCY_THRESHOLD = 4900 # si le nombre total de magnets > 950, on active la purge d'urgence
EMERGENCY_DELETE = 2000 # nombre de magnets à supprimer immédiatement en urgence, ignore l'âge minimum
# -----------------------------
# API endpoint AllDebrid
# -----------------------------
# v4.1 est le nouvel endpoint pour récupérer les magnets
BASE_URL = "https://api.alldebrid.com/v4.1/magnet/status"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# -----------------------------
# Catégories de statut
# -----------------------------
# Ces statuts sont utilisés pour trier les magnets par priorité
FAILED = {"Error", "error"} # magnets ayant rencontré une erreur
IN_PROGRESS = {"Processing"} # magnets en cours de téléchargement
DONE = {"Finished", "Ready"} # magnets terminés
# ----------------------------------------
# Récupérer tous les magnets depuis l’API
# ----------------------------------------
def get_magnets():
"""
Récupère la liste des magnets depuis l’API AllDebrid.
Retourne une liste vide si erreur ou endpoint obsolète.
"""
try:
r = requests.get(BASE_URL, headers=HEADERS, timeout=30)
r.raise_for_status()
data = r.json()
# Vérifie que la réponse contient bien les magnets
if "data" not in data or "magnets" not in data["data"]:
print("❌ Réponse API inattendue :")
print(data)
return []
return data["data"]["magnets"]
except requests.RequestException as e:
print("❌ Erreur réseau ou API :", e)
return []
# ----------------------------------------
# Supprimer un magnet par son ID
# ----------------------------------------
def delete_magnet(magnet_id):
"""
Supprime un magnet via l’API.
Si DRY_RUN = True, n’effectue pas la suppression mais affiche l’action.
"""
delete_url = "https://api.alldebrid.com/v4/magnet/delete"
if DRY_RUN:
print(f"[DRY-RUN] DELETE {magnet_id}")
return
try:
# POST pour supprimer le magnet
r = requests.post(delete_url, headers=HEADERS, data={"id": magnet_id})
r.raise_for_status()
print(f"✅ Supprimé magnet {magnet_id}")
except Exception as e:
print(f"❌ Erreur suppression {magnet_id} :", e)
# ----------------------------------------
# Trier et filtrer les magnets
# ----------------------------------------
def bucketize(magnets, ignore_age=False):
"""
Trie les magnets par statut et filtre par âge.
ignore_age=True ignore la limite MIN_AGE_DAYS (mode urgence)
"""
# Date limite selon l'âge minimum
cutoff = datetime.utcnow() - timedelta(days=MIN_AGE_DAYS)
# Séparer les magnets par statut pour appliquer la priorité
failed, progress, done = [], [], []
for m in magnets:
status = m.get("status", "")
created = m.get("uploadDate") or m.get("completionDate") or 0
created_dt = datetime.utcfromtimestamp(created) if created else datetime.utcnow()
# Filtrer par âge sauf si mode urgence
if not ignore_age and created_dt > cutoff:
continue
# Trier par statut
if status in FAILED:
failed.append(m)
elif status in IN_PROGRESS:
progress.append(m)
elif status in DONE:
done.append(m)
# Trier chaque catégorie par date de création (anciens d’abord)
for lst in (failed, progress, done):
lst.sort(key=lambda x: x.get("uploadDate", 0))
# Retourner tous les magnets dans l'ordre priorité : failed → progress → done
return failed + progress + done
# ----------------------------------------
# Fonction principale
# ----------------------------------------
def main():
"""
Logique principale :
- Récupère tous les magnets
- Vérifie les seuils
- Applique le mode urgence si nécessaire
- Supprime les magnets selon les règles
"""
magnets = get_magnets()
total = len(magnets)
print(f"Total magnets : {total}, Dry-run : {DRY_RUN}")
# Mode urgence
if total > EMERGENCY_THRESHOLD:
print("🚨 MODE URGENCE activé")
ordered = bucketize(magnets, ignore_age=True)
to_delete = ordered[:EMERGENCY_DELETE]
# Mode normal
elif total > THRESHOLD_HIGH:
print("Mode normal")
ordered = bucketize(magnets, ignore_age=False)
max_deletions = min(MAX_DELETE, total - THRESHOLD_LOW)
to_delete = ordered[:max_deletions]
else:
print("Seuil non atteint → rien à faire.")
return
# Supprimer les magnets sélectionnés
for m in to_delete:
mid = m.get("id")
name = m.get("filename") or m.get("name") or ""
status = m.get("status")
print(f"→ Suppression {status} : {name} (id={mid})")
delete_magnet(mid)
print("✨ Purge terminée.")
# ----------------------------------------
# Exécution du script
# ----------------------------------------
if __name__ == "__main__":
main()
Comme il le suggère, je le fais tourner avec un Docker Alpine. Chaque nuit à 3h.
services:
alldebrid-purger:
image: python:3.12-alpine
container_name: alldebrid-purger
restart: always
working_dir: /app
command: >
sh -c "
apk add --no-cache py3-pip &&
pip install --no-cache-dir requests &&
echo '0 3 * * * python /app/purge_alldebrid_magnets.py >> /logs/purge.log 2>&1'
> /etc/crontabs/root &&
crond -f -d 8
"
volumes:
- /mnt/Docker/alldebrid_purger:/app:ro
- /mnt/Docker/alldebrid_purger/logs:/logs
![]()