Symfony 8

ServerControl — gérer ses serveurs Linux distants via une interface Symfony

Dès qu’on maintient plusieurs serveurs à distance, le quotidien se transforme en une série de gestes répétés : ouvrir un terminal, se connecter en SSH, relancer un démon, relire des logs, et le lendemain ne plus trop savoir ce qu’on a touché la veille. ServerControl est mon projet n°4 de la formation DWWM, et il part de cet agacement précis : centraliser ces opérations dans une seule interface web, avec un historique exploitable. Dans l’esprit de Cockpit ou Pterodactyl, en plus modeste.

L’objectif n’a jamais été de remplacer le terminal — il restera toujours plus rapide — mais de rendre traçable ce qu’on faisait jusqu’ici en vrac. Concrètement, l’application gère un inventaire de serveurs avec leurs accès SSH, exécute des commandes à distance avec un retour formaté, suit les services système de chaque machine, et consigne chaque action dans un journal horodaté, filtrable et auditable. Le tout en multi-utilisateurs, avec rôles et réinitialisation de mot de passe.

La stack

C’est le projet sur lequel j’ai travaillé la stack la plus exigeante de ma formation : Symfony 8 sur PHP 8.4, PostgreSQL avec Doctrine ORM 3, un front en Twig + Asset Mapper + Stimulus. Pour le SSH, j’ai fait un choix de sécurité assumé : tout passe par phpseclib v3, aucune commande shell n’est exécutée en direct. Les identifiants SSH sont chiffrés en base, l’authentification s’appuie sur Symfony Security, et les longs journaux d’actions sont paginés avec KNP Paginator.

Comme c’est un projet d’examen, le code ne vient pas seul : il s’accompagne d’un dossier technique complet — diagrammes UML (classes et cas d’usage), modélisation MERISE (MCD, MLD, dictionnaire de données) et soutenance orale.

Au-delà de la certification, ServerControl est surtout le projet qui a fait converger les deux casquettes que je portais séparément jusque-là : le développement web et l’administration de serveurs Linux. La meilleure validation, c’est que je m’en sers réellement pour superviser ma propre infrastructure. Les prochaines étapes envisagées : des métriques temps réel (CPU, RAM, disques), le déclenchement de scripts planifiés, et des notifications mail ou Discord en cas d’échec.