Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

ffmpeg-over-ip - Le transcodage GPU distant pour Jellyfin

Par : Korben ✨
4 mai 2026 à 16:15

Jellyfin sans GPU, c'est la croix et la bannière dès que quelqu'un lance un film en 4K. Mais c'était sans compter sur ffmpeg-over-ip qui est capable de transformer un serveur équipé d'un GPU en endpoint de transcoding distant, accessible via un simple binaire qui se fait passer pour ffmpeg. Y'a pas de passthrough GPU, ni besoin de vous lancer dans la config de point de montage réseau exotique.

Le principe c'est que le client reçoit les commandes ffmpeg de Jellyfin (ou Emby), les sérialise et les envoie ensuite via TCP (port 5050) vers un serveur qui lui dispose d'un bon GPU. Et côté Jellyfin, rien ne change puisque le binaire répond exactement comme ffmpeg le ferait (et je vous rassure, y'a un peu d'authentification pour éviter de vous faire squatter votre serveur de transcoding à l'insu de votre plein gré).

Alors imaginons un peu dans quelle situation ça peut être utile... Par exemple, vous pourriez avoir un NUC ou mini-PC tout neuf qui fait tourner Jellyfin dans Docker, et à côté une vieille tour avec une GTX qui traîne dans un coin pour le transcodage. L'avantage c'est que plusieurs clients peuvent ainsi partager le même serveur GPU en parallèle, donc ffmpeg-over-ip peut valoir le coup si vous avez du matériel qui dort dans un coin.

L'outil est signé Anees Iqbal (steelbrain) et voici comment l'installer (pensez à vérifier le contenu du .sh avant) :

curl -fsSL https://ffmpeg-over-ip.com/install-client.sh | sh

Windows a aussi droit à son équivalent PowerShell si vous voulez.

Pour brancher ça sur Jellyfin ensuite, c'est direction Dashboard → Playback → chemin ffmpeg → et faites pointer vers ffmpeg-over-ip-client. Notez que ffprobe doit aussi être redirigé car Jellyfin l'appelle séparément pour les métadonnées. Vous pouvez faire un lien symbolique pour être tranquille :

ln -s ffmpeg-over-ip-client ffprobe

Et ensuite, pour vérifier, cette commande : ./ffmpeg-over-ip-client -version devrait vous retourner les infos de l'instance ffmpeg distante. Si ça répond, c'est que c'est bon !

Notez que la config permet de passer par des variables d'environnement du genre FFMPEG_OVER_IP_CLIENT_ADDRESS pour l'adresse du serveur, FFMPEG_OVER_IP_CLIENT_AUTH_SECRET pour la clé HMAC. Et pour tout ce qui est paramètres avancés, disons que les remappings de filtres complexes qu'on peut faire avec ffmpeg nécessitent encore un fichier .jsonc à créer et paramétrer.

Côté serveur, les accélérations supportées sont : NVENC (NVIDIA), QSV (Intel), VAAPI (Linux), AMF (AMD), VideoToolbox (macOS). Et comme c'est basé sur jellyfin-ffmpeg, du coup y'a toutes les accélérations habituelles sans avoir à recompiler.

Par contre, attention si le serveur GPU tombe, y'aura aucun fallback automatique vers le CPU local. Et si votre réseau interne est en 100Mbps et que vous transcodez du 4K HEVC, le goulot d'étranglement sera le transit réseau, pas le GPU. Donc optez pour un réseau en gigabit minimum dans ce cas.

Bref, c'est simple, propre, et très bien pensé par exemple pour les setups Docker qui n'ont pas d'accès direct au matériel.

OAuth2 Proxy - L'authentification OIDC en reverse proxy

Par : Korben ✨
4 mai 2026 à 11:32

Vous avez un service qui tourne sur le port 8080, mais aucune authentification native dessus et vous voulez ajouter OAuth2 sans avoir à toucher au code ? Vous êtes vraiment exigeant dans la vie !

Mais comme vos désirs sont des ordres, je vous présente oauth2-proxy dont c'est EXACTEMENT le boulot !

Le principe avec cet outil c'est qu'il se glisse entre l'utilisateur et votre application. Ainsi, si la personne n'est pas connectée, elle est alors redirigée vers son provider OAuth2 ou OIDC. Et une fois le token validé, popopop, la requête repart vers son point d'origine avec les infos utilisateur dans les headers HTTP. Et voilà comme votre app reçoit le nom, l'email, et les groupes associés à l'utilisateur ! Plus besoin de gérer l'auth dans votre code c'est que du bonheur !

Et la liste des providers supportés par oauth2-proxy est longue : Google (c'est celui par défaut), GitHub, GitLab, Microsoft Entra ID, Keycloak, Gitea / Forgejo, NextCloud, DigitalOcean, LinkedIn, Bitbucket, Cisco Duo... et un bon vieux client OIDC générique pour tout ce qui expose un accès standardisé. Comme ça si votre SSO interne parle OIDC, vous êtes déjà couvert !

Côté déploiement, c'est un simple binaire en Go et c'est également disponible en image Docker sur quay.io/oauth2-proxy/oauth2-proxy, pour AMD64, ARM64, ARMv6/v7, et quelques architectures plus exotiques du genre ppc64le, s390x pour les bandeurs de mainframes ^^.

Ensuite, l'outil peut fonctionner de 2 façons : Soit en proxy autonome devant votre service, ou en middleware intégré dans un reverse proxy existant comme nginx via le mécanisme auth_request. Dans ce second mode, oauth2-proxy ne fait en réalité que vérifier la session et répondre du code 202 ou 401. C'est nginx qui gère le routage et le proxy lui se contente d'authentifier les gens.

Et voilà, si vous cherchez à minimiser la surface d'attaque, c'est la config à privilégier. Tout est là : github.com/oauth2-proxy/oauth2-proxy , avec la doc complète. Et si vous cherchez quelque chose de plus intégré, avec tunnel et gestion des tunnels VPN en prime, il y a aussi Pangolin dont je vous ai parlé. Et pour du plus simple en contexte Docker, TinyAuth fera également très bien le taf.

Merci à Mathieu Passenaud pour le lien !

Slim - HTTPS local et tunnels publics, tout en un

Par : Korben ✨
30 avril 2026 à 09:26

Monter un serveur HTTPS local pour bosser sur du Next.js ou du Vite, ça reste étrangement chiant. Faut mkcert pour générer les certifs, faut éditer le /etc/hosts à la mimine, installer caddy ou nginx en reverse proxy par-dessus... bref, vous voyez le diiiiliiiire ! Heureusement, Kamran Ahmed , le mec derrière roadmap.sh, vient de balancer Slim , un binaire Go standalone qui fait tout ça d'un coup.

Et tant qu'à faire, il rajoute aussi des tunnels publics à la ngrok au cas où vous voudriez présenter votre travail de dev payé au lance pierre, à un client pressé.

L'idée c'est donc de taper : slim start myapp --port 3000 et hop, votre app tourne OKLM en local sur le port 3000 et devient accessible via https://myapp.test avec un certif totalement valide reconnu à 100% par votre navigateur.

Ça permet d'esquiver tout config manuelle, puisque le binaire crée une autorité de certification locale (CA) dès le premier lancement, signe ensuite les certifs par domaine, et met à jour /etc/hosts tout seul, sans oublier de rediriger les ports 80/443 sur 10080/10443 sans même avoir besoin de root.

Et cette CA est ajoutée au trousseau du système, donc votre Chrome, Safari ou Firefox (ze best !!) la considèrent immédiatement comme légitime, sans alerte de sécurité. Du tout-en-un comme je l'aime quoi !

L'install se fait en une ligne (pensez à regarder comme d'hab le contenu du fichier .sh avant de le lancer, je ne le répéterais jamais assez) :

curl -sL https://slim.sh/install.sh | sh

Ensuite, pour les domaines, vous avez le choix entre .test (par défaut), .loc ou .dev. Notez que Kamran a explicitement banni le .local parce que ce TLD est réservé à mDNS et que ça fout en l'air toute la résolution DNS sur macOS et Linux. Ouf !

Le routing par chemin est aussi de la partie. Si vous bossez sur une app Next.js qui tourne sur le port 3000 et une API séparée sur le 8080, vous pouvez tout router en 1 seule commande :

slim start myapp --port 3000 --route /api=8080 --route /ws=9000

Tout tape alors sur https://myapp.test, et c'est slim qui fait le découpage. Et si vous avez plusieurs services à orchestrer, un fichier .slim.yaml à la racine du projet permet de tout déclarer d'un coup et de lancer le bouzin avec slim up.

WebSocket et HMR sont également gérés nativement, donc ça marche direct avec Vite et Next.

Maintenant, l'autre moitié de l'outil c'est slim share --port 3000 --subdomain demo qui vous délivre une URL publique sur slim.show pour exposer votre localhost sur le net. Vous pouvez ainsi ajouter un mot de passe, un TTL d'expiration, voir les logs en direct... bref, c'est du ngrok-like classique mais déjà inclus dans le même binaire ce qui évite d'aller vous créer un compte séparé. Suffit de lancer un slim login pour activer le partage public.

Alors Slim c'est cool mais y'a pas de support Windows officiel pour l'instant... ce sera donc macOS ou Linux uniquement.

Et si vous êtes sur des stacks où vous avez déjà investi dans Tunnelto pour son dashboard d'introspection HTTP ou dans Tunnl.gg pour son approche zéro-client, slim n'apportera pas forcément de quoi migrer. Mais si vous galérez à empiler mkcert + caddy + ngrok à chaque nouveau projet, c'est pil poil ce qu'il vous faut.

Le code est sur GitHub et un grand merci à Philobois pour le partage !

Pup branche votre agent IA sur Datadog

Par : Korben ✨
30 avril 2026 à 09:05

Datadog Labs vient de sortir pup , un outil CLI codé en Rust qui donne à vos agents IA un accès complet à leur plateforme. L'idée c'est que pendant que Vercel et AWS galèrent de ouf à rendre leurs trucs « agent-friendly », Datadog, lui, dégaine un outil dédié qui expose +200 commandes sur plus de 33 de leurs produits, du monitoring aux SLOs en passant par la sécurité et les incidents.

Côté install c'est du classique, brew tap datadog-labs/pack && brew install pup, puis pup auth login pour le flow OAuth2 avec PKCE.

Plus besoin comme ça de balader vos clés API à vie dans des variables d'env, même si le fallback DD_API_KEY reste là quand même pour d'éventuels cas "headless". Une fois loggué, vous tapez alors par exemple :

pup monitors list

ou

pup metrics query --query="avg:system.cpu.user{*}" --from="1h"

et l'agent récupère du JSON 100% clean, prêt à être bouffé et digéré par Claude Code, Cursor ou peu importe ce que vous utilisez.

Pour détecter le mode agent, Pup regarde les variables d'environnement type CLAUDE_CODE ou CURSOR_AGENT, et bascule tout seul en sortie machine, avec tout ce qui va bien, genre les metadonnées, les hints et autres auto-approbation des prompts destructifs (oui, c'est à utiliser avec prudence, mais je vous fais confiance, vous êtes des pro).

