Cómo instalar y configurar SonarQube en linux

 le pedimos a la inteligencia artificial Gemini de Google que nos explique cómo instalar y configurar SonarQube en linux

Explicanos detalladamente cómo instalar y configurar SonarQube en linux

SonarQube es una plataforma de código abierto ampliamente utilizada para la inspección continua de la calidad del código. Proporciona informes detallados sobre la calidad del código, las vulnerabilidades de seguridad, los errores, la deuda técnica y el cumplimiento de los estándares de codificación.

La instalación y configuración de SonarQube en Linux implica varios componentes clave:

Java (OpenJDK): SonarQube es una aplicación Java y requiere una versión específica del JDK.

Base de Datos : SonarQube necesita una base de datos externa para almacenar sus datos ( PostgreSQL , MySQL , Oracle , MS SQL Server ). PostgreSQL es la base de datos recomendada para instalaciones en Linux.

SonarQube Server : El propio motor de SonarQube.

Configuración del Sistema: Ajustes a nivel de sistema operativo para asegurar un rendimiento óptimo.

Esta guía se centrará en la instalación de SonarQube con PostgreSQL en distribuciones basadas en Debian/Ubuntu y CentOS/RHEL/Fedora.

Requisitos del Sistema (Generales)

CPU : Mínimo 2 núcleos, recomendado 4+ núcleos.

RAM : Mínimo 2 GB, recomendado 4+ GB para uso de producción.

Espacio en Disco: Mínimo 10 GB (para SonarQube y la base de datos), se recomienda SSD para el directorio de datos de SonarQube y la base de datos para un mejor rendimiento.

Usuario: Se recomienda ejecutar SonarQube con un usuario no root dedicado.

Puertos: Por defecto, SonarQube utiliza el puerto 9000/TCP para la interfaz web.

Paso 1: Preparación del Sistema

Actualizar el Sistema:


Ubuntu/Debian:

Bash


sudo apt update

sudo apt upgrade -y


CentOS/RHEL/Fedora:

Bash


sudo dnf update -y

Crear un Usuario Dedicado para SonarQube:

Es una buena práctica de seguridad ejecutar SonarQube con un usuario dedicado y no con root.

Bash


sudo useradd sonarqube

# Si quieres que el usuario tenga una contraseña (opcional, no necesaria para el servicio)

# sudo passwd sonarqube

Configurar los Límites del Sistema:

SonarQube necesita un número alto de descriptores de archivos y procesos para funcionar correctamente.

Modificar sysctl.conf:

Bash


sudo nano /etc/sysctl.conf

Añade la siguiente línea al final del archivo:

vm.max_map_count=262144

Guarda y sal (Ctrl+X, Y, Enter). Aplica los cambios:

Bash

sudo sysctl -p


Modificar limits.conf:

Bash


sudo nano /etc/security/limits.conf

Añade las siguientes líneas al final del archivo (asegúrate de que sonarqube sea el nombre de usuario que creaste):

sonarqube - nofile 65536

sonarqube - nproc 4096


Guarda y sal. Para que estos límites surtan efecto, puede que necesites reiniciar el servidor o cerrar sesión y volver a iniciarla con el usuario sonarqube (aunque el servicio Systemd los aplicará).

Instalar Java ( OpenJDK ):

SonarQube requiere una versión específica de Java (por ejemplo, para SonarQube 9.x y superiores, se requiere OpenJDK 11 o 17). Siempre verifica la documentación oficial de SonarQube para los requisitos de Java más recientes.

Ubuntu/Debian (OpenJDK 11):

Bash


sudo apt install openjdk-11-jdk -y

CentOS/RHEL/Fedora (OpenJDK 11):

Bash


sudo dnf install java-11-openjdk-devel -y

Verificar la versión de Java:

Bash


java -version

Debería mostrar la versión instalada (ej., openjdk version "11.0.x").

Paso 2: Configuración de la Base de Datos ( PostgreSQL )

Instalar PostgreSQL

Ubuntu/Debian:

Bash


sudo apt install postgresql postgresql-contrib -y

sudo systemctl enable --now postgresql # Habilitar e iniciar el servicio


CentOS/RHEL/Fedora:

Bash


sudo dnf install postgresql-server postgresql-contrib -y

sudo /usr/bin/postgresql-setup --initdb # Inicializar la base de datos por primera vez

sudo systemctl enable --now postgresql # Habilitar e iniciar el servicio


Crear Usuario y Base de Datos para SonarQube

Inicia sesión como el usuario postgres y crea un usuario y una base de datos para SonarQube. ¡Cambia 'sonarpass' por una contraseña fuerte y única!

Bash

sudo -i -u postgres

createuser sonar # O createuser sonarqube, si prefieres ese nombre

psql


Dentro de psql, ejecuta los siguientes comandos SQL :

SQL

