Es ist der Traum eines jeden Entwicklers, sauberen und fehlerfreien Code zu haben, der leicht in Staging- und Produktionsumgebungen bereitgestellt werden kann. Ein Tool, das Ihnen dabei helfen kann, dies zu erreichen, befindet sich in Ihrer CI/CD-Pipeline: SonarQube. SonarQube ist ein plattformübergreifendes und webbasiertes Tool zur kontinuierlichen Überprüfung des Quellcodes. Es ist in Java geschrieben. Mit SonarQube können Sie saubereren und sichereren Code schreiben, indem Sie den Code überprüfen und Fehler und andere Inkonsistenzen erkennen.
SonarQube kann in Plattformen wie GitHub, Gitlab, BitBucket und Azure DevOps integriert werden, um nur einige Plattformen zu nennen. Es ist in verschiedenen Editionen erhältlich, darunter Community-, Developer-, Enterprise- und Datacenter-Editionen.
In diesem Tutorial lernen wir, wie man SonarQube installieren an Ubuntu 20.04. Wir werden die Community Edition installieren, da sie kostenlos heruntergeladen und aktiviert werden kann SSL-Zertifikat (https) mit Lass uns verschlüsseln indem Sie Nginx als Reverse-Proxy festlegen.
Voraussetzungen
Stellen Sie vor dem Start sicher, dass Sie die folgenden Anforderungen erfüllen:
- Ubuntu 20.04 LTS mit a sudo Benutzer konfiguriert.
- Stellen Sie sicher, dass Ihr System über mindestens 4 GB RAM und 2 vCPU-Kerne verfügt
Sie müssen einige Tools installieren
$ sudo apt update
$ sudo apt install net-tools unzip vim curl
Außerdem müssen Sie den virtuellen Speicherkernel erhöhen
$ sudo sysctl -w vm.max_map_count=262144
mit der maximalen Anzahl geöffneter Dateien
$ sudo sysctl -w fs.file-max=65536
und die Ressourcengrenzen
$ ulimit -n 65536
$ ulimit -u 4096
Sie können die Änderungen persistent machen, indem Sie die Systemparameter im ändern /etc/sysctl.conf
Konfigurationsdatei
$ sudo vim /etc/sysctl.conf
Fügen Sie die folgenden Zeilen hinzu.
vm.max_map_count=262144
fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
Save und aussteigen. Öffnen Sie danach die limits.conf
Datei
$ sudo vim /etc/security/limits.conf
Fügen Sie ganz unten die folgenden Zeilen hinzu
sonarqube - nofile 65536
sonarqube - nproc 4096
Save und aussteigen. Starten Sie Ihren Server neu, damit die Änderungen wirksam werden.
Schritt 1: OpenJDK installieren
Da SonarQube in Java geschrieben ist, hängt es von Java ab, um zu funktionieren. Wir werden OpenJDK 11 installieren, das Java bereitstellt.
$ sudo apt install openjdk-11-jdk
Nach der Installation können Sie die Java-Version überprüfen.
$ java -version
Schritt 2: PostgreSQL-Datenbank installieren
Ab 2016 hat SonarQube die Unterstützung für MySQL eingestellt und unterstützt jetzt nur noch PostgreSQL. Daher müssen wir die PostgreSQL-Datenbank installieren.
Laden Sie zunächst den PostgreSQL-GPG-Schlüssel herunter und fügen Sie ihn hinzu.
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Fügen Sie anschließend das PostgreSQL-Repository hinzu.
$
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
Aktualisieren Sie dann den Paketindex, um das neue Repository zu synchronisieren.
$ sudo apt update
Nachdem Sie die Paketlisten aktualisiert haben, installieren Sie die PostgreSQL-Datenbank und ihre Abhängigkeiten.
$ sudo apt install postgresql postgresql-contrib
Standardmäßig wird der PostgreSQL-Dienst nach der Installation gestartet, wenn er nicht gestartet wird, führen Sie den folgenden Befehl aus.
$ sudo systemctl start postgresql
Um zu bestätigen, dass alles wie erwartet läuft, überprüfen Sie den Betriebsstatus.
$ sudo systemctl status postgresql
Sie können auch den Port bestätigen, auf dem es lauscht:
$ sudo netstat -pnltu | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 7768/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 7768/postgres
Aktivieren Sie PostgreSQL, um beim Booten automatisch zu starten:
$ sudo systemctl enable postgresql
Bisher läuft unser PostgreSQL ohne Probleme.
Schritt 3: PostgreSQL konfigurieren
Im Folgenden werden wir das Passwort für den Postgres-Benutzer festlegen, das normalerweise standardmäßig bei der Installation von PostgreSQL verwendet wird. Führen Sie dazu den Befehl aus:
$ sudo passwd postgres
Geben Sie das Passwort ein und bestätigen Sie es. Wechseln Sie als Nächstes zum Postgres-Benutzer.
$ su - postgres
Fahren Sie als Nächstes fort und erstellen Sie einen neuen Datenbankbenutzer.
$ createuser sonar
Wenn Sie fertig sind, wechseln Sie mit dem Befehl zur PostgreSQL-Eingabeaufforderung:
$ psql
Erstellen Sie mit Zugriff auf die PostgreSQL-Shell ein Passwort für den soeben erstellten Benutzer.
ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';
Erstellen Sie als Nächstes eine SonarQube-Datenbank mit dem von Ihnen erstellten Benutzer als Eigentümer
CREATE DATABASE sonarqube OWNER sonar;
Weisen Sie dann der Datenbankverwendung alle Berechtigungen zu oder gewähren Sie sie, sodass sie alle Berechtigungen zum Ändern der Datenbank haben.
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
Verlassen Sie nun die Datenbank.
q
Schritt 4: Herunterladen und Konfigurieren von SonarQube
Als nächstes werden wir die neueste binäre ZIP-Datei von SonarQube herunterladen. Derzeit ist die neueste Version der Community Edition, bei der es sich um eine Long Term Service (LTS)-Version handelt, SonarQube Version 9.0.1. Sie können zu SonarQube-Downloadseite für die neuesten Downloads.
Um die ZIP-Datei herunterzuladen, geben Sie den Befehl ein:
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.0.1.46107.zip
Als nächstes entpacken Sie die gezippte Datei.
$ unzip sonarqube-9.0.1.46107.zip
Und verschieben Sie es in den Pfad /opt/.
$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube
Schritt 5: Neuen Benutzer und Gruppe erstellen
Als nächstes erstellen wir einen neuen Benutzer und eine neue Gruppe, die den SonarQube-Dienst ausführen. Erstellen Sie also die Gruppe.
$ sudo groupadd sonar
Erstellen Sie als Nächstes den Benutzer mit dem Home-Verzeichnis auf /opt/sonarqube, während Sie den Benutzer der neu erstellten Gruppe hinzufügen.
$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
Setzen Sie dann den Besitz auf das Verzeichnis /opt/sonarqube.
$ sudo chown -R sonar:sonar /opt/sonarqube/
Schritt 6: SonarQube konfigurieren
Lassen Sie uns nun SonarQube konfigurieren. Öffnen Sie die SonarQube-Konfigurationsdatei.
$ sudo vim /opt/sonarqube
/conf/sonar.properties
Suchen und kommentieren Sie die folgenden Zeilen
sonar.jdbc.username=
sonar.jdbc.password=
Diese stellen den SonarQube-Datenbankbenutzer und das Passwort dar, die wir auf dem PostgreSQL-Datenbankserver erstellt haben. Tragen Sie daher die Werte entsprechend ein.
sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password
Ändern Sie als Nächstes diese Zeilen so, dass sie wie bereitgestellt aussehen
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Ändern Sie anschließend die folgenden Zeilen so, dass sie so angezeigt werden, wie sie aussehen.
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
Ändern Sie als Nächstes den Benutzer, der den SonarQube-Dienst ausführt, indem Sie die angezeigte Datei bearbeiten.
$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
Scrollen Sie nach unten und stellen Sie sicher, dass die darunter liegende Zeile wie abgebildet angezeigt wird.
RUN_AS_USER=sonar
Schritt 7: Erstellen Sie eine Systemd-Dienstdatei für SonarQube
Derzeit hat unser System keine Möglichkeit, den SonarQube-Dienst zu starten. Daher müssen wir einen systemd-Dienst erstellen. Führen Sie dazu den Befehl aus:
$ sudo vim /etc/systemd/system/sonarqube.service
Fügen Sie die folgenden Zeilen hinzu.
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
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
Save die Änderungen und beenden Sie die Datei.
Aktivieren Sie den SonarQube-Dienst, um beim Booten zu starten
$ sudo systemctl enable sonarqube
Und starten Sie den SonarQube-Dienst.
$ sudo systemctl start sonarqube
Um sicherzustellen, dass der SonarQube-Dienst ausgeführt wird, führen Sie den Befehl aus:
$ sudo systemctl status sonarqube

