Cómo instalar SonarQube en Ubuntu 20.04

SonarQube es una plataforma gratuita, de código abierto y basada en web que se utiliza para analizar la calidad del código fuente. Está escrita en java y puede analizar y gestionar código de más de 20 lenguajes de programación, incluidos c/c++, PL/SQL, Cobol, etc. mediante plugins. Puede integrarse con otros servidores de bases de datos como MSSQL, PostgreSQL, Oracle y MySQL. Inspecciona y muestra continuamente la salud de una aplicación. Tiene muchos plugins que te ayudan a ampliar su funcionalidad. En este tutorial, te mostraremos cómo instalar el software SonarQube en Ubuntu 20.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root está configurado el servidor.

Cómo empezar

En primer lugar, tendrás que actualizar los paquetes de tu sistema a la última versión. Puedes actualizarlos todos con el siguiente comando:

apt-get update -y

Después de actualizar todos los paquetes, tendrás que Aumentar el vm.max_map_count kernal ,file discriptor y ulimit en tu sistema. Puedes hacerlo con los siguientes comandos:

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

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar Java

SonarQube es una aplicación basada en Java. Así que Java debe estar instalado en tu sistema. Si no está instalado, puedes instalarlo con el siguiente comando:

apt-get install default-jdk unzip gnupg2 -y

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

java --version

Deberías obtener la siguiente salida:

openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar el servidor PostgreSQL

SonarQube utiliza PostgreSQL como base de datos. Por tanto, necesitarás instalarlo en tu servidor. Por defecto, la última versión de PostgreSQL no está disponible en el repositorio por defecto de Ubuntu 20.04. Así que tendrás que añadir el repositorio PostgreSQL a tu sistema.

Primero, añade el repositorio PostgreSQL con el siguiente comando:

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

A continuación, añade la clave GPG con el siguiente comando:

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

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

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

Una vez instalado, inicia el servicio PostgreSQL y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start postgresql
systemctl enable postgresql

A continuación, establece la contraseña de PostgreSQL con el siguiente comando:

passwd postgres

Tendrás que pedir una nueva contraseña como se muestra a continuación:

New password: 
Retype new password: 
passwd: password updated successfully

A continuación, cambia el usuario a postgres y crea un nuevo usuario para sonar con el siguiente comando:

su - postgres
createuser sonar

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

postgres@sonar:~$ psql

Una vez iniciada la sesión, deberías obtener la siguiente salida:

psql (13.1 (Ubuntu 13.1-1.pgdg20.04+1))
Type "help" for help.

A continuación, crea un usuario y una base de datos con el siguiente comando:

postgres=# ALTER USER sonar WITH ENCRYPTED password 'sonar';
postgres=# CREATE DATABASE sonarqube OWNER sonar;

A continuación, concede todos los privilegios a la base de datos Sonar con el siguiente comando:

postgres=# grant all privileges on DATABASE sonarqube to sonar;

A continuación, sal del shell postgres y del usuario con el siguiente comando:

postgres=# \q
postgres@sonar:~$ exit

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar SonarQube

En primer lugar, descarga la última versión de SonarQube desde su sitio web oficial con el siguiente comando:

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

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

unzip sonarqube-7.9.3.zip

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

mv sonarqube-7.9.3 /opt/sonarqube

A continuación, crea un usuario independiente para SonarQube con el siguiente comando:

adduser sonar

A continuación, cambia la propiedad del directorio /opt/sonarqube a sonar con el siguiente comando:

chown -R sonar:sonar /opt/sonarqube

A continuación, tendrás que editar el archivo de configuración de SonarQube y definir el nombre de usuario, la contraseña, el host web y la url PostgreSQL de sonar.

nano /opt/sonarqube/conf/sonar.properties

Cambia las siguientes líneas con tu nombre de usuario sonar, contraseña y URL PostgreSQL:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.web.host=0.0.0.0

A continuación, edita el script sonar.sh y define el usuario RUN_AS:

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

