Cómo instalar SonarQube en Ubuntu 22.04
SonarQube o antes Sonar es una plataforma de código abierto para el análisis estático de código y la seguridad del código. Te permite realizar análisis estáticos de código y calidad del código para detectar errores y mejorar la seguridad de las aplicaciones. También proporciona informes como código duplicado, normas de codificación, complejidad del código y recomendaciones de seguridad.
Con SonarQube, puedes automatizar el análisis estático de código para 29 lenguajes de programación. Puedes integrar fácilmente SonarQube con tus herramientas CI/CD existentes, como Jenkins, Azure DevOps, o IDE como IntelliJ y Visual Code Studio.
En esta guía, aprenderás a instalar el análisis estático de código SonarQube en el servidor Ubuntu 22.04. También aprenderás a instalar PostgreSQL, que se utilizará como base de datos para SonarQube, y el servidor web Nginx, que se utilizará como proxy inverso.
Requisitos previos
Antes de empezar esta guía, debes tener lo siguiente:
- Un servidor Ubuntu 22.04 con el cortafuegos UFW activado.
- Un usuario no root con privilegios sudo/administrador.
- Un nombre de dominio apuntando a la dirección IP del servidor Ubuntu.
Instalar Java OpenJDK
Tu primer paso aquí es instalar el OpenJDK de Java en tu sistema Ubuntu. El servidor SonarQube requiere que Java OpenJDK v11 esté instalado en tu máquina Linux.
Antes de empezar a instalar paquetes, ejecuta el siguiente comando apt para actualizar y refrescar tu repositorio de índice de paquetes de Ubuntu.
sudo apt update
A continuación, instala Java OpenJDK v11 mediante el siguiente comando apt. La versión OpenJDK por defecto en el último Ubuntu 22.04 es Java OpenJDK v11.
Introduce Y cuando se te pida que confirmes la instalación y pulsa ENTER para continuar.
sudo apt install default-jdk
Una vez instalado Java OpenJDK, comprueba la versión de Java utilizando el siguiente comando java. Verás la salida de la versión de Java que está instalada en tu sistema.
java -version
Instalación del sistema de base de datos PostgreSQL
SonarQube admite varios sistemas de bases de datos, como PostgreSQL, Microsoft SQL Server y la base de datos oracle. Para este ejemplo, utilizarás PostgreSQL como base de datos para tu instalación de SonarQube.
En el momento de escribir esto, la última versión de SonarQube requería al menos PostgreSQL v9.6. En esta guía, instalarás PostgreSQL v13 desde el repositorio oficial de PostgreSQL.
Primero, añade la clave GPG del repositorio PostgreSQL utilizando el siguiente comando.
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Ahora, añade el repositorio PostgreSQL para el sistema Ubuntu utilizando 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'
A continuación, actualiza y refresca tu índice de paquetes de Ubuntu.
sudo apt update
Ahora, instala la base de datos PostgreSQL v13 mediante el siguiente comando apt. Introduce Y cuando se te pida que confirmes la instalación y pulsa INTRO para continuar.
sudo apt install postgresql-13
Una vez instalado PostgreSQL, ejecuta el siguiente comando para verificar el servicio ‘postgresql’ y asegurarte de que el servicio se está ejecutando.
sudo systemctl is-enabled postgresql sudo systemctl status postgresql
Verás que el servicio ‘postgresql‘ está habilitado, lo que significa que se ejecutará automáticamente al arrancar el sistema. Y el estado actual del servicio ‘postgresql’ es en ejecución.
Con el PostgreSQL instalado en tu servidor, estás listo para configurar una nueva base de datos y un nuevo usuario para el SonarQube a través del intérprete de comandos PostgreSQL.
Ejecuta el siguiente comando para iniciar sesión en el shell PostgreSQL.
sudo -u postgres psql
Ahora, ejecuta las siguientes consultas PostgreSQL para crear una nueva base de datos y un nuevo usuario para SonarQube. En este ejemplo, crearás la base de datos PostgreSQL y el usuario‘sonarqube‘. Y asegúrate de cambiar la contraseña por una contraseña segura.
CREATE USER sonarqube WITH PASSWORD 'Password'; CREATE DATABASE sonarqube OWNER sonarqube; GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
A continuación, ejecuta las siguientes consultas para comprobar la lista de bases de datos y usuarios en el servidor PostgreSQL.
\l \du
Si tu base de datos y tu usuario están creados, verás la base de datos ‘sonarqube’ en la lista de bases de datos, y el usuario ‘sonarqube’ en la lista de usuarios.
Por último, cierra la sesión en PostgreSQL utilizando la siguiente consulta.
\q
Configurar el sistema
Para instalar SonarQube en un sistema Linux, debes tener un usuario dedicado que vaya a ejecutar SonarQube y algunas configuraciones adicionales como ulimit y los parámetros del kernel.
Ahora, crearás un nuevo usuario para SonarQube, y configurarás los parámetros personalizados del kernel a través del archivo sysctl.conf, y configurarás ulimit.
Ejecuta el siguiente comando para crear un nuevo usuario‘sonarqube‘ en tu sistema.
sudo useradd -b /opt/sonarqube -s /bin/bash sonarqube
A continuación, abre el archivo /etc/sysctl. conf con el editor nano.
sudo nano /etc/sysctl.conf
Añade la siguiente configuración al final de la línea. El SonarQube requiere que el parámetro del kernel vm.max_map_count sea mayor que ‘524288‘ y que fx.file-max sea mayor que‘131072‘.
vm.max_map_count=524288 fs.file-max=131072
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora, ejecuta el siguiente comando sysctl para aplicar los nuevos cambios en el archivo ‘/etc/sysctl.conf’.
sudo sysctl --system
En la siguiente salida, puedes ver que se han aplicado los nuevos parámetros del kernel.
Next, run the following command to set up ulimit for the SonarQube. This will take temporary effects on your system, when the system is rebooted, the ulimits will revert to default.
ulimit -n 131072 ulimit -u 8192
Para que la configuración de ulimit sea permanente, crea un nuevo archivo de configuración‘/etc/security/limits.d/99-sonarqube.conf‘ utilizando el siguiente comando.
sudo nano /etc/security/limits.d/99-sonarqube.conf
Añade la siguiente configuración al archivo.
sonarqube - nofile 131072 sonarqube - nproc 8192
Guarda el archivo y cierra el editor cuando hayas terminado.
Ahora que has completado la configuración de tu sistema Ubuntu para la instalación de SnonarQube. En el siguiente paso descargarás el paquete SonarQube y configurarás la instalación de SonarQube.
Descarga del paquete SonarQube
SonarQube puede instalarse de dos formas diferentes, mediante un archivo zip y una imagen Docker. En este ejemplo, instalarás SonarQube mediante el paquete de archivo zip que descargarás de la página oficial de descargas de SonarQube.
En el momento de escribir esto, la última versión de SonarQube es la v9.6.1, que instalarás en los siguientes pasos.
Antes de descargar el paquete SonarQube, ejecuta el siguiente comando apt para instalar un paquete básico como unzip y wget.
sudo apt install unzip software-properties-common wget
Ahora, descarga el paquete SonarQube mediante el siguiente comando wget.
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.6.1.59531.zip
Una vez descargado SonarQube, verás el archivo zip‘sonarqube-9.6.1.59531.zip‘ en tu directorio de trabajo.
Extrae el paquete SonarQube utilizando el comando unzip que aparece a continuación. Deberías obtener un nuevo directorio ‘sonarqube-9.6.1.59531′ donde se almacena el paquete SonarQube.
unzip sonarqube-9.6.1.59531.zip
Mueve el directorio ‘sonarqube-9.6.1.59531′ al directorio‘/opt/sonarqube‘ utilizando el siguiente comando.
mv sonarqube-9.6.1.59531 /opt/sonarqube
Por último, cambia la propiedad del directorio de instalación de SonarQube ‘/opt/sonarqube’ al usuario ‘sonarquba’ mediante el comando chown como se indica a continuación.
sudo chown -R sonarqube:sonarqube /opt/sonarqube
Ahora ya has descargado el paquete SonarQube en el directorio de instalación‘/opt/sonarqube‘. A continuación, configurarás la instalación de SonarQube y, después, crearás un archivo de servicio systemd para SonarQube.
Configurar SonarQube
Tras descargar el paquete SonarQube, configurarás la instalación de SonarQUbe editando el archivo de configuración por defecto ‘/opt/sonarqube/conf/sonar.properties’.
Añadirás los detalles de la base de datos PostgreSQL, establecerás el montón máximo de memoria para el proceso Elasticsearch, y configurarás el host web y el puerto para el servicio SonarQube mediante el archivo ‘/opt/sonarqube/conf/sonar.properties’. Y por último, configura SonarQube como un servicio systemd.
Ahora, abre el archivo de configuración de SonarQube ‘/opt/sonarqube/conf/sonar. properties’ utilizando el editor nano.
nano /opt/sonarqube/conf/sonar.properties
Para la configuración de la base de datos, descomenta algunas de las siguientes opciones y cambia el valor por defecto utilizando los detalles de tu base de datos.
sonar.jdbc.username=sonarqube sonar.jdbc.password=Password
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
Ahora, descomenta la siguiente configuración para establecer el tamaño máximo de memoria heap para el proceso elasticsearch. En este ejemplo, el heap máximo será de 512 MB.
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Por último, descomenta y cambia las siguientes configuraciones para establecer la dirección IP y el puerto del SonarQube que se ejecutará. Además, el nivel de registro será ‘INFO» y se almacenará en el directorio ‘logs’ del directorio de instalación de SonarQube.
sonar.web.host=127.0.0.1 sonar.web.port=9000 sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
Guarda el archivo y sal del editor cuando hayas terminado.
Cuando hayas terminado la configuración de SonarQube. Ahora, configurarás el archivo de servicio systemd para SonarQube. Esto te permitirá controlar fácilmente el proceso de SonarQube mediante el comando systemctl.
Ejecuta el siguiente comando para crear un nuevo archivo de servicio systemd‘/etc/systemd/system/sonarqube.service‘.
sudo nano /etc/systemd/system/sonarqube.service
Añade la siguiente configuración al archivo.
[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=sonarqube Group=sonarqube Restart=always LimitNOFILE=65536 LimitNPROC=4096 [Install] WantedBy=multi-user.target
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora, recarga el gestor systemd utilizando el siguiente comando.
sudo systemctl daemon-reload
Después, inicia y habilita el ‘sonarqube.service’ mediante el siguiente comando systemctl.
sudo systemctl start sonarqube.service sudo systemctl enable sonarqube.service
Por último, comprueba el estado de «sonarqube.service» utilizando el siguiente comando y asegúrate de que se está ejecutando.
sudo systemctl status sonarqube.service
Verás el resultado en la siguiente captura de pantalla. El estado de ‘sonarqube.service’ es en ejecución, y también está habilitado, lo que significa que se ejecutará automáticamente al arrancar el sistema.
Ahora que el SonarQube se está ejecutando como un servicio systemd, instalarás y configurarás un proxy inverso para el SonarQube que se ejecuta en localhost con el puerto por defecto TCP‘9000‘.
Ejecutar SonarQube con el proxy inverso
Tu instalación de SonarQube ya está en marcha, ahora puedes instalar el servidor web Nginx y configurar los bloques de servidor que se utilizarán como proxy inverso para SonarQube.
Ejecuta el siguiente comando apt para instalar el servidor web Nginx en tu sistema Ubuntu. Introduce Y cuando se te pida que confirmes la instalación y pulsa ENTER para continuar.
sudo apt install nginx
Una vez instalado nginx, verifica el servicio nginx y asegúrate de que el estado del servicio es en ejecución mediante el comando systemctl como se indica a continuación.
sudo systemctl is-enabled nginx sudo systemctl status nginx
Verás que el servicio nginx está habilitado, lo que significa que se ejecutará automáticamente al arrancar el sistema. Y el estado actual del servicio nginx es en ejecución.
Una vez que tengas el servidor web Nginx en ejecución, crearás una nueva configuración de bloques de servidor que se utilizará como proxy inverso para SonarQube.
Crea una nueva configuración de bloques de servidor ‘/etc/nginx/sites-available/sonarqube.conf’ utilizando el siguiente comando.
sudo nano /etc/nginx/sites-available/sonarqube.conf
Añade la siguiente configuración a tu archivo y asegúrate de cambiar el nombre de dominio.
server { listen 80; server_name sonar.hwdomain.io; 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 http://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; } }
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, activa la configuración del bloque del servidor ‘sonarqube.conf’ creando un enlace simbólico de ese archivo al directorio‘/etc/nginx/sites-enabled‘. A continuación, verifica tus archivos de configuración de Nginx.
sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/ sudo nginx -t
Si tienes archivos de configuración de Nginx adecuados y correctos, deberías ver un mensaje de salida como«test is successfull».
Por último, ejecuta el siguiente comando systemctl para reiniciar el servicio nginx y aplicar la nueva configuración del bloque del servidor.
sudo systemctl restart nginx
Instalación de SonarQube
Una vez finalizada la configuración del proxy inverso para SonarQube, ahora puedes acceder a tu instalación de SonarQube a través de tu dominio y establecer algunas configuraciones básicas de SonarQube.
Abre tu navegador web y visita el nombre de dominio de tu instalación de SonarQube (por ejemplo: http://sonar.hwdomain.io).
Ahora aparecerá la página de inicio de sesión de SonarQube. Introduce el nombre de usuario y la contraseña por defecto admin/admin y haz clic en Iniciar sesión.
Una vez que hayas iniciado sesión, se te pedirá que establezcas una nueva contraseña para SonarQube. Introduce la antigua contraseña admin, luego introduce la nueva contraseña fuerte y repite, luego haz clic en Actualizar.
Ahora se te mostrará el panel de usuario de SonarQube en la siguiente captura de pantalla.
Conclusión
En esta guía, has instalado SonarQube en el último servidor Ubuntu 22.04. Además, has completado la instalación básica de la base de datos PostgreSQL a través del repositorio oficial de PostgreSQL y has instalado el servidor web Nginx. Después, también has configurado el proxy inverso para el SOnarQube con bloques de servidor Nginx.
SonarQube ya está instalado en tu servidor Ubuntu. Ahora puedes añadir el proyecto que vas a analizar al SonarQube a través del repositorio git.