Stellen Sie außerdem sicher, dass Port 9000 geöffnet ist
$ sudo ufw allow '9000'
Rules updated
Rules updated (v6)
Überprüfen Sie, ob der Dienst auf Port 9000 lauscht
$ sudo netstat -pnltu | grep 9000
tcp6 0 0 :::9000 :::* LISTEN 65140/java
Jetzt können Sie versuchen zu überprüfen, ob Sie auf die Anmeldeseite zugreifen können, indem Sie die öffentliche IP Ihres Servers und die Portnummer Ihres Browsers eingeben, d https://<server-ip>:9000/
. Der standardmäßige Administrator-Benutzername ist ‘admin’ und das Passwort ist ‘admin’.

Sonarqube fordert Sie auf, das Kennwort zu aktualisieren, um das Standardkennwort zu ändern.

Schritt 8: Nginx mit SSL installieren und konfigurieren (optional)
Um mit einem SSL-aktivierten Domainnamen auf Ihren Sonarqube zuzugreifen, müssen Sie einen Reverse-Proxy wie Nginx installieren. Der Webserver stellt Verbindungen zu SonarQube als Proxy her, damit Entwickler von einem gesicherten Domänennamen darauf zugreifen können.
Die Installation von Nginx ist einfach und unkompliziert und kann mit einem einzigen Befehl durchgeführt werden.
$ sudo apt install nginx
Aktivieren Sie nach der Installation den Nginx-Webserver, um beim Booten zu starten.
$ sudo systemctl enable nginx
Und starte den Dienst
$ sudo systemctl start nginx
Damit der Webserver SonarQube erkennt, erstellen wir eine gezeigte Konfigurationsdatei.
$ sudo vim /etc/nginx/sites-available/sonarqube.conf
Fügen Sie dann den bereitgestellten Inhalt ein.
server {
listen 80;
server_name example.com or SERVER-IP;
access_log /var/log/nginx/sonar.access.log;
error_log /var/log/nginx/sonar.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass https://127.0.0.1:9000;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
Save und aussteigen. Aktivieren Sie dann die Sonarqube-Site:
$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/
sonarqube.conf
Überprüfen Sie, ob die Konfiguration korrekt ist
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Starten Sie dann den Nginx-Webserver neu, damit die Änderungen übernommen werden.
$ sudo systemctl restart nginx
Jetzt müssen wir die UFW-Firewall konfigurieren, um nginx zuzulassen. Führen Sie dazu die Befehle aus
$ sudo ufw allow 'Nginx Full'
Laden Sie dann die Firewall neu, um die Änderungen zu übernehmen.
$ sudo ufw --reload
Sie können jetzt über seinen Domainnamen auf Ihren SonarQube zugreifen

Hier verwenden wir das kostenlose Lassen Sie uns das Zertifikat verschlüsseln. Um dies zu konfigurieren, müssen wir cerbot für Nginx ausführen:
$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
(A)gree/(C)ancel: A
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
(Y)es/(N)o: N
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
1: websitefortesting.com
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for websitefortesting.com
Waiting for verification…
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/sonarqube.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sonarqube.conf
Congratulations! You have successfully enabled https://websitefortesting.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=websitefortesting.com
IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/websitefortesting.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/websitefortesting.com/privkey.pem
Your cert will expire on 2021-11-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew all of
your certificates, run "certbot renew"
If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Let’s encrypt fügt standardmäßig einige Zeilen in die Nginx-Server-Blockdatei ein.
Du solltest sowas haben
server {
server_name websitefortesting.com;
add_header Strict-Transport-Security max-age=2592000;
#rewrite ^ https://$server_name$request_uri? permanent;
access_log /var/log/nginx/sonarqube.access.log;
error_log /var/log/nginx/sonarqube.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass https://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/websitefortesting.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/websitefortesting.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = websitefortesting.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name websitefortesting.com; return 404; # managed by Certbot
}
Schritt 10: Greifen Sie mit HTTPS auf SonarQube zu
Jetzt können Sie mit einer HTTPS-URL, die mit let’s encrypt konfiguriert ist, sicher auf SonarQube zugreifen.
https://domain-name

Nach dem Login wird Ihnen die Landingpage angezeigt.

Fazit
In diesem Tutorial haben wir gelernt, wie man SonarQube unter Ubuntu 20.04 installiert. Wir haben Sonarqube mit SSL mit dem Let’s Encrypt-Zertifikat mit Nginx als Reverse-Proxy aktiviert.