Jérôme Poussin

Je pilote des livraisons IT, et j'opère ma propre infrastructure.

Service Delivery Manager. En parallèle, j'administre un serveur qui héberge neuf services en production, de la sécurité de l'hôte aux sauvegardes.

Voir l'infrastructure Me contacter

Une évolution continue, du projet télécom au pilotage de services IT

  1. Chef de projet télécom
  2. IT Operations Coordinator
  3. Incident & Environment Manager
  4. Service Delivery Manager Aujourd'hui

Infrastructure

Ce que j'ai construit

Un serveur personnel que j'administre seul, monté couche par couche et utilisé au quotidien.

  • Un socle sécurisé

    Serveur Linux durci, accès chiffrés, mises à jour et sauvegardes automatisées.

  • Neuf services

    Gestion de mots de passe, dépôt de code, veille, recettes : des usages réels.

  • De l'automatisation

    Workflows n8n, MCP, agents IA.

Architecture et services schéma, 3 couches, 9 services
Schéma du flux entrant sur le VPS Une requête HTTPS arrive depuis Internet, traverse le pare-feu UFW et fail2ban, est routée par Traefik sur le réseau Docker partagé vers neuf services conteneurisés, qui s'appuient sur PostgreSQL et Ollama. Requête HTTPS UFW · fail2ban · mises à jour de sécurité automatiques Traefik v3.6.1 certificats émis et renouvelés seuls réseau docker traefik-net n8n Mealie Gitea Vaultwarden Miniflux Portail PostgreSQL multi-bases Ollama LLM en local, RAM plafonnée
Le chemin d'une requête, du DNS au conteneur. Sélectionnez un service pour voir sa ligne dans la liste.

Trois couches, montées dans cet ordre

  1. L'hôte

    Debian 13 sur VPS OVH : compte non privilégié, accès par clé, pare-feu UFW en liste blanche, fail2ban sur SSH, mises à jour de sécurité automatiques. Swap de 2 Gio persistant avec une swappiness basse, parce qu'un LLM local et une base de données se disputent vite la RAM.

  2. Le routage

    Traefik lit les labels Docker et publie chaque service sur son sous-domaine, avec un certificat Let's Encrypt obtenu et renouvelé sans intervention. Un seul réseau Docker partagé sert de bus : aucun port applicatif n'est exposé sur l'hôte, seuls 80 et 443 le sont.

  3. Les données et les modèles

    Une instance PostgreSQL mutualisée, une base par application. Ollama fait tourner des modèles en local sous une limite mémoire explicite. Sauvegardes par pg_dump et archives des volumes, planifiées et rapatriées hors du serveur.

Les neuf services

  • Traefik
    Point d'entrée unique : routage, HTTPS, redirections.
    Version épinglée, réseau déclaré explicitement sur chaque conteneur.
  • n8n
    Automatisations : digest de veille quotidien, tâches planifiées, outillage des agents.
    Fuseau horaire imposé par variables d'environnement, sinon les crons partent en UTC.
  • Ollama
    Modèles de langage exécutés sur le serveur, sans appel à un service tiers.
    Plafond mémoire assumé : le choix du modèle dépend de ce qui reste pour le reste.
  • PostgreSQL
    Stockage des applications, une base et un rôle par service.
    Migration des objets vers des rôles dédiés en cours, tracée comme dette.
  • Gitea
    Forge privée : la description de l'infrastructure et le code applicatif y vivent.
    Dépôts séparés pour l'infra et les applications, secrets exclus du suivi.
  • Vaultwarden
    Coffre de mots de passe de la famille, synchronisé sur les clients Bitwarden.
    Conteneur ramené à un utilisateur non privilégié, vérifié côté processus hôte.
  • Mealie
    Recettes et menus de la semaine, alimentés aussi par les agents.
    API exposée aux workflows n8n pour créer une recette depuis une URL ou du texte.
  • Miniflux
    Agrégateur de flux : la source de la veille résumée chaque matin.
    Déduplication des articles déjà traités pour ne pas les résumer deux fois.
  • Portail personnel
    Tableau de bord privé : météo, dernières recettes, raccourcis.
    Réécrit depuis zéro en Node sans framework, après une première version générée.

En production Travaux en cours

Trois incidents, de la panne au correctif symptôme, cause, correctif
  • Erreurs 504 aléatoires sur un service pourtant démarré

    Symptôme
    Erreur 504 aléatoire sur un conteneur sain.
    Cause
    Le conteneur appartient à deux réseaux Docker ; le proxy choisissait le mauvais.
    Correctif
    Réseau de publication déclaré explicitement par label, sur chaque service.
  • Aucune route découverte au démarrage du proxy

    Symptôme
    Aucune route découverte au démarrage, le proxy tourne à vide.
    Cause
    Version du proxy trop ancienne pour la version d'API du moteur Docker installé.
    Correctif
    Version épinglée et vérifiée sur les notes de publication, plus jamais de tag flottant.
  • Un modèle de langage arrêté dès la première requête

    Symptôme
    Conteneur tué par la limite mémoire dès la première requête.
    Cause
    Le nom du modèle annonce les paramètres actifs, pas ce qui est chargé en mémoire.
    Correctif
    Sélection des modèles sur la mémoire réellement consommée, mesurée avant mise en service.

Méthode

Comment je travaille

  • Auditer avant de durcir

    Relevé de l'état réel avec des outils d'audit reconnus, puis correction ciblée.

  • Sauvegarder avant de toucher

    Dump de la base et copie des volumes avant toute opération sur des données vivantes.

  • Documenter en continu

    Une fiche technique sectionnée suit les décisions d'architecture.

  • Nommer la dette

    Ce qui est reporté est listé, daté et justifié.

Feuille de route 4 chantiers priorisés
  1. Prochain

    Authentification unique

    Un fournisseur d'identité en frontal du proxy, pour cesser de gérer un mot de passe par service. En attente de validation de la marge mémoire.

  2. Engagé

    Secrets chiffrés dans le dépôt

    Chiffrement des fichiers de configuration sensibles, pour versionner la stack complète sans versionner les secrets en clair.

  3. Engagé

    Durcissement du proxy

    Accès indirect au démon Docker, en-têtes de sécurité, limitation de débit, politique TLS explicite.

  4. Engagé

    Sauvegardes complètes

    Étendre la couverture aux derniers services, avec restauration testée et non supposée.

Contact

Me joindre

Une question sur un point d'architecture, ou une opportunité à discuter : écrivez-moi.