So installierst du SonarQube unter Ubuntu 20.04

SonarQube ist eine kostenlose, quelloffene und webbasierte Plattform zur Analyse der Qualität von Quellcode. Sie ist in Java geschrieben und kann über Plugins den Code von mehr als 20 Programmiersprachen analysieren und verwalten, darunter c/c++, PL/SQL, Cobol usw. Es kann mit anderen Datenbankservern wie MSSQL, PostgreSQL, Oracle und MySQL integriert werden. Es prüft kontinuierlich den Zustand einer Anwendung und zeigt ihn an. Es gibt eine Vielzahl von Plugins, mit denen du seine Funktionen erweitern kannst. In diesem Tutorial zeigen wir dir, wie du SonarQube auf Ubuntu 20.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 20.04 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Der Server ist mit einem Root-Passwort konfiguriert.

Erste Schritte

Zuerst musst du deine Systempakete auf die neueste Version aktualisieren. Du kannst alle Pakete mit dem folgenden Befehl aktualisieren:

apt-get update -y

Nachdem du alle Pakete aktualisiert hast, musst du die vm.max_map_count kernal ,file discriptor und ulimit in deinem System erhöhen. Das kannst du mit den folgenden Befehlen tun:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Java installieren

SonarQube ist eine Java-basierte Anwendung. Daher muss Java in deinem System installiert sein. Wenn es nicht installiert ist, kannst du es mit dem folgenden Befehl installieren:

apt-get install default-jdk unzip gnupg2 -y

Sobald Java installiert ist, überprüfe die Java-Version mit dem folgenden Befehl:

java --version

Du solltest die folgende Ausgabe erhalten:

openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Wenn du fertig bist, kannst du mit dem nächsten Schritt fortfahren.

PostgreSQL Server installieren und konfigurieren

SonarQube verwendet PostgreSQL als Datenbank-Backend. Daher musst du ihn auf deinem Server installieren. Standardmäßig ist die neueste Version von PostgreSQL nicht im Standard-Repository von Ubuntu 20.04 verfügbar. Daher musst du das PostgreSQL-Repository zu deinem System hinzufügen.

Füge zunächst das PostgreSQL-Repository mit dem folgenden Befehl hinzu:

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Als Nächstes fügst du den GPG-Schlüssel mit dem folgenden Befehl hinzu:

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -

Als Nächstes aktualisierst du das Repository und installierst den PostgreSQL-Server mit dem folgenden Befehl:

apt-get update -y
apt-get -y install postgresql postgresql-contrib

Nach der Installation startest du den PostgreSQL-Dienst und aktivierst ihn mit folgendem Befehl, damit er beim Neustart des Systems startet:

systemctl start postgresql
systemctl enable postgresql

Als Nächstes legst du das PostgreSQL-Passwort mit dem folgenden Befehl fest:

passwd postgres

Du musst nach einem neuen Passwort fragen, wie unten gezeigt:

New password: 
Retype new password: 
passwd: password updated successfully

Wechsle als Nächstes den Benutzer zu postgres und erstelle einen neuen Benutzer für sonar mit folgendem Befehl:

su - postgres
createuser sonar

Als Nächstes loggst du dich mit dem folgenden Befehl in die PostgreSQL-Shell ein:

postgres@sonar:~$ psql

Sobald du eingeloggt bist, solltest du die folgende Ausgabe erhalten:

psql (13.1 (Ubuntu 13.1-1.pgdg20.04+1))
Type "help" for help.

Als Nächstes erstellst du einen Benutzer und eine Datenbank mit dem folgenden Befehl:

postgres=# ALTER USER sonar WITH ENCRYPTED password 'sonar';
postgres=# CREATE DATABASE sonarqube OWNER sonar;

Erteile der Sonar-Datenbank mit folgendem Befehl alle Berechtigungen:

postgres=# grant all privileges on DATABASE sonarqube to sonar;

Als Nächstes beendest du die Postgres-Shell und den Benutzer mit dem folgenden Befehl:

postgres=# \q
postgres@sonar:~$ exit

Sobald du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

SonarQube installieren und konfigurieren

Lade zunächst die neueste Version von SonarQube von der offiziellen Website mit folgendem Befehl herunter:

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.3.zip

Sobald der Download abgeschlossen ist, entpackst du die heruntergeladene Datei mit dem folgenden Befehl:

unzip sonarqube-7.9.3.zip

Als Nächstes verschiebst du das entpackte Verzeichnis mit folgendem Befehl in das Verzeichnis /opt:

mv sonarqube-7.9.3 /opt/sonarqube

Als Nächstes erstellst du mit folgendem Befehl einen eigenen Benutzer für SonarQube:

adduser sonar

Ändere den Eigentümer des Verzeichnisses /opt/sonarqube mit folgendem Befehl in sonar:

chown -R sonar:sonar /opt/sonarqube

Als nächstes musst du die SonarQube-Konfigurationsdatei bearbeiten und den Sonar-Benutzernamen, das Passwort, den Webhost und die PostgreSQL-URL festlegen.

nano /opt/sonarqube/conf/sonar.properties

Ändere die folgenden Zeilen mit deinem Sonar-Benutzernamen, Passwort und der PostgreSQL-URL:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.web.host=0.0.0.0