Les commandes sont aussi auto-découvrables via pup --help ou pup agent schema, donc l'agent peut introspecter ce qu'il a à disposition sans que vous lui mâchiez le travail.

Y'a même un moteur de runbooks en YAML pour chaîner des étapes (commandes pup, shell, HTTP, workflows Datadog) avec interpolation de variables, conditions et polling. Pratique donc pour scripter un triage d'incident ou un déploiement, sans sortir un Argo ou un Temporal pour ça. Et pour les setups un peu plus velus, pup se compile aussi en WASM, donc vous pouvez le faire tourner dans Wasmtime ou un Cloudflare Worker.

À noter, le projet est encore en Preview, et que certaines API ne sont pas implémentées (Session Replay, Powerpacks, IP Allowlist).

Source

Un agent efface la base de prod de PocketOS en neuf secondes

28 avril 2026 à 16:22

Jeremy Crane, fondateur de la startup PocketOS, a publié le récit complet de la disparition de sa base de données de production.

Le coupable ? Un agent Cursor branché sur Claude Opus 4.6 qui, face à une erreur de credentials en staging, a décidé tout seul de supprimer un volume Railway. Neuf secondes plus tard, la base et tous les backups stockés sur le même volume avaient disparu.

L'enchaînement est intéressant. L'agent rencontre une erreur d'authentification en environnement staging. Au lieu de demander à l'humain, il fouille dans les fichiers du projet et trouve un token API Railway dans un fichier qui n'avait rien à voir avec la base.

