Sh0
All Sh0 articles.
Des listes plates aux Stacks : repenser toute notre UX
Nous avons jeté notre interface à listes plates et reconstruit autour de stacks par projet avec une double sidebar, une navigation contextuelle et des sections de style cPanel.
Construire un tableau de bord de production avec Svelte 5 en 48 heures
Comment nous avons construit le tableau de bord de production de sh0 -- thèmes sombre/clair, i18n en 5 langues, logs WebSocket en temps réel, et 7 pages principales -- avec Svelte 5 runes et TailwindCSS 4 en 48 heures.
Tâches cron et environnements de preview : deux fonctionnalités, zéro downtime
Comment nous avons construit la planification de tâches cron avec gestion des timeouts et les environnements de preview avec intégration de webhooks PR.
Monitoring et alertes : Email, Slack, Discord, Telegram, Webhooks
Construction d'un système de monitoring avec collecte périodique de statistiques Docker, évaluation d'alertes basée sur des seuils, et dispatch multi-canal.
Donner un cerveau à sh0 : passerelle IA avec Claude Tool Calling
Comment nous avons construit une passerelle IA qui permet à Claude de gérer les serveurs sh0 -- avec streaming SSE, 10 définitions d'outils et exécution côté client.
Construire un serveur MCP : 25 outils, 3 niveaux de sécurité, piloté par OpenAPI
Comment nous avons construit le serveur MCP de sh0 avec 25 outils, auto-génération pilotée par OpenAPI, classification des risques et jetons de confirmation pour les opérations destructives.
Les bugs qui ont failli nous briser
Échecs de git pull, CSRF bloquant les uploads, processus Caddy résiduels, incompatibilités FTP IPv6, et alias réseau Docker -- les bugs qui ont failli faire dérailler sh0.
Prévention de l'injection de commandes dans un PaaS
Un PaaS exécute des commandes fournies par l'utilisateur par conception. Voici comment nous avons construit validate_command() pour empêcher l'injection shell dans les tâches cron, les hooks de déploiement et Docker exec.
Migration des jetons localStorage vers les cookies HTTP-Only
Comment nous avons migré l'authentification de sh0 des jetons JWT en localStorage vers des cookies HTTP-only avec protection CSRF en double soumission.
Nous avons audité notre propre plateforme et trouvé 88 problèmes de sécurité
Nous avons mené 4 audits de sécurité complets sur notre propre PaaS et trouvé 88 problèmes -- 9 critiques, 12 élevés, 45 moyens. Voici chaque découverte, chaque correctif, et ce que nous avons appris.
Auth en Rust : Argon2id, JWT, TOTP et clés API
Construire un système d'authentification complet en Rust : hachage de mots de passe Argon2id, jetons JWT HS256, 2FA TOTP avec codes de secours, génération de clés API et chiffrement AES-256-GCM.
Moteur de sauvegarde : AES-256-GCM, 13 fournisseurs de stockage, et cauchemars FTP
Construction d'un moteur de sauvegarde avec stockage pluggable, chiffrement AES-256-GCM, 13 fournisseurs de stockage via OpenDAL -- et le bug FTP IPv6 qui nous a forcés à écrire notre propre client.