SonarQube te installeren op Ubuntu 18.04 LTS

SonarQube is een open bron platform om de codekwaliteit van toepassingen voortdurend te inspecteren. Het is geschreven in de Java taal en ondersteunt meerdere databases. Je kunt code inspecteren en de gezondheid van een toepassing controleren voor meer dan 20 programmeertalen, waaronder Java, C, C++, C#, PHP, en webtalen als JavaScript, HTML en CSS. SonarQube kan broncode analyseren, beveiligingslekken vinden, bugs opsporen en het resultaat tonen op een web-gebaseerd dashboard. Je kunt SonarQube gemakkelijk integreren met Maven, Ant, Gradle, MSBuild, LDAP, Active Directory en GitHub.

In deze handleiding leren we hoe je SonarQube kunt installeren op een Ubuntu 18.04 LTS (Bionic Beaver) server.

Vereisten

  • Een server met Ubuntu 18.04.
  • Een niet-root gebruiker met sudo privileges.

Aan de slag

Voor je begint moet je je systeem updaten met de nieuwste versie. Je kunt dit doen door het volgende commando uit te voeren:

sudo apt-get update -y
sudo apt-get upgrade -y

Als je systeem bijgewerkt is, herstart je het systeem om de veranderingen toe te passen.

Installeer Java

SonarQube is geschreven in de taal Java, dus je zult Java op je systeem moeten installeren. Voeg eerst de Java repository toe met het volgende commando:

sudo add-apt-repository ppa:webupd8team/java

Werk vervolgens de repository bij en installeer Java met het volgende commando:

sudo apt-get update -y
sudo apt-get install oracle-java8-installer -y

Als Java geïnstalleerd is, controleer dan de Java versie met het volgende commando:

java -version

Uitvoer:

openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3, mixed mode)

Installeer en configureer PostgreSQL

Standaard is de nieuwste versie van PostgreSQL niet beschikbaar in de Ubuntu 18.04 standaard repository. Je zult dus de PostgreSQL repository aan je systeem moeten toevoegen.

Je kunt dit doen met het volgende commando:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Werk vervolgens de repository bij en installeer PostgreSQL met het volgende commando:

sudo apt-get update -y
sudo apt-get install postgresql postgresql-contrib

Zodra de installatie voltooid is, controleer je de status van PostgreSQL met het volgende commando:

sudo systemctl status postgresql

Uitvoer:

? postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2018-12-02 08:49:29 UTC; 4h 30min ago
  Process: 1295 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 1295 (code=exited, status=0/SUCCESS)

Dec 02 08:49:29 ubuntu1804 systemd[1]: Starting PostgreSQL RDBMS...
Dec 02 08:49:29 ubuntu1804 systemd[1]: Started PostgreSQL RDBMS.

Schakel vervolgens over naar de postgres gebruiker met het volgende commando:

su - postgres

Maak vervolgens een sonar gebruiker aan met het volgende commando:

createuser sonar

Schakel vervolgens over naar de PostgreSQL shell met het volgende commando:

psql

Stel vervolgens het wachtwoord voor de sonar gebruiker in en maak een sonar database met het volgende commando:

ALTER USER sonar WITH ENCRYPTED password 'password';
CREATE DATABASE sonar OWNER sonar;

Exti vervolgens uit de PostgreSQL shell:

\q

Installeer en configureer SonarQube

Maak eerst een gebruiker voor SonarQube met het volgende commando:

sudo adduser sonar

Download vervolgens de nieuwste versie van SonarQube met het volgende commando:

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

Als de download voltooid is, pak je het gedownloade bestand uit met het volgende commando:

unzip sonarqube-6.7.6.zip

Kopieer vervolgens de uitgepakte map naar de /opt met het volgende commando:

sudo cp -r sonarqube-6.7.6 /opt/sonarqube

Geef vervolgens het eigendom aan de sonar gebruiker met het volgende commando:

sudo chown -R sonar:sonar /opt/sonarqube

Vervolgens moet je SonarQube configureren om als sonar gebruiker te draaien. Je kunt dit doen met het volgende commando:

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

Breng de volgende veranderingen aan:

RUN_AS_USER=sonar

Sla het bestand op en sluit het. Open dan het standaard configuratiebestand van SonarQube en verander de database credentials met die we eerder maakten:

sudo nano /opt/sonarqube/conf/sonar.properties

Breng de volgende veranderingen aan:

sonar.jdbc.username=sonar
sonar.jdbc.password=password
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
sonar.web.host=127.0.0.1
sonar.search.javaOpts=-Xms512m  -Xmx512m

Sla het bestand op en sluit het als je klaar bent.

Maak een Systemd Service bestand voor SonarQube

Vervolgens moet je een systemd service bestand maken om de SonarQube dienst te beheren. Je kunt dit doen met het volgende commando:

sudo nano /etc/systemd/system/sonar.service

Voeg de volgende regels toe:

[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

[Install]
WantedBy=multi-user.target

Bewaar en sluit het bestand, als je klaar bent. Start dan de SonarQube dienst en zet hem aan om bij het opstarten te starten met het volgende commando:

sudo systemctl start sonar
sudo systemctl enable sonar

Je kunt de status van SonarQube service controleren met het volgende commando:

sudo systemctl status sonar

Uitvoer:

? sonar.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-12-02 13:55:34 UTC; 2min 52s ago
  Process: 2339 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS)
 Main PID: 2396 (wrapper)
    Tasks: 133 (limit: 2323)
   CGroup: /system.slice/sonar.service
           ??2396 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=SonarQ
           ??2399 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrapper-
           ??2445 /usr/lib/jvm/java-8-oracle/jre/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOc
           ??2545 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -
           ??2622 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -

Dec 02 13:55:33 ubuntu1804 systemd[1]: Starting SonarQube service...
Dec 02 13:55:33 ubuntu1804 sonar.sh[2339]: Starting SonarQube...
Dec 02 13:55:34 ubuntu1804 sonar.sh[2339]: Started SonarQube.
Dec 02 13:55:34 ubuntu1804 systemd[1]: Started SonarQube service.

Configureer Apache voor SonarQube

Standaard luistert SonarQube op poort 9000. Je moet dus Apache installeren en instellen als reverse proxy om de SonarQube te benaderen via poort 80.

Installeer daartoe Apache met het volgende commando:

sudo apt-get install apache2 -y

Schakel vervolgens mod_proxy module in met het volgende commando:

sudo a2enmod proxy
sudo a2enmod proxy_http

Maak vervolgens een Apache virtual host bestand voor SonarQube met het volgende commando:

sudo nano /etc/apache2/sites-available/sonar.conf

Voeg de volgende regels toe:

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin [email protected]
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9000/
    ProxyPassReverse / http://127.0.0.1:9000/
    TransferLog /var/log/apache2/sonarm_access.log
    ErrorLog /var/log/apache2/sonar_error.log
</VirtualHost>

Vervang example.com door je eigen domeinnaam. Sla het bestand op en sluit het. Schakel dan het virtuele host bestand voor SonarQube in met het volgende commando:

sudo a2ensite sonar

Herstart tenslotte Apache en de SonarQube dienst om alle veranderingen toe te passen met het volgende commando:

sudo systemctl restart apache2
sudo systemctl restart sonar

Standaard bewaart SonarQube zijn logs in de map /opt/sonarqube/logs. Je kunt de logs van SonarQube controleren met het volgende commando:

sudo tail -f /opt/sonarqube/logs/sonar.log

Uitvoer:

Launching a JVM...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
  Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

2018.12.02 13:55:43 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2018.12.02 13:55:44 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2018.12.02 13:55:45 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch -Epath.conf=/opt/sonarqube/temp/conf/es
2018.12.02 13:55:45 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2018.12.02 13:55:48 INFO  app[][o.e.p.PluginsService] no modules loaded
2018.12.02 13:55:48 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2018.12.02 13:56:34 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
2018.12.02 13:56:34 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.1.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process420500314195865484properties

Je kunt het SonarQube web log ook controleren met het volgende commando:

sudo tail -f /opt/sonarqube/logs/web.log

Uitvoer:

2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarJava / 4.15.0.12310 / 572454b93016ec73a53fe0e07b2ffdc356d21ba9
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPHP / 2.11.0.2485 / 741861a29e5f9a26c6c99c06268facb6c4f4a882
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPython / 1.8.0.1496 / 3fe3bc4d0273a5721ea2fb368dc45b1bb82fede3
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: Git / 1.3.0.869 / 4da53e3f9e55f4f2e5796625cb0c5768ed152079
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: SVN / 1.6.0.860 / 2111fdbd1dddda4ad6d4ed6486fd0b18c1010d3b
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarTS / 1.1.0.1079 / 042c9e65239a47d92d305f9767f730b3cc1e5ed3
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarXML / 1.4.3.1027 / 39588245cecf538bb27be4e496ff303b0143d20b
2018.12.02 13:57:07 INFO  web[][o.s.s.p.d.m.c.PostgresCharsetHandler] Verify that database charset supports UTF8
2018.12.02 13:57:09 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/system/migrate_db/*, ...], exclusions=[/api/properties*, ...]}]
2018.12.02 13:57:09 INFO  web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2018.12.02 13:57:16 INFO  web[][o.s.s.p.UpdateCenterClient] Update center: https://update.sonarsource.org/update-center.properties (no proxy)

Toegang SonarQube

SonarQube is nu geïnstalleerd en geconfigureerd. Het is tijd om het via de webbrowser te benaderen.

Open je web browser en typ de URL http://example.com. Je wordt doorverwezen naar de volgende pagina:

SonarQube

Klik hier op de Log In knop. Je zou de volgende pagina moeten zien:

Log in

Geef de standaard gebruikersnaam en het wachtwoord van de beheerdersaccount op als admin / admin en klik op de Log In knop. Je zou het SonarQube standaard dashboard op de volgende pagina moeten zien:

SonarCube Dashboard

Gefeliciteerd! je hebt SonarQube met succes op de Ubuntu 18.04 server geïnstalleerd. Je kunt nu gemakkelijk automatische beoordelingen uitvoeren en de gezondheid van een toepassing controleren met SonarQube.