Cambia la siguiente línea:

RUN_AS_USER=sonar

Guarda y cierra el archivo cuando hayas terminado.

Crear un archivo de servicio Systemd para SonarQube

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

nano /etc/systemd/system/sonar.service

Añade las siguientes líneas:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
LimitNOFILE=65536
LimitNPROC=4096
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

Guarda y cierra el archivo y, a continuación, vuelve a cargar el demonio systemd para aplicar los cambios de configuración:

systemctl daemon-reload

A continuación, inicia el servicio SonarQube y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start sonar
systemctl enable sonar

A continuación, comprueba el estado del servicio SonarQube con el siguiente comando:

systemctl status sonar

Deberías obtener la siguiente salida:

? sonar.service - SonarQube service
     Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-16 16:28:41 UTC; 5s ago
    Process: 79015 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS)
   Main PID: 79081 (wrapper)
      Tasks: 46 (limit: 4691)
     Memory: 725.8M
     CGroup: /system.slice/sonar.service
             ??79081 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=So>
             ??79085 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrap>
             ??79125 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInit>

Nov 16 16:28:40 sonar.example.com systemd[1]: Starting SonarQube service...
Nov 16 16:28:40 sonar.example.com sonar.sh[79015]: Starting SonarQube...
Nov 16 16:28:41 sonar.example.com sonar.sh[79015]: Started SonarQube.
Nov 16 16:28:41 sonar.example.com systemd[1]: Started SonarQube service.

En este punto, SonarQube está iniciado y escuchando en el puerto 9000. Puedes comprobarlo con el siguiente comando

ss -antpl | grep 9000

Deberías obtener la siguiente salida:

LISTEN   0        25                          *:9000                   *:*       users:(("java",pid=139294,fd=121))                                             

Si tienes algún problema con SonarQube, puedes comprobar los logs de SonarQube con el siguiente comando:

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

Deberías obtener la siguiente salida:

2020.11.16 17:04:24 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp --add-opens=java.base/java.util=ALL-UNNAMED -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/common/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.5.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process10447466834580828864properties
2020.11.16 17:04:30 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2020.11.16 17:04:30 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

Una vez que hayas terminado, puedes continuar con el siguiente paso.

Instalar y configurar Nginx

A continuación, tendrás que instalar y configurar Nginx como proxy inverso para SonarQube. En primer lugar, instala el servidor Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado Nginx, crea un archivo de configuración de host virtual ne wNginx para SonarQube:

nano /etc/nginx/conf.d/sonar.conf

Añade las siguientes líneas:

upstream sonar_backend {
  server 127.0.0.1:9000;
}

server {
    listen 80;
    server_name sonar.example.com;

    location / {
        proxy_pass http://sonar_backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

Guarda y cierra el archivo y, a continuación, comprueba si Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

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

A continuación, comprueba el estado del servicio Nginx con el siguiente comando:

systemctl status nginx

Deberías ver la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-16 17:04:16 UTC; 4min 3s ago
       Docs: man:nginx(8)
    Process: 140017 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 140028 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 140035 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 4.6M
     CGroup: /system.slice/nginx.service
             ??140035 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??140037 nginx: worker process
             ??140038 nginx: worker process

Nov 16 17:04:16 kolab.example.com systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 16 17:04:16 kolab.example.com systemd[1]: Started A high performance web server and a reverse proxy server.

Una vez que hayas terminado, puedes pasar al siguiente paso.

Accede a la interfaz Web de SonarQube

Ahora, abre tu navegador web y accede a SonarQube utilizando la URL http://sonar.example.com. Serás redirigido a la siguiente página:

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

Introduce por defecto el nombre de usuario admin y la contraseña 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 pantalla:

Conclusión

Enhorabuena! has instalado y configurado con éxito SonarQube con Nginx como proxy inverso en Ubuntu 20.04. Espero que ahora puedas desplegarlo fácilmente en el entorno de desarrollo. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...