Ce token, qui a été créé à l'origine pour gérer un domaine personnalisé, avait des permissions bien trop larges et autorisait la suppression de volumes en production. L'agent appelle dans la foulée une mutation GraphQL volumeDelete, sans confirmation, sans vérification du tag environnement. Et paf, tout part.

Le plus fou, c'est la confession auto-générée de l'agent une fois remis en marche. Il admet trois fautes : il a deviné que supprimer un volume staging resterait cantonné à staging sans vérifier, il n'a pas regardé si l'ID du volume était partagé entre environnements, et il a violé ses propres règles système qui interdisaient les commandes destructrices sans demande explicite. C'est moche.

Crane refuse quand même de rejeter toute la responsabilité sur l'IA. Il pointe surtout l'architecture Railway comme principal facteur aggravant. L'API accepte des commandes de suppression sans aucune confirmation, les backups sont stockés sur le même volume que les données primaires (donc effacés en même temps), et un token CLI standard a des permissions étendues sur tous les environnements sans isolation.

Le PDG de Railway, Jake Cooper, est lui intervenu personnellement dimanche pour restaurer les données depuis une snapshot externe en moins d'une heure, et a depuis ajouté une logique de suppression différée sur l'endpoint concerné.

Cette histoire est un cas d'école pour quiconque déploie un agent codeur en environnement avec accès à la production. Trois choses ont échoué en même temps : un token API trop permissif, une plateforme cloud sans confirmation sur les actions destructrices, et surtout un agent IA prêt à improviser face à une erreur au lieu de s'arrêter.

Tout ce qu'il faut pour neutraliser tous les garde-fous, et croyez-moi, ça n'est pas la dernière histoire de ce genre que vous allez lire.

Source : The Register

smolvm - Des microVMs qui se lancent en moins de 200ms

Par : Korben ✨
27 avril 2026 à 15:57

Docker Desktop bouffe la RAM comme vous le saucisson à l'apéro. Et même quand vous n'utilisez pas cette RAM, d'autres outils comme Lima ou Colima prennent aussi de la RAM.

Mais c'était sans compter sur smolvm , le projet de BinSquare et de l'équipe smol-machines, qui s'attaque au problème par un autre angle, à savoir utiliser des microVMs hardware-isolées qui bootent en moins de 200 millisecondes, qu'on configure en TOML, et qu'on peut packer dans un seul binaire .smolmachine qui tournera sur n'importe quel Mac ou Linux compatible.

