Installer SonarQube sur Rocky Linux
Ce guide vous explique comment installer et configurer SonarQube sur un serveur Rocky Linux 9. SonarQube est une plateforme open source d’analyse statique du code : elle détecte les bugs, les « code smells » et les vulnérabilités de sécurité, prend en charge de nombreux langages et permet d’automatiser les revues de code pour maintenir un bon niveau de qualité. SonarQube est basé sur Java et peut être déployé sur différentes distributions Linux (dont Rocky Linux) ou en conteneur (Docker, Kubernetes).
Le déploiement décrit ici utilise OpenJDK 17, PostgreSQL comme base de données, Apache en reverse proxy et Let's Encrypt pour le HTTPS.
Commander un serveur
Pour héberger votre instance SonarQube, HostMyServers propose plusieurs offres adaptées :
- VPS Performance - Idéal pour de petits projets
- VPS NVMe - Excellent rapport qualité/prix
- Serveurs dédiés Eco - Pour de nombreux projets ou analyses lourdes
- Serveurs dédiés Performance - Performance maximale
Prérequis
- Accès SSH root ou utilisateur avec sudo
- Système Rocky Linux 9 64 bits
- Au moins 4 Go de RAM (SonarQube et Elasticsearch sont gourmands en mémoire)
- Un nom de domaine (ex.
sonarqube.votredomaine.com) avec un enregistrement A pointant vers l’IP du serveur - Ports 80 (HTTP) et 443 (HTTPS) accessibles
Configuration requise
| Composant | Minimum | Recommandé |
|---|---|---|
| RAM | 4 Go | 8 Go |
| CPU | 2 cœurs | 4 cœurs |
| Stockage | 10 Go | 20 Go |
| Réseau | 100 Mbps | 1 Gbps |
SonarQube écoute sur le port 9000 en local. Apache fait le reverse proxy vers ce port ; l’accès public se fait en HTTP/HTTPS sur 80/443.
Connexion au serveur
Connectez-vous en SSH à votre serveur Rocky Linux :
ssh utilisateur@adresse_ip_serveur
Mise à jour du système
Mettez à jour les paquets avant de commencer :
sudo dnf update -y
Installation d’OpenJDK 17
SonarQube nécessite une JRE/JDK. La version LTA (long-term active) 2025 de SonarQube requiert Java 17 ou 21. Nous utilisons OpenJDK 17.
sudo dnf install -y java-17-openjdk java-17-openjdk-devel
Vérifiez la version installée :
java -version
Vous devriez voir une ligne du type : openjdk version "17.x.x". Si une version plus ancienne est active, sélectionnez Java 17 avec : sudo alternatives --config java.
Création de l’utilisateur SonarQube
SonarQube utilise Elasticsearch pour la recherche et l’indexation ; il doit être exécuté par un utilisateur non root. Créez un utilisateur système dédié :
sudo useradd --system sonarqube
Base de données PostgreSQL pour SonarQube
SonarQube supporte plusieurs moteurs de base de données. Nous utilisons PostgreSQL.
Installer et initialiser PostgreSQL
sudo dnf install -y postgresql-server postgresql-contrib
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql
Créer la base et l’utilisateur
Connectez-vous à PostgreSQL avec l’utilisateur postgres :
sudo -i -u postgres psql
Dans la console PostgreSQL, exécutez (remplacez VOTRE_MOT_DE_PASSE par un mot de passe fort) :
\password postgres
CREATE DATABASE sonardb;
CREATE USER sonaruser WITH ENCRYPTED PASSWORD 'VOTRE_MOT_DE_PASSE';
GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonaruser;
\q
Activer l’authentification par mot de passe (pg_hba.conf)
Éditez le fichier de configuration d’authentification :
sudo nano /var/lib/pgsql/data/pg_hba.conf
Pour les connexions locales et TCP, utilisez trust pour « local » et md5 pour « host » (ex. 127.0.0.1/32 et ::1/128). Exemple :
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Redémarrez PostgreSQL :
sudo systemctl restart postgresql
Installation de SonarQube
SonarQube n’est pas fourni dans les dépôts DNF par défaut. Téléchargez l’archive depuis le site officiel.
Télécharger et extraire SonarQube
Consultez la page des téléchargements SonarQube pour la dernière version LTA. Exemple avec la version 25.x (adaptez l’URL et le nom du fichier si besoin) :
sudo dnf install -y unzip
sudo mkdir -p /opt/sonarqube
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip
unzip sonarqube-25.1.0.102122.zip
sudo mv sonarqube-25.1.0.102122/* /opt/sonarqube
Remplacez sonarqube-25.1.0.102122 par le nom exact du dossier extrait correspondant à la version que vous avez téléchargée.
Installer SonarScanner CLI (optionnel mais utile)
SonarScanner permet d’analyser des projets depuis la ligne de commande. Téléchargez la dernière version depuis SonarScanner CLI.
sudo mkdir -p /opt/sonarscanner
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.0.2.4839-linux-x64.zip
unzip sonar-scanner-cli-7.0.2.4839-linux-x64.zip
sudo mv sonar-scanner-7.0.2.4839-linux-x64/* /opt/sonarscanner
Configurez l’URL du serveur SonarQube (pour les analyses en local) :
sudo nano /opt/sonarscanner/conf/sonar-scanner.properties
Ajoutez ou modifiez : sonar.host.url=http://127.0.0.1
Rendez l’exécutable accessible partout :
sudo chmod +x /opt/sonarscanner/bin/sonar-scanner
sudo ln -sf /opt/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
Vérifiez : sonar-scanner -v
Configuration de SonarQube
Fichier sonar.properties
Éditez la configuration principale de SonarQube :
sudo nano /opt/sonarqube/conf/sonar.properties
À la fin du fichier, ajoutez (remplacez VOTRE_MOT_DE_PASSE par le mot de passe de l’utilisateur PostgreSQL sonaruser) :
sonar.jdbc.username=sonaruser
sonar.jdbc.password=VOTRE_MOT_DE_PASSE
sonar.jdbc.url=jdbc:postgresql://localhost/sonardb
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaOpts=-Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError
sonar.search.javaOpts=-Xmx1g -Xms1g -XX:MaxDirectMemorySize=512m -XX:+HeapDumpOnOutOfMemoryError
sonar.path.data=data
sonar.path.temp=temp
| Paramètre | Description |
|---|---|
sonar.jdbc.* | Connexion à PostgreSQL |
sonar.web.host | Écoute sur toutes les interfaces (0.0.0.0) |
sonar.web.port | Port de l’interface web (9000) |
sonar.web.javaOpts | Options JVM pour le serveur web |
sonar.search.javaOpts | Options JVM pour Elasticsearch (moteur de recherche) |
sonar.path.data / sonar.path.temp | Répertoires de données et temporaires |
Permissions et limites système
Donnez la propriété du répertoire SonarQube à l’utilisateur sonarqube :
sudo chown -R sonarqube:sonarqube /opt/sonarqube
sudo chmod -R 775 /opt/sonarqube
SonarQube (Elasticsearch) nécessite une limite plus élevée pour le nombre de zones mémoire mappées. Ajoutez dans /etc/sysctl.conf :
sudo nano /etc/sysctl.conf
Ajoutez à la fin :
vm.max_map_count=524288
fs.file-max=131072
Puis appliquez : sudo sysctl -p
Service systemd pour SonarQube
SonarQube fournit un script de démarrage dans /opt/sonarqube/bin/linux-x86-64/sonar.sh. Créez un service systemd pour l’utiliser.
Contexte SELinux (Rocky Linux 9)
Sur Rocky Linux, SELinux est actif. Autorisez l’exécution du script :
sudo chcon -t bin_t /opt/sonarqube/bin/linux-x86-64/sonar.sh
sudo restorecon -Rv /opt/sonarqube
Fichier de service
sudo nano /etc/systemd/system/sonarqube.service
Contenu :
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
Restart=always
RestartSec=10
LimitNOFILE=131072
LimitNPROC=8192
SuccessExitStatus=143
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
Activez et démarrez le service :
sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube
sudo systemctl status sonarqube
Le statut doit indiquer active (running). Le premier démarrage peut prendre plusieurs minutes (initialisation d’Elasticsearch et de la base).
Reverse proxy Apache et HTTPS
L’interface web SonarQube est disponible sur le port 9000 en local. Pour l’exposer en HTTP/HTTPS, nous utilisons Apache en reverse proxy.
Installer Apache
sudo dnf install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd
Vérifiez que les modules proxy sont chargés : sudo httpd -M | grep proxy (proxy_module, proxy_http_module, proxy_balancer_module). Si besoin, décommentez les lignes correspondantes dans /etc/httpd/conf/httpd.conf.
Virtual host pour SonarQube
Créez un fichier de configuration pour votre domaine (remplacez sonarqube.votredomaine.com par votre domaine) :
sudo nano /etc/httpd/conf.d/sonarqube.conf
Contenu :
<VirtualHost *:80>
ServerName sonarqube.votredomaine.com
ServerAdmin admin@votredomaine.com
ProxyPreserveHost On
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
TransferLog /var/log/httpd/sonarqube_access.log
ErrorLog /var/log/httpd/sonarqube_error.log
</VirtualHost>
Testez la configuration et redémarrez Apache :
sudo apachectl configtest
sudo systemctl restart httpd
Autoriser Apache à se connecter au backend (SELinux)
Pour que Apache puisse proxyfer vers localhost:9000 :
sudo setsebool -P httpd_can_network_connect 1
Pare-feu
Ouvrez les ports HTTP et HTTPS :
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Certificat TLS avec Certbot (Let's Encrypt)
Pour sécuriser l’accès en HTTPS :
sudo dnf install -y certbot python3-certbot-apache
sudo certbot --apache -d sonarqube.votredomaine.com -m votre-email@exemple.com --agree-tos
Certbot configure Apache pour le HTTPS et le renouvellement automatique des certificats.
Accès à SonarQube
- Ouvrez un navigateur et allez à :
https://sonarqube.votredomaine.com - Connectez-vous avec les identifiants par défaut : admin / admin
- SonarQube vous demandera de changer le mot de passe de l’administrateur ; choisissez un mot de passe fort.
- Pour les analyses (CI/CD ou ligne de commande), créez un utilisateur ou un token : Administration → Sécurité → Utilisateurs → Créer un utilisateur, puis générer un token pour ce compte.
Analyser un projet avec SonarScanner
Pour tester l’installation, vous pouvez analyser un projet exemple :
cd ~
mkdir -p projects && cd projects
git clone https://github.com/SonarSource/sonar-scanning-examples
cd sonar-scanning-examples/sonar-scanner
Générez un token dans l’interface SonarQube (Administration → Sécurité → Utilisateurs → Tokens), puis lancez l’analyse (remplacez VOTRE_TOKEN par le token généré) :
sonar-scanner -D sonar.token=VOTRE_TOKEN
Une fois l’analyse terminée, consultez le projet dans l’interface : Projets → le projet analysé apparaît avec les métriques (bugs, vulnérabilités, couverture, duplications).
Commandes utiles
| Commande | Description |
|---|---|
sudo systemctl status sonarqube | Statut du service SonarQube |
sudo systemctl restart sonarqube | Redémarrer SonarQube |
sudo systemctl restart httpd | Redémarrer Apache |
sonar-scanner -v | Version de SonarScanner |
sonar-scanner -D sonar.token=TOKEN | Lancer une analyse avec token |
Structure des répertoires
| Chemin | Description |
|---|---|
/opt/sonarqube/ | Installation SonarQube (bin, conf, data, temp, extensions) |
/opt/sonarqube/conf/sonar.properties | Configuration principale |
/opt/sonarscanner/ | Installation SonarScanner CLI |
/etc/httpd/conf.d/sonarqube.conf | Virtual host Apache |
En cas de problème
Le service SonarQube ne démarre pas
- Vérifiez les logs :
sudo journalctl -u sonarqube.service -n 100 - Consultez les logs SonarQube :
tail -f /opt/sonarqube/logs/sonar.logettail -f /opt/sonarqube/logs/web.log - Vérifiez que PostgreSQL est démarré :
sudo systemctl status postgresql - Vérifiez les paramètres noyau :
sysctl vm.max_map_count(doit être au moins 524288)
Erreur 503 ou page inaccessible via Apache
- Vérifiez que SonarQube écoute sur 9000 :
ss -tlnp | grep 9000 - Vérifiez SELinux :
getsebool httpd_can_network_connect(doit être « on ») - Consultez les logs Apache :
sudo tail -f /var/log/httpd/sonarqube_error.log
Java ou mémoire
- Si les options JVM dans
sonar.propertiessont trop faibles pour votre RAM, augmentezsonar.web.javaOptsetsonar.search.javaOpts(ex.-Xmx1gpour le web,-Xmx2gpour search selon la RAM disponible).