PatchMon : Monitoring de Mises à Jour Linux

Tutoriel complet pour installer PatchMon, une solution Open Source moderne permettant de centraliser l'état des correctifs de sécurité de tout votre parc de serveurs (Debian, Ubuntu, RHEL) via une interface web.

Source : Basé sur le guide d'IT-Connect.

1. Préparation des Dossiers

Nous allons organiser les fichiers proprement sur le serveur Docker.

# Création du dossier principal
mkdir -p /opt/docker-compose/patchmon

# On se place dans le dossier
cd /opt/docker-compose/patchmon

# Création des sous-dossiers pour les volumes persistants
mkdir agent_files postgres_data redis_data

2. Génération des Mots de Passe

Pour sécuriser l'installation, nous devons générer 3 clés secrètes hexadécimales.

Génération : Lancez la commande openssl rand -hex 64 trois fois de suite dans votre terminal.

Notez les 3 résultats, vous en aurez besoin pour :

  1. Le mot de passe de la Base de données (Postgres).
  2. Le mot de passe du Cache (Redis).
  3. Le secret JWT (Sécurité API).

3. Fichier Docker Compose

Créez le fichier docker-compose.yml. Copiez le contenu ci-dessous et remplacez les mentions VOTRE_... par vos clés générées à l'étape précédente.

name: patchmon
services:
  # 1. BASE DE DONNEES POSTGRESQL
  database:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: patchmon_db
      POSTGRES_USER: patchmon_user
      # --- REMPLACER PAR LE MDP N°1 ---
      POSTGRES_PASSWORD: VOTRE_MOT_DE_PASSE_DB_ICI
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    networks:
      - patchmon-internal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U patchmon_user -d patchmon_db"]
      interval: 3s
      timeout: 5s
      retries: 7

  # 2. CACHE REDIS
  redis:
    image: redis:7-alpine
    restart: unless-stopped
    # --- REMPLACER PAR LE MDP N°2 ---
    command: redis-server --requirepass VOTRE_MOT_DE_PASSE_REDIS_ICI
    volumes:
      - ./redis_data:/data
    networks:
      - patchmon-internal
    healthcheck:
      test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "VOTRE_MOT_DE_PASSE_REDIS_ICI", "ping"]
      interval: 3s
      timeout: 5s
      retries: 7

  # 3. BACKEND (Serveur API)
  backend:
    image: ghcr.io/patchmon/patchmon-backend:latest
    restart: unless-stopped
    environment:
      LOG_LEVEL: info
      # --- REMPLACER PAR LE MDP N°1 ---
      DATABASE_URL: postgresql://patchmon_user:VOTRE_MOT_DE_PASSE_DB_ICI@database:5432/patchmon_db
      # --- REMPLACER PAR LE MDP N°3 ---
      JWT_SECRET: VOTRE_JWT_SECRET_ICI
      
      # Configuration Réseau (IMPORTANT)
      SERVER_PROTOCOL: http
      SERVER_HOST: 192.168.1.200  # <--- METTRE L'IP DE VOTRE SERVEUR
      SERVER_PORT: 3000
      CORS_ORIGIN: http://192.168.1.200:3000 # <--- URL D'ACCES DANS LE NAVIGATEUR
      
      # Configuration Redis
      REDIS_HOST: redis
      REDIS_PORT: 6379
      # --- REMPLACER PAR LE MDP N°2 ---
      REDIS_PASSWORD: VOTRE_MOT_DE_PASSE_REDIS_ICI
      REDIS_DB: 0
    volumes:
      - ./agent_files:/app/agents
    networks:
      - patchmon-internal
    depends_on:
      database:
        condition: service_healthy
      redis:
        condition: service_healthy

  # 4. FRONTEND (Interface Web)
  frontend:
    image: ghcr.io/patchmon/patchmon-frontend:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    networks:
      - patchmon-internal
    depends_on:
      backend:
        condition: service_healthy

networks:
  patchmon-internal:
    driver: bridge

4. Lancement et Permissions

Nous allons démarrer les conteneurs. Une correction de permission est souvent nécessaire pour le dossier des agents.

# 1. Démarrer les conteneurs
docker compose up -d

# 2. Corriger les permissions (Si le backend redémarre en boucle)
sudo chown -R 1000:1000 ./agent_files

# 3. Redémarrer le backend pour appliquer
docker compose restart backend

5. Configuration Web et Ajout d'Hôte

Accédez à l'interface via http://VOTRE_IP:3000 et créez le compte administrateur.

Ajouter un serveur à surveiller

  1. Allez dans le menu Hosts.
  2. Cliquez sur Add Host.
  3. Donnez un nom (ex: SRV-PROD-01).
  4. L'interface vous donne une commande curl unique contenant votre clé API.

Connectez-vous sur le serveur Linux client (celui que vous voulez surveiller) et collez la commande fournie par l'interface :

Attention : Ne copiez pas l'exemple ci-dessous, utilisez celui généré par votre interface web qui contient votre clé API unique.
# Exemple de structure (Utilisez votre propre commande !)
curl -s http://192.168.1.200:3000/api/v1/hosts/install -H "X-API-ID: patchmon_xxx" | sh

6. Vérification et Commandes Agent

Une fois l'agent installé sur le client, vérifiez qu'il communique bien avec le serveur central.

# Tester la connexion au serveur
patchmon-agent ping

# Forcer l'envoi du rapport de mises à jour
patchmon-agent report

# Voir les logs et le statut détaillé
patchmon-agent diagnostics