Pas de daemon ni de service à lancer en background, non, c'est juste un bon vieil outil CLI codé en Rust qui boote une VM par workload et s'éteint quand c'est fini !

Ainsi, quand vous tapez :

smolvm machine run --image alpine -- sh -c "ma commande"

ça vous sort un noyau Linux complet avec son propre kernel, isolé via Hypervisor.framework sur Mac ou KVM sur Linux et tout ça en moins de temps qu'il n'en faut à Docker Desktop pour afficher sa fenêtre de démarrage. LOL

Le réseau est désactivé par défaut, mais si vous voulez l'activer, vous pouvez whitelister uniquement les domaines autorisés. Cette approche "deny by default" est rare dans l'écosystème conteneur, où en général on ouvre le réseau d'abord et on filtre après.

La fonctionnalité qui sort vraiment du lot, c'est surtout le packing en format .smolmachine. Concrètement, vous prenez votre image Docker (Python 3.12, Postgres, ce que vous voulez...), vous lancez :

smolvm pack create --image python:3.12-alpine -o ./python312

Et hop, magie magie, vous avez un exécutable totalement autonome avec tout ce qu'il faut dedans : kernel, rootfs, dépendances et tutti quanti comme disent les Allemands !

Plus besoin comme ça, d'installer quoi que ce soit du côté du destinataire de votre app. Vous balancez simplement votre binaire à un collègue, il le lance, et ça marche. Il est content, vous aussi, c'est trop bien, y'a plus qu'à aller boire ce truc dégeu qu'on appelle dans le sud, "un petit jaune" pour célébrer ça !!

Sous le capot, le moteur de virtualisation s'appuie sur libkrun , une bibliothèque VMM développée par Red Hat dans le cadre de l'initiative rust-vmm. Pour les noobzzzz, rust-vmm est un effort communautaire qui partage des composants Rust de virtualisation entre plusieurs projets : Firecracker (AWS), Cloud Hypervisor (Intel), crosvm (Google), libkrun (Red Hat) et donc smolvm.

Du coup les améliorations sur la mémoire ou la sécurité bénéficient à tous en parallèle. Côté kernel, smolvm embarque libkrunfw, un noyau custom optimisé pour démarrer hyper vite. J'ai testé, ça tient sa promesse < 200 ms !

La mémoire est élastique via virtio balloon ce qui fait que le host n'engage que ce que le guest utilise vraiment et récupère le reste automatiquement. Et les vCPUs dorment dans l'hyperviseur quand ils sont idle (en attente), ce qui permet d'over-provisionner sans payer le prix.

Côté sécu, y'a des détails qui sont cools aussi comme le SSH agent forwarding du host qui est exposé au guest sans jamais que les clés privées n'entrent dans la VM. En effet, c'est l'hyperviseur qui fait barrière donc vous pouvez cloner un repo privé depuis une VM jetable, comme un cochon, sans risquer d'exfiltrer vos identifiants si le code que vous lancez est foireux.

Et chaque workload a son propre kernel, donc une faille dans le kernel guest reste cantonnée à cette VM. Top hein ? Comparé à un conteneur Docker classique où une CVE kernel touche tout le host, c'est un autre niveau d'isolation.

Au niveau des concurrents, Firecracker (AWS) tourne uniquement sous Linux et vise les workloads serverless du cloud, mais pas le poste dev. Kata Containers de son côté fait du microVM mais boot en environ 500ms et nécessite une stack containerd lourde.

QEMU est puissant c'est sûr, mais boot en 15 à 30 secondes selon la config, donc oubliez, la vie est trop courte ! Quant à OrbStack dont je vous parle tout le temps puisque c'est l'alternative à Docker Desktop sur Mac qui est la plus aboutie aujourd'hui, ça reste quand même un outil proprio qui se repose sur Docker.

smolvm lui, boxe dans une autre catégorie puisque c'est une lib SDK embarquable, et pas juste un CLI, et son format .smolmachine n'a pas d'équivalent direct. C'est donc plus proche de l'esprit de Nix ou des binaires statiques Go, mais avec une isolation hardware réelle.

Sachez-le, en 2026, environ 42% des commits GitHub viennent de code généré ou assisté par IA. Je sais, ça en défrise pas mal mais c'est la nouvelle réalité.

Sauf qu'à chaque fois que vous lancez un script Python ou un paquet npm non relu, codé par une IA, vous prenez potentiellement un risque. En effet, à chaque fois, que vous donnez à du code potentiellement malveillant un accès direct à vos credentials, votre système de fichier ou encore votre réseau, vous vous exposez.

Ce bon vieux chmod +x && ./run.sh servi avec du café et beaucoup d'espoir, c'est terminé ! smolvm vous propose de basculer vers un modèle où l'isolation est l'état par défaut, et où ouvrir le réseau ou votre système de fichiers est une décision vraiment explicite. Donc parfait pour laisser des agents IA faire leur vie sur vos projets sans prendre de risques.

