Mon infra perso
Un VPS qui travaille la nuit, un hub perso qui n'ouvre aucun port, et des sites publiés tout seuls.
- Linux
- systemd
- cron
- Bash
- Node.js
- Cloudflare Tunnel
- Vercel Edge
- Cloudflare Pages
- wrangler
Contexte
Je fais tourner plusieurs projets en même temps : GaijinToSensei, deux apps Overwolf et leurs sites. J'ai besoin que du travail avance quand je ne suis pas devant l'écran.
Problème
Faire tourner des agents et des tâches sans surveillance, sans leur donner tous les droits, sans exposer ma machine et sans payer l'hébergement des sites.
Ce que j'ai fait
Un VPS qui travaille la nuit
- Les agents de nuit tournent comme un service systemd, sous un utilisateur dédié sans droits root.
- Un verrou garantit qu'un seul exécuteur tourne à la fois. Il reprend seul après une limite d'usage, et met le travail de côté s'il bloque.
- Les rares actions qui demandent root passent par un exécuteur à liste fermée : il ne lance que des commandes prévues à l'avance.
- L'exécuteur a ses propres tests.
Des tâches planifiées
- 25 tâches planifiées, dont 14 qui n'utilisent aucune IA : la garde de prod de GaijinToSensei toutes les 10 minutes, la publication du site MetaDBD toutes les 15 minutes, la surveillance d'un bot Discord toutes les 2 minutes, l'envoi des nouvelles pages aux moteurs de recherche (IndexNow) et des alertes.
Un hub perso sans port ouvert
- Le hub tourne sur mon PC. Il sort par un tunnel Cloudflare : aucun port entrant n'est ouvert.
- Devant, un proxy edge sur Vercel fait l'authentification : mot de passe haché (PBKDF2), comparaison à temps constant, cookie signé (HMAC), délai contre la force brute, en-têtes HSTS et anti-iframe, page hors index.
- L'adresse du tunnel est lue dans une configuration edge. Quand le tunnel change, il n'y a rien à redéployer. S'il est coupé, le proxy répond une erreur 503 propre.
Des sites publiés automatiquement
- 5 sites statiques sur Cloudflare Pages. metaaoe.app se publie à chaque push grâce à l'intégration Git. Les autres sont publiés depuis le VPS avec wrangler, par une tâche planifiée ou un script.
Résultat
- Du travail avance chaque nuit. Les sites se mettent à jour sans intervention.
- Aucun port de mon PC n'est exposé sur Internet. L'hébergement des sites ne coûte rien.
Ce que j'ai appris
- Donner à chaque programme le minimum de droits : un utilisateur dédié et une liste fermée valent mieux qu'un sudo général.
- Un verrou par tâche évite la plupart des bugs de tâches planifiées qui se chevauchent.
- Une tâche planifiée doit rester silencieuse quand tout va bien et n'envoyer qu'une alerte quand ça casse.