Aller au contenu principal

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 :

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

ComposantMinimumRecommandé
RAM4 Go8 Go
CPU2 cœurs4 cœurs
Stockage10 Go20 Go
Réseau100 Mbps1 Gbps
Port par défaut

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
Version

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ètreDescription
sonar.jdbc.*Connexion à PostgreSQL
sonar.web.hostÉcoute sur toutes les interfaces (0.0.0.0)
sonar.web.portPort de l’interface web (9000)
sonar.web.javaOptsOptions JVM pour le serveur web
sonar.search.javaOptsOptions JVM pour Elasticsearch (moteur de recherche)
sonar.path.data / sonar.path.tempRé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

  1. Ouvrez un navigateur et allez à : https://sonarqube.votredomaine.com
  2. Connectez-vous avec les identifiants par défaut : admin / admin
  3. SonarQube vous demandera de changer le mot de passe de l’administrateur ; choisissez un mot de passe fort.
  4. Pour les analyses (CI/CD ou ligne de commande), créez un utilisateur ou un token : AdministrationSé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

CommandeDescription
sudo systemctl status sonarqubeStatut du service SonarQube
sudo systemctl restart sonarqubeRedémarrer SonarQube
sudo systemctl restart httpdRedémarrer Apache
sonar-scanner -vVersion de SonarScanner
sonar-scanner -D sonar.token=TOKENLancer une analyse avec token

Structure des répertoires

CheminDescription
/opt/sonarqube/Installation SonarQube (bin, conf, data, temp, extensions)
/opt/sonarqube/conf/sonar.propertiesConfiguration principale
/opt/sonarscanner/Installation SonarScanner CLI
/etc/httpd/conf.d/sonarqube.confVirtual 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.log et tail -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.properties sont trop faibles pour votre RAM, augmentez sonar.web.javaOpts et sonar.search.javaOpts (ex. -Xmx1g pour le web, -Xmx2g pour search selon la RAM disponible).

Références