Notez que le support GPU est dans une branche séparée, et pas encore mergé. Et le projet est principalement piloté par BinSquare avec un Discord modeste derrière, et pas une fondation booster aux milliards d'Amazon ou de Google. Du coup ne déployez pas ça en prod sans backup... Mais pour du dev, de la sandbox d'agents IA, ou tout simplement pour distribuer votre binaire, c'est déjà très solide.

Et comme ça bouffe moins de RAM que Docker Desktop, sur un MacBook avec 16 Go, la différence se sent immédiatement.

Pour l'installer, ça passe par curl :

curl -sSL https://smolmachines.com/install.sh | bash

ou un download manuel depuis les releases GitHub.

Lancez ensuite

smolvm --help

ou ce hello world :

smolvm machine run --net --image alpine -- sh -c "echo 'Hello world from a microVM' && uname -a"

Et à vous de jouer !

Mocker - Le clone Docker natif pour Mac Apple Silicon

Par : Korben ✨
24 avril 2026 à 09:27

Si vous bossez sur Mac et que Docker Desktop commence à vous prendre la tête, les amis, y'a une alternative super cool qui vient de débarquer. Ça s'appelle Mocker , c'est écrit en Swift, c'est sous licence AGPL-3.0, et le principe c'est de remplacer la CLI de Docker à l'identique : mêmes flags, mêmes formats de sortie, même syntaxe pour Compose. mocker run, mocker ps, mocker compose up (...bref, le README annonce 111 commandes et sous-commandes couvertes avec les flags qui matchent).

Pour l'installer, un brew tap us/tap && brew install mocker et c'est plié !

La plupart des images Docker Hub standards (format OCI) se pullent pareil, et votre fichier docker-compose.yml tourne le plus souvent sans rien retoucher. Attention quand même, si vous avez encore Docker Desktop qui tourne en parallèle, coupez-le avant de jouer avec mocker sinon vos ports vont faire la bagarre !

De plus, certaines features Docker très spécifiques (options de runtime exotiques, images qui tapent dans des sockets Linux particuliers) peuvent planter ou produire un avertissement côté Apple Containerization. Mais sur du stack web classique (nginx, postgres, redis, node), par contre, ça passe crème.

Mais alors, pourquoi ça fonctionne aussi bien ?

Hé bien parce que Mocker ne réinvente pas la roue, il l'enrobe. Rien de plus, rien de moins. En fait, sous le capot, c'est le framework Apple Container qui fait tout le boulot.

Pour rappel, c'est ce truc qu'Apple a sorti à la WWDC 2025 et qui permet ainsi de lancer une petite VM Linux dédiée par conteneur (au lieu de la grosse VM partagée à la Docker Desktop). Mocker délègue alors tout au binaire container d'Apple pour run, stop, exec et logs, tape directement dans le Containerization.ImageStore pour les pulls et les tags, et gère les ports via un petit proxy TCP userspace.

L'état des conteneurs, images, réseaux et volumes est alors stocké en JSON dans le dossier ~/.mocker/ sur votre Mac. Comme y'a rien de magique, vous pouvez tout inspecter à la main, ce qui est plutôt chouette !

