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.