Aller au contenu

Architecture de référence

Vue d'ensemble

L'architecture de référence combine SonarQube comme service centralise de quality gate et Semgrep CLI comme outil SAST integre au pipeline CI. SonarQube est un service persistant avec son propre stockage, tandis que Semgrep est stateless et s'execute dans le pipeline.

graph TD
    subgraph Dev["Developpeurs"]
        IDE["IDE<br/>SonarLint"]
        Nav["Navigateur<br/>Dashboard"]
    end
    subgraph Host["Hote SonarQube"]
        Proxy["Reverse Proxy<br/>(Traefik)"]
        subgraph SQ["SonarQube Server"]
            Web["Web Server"]
            CE["Compute Engine"]
            ES["Elasticsearch<br/>(Search Engine)"]
        end
        PG["PostgreSQL<br/>(persistance)"]
    end
    subgraph CI["Pipeline CI (Runner)"]
        Semgrep["Semgrep CLI<br/>(SAST)"]
        Scanner["SonarQube<br/>Scanner CLI<br/>(analyse)"]
    end
    IDE --> Proxy
    Nav -->|HTTPS 443| Proxy
    Proxy --> SQ
    SQ --> PG
    Scanner --> Proxy

Composants SonarQube

Web Server

Le composant Web Server gère l'interface utilisateur, l'API REST et la communication avec le Compute Engine.

Parametre Valeur recommandee
Port 9000 (interne, derriere le reverse proxy)
Threads 50 (defaut, ajuster selon la charge)
Session Timeout 30 minutes d'inactivite
API /api/* — documentation intégrée a /web_api

Compute Engine (CE)

Le Compute Engine traite les rapports d'analyse soumis par les scanners. C'est le composant le plus consommateur de ressources.

Parametre Valeur recommandee
Workers 1 (Community), jusqu'a 10 (Enterprise)
Queue File d'attente FIFO, un rapport à la fois
Timeout 10 minutes par defaut (configurable)
Mémoire 512 Mo - 2 Go selon la taille des projets

Worker unique en Community

L'edition Community ne supporte qu'un seul worker Compute Engine. Les analyses sont traitees sequentiellement. Pour du parallelisme, l'edition Enterprise est nécessaire.

Elasticsearch (Search Engine)

SonarQube embarque une instance Elasticsearch pour l'indexation des résultats et la recherche.

Parametre Valeur recommandee
Heap size 50% de la RAM disponible (max 2 Go)
Stockage SSD obligatoire, 50-200 Go selon le volume
Indices Issues, components, measures, projects
Maintenance Reindexation automatique au demarrage

Elasticsearch est le point sensible

La majorite des problèmes de performance SonarQube proviennent d'Elasticsearch. Le stockage SSD et le dimensionnement correct du heap sont critiques. Voir la section troubleshooting dans les bonnes pratiques.

PostgreSQL

Backend de persistance pour les projets, regles, quality profiles, mesures historiques et configuration.

Parametre Valeur recommandee
Version PostgreSQL 15+
Connexions max 50 (pool SonarQube) + 10 (admin/monitoring)
Extensions pg_stat_statements (monitoring)
Chiffrement TLS pour les connexions, chiffrement at-rest
Backup pg_dump quotidien + WAL archiving continu
Taille estimée 1-5 Go pour 100 projets, 10-50 Go pour 1 000

Architecture Semgrep

Semgrep CLI (recommande)

Semgrep CLI est un outil stateless qui s'execute dans le pipeline CI sans serveur persistant.

graph LR
    subgraph CI["Pipeline CI (Runner)"]
        Code["Code source"] --> Semgrep["Semgrep CLI"]
        Rules["Rulesets (YAML)"] --> Semgrep
        Semgrep --> Results["Resultats<br/>(SARIF/JSON)"]
    end
Propriété Detail
Mode CLI stateless (pas de serveur)
Entree Code source + rulesets YAML
Sortie SARIF, JSON, texte, GitLab SAST format
Stockage Aucun (résultats dans la CI)
Ressources ~500 Mo RAM, execution en 10-60s typiquement

Semgrep App (optionnel)

Semgrep App est un dashboard SaaS pour centraliser les résultats des scans Semgrep. Non recommande pour les organisations avec des contraintes de confidentialite (les résultats transitent par le SaaS).

Aspect Detail
Hebergement SaaS (semgrep.dev)
Fonctionnalités Dashboard, tendances, triage, notifications
Coût Gratuit (limites), Team, Enterprise
Données Les résultats de scan sont envoyes au SaaS

Données sensibles et SaaS

Les résultats Semgrep contiennent des extraits de code source et des vulnerabilites. L'envoi vers un SaaS doit etre valide par le RSSI. En mode self-hosted, utiliser Semgrep CLI uniquement et agreger les résultats dans SonarQube.


Déploiement combine

Flux d'analyse dans le pipeline CI

graph TD
    subgraph CI["Pipeline CI"]
        A["1. Checkout code"] --> B["2. Semgrep<br/>SAST scan (~30s)"]
        A --> C["3. Build + Tests<br/>(coverage)"]
        B --> D["4. SonarQube Scanner<br/>- Code source<br/>- Rapport couverture (lcov/jacoco)<br/>- Rapport Semgrep (SARIF import)"]
        C --> D
        D --> E["5. Quality gate check<br/>- Attend le resultat du CE<br/>- Pass / Fail → statut PR"]
    end

Points d'integration

Étape Outil Fonction
2 Semgrep CLI SAST rapide, résultats SARIF
3 Tests unitaires Génération du rapport de couverture
4 SonarQube Scanner Envoi du code + rapports au serveur SonarQube
5 Quality gate Vérification pass/fail via l'API SonarQube

Dimensionnement

SonarQube

Profil Projets Lignes de code CPU RAM Stockage SSD PostgreSQL
Petit < 50 < 500 KLOC 2 vCPU 4 Go 50 Go 1 vCPU, 2 Go
Moyen 50-200 500K - 5M LOC 4 vCPU 8 Go 100 Go 2 vCPU, 4 Go
Grand 200+ 5M+ LOC 8 vCPU 16 Go 200 Go 4 vCPU, 8 Go

Regles de dimensionnement

  • Heap JVM SonarQube (Web + CE) : -Xmx = 50% de la RAM du conteneur
  • Heap Elasticsearch : -Xmx = 25-50% de la RAM restante, maximum 2 Go
  • SSD obligatoire pour Elasticsearch — un HDD degrade les performances de 10x
  • Un scan consomme environ 1 Go de RAM par million de lignes analysees
  • PostgreSQL : prevoir 100 Mo par projet pour les mesures historiques (1 an)

Semgrep

Aspect Valeur typique
RAM 500 Mo - 2 Go selon la taille du repo
CPU 1-2 vCPU (parallisme interne)
Duree 10-60s pour un repo < 500 KLOC
Stockage Aucun (stateless)

Sécurité réseau

Flux réseau

Source Destination Port Protocole Justification
Développeurs Reverse proxy 443/TCP HTTPS Dashboard SonarQube
SonarLint (IDE) SonarQube 443/TCP HTTPS Synchronisation des profils
CI Runner SonarQube 443/TCP HTTPS Soumission des rapports
SonarQube PostgreSQL 5432/TCP PostgreSQL + TLS Persistance
SonarQube Keycloak 443/TCP OIDC Authentification SSO
SonarQube Gitea 443/TCP HTTPS PR decoration (edition Dev+)

Semgrep n'a pas de flux réseau persistant

Semgrep CLI s'execute localement sur le runner CI. Il telecharge les rulesets au demarrage (cache possible), puis analyse le code localement. Aucun flux réseau vers un serveur Semgrep en mode self-hosted.