Côté perfs, il y a quand même un coût. Selon les benchmarks publiés par le dev sur sa machine Apple Silicon, au démarrage d'un container Docker Desktop tourne à 320 ms, le CLI container d'Apple à 1030 ms, et Mocker à 1153 ms (3,6× plus lent que Docker, ~120 ms d'overhead sur Apple).

Dans la vraie vie, 800 ms de plus au boot c'est transparent si vous relancez 5 containers par jour en dev, mais ça devient clairement pénible si vous faites du CI local intensif avec 50 runs à la chaîne. Sur ces mêmes benchmarks, une fois que le container est up, CPU et mémoire s'en sortent ensuite pareil. Autrement dit, la VM par conteneur coûte au boot, mais pas au runtime. En tout cas, sur cette config de test pour les benchmarks.

Si vous voulez une alternative plus mature et commerciale, OrbStack reste encore une fois la référence sur Mac, mais c'est du freemium. Mocker, lui, est gratuit et open source du début à la fin.

Voilà les amis, si vous êtes sur Mac Apple Silicon et que Docker Desktop vous saoule, ça vaut grave le coup de tester !! Au pire vous revenez à Docker, au mieux vous gardez Mocker et vous arrêtez de payer la licence Business...

LinuxServer - Les images Docker que votre homelab mérite

Par : Korben ✨
22 avril 2026 à 08:37

Monter un Jellyfin dans Docker, ça prend 3 minutes. Mais retrouver dans 18 mois une image encore maintenue, c'est plus le même kung fu ! En effet, beaucoup d'images populaires sur Docker Hub ont déjà pris 2 ou 3 ans de retard sur leur app upstream, et quand c'est un mainteneur solo qui a lâché l'affaire à cause d'un burn out, vous vous retrouvez rapidement avec un putain de Dockerfile cassé à débugger un dimanche à 23h. Chouette programme de vie hein ?

LinuxServer.io , c'est le collectif qui résout ce problème. 17 bénévoles répartis sur différents fuseaux horaires, maintenant 313 dépôts publics sur GitHub, et des images Docker standardisées qui alimentent un paquet de homelabs à travers le monde. Plex, Jellyfin, Sonarr, Radarr, WireGuard, SWAG, Home Assistant, Nextcloud... leur catalogue couvre à peu près tout ce qu'un self-hoster peut demander.

Ce qu'ils proposent c'est une véritable standardisation puisque la plupart de leurs images partagent la même base (Alpine ou Ubuntu le plus souvent, parfois Debian ou Arch selon le cas), utilisent s6-overlay (v3 désormais) pour gérer les processus sur Linux, et exposent le même système PUID/PGID avec un volume /config pour la persistance.

Si vous avez déjà galéré avec des fichiers créés en root dans vos volumes Docker, vous voyez de quoi je cause. Là, 2 variables d'environnement et c'est plié :

environment:
 - PUID=1000 # votre UID, récupéré via id $user
 - PGID=1000 # votre GID, pareil

Faites moi confiance, vous allez voir, le jour où vous avez 15 conteneurs qui tournent en simultannée, c'est tout simplement un vrai soulagement.

Un id $user dans le terminal pour récupérer vos identifiants réels, vous les collez dans le docker-compose, et vos fichiers appartiennent alors bien à votre propre utilisateur. Terminées les galères de permissions à rattraper à coups de sudo chown.

Côté registry, leurs images se récupèrent via ce genre d'URL lscr.io/linuxserver/jellyfin (par exemple), qui redirige vers GHCR avec Docker Hub en miroir.

Côté architectures, leurs images ciblent x86_64 et arm64 en standard, avec du RISC-V 64-bit sur les baseimages Alpine récentes. Ils ont tiré un trait sur l'ARM 32-bit en 2024 donc les Pi 2 ou Pi 3 en mode 32-bit ne sont plus éligibles. Certaines images très spécifiques (Chrome, par exemple) restent amd64-only, mais la grande majorité du catalogue couvre les deux archis principales sans problème.

Et dans leur catalogue, y'a des pépites. Je pense par exemple à leur SWAG qui remplace carrément toute la tambouille Nginx + Certbot + fail2ban que vous vous tapez à la main. C'est super pratique. Après Pangolin reste une alternative intéressante si vous voulez proxy, tunnels et auth intégrés dans le même stack... mais SWAG est un classique éprouvé.

Leur WireGuard est balèze aussi, parfait pour monter un VPN maison en quelques lignes de YAML. Et si vous voulez mettre vos conteneurs en veille entre deux usages, ContainerNursery se marie bien avec.

Faut savoir que pour réussir à maintenir tout ce bordel, ils ont entièrement automatisé leur pipeline de build. Ainsi, quand une app upstream ou ses dépendances changent, l'image est reconstruite et poussée vers GHCR et Docker Hub dans la foulée. Comme ça les mises à jour de la base OS tombent chaque semaine sur leurs 313 repos, et tout ça sans qu'aucun mainteneur n'ait à cliquer sur un bouton. Bien fichu non ?

Du coup, un petit docker-compose pull && docker-compose up -d de temps en temps et votre stack reste à jour sans stress.

Après vous voulez pinner une version précise en prod, c'est possible mais faudra aller checker les tags dispos sur Docker Hub avant de déployer, sinon un pull un peu trop agressif cassera tout.

Le modèle économique est 100% bénévole et l'équipe est financée par des dons via Open Collective, avec notamment DigitalOcean comme partenaire infrastructure principal, des supporters institutionnels genre Pine64, QNAP, Synology ou Unraid, et une cinquantaine de sponsors individuels actifs sur GitHub Sponsors.

Pas d'investisseur à rassurer donc ni de version Pro à la con qui planque de bonnes fonctionnalités derrière un paywall (je déteste les paywalls !!). Ce sont des passionnés qui construisent tout simplement pour le plaisir de bien faire et qui partagent tout en open source.

Voilà, si vous en avez marre des images Docker qui lâchent au bout de 18 mois, ça vaut clairement le coup d'aller faire un tour chez LinuxServer.io . Des gens bons (vous l'avez ?) qui font du bon boulot depuis des années ! Merci à eux et merci à Maxime pour le tuyau !

OpenAI met à jour son Agents SDK avec du sandboxing natif

Par : Korben
16 avril 2026 à 14:37

La mise à jour d'avril du SDK Agents d'OpenAI introduit deux nouvelles briques qui manquaient pour passer de l'agent-jouet au déploiement réel. Le sandboxing natif permet de confiner un agent dans un espace de travail isolé, avec accès limité aux fichiers et outils d'un périmètre défini. Et le nouveau harness d'exécution sépare proprement le plan de contrôle (boucle agent, appels modèle, routing d'outils, approbations, tracing, récupération d'erreurs) du plan de calcul (sandbox où l'agent lit, écrit, exécute du code, installe des dépendances, snapshot son état).

L'architecture est pensée pour les agents "long-horizon", ceux qui travaillent sur des tâches complexes en plusieurs étapes, sur des durées longues, avec un besoin de persistance d'état entre les étapes. Le harness gère la coordination, le développeur apporte son propre compute et stockage. C'est une séparation qui permet de brancher le SDK sur n'importe quelle infrastructure, que ce soit Cloudflare, Vercel, Blaxel ou un cluster interne.