Als nächstes bearbeitest du das Skript sonar.sh und definierst den Benutzer RUN_AS:

nano /opt/sonarqube/bin/linux-x86-64/sonar.sh

Ändere die folgende Zeile:

RUN_AS_USER=sonar

Speichere und schließe die Datei, wenn du fertig bist.

Erstelle eine Systemd-Dienstdatei für SonarQube

Als Nächstes musst du eine systemd-Dienstdatei erstellen, um den SonarQube-Dienst zu verwalten. Du kannst sie mit dem folgenden Befehl erstellen:

nano /etc/systemd/system/sonar.service

Füge die folgenden Zeilen hinzu:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
LimitNOFILE=65536
LimitNPROC=4096
Type=forking

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

User=sonar
Group=sonar
Restart=always

LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target

Speichere und schließe die Datei und lade den systemd-Daemon neu, um die Konfigurationsänderungen zu übernehmen:

systemctl daemon-reload

Als Nächstes startest du den SonarQube-Dienst und aktivierst ihn mit folgendem Befehl, damit er beim Neustart des Systems gestartet wird:

systemctl start sonar
systemctl enable sonar

Als Nächstes überprüfst du den Status des SonarQube-Dienstes mit dem folgenden Befehl:

systemctl status sonar

Du solltest die folgende Ausgabe erhalten:

? sonar.service - SonarQube service
     Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-16 16:28:41 UTC; 5s ago
    Process: 79015 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS)
   Main PID: 79081 (wrapper)
      Tasks: 46 (limit: 4691)
     Memory: 725.8M
     CGroup: /system.slice/sonar.service
             ??79081 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=So>
             ??79085 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrap>
             ??79125 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInit>

Nov 16 16:28:40 sonar.example.com systemd[1]: Starting SonarQube service...
Nov 16 16:28:40 sonar.example.com sonar.sh[79015]: Starting SonarQube...
Nov 16 16:28:41 sonar.example.com sonar.sh[79015]: Started SonarQube.
Nov 16 16:28:41 sonar.example.com systemd[1]: Started SonarQube service.

Zu diesem Zeitpunkt ist SonarQube gestartet und lauscht auf Port 9000. Du kannst dies mit dem folgenden Befehl überprüfen:

ss -antpl | grep 9000

Du solltest die folgende Ausgabe erhalten:

LISTEN   0        25                          *:9000                   *:*       users:(("java",pid=139294,fd=121))                                             

Wenn du ein Problem mit SonarQube hast, kannst du die SonarQube-Protokolle mit dem folgenden Befehl überprüfen:

tail -f /opt/sonarqube/logs/sonar.log

Du solltest die folgende Ausgabe erhalten:

2020.11.16 17:04:24 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp --add-opens=java.base/java.util=ALL-UNNAMED -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/common/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.5.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process10447466834580828864properties
2020.11.16 17:04:30 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2020.11.16 17:04:30 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Nginx installieren und konfigurieren

Als Nächstes musst du Nginx als Reverse Proxy für SonarQube installieren und konfigurieren. Installiere zunächst den Nginx-Server mit dem folgenden Befehl:

apt-get install nginx -y

Sobald Nginx installiert ist, erstellst du eine neue Nginx-Konfigurationsdatei für den virtuellen Host von SonarQube:

nano /etc/nginx/conf.d/sonar.conf

Füge die folgenden Zeilen hinzu:

upstream sonar_backend {
  server 127.0.0.1:9000;
}

server {
    listen 80;
    server_name sonar.example.com;

    location / {
        proxy_pass http://sonar_backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

Speichere und schließe die Datei und überprüfe den Nginx mit folgendem Befehl auf Syntaxfehler:

nginx -t

Du solltest die folgende Ausgabe erhalten:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Als Nächstes überprüfst du den Status des Nginx-Dienstes mit folgendem Befehl:

systemctl status nginx

Du solltest die folgende Ausgabe sehen:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-16 17:04:16 UTC; 4min 3s ago
       Docs: man:nginx(8)
    Process: 140017 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 140028 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 140035 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 4.6M
     CGroup: /system.slice/nginx.service
             ??140035 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??140037 nginx: worker process
             ??140038 nginx: worker process

Nov 16 17:04:16 kolab.example.com systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 16 17:04:16 kolab.example.com systemd[1]: Started A high performance web server and a reverse proxy server.

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Zugriff auf die SonarQube Web UI

Öffne nun deinen Webbrowser und rufe den SonarQube über die URL http://sonar.example.com auf. Du wirst auf die folgende Seite weitergeleitet:

Klicke jetzt auf die Schaltfläche Anmelden. Du solltest die folgende Seite sehen:

Gib den Standardbenutzernamen admin und das Passwort admin ein und klicke auf die Schaltfläche Anmelden. Auf dem folgenden Bildschirm solltest du das Standard-Dashboard von SonarQube sehen:

Fazit

Herzlichen Glückwunsch! Du hast SonarQube mit Nginx als Reverse Proxy auf Ubuntu 20.04 erfolgreich installiert und konfiguriert. Ich hoffe, du kannst es jetzt problemlos in deiner Entwicklungsumgebung einsetzen. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …