So installieren Sie SonarQube mit Let’s Encrypt auf Ubuntu 20.04

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:

  1. Ubuntu 20.04 LTS mit a sudo Benutzer konfiguriert.
  2. 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-Anmeldeseite

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

SonarQube-Passwortänderung

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

SonarQube mit aktiviertem SSL

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.