Le SDK introduit aussi une abstraction "Manifest" pour décrire un workspace de manière portable. En clair, vous décrivez les outils, les fichiers et les permissions disponibles dans un format standardisé, et le harness sait reconstituer l'environnement ailleurs. C'est utile pour le test, pour la reproductibilité, et pour déployer le même agent dans des environnements différents sans reconfigurer à la main.

Le lancement est Python d'abord, TypeScript prévu après. Classique. Ça peut agacer les équipes full-stack qui bossent en TypeScript, mais c'est quand même très cohérent avec le fait que la majorité des workloads agents en prod tournent encore en Python, surtout côté data et sécurité.

Ce qui est intéressant, c'est le sous-texte. OpenAI pousse un modèle où son SDK est le harness, et le compute est chez le client ou chez un partenaire cloud. C'est un positionnement de plateforme d'orchestration, pas de fournisseur d'infra. Anthropic et Google proposent des approches comparables avec leurs propres SDKs, mais OpenAI a l'avantage du premier écosystème de plugins et d'outils tiers déjà en place.

Bref, pour les devs qui construisent des agents en prod, cette release comble de vrais trous. Sandboxing et harness, c'étaient les deux pièces manquantes.

Source : Techcrunch

Cloudflare refond son CLI Wrangler parce que ses clients principaux sont désormais des agents IA

Par : Korben
14 avril 2026 à 13:26

Figurez-vous que les agents IA sont désormais les premiers consommateurs des APIs Cloudflare, bien devant les développeurs humains. C'est en tous cas ce que l'éditeur déclare publiquement pour justifier une refonte importante de son outil en ligne de commande, Wrangler, et la sortie d'un nouveau CLI unifié baptisé sobrement "cf".

Le raisonnement est froid mais a du sens. Si les agents IA pilotent la plateforme, autant qu'ils aient un CLI qui ne les plante pas.

Concrètement, Cloudflare a refait toute sa pipeline de génération de code autour d'un schéma TypeScript unique. Ce schéma décrit le périmètre complet des APIs, des commandes CLI, des arguments et du contexte nécessaire pour générer n'importe quelle interface.

Quand un nouveau produit Cloudflare arrive, il tombe automatiquement dans le CLI. Avec près de 3 000 opérations d'API au catalogue, c'était effectivement le bon moment pour industrialiser la chose.

Le point qui dit beaucoup sur l'état de l'industrie, c'est celui-ci. Cloudflare force désormais des commandes CLI par défaut au niveau du schéma, pour éviter que les agents se plantent sur des variantes moins standards qu'ils ne connaissent pas.

En clair, le design du CLI est partiellement contraint par ce que les LLM savent deviner. C'est nouveau, et pas anodin.

À côté du nouveau CLI cf, Cloudflare lance Local Explorer en bêta ouverte, intégré à Wrangler et au plugin Cloudflare pour Vite. L'outil permet d'inspecter les Workers en local, de voir quels bindings leur sont attachés et quelles données y sont stockées.

Pratique pour déboguer sans passer par le dashboard web, surtout quand on jongle entre plusieurs environnements.

Pour les développeurs humains, la promesse est double. D'abord, un CLI plus cohérent, moins de surprises d'un produit à l'autre. Ensuite, un outil de debug local qui évite l'allée-retour constant avec l'interface web Cloudflare. Pour les agents IA, la promesse est plus prosaïque, appeler Cloudflare sans générer d'erreurs de syntaxe toutes les trois commandes.

C'est en fait assez symptomatique d'une tendance qu'on voit chez plusieurs plateformes cloud en ce moment, où l'ergonomie CLI est pensée pour les LLM autant que pour les humains. Pas sûr que tous les acteurs l'assument aussi frontalement, mais Cloudflare, fidèle à son style, le dit.

Bref vous l'avez compris, cf et Local Explorer valent le détour. Et si vous laissez un agent piloter l'infra, au moins il aura des rails pour que ça ne parte pas dans tous les sens.

Source : The Register

Votre pipeline CI/CD GitLab a-t-il des fuites

Par : Korben
9 avril 2026 à 11:30

Si vous bossez avec le CI/CD de GitLab, y'a un angle mort que vous n'avez probablement jamais vérifié : La config de votre pipeline elle-même. Celle qui décide quelles images faire tourner et quels secrets exposer sans oublier les jobs à lancer. Et ça personne ne la scanne !

C'est d'ailleurs exactement cet angle d'attaque qu'ont choisi les pirates derrière l'attaque tj-actions en mars 2025, qui a touché plus de 23 000 organisations en modifiant simplement des tags de version. Ou encore l'attaque sur Trivy , où un scanner de sécurité s'est retrouvé lui-même vérolé. Le schéma est toujours le même : on s'infiltre comme Mario, par la tuyauterie et pas par la porte d'entrée.

Plumber que je vous présente aujourd'hui, est un outil open source en Go qui scanne votre .gitlab-ci.yml et les réglages de votre repo pour détecter les failles de configuration. Vous l'installez via Homebrew (brew tap getplumber/plumber && brew install plumber), vous lancez plumber analyze à la racine de votre projet, et il vous sort un rapport de conformité. 2 minutes chrono, même pas besoin de toucher à votre CI.

Plumber embarque 14 contrôles de sécurité qui couvrent les erreurs de configuration les plus courantes. Ça détecte les images Docker taguées latest (le classique qui traîne dans 80% des projets), les branches pas protégées, les curl | bash sans vérification, et même les jobs de sécurité qu'on a désactivés en douce avec un petit allow_failure: true. Vous savez, le réglage foireux qui fait que votre pipeline affiche tout vert... alors qu'il ne scanne plus rien du tout !

Côté output, Plumber génère une sorte de liste d'ingrédients de votre pipeline, un peu comme l'étiquette sur un paquet de bouffe mais pour votre chaîne de déploiement. Ça vous dit exactement quelles images, quels scripts et quelles dépendances tournent dans vos jobs. Le tout dans un format standard que d'autres outils de sécu peuvent digérer.

Pour l'intégrer directement dans votre pipeline GitLab, c'est 2 lignes :

include:
 - component: gitlab.com/getplumber/plumber/[email protected]

Ça tourne à chaque push et chaque merge request. Y'a même un mode qui poste un commentaire de conformité directement dans la MR. Seul piège : il faut un token GitLab avec des droits Maintainer, sinon certains checks tournent dans le vide sans rien remonter. Une fois le token bien configuré, ça roule.

Après c'est GitLab only pour l'instant donc si vous êtes full GitHub, c'est pas pour vous (pour le moment). Et le projet est encore jeune donc faut pas s'attendre à une couverture totale non plus. Quoi qu'il en soit, ça va bien plus loin que Checkov sur la partie pipeline. Les 2 sont assez complémentaires d'ailleurs.

Pour en savoir plus c'est par ici : Plumber

OpenCloud - L'alternative à Nextcloud en Go et sans base de données

Par : Korben
8 avril 2026 à 10:30

Si vous avez déjà installé Nextcloud sur un serveur, vous savez que c'est pas une partie de plaisir ! La stack PHP + MySQL, les mises à jour qui cassent tout, les performances qui s'effondrent dès que vous dépassez 50 utilisateurs... Relouuu.

Mais c'est là qu' OpenCloud débarque avec une approche radicalement différente puisque tout est écrit en Go, y'a zéro base de données, et l'installation se fait en deux commandes sur n'importe quel serveur à 5 balles par mois.

OpenCloud, en fait, c'est un fork d'ownCloud Infinite Scale (OCIS). Les développeurs du projet original chez Heinlein Group ont quitté ownCloud, forké le code, et relancé le tout sous licence Apache 2.0. Du coup, c'est pas un projet qui part de zéro mais une réécriture déjà très mature qui tourne en prod.

Là où Nextcloud utilise une base MySQL ou PostgreSQL pour stocker les métadonnées, OpenCloud balance donc tout dans le système de fichiers. Pas de SGBD ce qui veut dire pas de migration de base à gérer ni de tables corrompues après un crash. Tout atterrit dans le dossier $HOME/.opencloud/ et c'est réglé. Donc si vous savez faire un rsync, vous savez aussi faire une sauvegarde complète de votre instance. Oui la vie est belle !

Côté fonctionnalités, on retrouve donc le partage de fichiers, la collaboration en temps réel avec une suite bureautique intégrée, le chiffrement, le versioning (pratique contre les ransomwares), l'authentification via OpenID Connect... bref tout le classique d'un cloud privé correct.

Maintenant, le problème je trouve, c'est que l'écosystème d'apps est pas forcément au niveau de Nextcloud. Le CalDAV/CardDAV passe par Radicale en conteneur séparé (pas intégré au core), y'a pas d'app Notes ni de client mail intégré. Donc si vous avez besoin de tout ça, Nextcloud reste le bon choix. Mais bon, pour du stockage et de la collaboration pure, c'est clairement plus léger (genre 200 Mo de RAM au lieu de 2 Go pour Nextcloud) et surtout plus rapide.

D'ailleurs, l'architecture microservices en Go fait que ça scale nettement mieux.

Maintenant, pour installer ça, le plus simple c'est Docker Compose. Le repo opencloud-compose vous propose même des configs prêtes à l'emploi. À vrai dire, si vous êtes du genre à auto-héberger vos services , c'est un candidat sérieux pour remplacer votre Nextcloud donc si vous avez surtout besoin de fichiers et de collaboration, ça vaut le test. D'ailleurs, comme OpenCloud utilise OIDC pour l'auth, Pocket ID s'intègre pile poil avec pour du SSO sans mot de passe. Je dis ça, je dis rien ^^.

Bref, si Nextcloud vous gonfle avec sa lourdeur PHP et ses 47 tables MySQL, OpenCloud mérite un bon petit coup d'oeil !

Merci à fredix pour le lien !

❌
❌