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.