Cómo instalar SonarQube en Ubuntu 18.04 LTS

SonarQube es una plataforma de código abierto para inspeccionar continuamente la calidad del código de las aplicaciones. Está escrita en lenguaje Java y admite múltiples bases de datos. Puede inspeccionar el código y comprobar la salud de una aplicación para más de 20 lenguajes de programación, incluyendo Java, C, C++, C#, PHP, y lenguajes web como JavaScript, HTML y CSS. SonarQube puede analizar el código fuente, encontrar vulnerabilidades de seguridad, detectar errores y mostrar el resultado en un panel de control basado en la web. Puedes integrar fácilmente SonarQube con Maven, Ant, Gradle, MSBuild, LDAP, Active Directory y GitHub.

En este tutorial, aprenderemos a instalar SonarQube en un servidor Ubuntu 18.04 LTS (Bionic Beaver).

Requisitos

  • Un servidor con Ubuntu 18.04.
  • Un usuario no root con privilegios sudo.

Cómo empezar

Antes de empezar, tendrás que actualizar tu sistema con la última versión. Puedes hacerlo ejecutando el siguiente comando:

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

Una vez actualizado tu sistema, reinicia el sistema para aplicar los cambios.

Instalar Java

SonarQube está escrito en lenguaje Java, por lo que necesitarás instalar Java en tu sistema. Primero, añade el repositorio de Java con el siguiente comando:

sudo add-apt-repository ppa:webupd8team/java

A continuación, actualiza el repositorio e instala Java con el siguiente comando:

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

Una vez instalado Java, comprueba la versión de Java con el siguiente comando

java -version

Salida:

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)

Instalar y configurar PostgreSQL

Por defecto, la última versión de PostgreSQL no está disponible en el repositorio por defecto de Ubuntu 18.04. Así que tendrás que añadir el repositorio de PostgreSQL a tu sistema.

Puedes hacerlo con el siguiente comando:

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 -

A continuación, actualiza el repositorio e instala PostgreSQL con el siguiente comando:

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

Una vez completada la instalación, comprueba el estado de PostgreSQL con el siguiente comando

sudo systemctl status postgresql

Salida:

? 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.

A continuación, cambia al usuario PostgreSQL con el siguiente comando

su - postgres

A continuación, crea un usuario sonar con el siguiente comando:

createuser sonar

A continuación, cambia al shell de PostgreSQL con el siguiente comando:

psql

A continuación, establece la contraseña para el usuario sonar y crea una base de datos sonar con el siguiente comando

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

A continuación, extiéndelo desde el shell PostgreSQL:

\q

Instalar y configurar SonarQube

Primero, crea un usuario para SonarQube con el siguiente comando

sudo adduser sonar

A continuación, descarga la última versión de SonarQube con el siguiente comando:

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

Una vez completada la descarga, descomprime el archivo descargado con el siguiente comando:

unzip sonarqube-6.7.6.zip

A continuación, copia el directorio extraído en /opt con el siguiente comando:

sudo cp -r sonarqube-6.7.6 /opt/sonarqube

A continuación, dale la propiedad al usuario sonar con el siguiente comando:

sudo chown -R sonar:sonar /opt/sonarqube

A continuación, deberás configurar SonarQube para que se ejecute como usuario sonar. Puedes hacerlo con el siguiente comando:

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

Realiza los siguientes cambios:

RUN_AS_USER=sonar

Guarda y cierra el archivo. A continuación, abre el archivo de configuración por defecto de SonarQube y modifica las credenciales de la base de datos con la que hemos creado anteriormente:

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

Haz los siguientes cambios:

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

Guarda y cierra el archivo, cuando hayas terminado.

Crear el archivo de servicio Systemd para SonarQube

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio de SonarQube. Puedes hacerlo con el siguiente comando:

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

Añade las siguientes líneas:

[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

Guarda y cierra el archivo, cuando hayas terminado. A continuación, inicia el servicio de SonarQube y habilítalo para que se inicie al arrancar con el siguiente comando:

sudo systemctl start sonar
sudo systemctl enable sonar

Puedes comprobar el estado del servicio SonarQube con el siguiente comando:

sudo systemctl status sonar

Salida:

? 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.

Configurar Apache para SonarQube

Por defecto, SonarQube escucha en el puerto 9000. Por lo tanto, tendrás que instalar y configurar Apache como proxy inverso para acceder a SonarQube utilizando el puerto 80.

Para ello, instala Apache con el siguiente comando:

sudo apt-get install apache2 -y

A continuación, activa el módulo mod_proxy con el siguiente comando:

sudo a2enmod proxy
sudo a2enmod proxy_http

A continuación, crea un archivo de host virtual de Apache para SonarQube con el siguiente comando

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

Añade las siguientes líneas:

<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>

Sustituye ejemplo.com por tu propio nombre de dominio. Guarda y cierra el archivo. A continuación, habilita el archivo de host virtual de SonarQube con el siguiente comando

sudo a2ensite sonar

Por último, reinicia Apache y el servicio de SonarQube para aplicar todos los cambios con el siguiente comando:

sudo systemctl restart apache2
sudo systemctl restart sonar

Por defecto, SonarQube almacena sus logs en el directorio /opt/sonarqube/logs. Puedes comprobar el registro de SonarQube con el siguiente comando:

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

Salida:

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

También puedes comprobar el registro web de SonarQube con el siguiente comando:

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

Salida:

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 org.sonar.server.ws.WebServiceFilter@792e6771 [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)

Acceder a SonarQube

Ahora SonarQube está instalado y configurado. Es hora de acceder a él a través del navegador web.

Abre tu navegador web y escribe la URL http://example.com. Serás redirigido a la siguiente página:

SonarQube

Aquí, haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:

Entrar

Proporciona el nombre de usuario y la contraseña de la cuenta de administrador por defecto como admin / admin y haz clic en el botón Iniciar sesión. Deberías ver el panel de control por defecto de SonarQube en la siguiente página:

Panel de control de SonarCube

Enhorabuena! has instalado con éxito SonarQube en el servidor Ubuntu 18.04. Ahora puedes realizar fácilmente revisiones automáticas y comprobar la salud de una aplicación con SonarQube.

También te podría gustar...