ALTER USER sonar WITH ENCRYPTED PASSWORD 'sonarpass';

CREATE DATABASE sonarqube WITH OWNER sonar;

GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonar;

\q # Para salir de psql

exit # Para salir del usuario postgres


Configurar la Autenticación de PostgreSQL (pg_hba.conf):

Necesitas permitir que el usuario sonar se conecte a la base de datos sonarqube.

Ubicación del archivo:

Ubuntu/Debian: sudo nano /etc/postgresql/<versión_pg>/main/pg_hba.conf (reemplaza <versión_pg>  por la versión de PostgreSQL instalada, ej., 13).

CentOS/RHEL/Fedora: sudo nano /var/lib/pgsql/data/pg_hba.conf

Añade/Modifica la línea: Busca la sección donde se definen las reglas de autenticación y añade o modifica una línea similar a esta para permitir la conexión local con contraseña:

# Para IPv4:

host sonarqube sonar 127.0.0.1/32 md5

# O si prefieres un método de autenticación más moderno como scram-sha-256:

# host sonarqube sonar 127.0.0.1/32 scram-sha-256

Guarda y sal.

Reinicia PostgreSQL

Bash


sudo systemctl restart postgresql

Paso 3: Instalación de SonarQube

Descargar SonarQube:

Ve a la página oficial de descargas de SonarQube (https://www.sonarqube.org/downloads/) y descarga la última versión LTS (Long Term Support) o la versión recomendada.

Bash

# Ejemplo para una versión, verifica la URL más reciente

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

Descomprimir y Mover:

Descomprime el archivo descargado en el directorio /opt (o tu ubicación preferida).

Bash

sudo unzip sonarqube-10.4.1.88031.zip -d /opt/

sudo mv /opt/sonarqube-10.4.1.88031 /opt/sonarqube


Establecer Permisos:

Asigna la propiedad del directorio de SonarQube al usuario que creaste.

Bash

sudo chown -R sonarqube:sonarqube /opt/sonarqube

sudo chmod -R 755 /opt/sonarqube # Asegura permisos de ejecución para directorios


Paso 4: Configuración de SonarQube

Editar el Archivo de Configuración Principal (sonar.properties):

Este archivo contiene la configuración de la base de datos y los ajustes del servidor web.

Bash

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

Conexión a la Base de Datos: Descomenta (quita el #) y configura las siguientes líneas con los datos de tu base de datos PostgreSQL :

Properties

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

sonar.jdbc.username=sonar

sonar.jdbc.password=sonarpass


Asegúrate de que sonarpass sea la contraseña real que estableciste.

Ajustes del Servidor Web: Descomenta y configura los siguientes parámetros (el puerto 9000 es el predeterminado):

Properties

sonar.web.host=0.0.0.0 # Permite conexiones desde cualquier IP (o usa 127.0.0.1 para localhost)

sonar.web.port=9000

# sonar.web.context=/ # Descomenta si quieres un prefijo de URL (ej. http://ip:9000/sonar)


Opciones de Memoria de Java (opcional, pero recomendado para ajustar el rendimiento):

Puedes ajustar la memoria asignada a la JVM para el proceso principal de SonarQube (web) y el Compute Engine.

Properties

# Memoria para el proceso web (interfaz de usuario)

sonar.web.javaOpts=-Xmx512m -Xms512m

# Memoria para el Compute Engine (análisis de código)

sonar.ce.javaOpts=-Xmx512m -Xms512m


Ajusta los valores Xmx (memoria máxima) y Xms (memoria inicial) según la RAM disponible en tu servidor y el tamaño de los proyectos a analizar. Un buen punto de partida podría ser 1G o 2G para cada uno si tienes RAM suficiente.

Guarda y sal del archivo.

Configurar el Script de Inicio (wrapper.conf):

Este archivo es utilizado por el script de inicio de SonarQube (y el servicio Systemd) para controlar la JVM.

Bash

sudo nano /opt/sonarqube/conf/wrapper.conf

Busca la línea que define el comando Java y asegúrate de que apunte a tu instalación de Java:

Properties

wrapper.java.command=/usr/bin/java # O la ruta completa a tu ejecutable java


Asegúrate de que no haya opciones de memoria contradictorias aquí si ya las configuraste en sonar.properties.

Paso 5: Iniciar SonarQube como Servicio Systemd

Crear un servicio Systemd permite que SonarQube se inicie automáticamente al arrancar el sistema y sea fácil de gestionar.

Crear el Archivo de Servicio:

Bash


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

Pega el siguiente contenido. Asegúrate de que las rutas y el usuario (User=sonarqube, Group=sonarqube) sean correctos. La ruta del sonar.sh puede variar ligeramente dependiendo de la versión de SonarQube (ej., linux-x86-64 puede ser linux-x86-64). Verifica el contenido de /opt/sonarqube/bin/.

Ini, TOML

[Unit]

Description=SonarQube service

After=syslog.target network.target postgresql.service # Asegura que PostgreSQL se inicie primero



[Service]

Type=forking

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start

ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

User=sonarqube

Group=sonarqube

Restart=always

LimitNOFILE=65536

LimitNPROC=4096

TimeoutStartSec=5

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=sonarqube



[Install]

WantedBy=multi-user.target

Guarda y sal.

Recargar Systemd y Habilitar/Iniciar el Servicio:

Bash

sudo systemctl daemon-reload

sudo systemctl enable sonarqube # Habilitar para que inicie en el arranque

sudo systemctl start sonarqube # Iniciar el servicio


Verificar el Estado y los Logs de SonarQube:

Bash


sudo systemctl status sonarqube

Debería mostrar active (running). Si no, revisa los logs para depurar:

Bash

sudo journalctl -u sonarqube -f # Sigue los logs en tiempo real

tail -f /opt/sonarqube/logs/sonar.log # Logs específicos de SonarQube

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

tail -f /opt/sonarqube/logs/ce.log # Compute Engine logs


Es normal que tarde un par de minutos en iniciarse completamente la primera vez.

Paso 6: Configuración del Firewall

Abre el puerto 9000 (o el puerto que configuraste en sonar.properties) en el firewall de tu servidor.

UFW (Ubuntu/Debian):

Bash


sudo ufw allow 9000/tcp

sudo ufw reload

sudo ufw status # Para verificar

Firewalld (CentOS/RHEL/Fedora):

Bash


sudo firewall-cmd --permanent --add-port=9000/tcp

sudo firewall-cmd --reload

sudo firewall-cmd --list-ports # Para verificar


Paso 7: Acceso Inicial y Pasos Post-Instalación

Acceder a la Interfaz Web de SonarQube:

Abre tu navegador web y navega a:

http://your_server_ip:9000

Login Inicial:

Las credenciales por defecto son:

Usuario: admin

Contraseña: admin


Cambiar Contraseña por Defecto:

¡Es CRÍTICO cambiar la contraseña admin por defecto inmediatamente después del primer inicio de sesión por motivos de seguridad! SonarQube te lo pedirá al primer login.

Instalar Plugins y Paquetes de Idioma (Opcional):

Una vez logueado, puedes ir a Administration -> Marketplace para explorar e instalar plugins para lenguajes de programación adicionales (Java, C#, Python, JavaScript, etc.), integraciones (Jira, GitHub) o herramientas de análisis de código (SonarLint, PMD, Checkstyle).

Si instalas plugins, SonarQube te pedirá que lo reinicies para que los cambios surtan efecto. Puedes hacerlo desde la interfaz web o mediante sudo systemctl restart sonarqube.

Configurar SonarScanner (Para Analizar Código):

Para analizar tu código con SonarQube, necesitarás configurar un SonarScanner en tu entorno de desarrollo o CI/CD. Hay varios tipos de escáneres (SonarScanner CLI, SonarScanner for Maven, SonarScanner for Gradle, etc.).

Descarga el SonarScanner relevante desde la sección "Analyzers" en la documentación de SonarQube.

Configura el conf/sonar-scanner.properties para que apunte a tu servidor SonarQube.

Ejecuta el escáner desde el directorio de tu proyecto.

Solución de Problemas Comunes

SonarQube no inicia: Revisa sudo journalctl -u sonarqube -f y los logs específicos de SonarQube en /opt/sonarqube/logs/. Los errores de base de datos o de Java se registrarán allí.

" No se puede conectar a la base de datos "

Verifica que PostgreSQL esté corriendo.

Revisa sonar.properties para asegurarte de que las credenciales y la URL de la base de datos sean correctas.

Verifica pg_hba.conf para asegurarte de que el usuario sonar puede conectarse desde localhost.

" Permiso denegado" o errores de Java/bin/sonar.sh

Asegúrate de que el directorio /opt/sonarqube y sus contenidos pertenezcan al usuario sonarqube (sudo chown -R sonarqube:sonarqube /opt/sonarqube). Asegúrate de que los límites del sistema (limits.conf, sysctl.conf) se aplicaron correctamente.

Interfaz web lenta: Ajusta la memoria Java en sonar.properties (sonar.web.javaOpts, sonar.ce.javaOpts). Monitorea el uso de CPU/RAM del servidor.

" Port 9000 already in use ": Otro servicio ya está usando el puerto 9000. Puedes cambiar el puerto de SonarQube en sonar.properties o encontrar y detener el otro servicio.

Bash

sudo netstat -tulnp | grep 9000

Siguiendo estos pasos detallados, tendrás una instalación funcional de SonarQube en tu servidor Linux. ¡Recuerda siempre consultar la documentación oficial de SonarQube para las versiones más recientes y sus requisitos específicos!