SonarQube auf Rocky Linux 9 installieren

SonarQube ist ein selbstgehostetes, quelloffenes Tool zur statischen Codeanalyse, das dabei hilft, Programmfehler, Sicherheitslücken und Code-Smells in Anwendungen zu erkennen. Es unterstützt zahlreiche Programmiersprachen und führt automatisierte Codeüberprüfungen durch, um hohe Qualitätsstandards im Entwicklungsprozess zu gewährleisten. Da SonarQube auf Java basiert, kann es auf verschiedenen Betriebssystemen sowie in Containern wie Docker oder Kubernetes betrieben werden.

Diese Anleitung zeigt Schritt für Schritt, wie du SonarQube auf Rocky Linux 9 installierst und konfigurierst. Du lernst, alle benötigten Abhängigkeiten zu installieren und SonarQube für die Codeanalyse in deinen Projekten einzurichten.

Voraussetzungen

Bevor du beginnst, stelle sicher, dass die folgenden Anforderungen erfüllt sind:

  • Ein Rocky Linux 9 System mit mindestens 4 GB RAM.
  • Ein Domain-A-Record, der auf die IP-Adresse deines Servers zeigt, z. B. sonarqube.example.com.

OpenJDK 17 installieren

SonarQube benötigt sowohl die Java Runtime Environment (JRE) als auch das Java Development Kit (JDK). Die aktuelle LTA-Version (Long-Term Active) von SonarQube für 2025 erfordert Java 17 oder 21. Führe die folgenden Schritte aus, um OpenJDK 17 auf Rocky Linux 9 zu installieren.

Schritt 1: Paketindex aktualisieren

Schritt 2: OpenJDK 17 installieren

$ sudo dnf install java-17-openjdk java-17-openjdk-devel -y

Schritt 3: Java-Version prüfen

Erwartete Ausgabe:

openjdk version "17.0.14" 2025-01-21 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.14.0.7-1) (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.14.0.7-1) (build 17.0.14+7-LTS, mixed mode, sharing)

Falls eine niedrigere Java-Version installiert ist, kannst du mit folgendem Befehl auf die richtige Version wechseln:

$ sudo alternatives --config java

Einen dedizierten SonarQube-Benutzer anlegen

SonarQube verwendet Elasticsearch für Indexierung und Suche. Dafür wird ein nicht-root Benutzer benötigt. Erstelle den Benutzer wie folgt:

$ sudo useradd --system sonarqube

Damit wird der Systembenutzer sonarqube erstellt, unter dem die Anwendung sicher ausgeführt wird.

PostgreSQL-Datenbank für SonarQube erstellen

SonarQube unterstützt verschiedene Datenbanksysteme – empfohlen wird PostgreSQL, da es Stabilität und erweiterte SQL-Funktionen bietet. So installierst du PostgreSQL und richtest eine Datenbank für SonarQube ein:

Schritt 1: PostgreSQL-Pakete installieren

$ sudo dnf install postgresql-server postgresql-contrib -y

Schritt 2: PostgreSQL initialisieren

$ sudo postgresql-setup --initdb

Schritt 3: PostgreSQL aktivieren und starten

$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql

Schritt 4: Benutzer und Datenbank konfigurieren

Melde dich an der PostgreSQL-Konsole an und erstelle die Datenbankkonfiguration für SonarQube:

$ sudo -i -u postgres psql

Führe dann diese Befehle in PostgreSQL aus:

postgres=# \password postgres
postgres=# CREATE DATABASE sonardb;
postgres=# CREATE USER sonaruser WITH ENCRYPTED PASSWORD '';
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonaruser;
postgres=# \q

Schritt 5: Authentifizierungsmethode in PostgreSQL anpassen

Öffne die Datei pg_hba.conf, um Passwortauthentifizierung zu aktivieren:

$ sudo nano /var/lib/pgsql/data/pg_hba.conf

Ändere die Einträge wie folgt:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

Speichere die Änderungen und starte PostgreSQL neu:

$ sudo systemctl restart postgresql

SonarQube installieren

Da SonarQube nicht im Standard-DNF-Repository enthalten ist, kannst du es manuell herunterladen und installieren. Folge diesen Schritten:

Schritt 1: Unzip installieren

$ sudo dnf install unzip -y

Schritt 2: Verzeichnis für SonarQube erstellen

$ sudo mkdir -p /opt/sonarqube

Schritt 3: SonarQube herunterladen und entpacken

$ 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

SonarScanner CLI installieren

Der SonarScanner CLI wird benötigt, um Code-Analysen durchzuführen und Ergebnisse an den SonarQube-Server zu senden. Installiere ihn mit folgenden Schritten:

Schritt 1: Verzeichnis für SonarScanner erstellen

$ sudo mkdir -p /opt/sonarscanner

Schritt 2: SonarScanner herunterladen und entpacken

$ 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

Schritt 3: SonarScanner konfigurieren

Öffne die Konfigurationsdatei und trage die Host-URL ein:

$ sudo nano /opt/sonarscanner/conf/sonar-scanner.properties

Füge folgende Zeile hinzu:

sonar.host.url=http://127.0.0.1

Schritt 4: SonarScanner ausführbar machen

$ sudo chmod +x /opt/sonarscanner/bin/sonar-scanner
$ sudo ln -s /opt/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner

Schritt 5: Installation prüfen

Erwartete Ausgabe:

INFO  SonarScanner CLI 7.0.2.4839
INFO  Java 17.0.13 Eclipse Adoptium (64-bit)
INFO  Linux 5.14.0-503.29.1.el9_5.x86_64 amd64

SonarQube konfigurieren

Führe die folgenden Schritte aus, um SonarQube korrekt auf deinem Rocky Linux 9 Server einzurichten.

Schritt 1: Konfigurationsdatei anpassen

Öffne die Datei /opt/sonarqube/conf/sonar.properties, um die Einstellungen zu ändern:

$ sudo nano /opt/sonarqube/conf/sonar.properties

Füge am Ende der Datei folgende Parameter hinzu (ersetze sonaruser, sonardb und <YOUR_PASSWORD> durch deine PostgreSQL-Daten):

sonar.jdbc.username=sonaruser
sonar.jdbc.password=<YOUR_PASSWORD>
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

Diese Parameter legen die PostgreSQL-Verbindung, die Standardadresse (0.0.0.0), Java-Optionen und Speicherpfade fest.

Schritt 2: Verzeichnisrechte anpassen

Übertrage die Besitzrechte des SonarQube-Verzeichnisses an den Benutzer sonarqube:

$ sudo chown --recursive sonarqube:sonarqube /opt/sonarqube

Anschließend setze die Zugriffsrechte auf 775, um dem Eigentümer vollen Zugriff zu geben:

$ sudo chmod --recursive 775 /opt/sonarqube

Schritt 3: Kernel-Speicherparameter anpassen

SonarQube benötigt bestimmte Systemparameter für eine stabile Performance. Öffne dazu die Datei /etc/sysctl.conf:

$ sudo nano /etc/sysctl.conf

Füge folgende Werte hinzu:

vm.max_map_count=524288
fs.file-max=131072

Speichere die Änderungen und lade die Kernelkonfiguration neu:

Einen SonarQube-Systemdienst erstellen

SonarQube enthält ein Startskript (sonar.sh), das sich über systemd verwalten lässt, um den automatischen Start zu ermöglichen. Folge diesen Schritten, um einen SonarQube-Dienst zu erstellen und zu aktivieren.

Schritt 1: SELinux-Kontext anpassen

Passe den SELinux-Kontext des SonarQube-Skripts an, damit es korrekt ausgeführt werden kann.

$ sudo chcon -t bin_t /opt/sonarqube/bin/linux-x86-64/sonar.sh
$ sudo restorecon -Rv /opt/sonarqube

Schritt 2: Dienstdatei für SonarQube erstellen

Erstelle unter /etc/systemd/system/ eine neue Datei sonarqube.service, um SonarQube als Hintergrunddienst zu verwalten.

$ sudo nano /etc/systemd/system/sonarqube.service

Füge folgenden Inhalt hinzu:

[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

Diese Konfiguration sorgt dafür, dass SonarQube unter dem Benutzer sonarqube automatisch gestartet und gestoppt werden kann.

Schritt 3: Dienst aktivieren und starten

Lade die Systemd-Dienste neu, aktiviere SonarQube beim Systemstart und starte den Dienst.

$ sudo systemctl daemon-reload
$ sudo systemctl enable sonarqube
$ sudo systemctl start sonarqube

Überprüfe anschließend, ob der Dienst korrekt läuft:

$ sudo systemctl status sonarqube

Beispielausgabe:

● sonarqube.service - SonarQube Service
     Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled)
     Active: active (running) since Thu 2025-04-03 17:46:16 UTC; 12s ago
   Main PID: 80453 (java)
      Tasks: 120 (limit: 48879)
     Memory: 1.8G
     CPU: 37.191s

Apache als Reverse Proxy für SonarQube konfigurieren

Die Weboberfläche von SonarQube läuft standardmäßig auf Port 9000. Mit Apache kannst du einen Reverse Proxy einrichten, um Anfragen über die Standardports HTTP oder HTTPS sicher weiterzuleiten.

Schritt 1: Apache installieren und aktivieren

$ sudo dnf install httpd -y
$ sudo systemctl enable httpd
$ sudo systemctl start httpd

Schritt 2: Benötigte Apache-Module aktivieren

Überprüfe, ob die Proxy-Module aktiv sind.

$ sudo httpd -M | grep proxy

Sollten Module fehlen, öffne die Apache-Konfigurationsdatei und aktiviere sie:

$ sudo nano /etc/httpd/conf/httpd.conf

Entkommentiere oder füge folgende Zeilen hinzu:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Schritt 3: Virtuellen Host für SonarQube erstellen

Lege unter /etc/httpd/conf.d/ eine neue Apache-Konfigurationsdatei sonarqube.conf an:

$ sudo nano /etc/httpd/conf.d/sonarqube.conf

Füge den folgenden Inhalt hinzu und ersetze sonarqube.example.com durch deine Domain:

<VirtualHost *:80>
    ServerName sonarqube.example.com
    ServerAdmin admin@sonarqube.example.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:9000/
    ProxyPassReverse / http://localhost:9000/
    TransferLog /var/log/httpd/access.log
    ErrorLog /var/log/httpd/error.log
</VirtualHost>

Schritt 4: Apache testen und neu starten

Überprüfe die Konfiguration auf Syntaxfehler, starte den Dienst neu und erlaube Netzwerkzugriffe über die Firewall.

$ sudo apachectl configtest
$ sudo systemctl restart httpd
$ sudo setsebool -P httpd_can_network_connect 1
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload

SonarQube mit vertrauenswürdigen SSL-Zertifikaten absichern

Standardmäßig leitet Apache HTTP-Anfragen an SonarQube auf Port 9000 weiter. Da HTTP jedoch unverschlüsselt ist, solltest du HTTPS aktivieren, um eine sichere, verschlüsselte Verbindung zwischen Client und Server herzustellen. Im Folgenden wird beschrieben, wie du mit Let’s Encrypt ein gültiges SSL-Zertifikat einrichtest.

Schritt 1: Certbot für Apache installieren

Installiere den Let’s Encrypt-Client Certbot für Apache, um automatisch SSL-Zertifikate zu generieren und zu verwalten.

$ sudo dnf install certbot python3-certbot-apache -y

Schritt 2: SSL-Zertifikate generieren

Erstelle mit Certbot ein neues SSL-Zertifikat für deine SonarQube-Domain. Ersetze dabei sonarqube.example.com und admin@sonarqube.example.com durch deine eigene Domain und E-Mail-Adresse.

$ sudo certbot --apache -d sonarqube.example.com -m admin@sonarqube.example.com --agree-tos

Schritt 3: HTTPS in der Firewall aktivieren

Erlaube HTTPS-Verbindungen durch die Firewall und lade die Konfiguration neu.

$ sudo firewall-cmd --add-service=https --permanent
$ sudo firewall-cmd --reload

SELinux für SonarQube konfigurieren

SELinux ist auf Rocky Linux 9 standardmäßig aktiviert und kann verhindern, dass Apache auf Dateien im SonarQube-Verzeichnis zugreift. Mit den folgenden Schritten konfigurierst du SELinux korrekt.

Schritt 1: SELinux-Status prüfen

Überprüfe, ob SELinux aktiv ist und im Modus „enforcing“ läuft.

Erwartete Ausgabe:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing

Schritt 2: Verzeichnis-Kontext überprüfen

Überprüfe, ob das SELinux-Kontextlabel für das Verzeichnis /opt/sonarqube korrekt gesetzt ist, damit der Zugriff erlaubt ist.

Erwartete Ausgabe:

drwxrwxr-x. 6 sonarqube sonarqube unconfined_u:object_r:bin_t:s0  4096 Jan  7 10:30 bin
drwxrwxr-x. 2 sonarqube sonarqube unconfined_u:object_r:usr_t:s0  4096 Jan  7 10:30 conf
drwxrwxr-x. 4 sonarqube sonarqube unconfined_u:object_r:usr_t:s0  4096 Apr 22 18:18 data

Schritt 3: Netzwerkzugriff für Apache prüfen

Stelle sicher, dass der SELinux-Boolean httpd_can_network_connect aktiviert ist, damit Apache Netzwerkverbindungen weiterleiten darf.

$ getsebool httpd_can_network_connect

Erwartete Ausgabe:

httpd_can_network_connect --> on

Schritt 4: Dienste neu starten

Starte Apache und SonarQube neu, um alle Änderungen zu übernehmen.

$ sudo systemctl restart httpd
$ sudo systemctl restart sonarqube

Auf SonarQube zugreifen

Nachdem die Einrichtung abgeschlossen ist, kannst du auf die Weboberfläche von SonarQube zugreifen, indem du deine Domain im Browser öffnest.

Beispiel-URL:

https://sonarqube.example.com

Melde dich mit den Standardzugangsdaten an:

  • Benutzername: admin
  • Passwort: admin

Ändere das Standardpasswort nach dem ersten Login. Gehe anschließend zu Administration → Security → Users, um einen neuen Benutzer zu erstellen.

Erzeuge ein neues Zugriffstoken, lege eine Ablaufzeit fest und kopiere es, um es später bei der Codeanalyse zu verwenden.

Beispielprojekte mit SonarQube scannen

Mit den folgenden Schritten kannst du die Installation testen, indem du Beispielprojekte aus dem offiziellen SonarQube-Repository analysierst.

Schritt 1: Projektverzeichnis erstellen

$ cd
$ mkdir projects
$ cd projects

Schritt 2: SonarQube-Beispielrepository klonen

$ git clone https://github.com/SonarSource/sonar-scanning-examples
$ cd sonar-scanning-examples/sonar-scanner

Schritt 3: Codeanalyse ausführen

Führe den Scan mit SonarScanner aus. Ersetze <YOUR_SONAR_TOKEN> durch dein zuvor generiertes Zugriffstoken.

$ sonar-scanner -D sonar.token=<YOUR_SONAR_TOKEN>

Erwartete erfolgreiche Ausgabe:

INFO  Scanner configuration file: /opt/sonarscanner/conf/sonar-scanner.properties
INFO  Project root configuration file: /home/linuxuser/sonar-scanning-examples/sonar-scanner/sonar-project.properties
INFO  SonarScanner CLI 7.0.2.4839
INFO  Analysis total time: 38.112 s
INFO  SonarScanner Engine completed successfully
INFO  EXECUTION SUCCESS

Schritt 4: Analyseergebnisse prüfen

Rufe die folgende Seite auf, um die ausgewerteten Projektdaten einzusehen:

https://sonarqube.example.com/projects

Öffne das Projekt Example of SonarScanner Usage, um Metriken wie Codequalität, Sicherheit, Wartbarkeit, Testabdeckung und Redundanzen zu prüfen.

Fazit

Du hast SonarQube erfolgreich auf Rocky Linux 9 installiert, konfiguriert und abgesichert. Nun kannst du deine Projekte mit dem SonarScanner analysieren und die Ergebnisse im SonarQube-Dashboard auswerten. Weitere Informationen und erweiterte Konfigurationsbeispiele findest du in der offiziellen SonarQube-Dokumentation.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: