Comment installer SonarQube avec Let’s Encrypt sur Ubuntu 20.04

C’est le rêve de chaque développeur d’avoir un code propre et sans problème qui peut être facilement déployé dans des environnements de développement et de production. Un outil qui peut vous aider à atteindre cet objectif est dans votre pipeline CI/CD est SonarQube. SonarQube est un outil multiplateforme et basé sur le Web utilisé pour l’inspection continue du code source. Il est écrit en Java. SonarQube vous permet d’écrire un code plus propre et plus sûr en inspectant le code et en détectant les bogues et autres incohérences.

SonarQube peut être intégré à des plateformes telles que GitHub, Gitlab, BitBucket et Azure DevOps pour ne citer que quelques plateformes. Il est disponible en différentes éditions, notamment les éditions Community, Developer, Enterprise et Datacenter.

Dans ce tutoriel, nous apprenons à installer SonarQube au Ubuntu 20.04. Nous allons installer l’édition communautaire car elle est gratuite à télécharger et à activer Certificat SSL (https) avec Chiffrons en définissant Nginx comme proxy inverse.

Conditions préalables

Avant de commencer, assurez-vous que vous remplissez les conditions suivantes :

  1. Ubuntu 20.04 LTS avec un sudo utilisateur configuré.
  2. Assurez-vous que votre système dispose d’un minimum de 4 Go de RAM et de 2 cœurs de processeur virtuel

Vous aurez besoin d’installer certains outils

$ sudo apt update
$ sudo apt install net-tools unzip vim curl

En outre, vous devez augmenter le noyau de la mémoire virtuelle

$ sudo sysctl -w vm.max_map_count=262144

avec le nombre maximum de fichiers ouverts

$ sudo sysctl -w fs.file-max=65536

et les limites des ressources

$ ulimit -n 65536

$ ulimit -u 4096

Vous pouvez rendre les changements persistants en modifiant les paramètres système dans le /etc/sysctl.conf fichier de configuration

$ sudo vim /etc/sysctl.conf

Ajoutez les lignes suivantes.

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

Save et sortie. Ensuite, ouvrez le limits.conf déposer

$ sudo vim /etc/security/limits.conf

Tout en bas, ajoutez les lignes suivantes

sonarqube - nofile 65536
sonarqube - nproc 4096

Save et sortie. Pour que les modifications entrent en vigueur, redémarrez votre serveur.

Étape 1 : Installez OpenJDK

Comme il est écrit en Java, SonarQube dépend de Java pour fonctionner. Nous allons installer OpenJDK 11 qui fournit java.

$ sudo apt install openjdk-11-jdk

Une fois installé, vous pouvez vérifier la version de Java.

$ java -version

Étape 2 : installer la base de données PostgreSQL

À partir de 2016, SonarQube a abandonné la prise en charge de MySQL et ne prend désormais en charge que PostgreSQL. En tant que tel, nous devons installer la base de données PostgreSQL.

Pour commencer, téléchargez et ajoutez la clé PostgreSQL GPG.

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

Ensuite, ajoutez le référentiel PostgreSQL.

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

Mettez ensuite à jour l’index du package pour synchroniser le nouveau référentiel.

$ sudo apt update

Une fois que vous avez terminé de mettre à jour les listes de packages, installez la base de données PostgreSQL et ses dépendances.

$ sudo apt install postgresql postgresql-contrib

Par défaut, le service PostgreSQL démarre après l’installation, s’il n’est pas démarré, exécutez la commande suivante.

$ sudo systemctl start postgresql

Juste pour confirmer que tout fonctionne comme prévu, vérifiez son état de fonctionnement.

$ sudo systemctl status postgresql

Vous pouvez également confirmer le port sur lequel il écoute :

$ 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

Autorisez PostgreSQL à démarrer automatiquement au démarrage :

$ sudo systemctl enable postgresql

Jusqu’à présent, notre PostgreSQL est opérationnel sans aucun problème.

Étape 3 : Configurer PostgreSQL

Ensuite, nous allons définir le mot de passe de l’utilisateur Postgres qui est généralement fourni par défaut lors de l’installation de PostgreSQL. Pour ce faire, exécutez la commande :

$ sudo passwd postgres

Tapez le mot de passe et confirmez-le. Ensuite, passez à l’utilisateur Postgres.

$ su - postgres

Ensuite, continuez et créez un nouvel utilisateur de base de données.

$ createuser sonar

Une fois cela fait, passez à l’invite PostgreSQL à l’aide de la commande :

$ psql

Avec l’accès au shell PostgreSQL, créez un mot de passe pour l’utilisateur que vous venez de créer.

ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';

Ensuite, créez une base de données SonarQube avec l’utilisateur que vous avez créé en tant que propriétaire

CREATE DATABASE sonarqube OWNER sonar;

Ensuite, attribuez ou accordez tous les privilèges à l’utilisation de la base de données afin qu’ils aient tous les privilèges pour modifier la base de données.

GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;

Quittez maintenant la base de données.

q

Étape 4 : Téléchargez et configurez SonarQube

Ensuite, nous allons télécharger le dernier fichier zip binaire de SonarQube. À l’heure actuelle, la dernière version de Community Edition, qui est une version de service à long terme ( LTS ), est SonarQube version 9.0.1. Vous pouvez vous diriger vers Page de téléchargement de SonarQube pour les derniers téléchargements.

Pour télécharger le fichier zip, exécutez la commande :

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

Ensuite, décompressez le fichier compressé.

$ unzip sonarqube-9.0.1.46107.zip

Et déplacez-le vers le chemin /opt/.

$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube

Étape 5 : Créer un nouvel utilisateur et un nouveau groupe

Ensuite, nous allons créer un nouvel utilisateur et groupe qui exécutera le service SonarQube. Alors, créez le groupe.

$ sudo groupadd sonar

Ensuite, créez l’utilisateur avec le répertoire de base défini sur /opt/sonarqube lorsque vous ajoutez l’utilisateur au groupe nouvellement créé.

$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar

Définissez ensuite la propriété sur le répertoire /opt/sonarqube.

$ sudo chown -R sonar:sonar /opt/sonarqube/

Étape 6 : Configurer SonarQube

Configurons maintenant SonarQube. Ouvrez le fichier de configuration SonarQube.

$ sudo vim /opt/sonarqube/conf/sonar.properties

Localisez et décommentez les lignes suivantes

sonar.jdbc.username=
sonar.jdbc.password=

Ceux-ci représentent l’utilisateur et le mot de passe de la base de données SonarQube que nous avons créés dans le serveur de base de données PostgreSQL. Par conséquent, remplissez les valeurs en conséquence.

sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password

Ensuite, modifiez ces lignes pour qu’elles ressemblent à ce qui est fourni

sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube

sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError

Par la suite, modifiez les lignes suivantes pour qu’elles apparaissent telles qu’elles se présentent.

sonar.web.host=0.0.0.0

sonar.web.port=9000

sonar.web.javaAdditionalOpts=-server

sonar.log.level=INFO

sonar.path.logs=logs

Ensuite, modifiez l’utilisateur qui exécutera le service SonarQube en modifiant le fichier affiché.

$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh

Faites défiler vers le bas et assurez-vous que la ligne ci-dessous apparaît comme indiqué.

RUN_AS_USER=sonar

Étape 7 : Créez un fichier de service Systemd pour SonarQube

Pour le moment, notre système n’a aucun moyen de démarrer le service SonarQube. Par conséquent, nous devons créer un service systemd. Pour ce faire, exécutez la commande :

$ sudo vim /etc/systemd/system/sonarqube.service

Ajoutez les lignes suivantes.

[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 les modifications et quittez le fichier.

Activer le service SonarQube pour démarrer au démarrage

$ sudo systemctl enable sonarqube

Et démarrez le service SonarQube.

$ sudo systemctl start sonarqube

Pour vous assurer que le service SonarQube est en cours d’exécution, exécutez la commande :

$ sudo systemctl status sonarqube

Assurez-vous également que le port 9000 est ouvert

$ sudo ufw allow '9000'

Rules updated
Rules updated (v6)

Vérifiez si le service écoute sur le port 9000

$ sudo netstat -pnltu | grep 9000

tcp6 0 0 :::9000 :::* LISTEN 65140/java

Vous pouvez maintenant essayer de vérifier si vous pouvez accéder à la page de connexion en entrant l’adresse IP publique de votre serveur et le numéro de port de votre navigateur, c’est-à-dire https://<server-ip>:9000/. Le nom d’utilisateur administrateur par défaut est ‘admin’ et le mot de passe est ‘admin’.

Page de connexion SonarQube

Sonarqube vous demandera de mettre à jour le mot de passe afin de changer celui par défaut.

Changement de mot de passe SonarQube

Étape 8 : Installer et configurer Nginx avec SSL (facultatif)

Afin d’accéder à votre nom de domaine Sonarqube avec SSL, vous devrez installer un proxy inverse comme Nginx. Le serveur Web mettra en proxy les connexions à SonarQube afin que les développeurs puissent y accéder à partir d’un nom de domaine sécurisé.

L’installation de Nginx est simple et directe et peut être effectuée en une seule commande.

$ sudo apt install nginx

Après l’installation, activez le démarrage du serveur Web Nginx au démarrage.

$ sudo systemctl enable nginx

Et démarrer le service

$ sudo systemctl start nginx

Pour que le serveur Web connaisse SonarQube, nous allons créer un fichier de configuration affiché.

$ sudo vim /etc/nginx/sites-available/sonarqube.conf

Collez ensuite le contenu fourni.

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 et sortie. Activez ensuite le site Sonarqube :

$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.conf

Vérifiez si la configuration est correcte

$ sudo nginx -t

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

Redémarrez ensuite le serveur Web Nginx pour que les modifications soient appliquées.

$ sudo systemctl restart nginx

Nous devons maintenant configurer le pare-feu UFW pour autoriser nginx. Pour ce faire, exécutez les commandes

$ sudo ufw allow 'Nginx Full'

Ensuite, rechargez le pare-feu pour effectuer les modifications.

$ sudo ufw --reload

Vous pouvez désormais accéder à votre SonarQube via son nom de domaine

Ici, nous allons utiliser le libre chiffrons le certificat. Pour configurer cela, nous devons exécuter cerbot pour Nginx :

$ 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

Par défaut, let’s encrypt ajoutera quelques lignes dans le fichier de bloc du serveur Nginx.

Tu devrais avoir quelque chose comme ça

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

}

Étape 10 : Accédez à SonarQube avec HTTPS

Vous pouvez désormais accéder à SonarQube en toute sécurité avec l’URL HTTPS configurée avec let’s encrypt.

https://domain-name

SonarQube avec SSL activé

Après la connexion, vous obtiendrez la page de destination affichée.

Conclusion

Dans ce tutoriel, nous avons appris à installer SonarQube sur Ubuntu 20.04. Nous avons activé Sonarqube avec SSL en utilisant le certificat Let’s Encrypt en utilisant Nginx comme proxy inverse.