Es ist der Traum eines jeden Entwicklers, über sauberen und fehlerfreien Code zu verfügen, der problemlos in Staging- und Produktionsumgebungen bereitgestellt werden kann. Ein Tool, das Ihnen dabei helfen kann, befindet sich in Ihrer CI/CD-Pipeline und ist 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 untersuchen 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 installiert auf Ubuntu 20.04 . Wir werden die Community Edition installieren, da das SSL-Zertifikat kostenlos heruntergeladen und aktiviert werden kann (https) mit Let's Encrypt indem Sie Nginx als Reverse-Proxy festlegen.
Voraussetzungen
Stellen Sie vor Beginn sicher, dass Sie die folgenden Anforderungen erfüllen:
- Ubuntu 20.04 LTS mit konfiguriertem sudo-Benutzer.
- 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 Kernel des virtuellen Speichers 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 dauerhaft machen, indem Sie die Systemparameter in /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
Speichern und schließen. Ö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
Speichern und schließen. Starten Sie Ihren Server neu, damit die Änderungen wirksam werden.
Schritt 1:OpenJDK installieren
Da es in Java geschrieben ist, hängt SonarQube 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 Version von Java ü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 danach das PostgreSQL-Repository hinzu.
$ sudo sh -c 'echo "deb http://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 wurde, führen Sie den folgenden Befehl aus.
$ sudo systemctl start postgresql
Nur um zu bestätigen, dass alles wie erwartet läuft, überprüfen Sie den Ausführungsstatus.
$ 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
PostgreSQL so aktivieren, dass es beim Booten automatisch startet:
$ sudo systemctl enable postgresql
Bisher läuft unser PostgreSQL ohne Probleme.
Schritt 3:PostgreSQL konfigurieren
Als nächstes werden wir das Passwort für den Postgres-Benutzer festlegen, das normalerweise standardmäßig mitgeliefert wird, wenn PostgreSQL installiert wird. Führen Sie dazu den folgenden 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
Wechseln Sie anschließend mit dem folgenden Befehl zur PostgreSQL-Eingabeaufforderung:
$ psql
Erstellen Sie mit Zugriff auf die PostgreSQL-Shell ein Passwort für den gerade 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 dem Datenbankbenutzer alle Berechtigungen zu oder erteilen Sie ihm alle Berechtigungen, sodass er alle Berechtigungen zum Ändern der Datenbank hat.
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
Verlassen Sie nun die Datenbank.
\q
Schritt 4:SonarQube herunterladen und konfigurieren
Als nächstes werden wir die neueste Binär-Zip-Datei von SonarQube herunterladen. Im Moment ist SonarQube Version 9.0.1 die neueste Community Edition-Version, die eine LTS-Version (Long Term Service) ist. Die neuesten Downloads finden Sie auf der Download-Seite von SonarQube.
Um die ZIP-Datei herunterzuladen, geben Sie den folgenden 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 neue 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 Sie die folgenden Zeilen und kommentieren Sie sie aus
sonar.jdbc.username=
sonar.jdbc.password=
Diese stellen den Benutzer und das Passwort der SonarQube-Datenbank 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 danach die folgenden Zeilen so, dass sie so erscheinen, 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ühren soll, indem Sie die angezeigte Datei bearbeiten.
$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
Scrollen Sie nach unten und vergewissern Sie sich, dass die folgende Zeile wie abgebildet angezeigt wird.
RUN_AS_USER=sonar
Schritt 7:Erstellen Sie eine Systemd-Dienstdatei für SonarQube
Im Moment hat unser System keine Möglichkeit, den SonarQube-Dienst zu starten. Daher müssen wir einen systemd-Dienst erstellen. Führen Sie dazu den folgenden 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
Speichern Sie die Änderungen und verlassen 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 folgenden 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, dh http://<server-ip>:9000/
. Der standardmäßige Benutzername des Administrators ist „admin“ und das Passwort ist „admin“.
Sonarqube wird Sie auffordern, das Passwort zu aktualisieren, um das Standardpasswort zu ändern.
Schritt 8:Installieren und konfigurieren Sie Nginx mit SSL (optional)
Um mit einem SSL-fähigen Domainnamen auf Ihren Sonarqube zuzugreifen, müssen Sie einen Reverse-Proxy wie Nginx installieren. Der Webserver stellt Proxy-Verbindungen zu SonarQube her, sodass Entwickler von einem gesicherten Domänennamen aus 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 so, dass er beim Booten startet.
$ sudo systemctl enable nginx
Und starten Sie den Dienst
$ sudo systemctl start nginx
Damit der Webserver SonarQube erkennt, erstellen wir eine Konfigurationsdatei gezeigt.
$ 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 http://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;
}
}
Speichern und schließen. 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 let's encrypt-Zertifikat. Um das 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
Standardmäßig fügt let's encrypt einige Zeilen in die Blockdatei des Nginx-Servers ein.
Sie sollten so etwas 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 http://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:Zugriff auf SonarQube mit HTTPS
Jetzt können Sie mit einer HTTPS-URL, die mit let's encrypt konfiguriert wurde, sicher auf SonarQube zugreifen.
https://domain-name
Nach dem Login wird Ihnen die Zielseite angezeigt.
Schlussfolgerung
In diesem Tutorial haben wir gelernt, wie SonarQube unter Ubuntu 20.04 installiert wird. Wir haben Sonarqube mit SSL unter Verwendung des Let's Encrypt-Zertifikats mit Nginx als Reverse-Proxy aktiviert.