Cómo instalar SonarQube con Let’s Encrypt en Ubuntu 20.04

Cómo instalar SonarQube con Let’s Encrypt en Ubuntu 20.04

 

El sueño de todo desarrollador es tener un código limpio y sin problemas que pueda implementarse fácilmente en entornos de ensayo y producción. Una herramienta que puede ayudarlo a lograr esto en su canalización de CI/CD es SonarQube . SonarQube es una herramienta multiplataforma y basada en la web que se utiliza para la inspección continua del código fuente. Está escrito en Java. SonarQube le permite escribir código más limpio y seguro al inspeccionar el código y detectar errores y otras inconsistencias.

SonarQube se puede integrar en plataformas como GitHub, Gitlab, BitBucket y Azure DevOps, por mencionar algunas plataformas. Viene en varias ediciones, incluidas las ediciones Community, Developer, Enterprise y Datacenter.

En este tutorial, aprendemos cómo instalar SonarQube en Ubuntu 20.04 . Instalaremos la edición Community, ya que es gratis para descargar y habilitar el certificado SSL (https) con Let’s Encrypt configurando Nginx como un proxy inverso.

requisitos previos

Antes de comenzar, asegúrese de cumplir con los siguientes requisitos:

  1. Ubuntu 20.04 LTS con un usuario sudo configurado.
  2. Asegúrese de que su sistema tenga un mínimo de 4 GB de RAM y 2 núcleos de CPU virtuales

Necesitarás instalar algunas herramientas.

$ sudo apt update
$ sudo apt install net-tools unzip vim curl

Además, necesita aumentar el kernel de memoria virtual

$ sudo sysctl -w vm.max_map_count=262144

con el máximo número de archivos abiertos

$ sudo sysctl -w fs.file-max=65536

y los límites de los recursos

$ ulimit -n 65536
$ ulimit -u 4096

Puede hacer que los cambios sean persistentes modificando los parámetros del sistema en el archivo de configuración /etc/sysctl.conf

$ sudo vim /etc/sysctl.conf

Agregue las siguientes líneas.

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

Guardar y Salir. A continuación, abra el limits.confarchivo

$ sudo vim /etc/security/limits.conf

En la parte inferior, agregue las siguientes líneas

sonarqube - nofile 65536
sonarqube - nproc 4096

Guardar y Salir. Para que los cambios surtan efecto, reinicie su servidor.

Paso 1: Instalar OpenJDK

Como está escrito en Java, SonarQube depende de Java para funcionar. Instalaremos OpenJDK 11 que proporciona java.

$ sudo apt install openjdk-11-jdk

Una vez instalado, puede verificar la versión de Java.

$ java -version

Paso 2: Instalar la base de datos PostgreSQL

A partir de 2016, SonarQube dejó de admitir MySQL y ahora solo admite PostgreSQL. Como tal, necesitamos instalar la base de datos PostgreSQL.

Para comenzar, descargue y agregue la clave GPG de PostgreSQL.

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

A partir de entonces, agregue el repositorio de PostgreSQL.

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

Luego actualice el índice del paquete para sincronizar el nuevo repositorio.

$ sudo apt update

Una vez que haya terminado de actualizar las listas de paquetes, instale la base de datos PostgreSQL y sus dependencias.

$ sudo apt install postgresql postgresql-contrib

De forma predeterminada, el servicio PostgreSQL se inicia después de la instalación; si no se inicia, ejecute el siguiente comando.

$ sudo systemctl start postgresql

Solo para confirmar que todo funciona como se esperaba, verifique su estado de ejecución.

$ sudo systemctl status postgresql
Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

También puede confirmar el puerto en el que está escuchando:

$ sudo netstat -pnltu | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      7768/postgres       
tcp6       0      0 ::1:5432                :::*                    LISTEN      7768/postgres   

Habilite PostgreSQL para que se inicie automáticamente al arrancar:

$ sudo systemctl enable postgresql

Hasta ahora, nuestro PostgreSQL está funcionando sin problemas.

Paso 3: configurar PostgreSQL

Continuando, vamos a establecer la contraseña para el usuario de Postgres que suele venir por defecto cuando se instala PostgreSQL. Para hacerlo, ejecute el comando:

$ sudo passwd postgres

Escriba la contraseña y confírmela. A continuación, cambie al usuario de Postgres.

$ su - postgres

A continuación, proceda y cree un nuevo usuario de base de datos.

$ createuser sonar

Una vez hecho esto, cambie al indicador de PostgreSQL usando el comando:

$ psql

Con acceso al shell de PostgreSQL, cree una contraseña para el usuario que acaba de crear.

 ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';

A continuación, crea una base de datos de SonarQube con el usuario que creaste como propietario

CREATE DATABASE sonarqube OWNER sonar;

Luego, asigne u otorgue todos los privilegios al uso de la base de datos de modo que tengan todos los privilegios para modificar la base de datos.

GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;

Ahora sal de la base de datos.

\q

Paso 4: Descarga y configura SonarQube

Continuando, vamos a descargar el último archivo zip binario de SonarQube. Por el momento, la última versión de Community Edition, que es una versión de Long Term Service (LTS), es la versión 9.0.1 de SonarQube. Puede dirigirse a la página de descarga de SonarQube para obtener las últimas descargas.

Para descargar el archivo zip, emita el comando:

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

A continuación, descomprima el archivo comprimido.

$ unzip sonarqube-9.0.1.46107.zip

Y muévalo a la ruta /opt/.

$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube

Paso 5: Crear nuevo usuario y grupo

Continuando, crearemos un nuevo usuario y grupo que ejecutará el servicio SonarQube. Entonces, crea el grupo.

$ sudo groupadd sonar

A continuación, cree el usuario con el directorio de inicio establecido en /opt/sonarqube mientras agrega el usuario al grupo recién creado.

$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar

Luego establezca la propiedad en el directorio /opt/sonarqube.

$ sudo chown -R sonar:sonar /opt/sonarqube/

Paso 6: Configurar SonarQube

Ahora configuremos SonarQube. Abra el archivo de configuración de SonarQube.

$ sudo vim  /opt/sonarqube/conf/sonar.properties

Ubique y descomente las siguientes líneas

sonar.jdbc.username=
sonar.jdbc.password=

Estos representan el usuario y la contraseña de la base de datos de SonarQube que creamos en el servidor de la base de datos de PostgreSQL. Por lo tanto, complete los valores en consecuencia.

sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password

A continuación, modifique estas líneas para que se vean como se proporciona

sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError

A partir de entonces, modifique las siguientes líneas para que aparezcan como se ven.

sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs

A continuación, modifique el usuario que ejecutará el servicio de SonarQube editando el archivo que se muestra.

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

Desplácese hacia abajo y asegúrese de que la línea de abajo aparece como se muestra.

RUN_AS_USER=sonar

Paso 7: Cree un archivo de servicio de Systemd para SonarQube

Por el momento, nuestro sistema no tiene forma de iniciar el servicio de SonarQube. Por lo tanto, necesitamos crear un servicio systemd. Para hacerlo, ejecute el comando:

$ sudo vim  /etc/systemd/system/sonarqube.service

Agregue 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
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target

Guarde los cambios y salga del archivo.

Habilite el servicio de SonarQube para que se inicie al arrancar

$ sudo systemctl enable sonarqube

E inicia el servicio de SonarQube.

$ sudo systemctl start sonarqube

Para asegurarse de que el servicio de SonarQube se está ejecutando, ejecute el comando:

$ sudo systemctl status sonarqube
Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Además, asegúrese de que el puerto 9000 esté abierto

$ sudo ufw allow '9000'
Rules updated
Rules updated (v6)

Compruebe si el servicio está escuchando en el puerto 9000

$ sudo netstat -pnltu | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      65140/java  

Ahora puede intentar verificar si puede acceder a la página de inicio de sesión ingresando la IP pública de su servidor y el número de puerto de su navegador, es decir http://<server-ip>:9000/. El nombre de usuario administrador predeterminado es ‘admin’ y la contraseña es ‘admin’.

Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Sonarqube le solicitará que actualice la contraseña para cambiar la predeterminada.

Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Paso 8: Instalar y configurar Nginx con SSL (opcional)

Para acceder a su Sonarqube con un nombre de dominio habilitado para SSL, deberá instalar un proxy inverso como Nginx. El servidor web realizará conexiones proxy a SonarQube para que los desarrolladores puedan acceder a él desde un nombre de dominio seguro.

La instalación de Nginx es simple y directa y se puede hacer con un solo comando.

$ sudo apt install nginx

Después de la instalación, habilite el servidor web Nginx para que se inicie en el momento del arranque.

$ sudo systemctl enable nginx

y comenzar el servicio

$ sudo systemctl start nginx

Para que el servidor web esté al tanto de SonarQube, vamos a crear un archivo de configuración que se muestra.

$ sudo vim  /etc/nginx/sites-available/sonarqube.conf

Luego pegue el contenido proporcionado.

server {

listen 80;
server_name example.com or SERVER-IP;
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;
}
}

Guardar y Salir. Luego habilite el sitio de Sonarqube:

$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf  /etc/nginx/sites-enabled/sonarqube.conf

Comprobar si la configuración es correcta

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Luego reinicie el servidor web Nginx para que se apliquen los cambios.

$ sudo systemctl restart nginx

Ahora necesitamos configurar el firewall UFW para permitir nginx. Para lograr esto, ejecute los comandos

$ sudo ufw allow 'Nginx Full'

A continuación, vuelva a cargar el cortafuegos para efectuar los cambios.

$ sudo ufw --reload

Ahora puedes acceder a tu SonarQube a través de su nombre de dominio

Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Aquí, vamos a utilizar el certificado gratuito let’s encrypt. Para configurar eso, necesitamos ejecutar cerbot para Nginx:

$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
 Plugins selected: Authenticator nginx, Installer nginx
 Enter email address (used for urgent renewal and security notices) (Enter 'c' to
 cancel): alain@websitefortesting.com                                                    
 
 Please read the Terms of Service at
 https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
 agree in order to register with the ACME server at
 https://acme-v02.api.letsencrypt.org/directory
 
 (A)gree/(C)ancel: A
 
 Would you be willing to share your email address with the Electronic Frontier
 Foundation, a founding partner of the Let's Encrypt project and the non-profit
 organization that develops Certbot? We'd like to send you email about our work
 encrypting the web, EFF news, campaigns, and ways to support digital freedom.
 
 (Y)es/(N)o: N Saving debug log to /var/log/letsencrypt/letsencrypt.log
 Plugins selected: Authenticator nginx, Installer nginx
 Which names would you like to activate HTTPS for?
 
 1: websitefortesting.com
 
 Select the appropriate numbers separated by commas and/or spaces, or leave input
 blank to select all options shown (Enter 'c' to cancel): 1
 Obtaining a new certificate
 Performing the following challenges:
 http-01 challenge for websitefortesting.com
 Waiting for verification…
 Cleaning up challenges
 Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/sonarqube.conf
 Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
 
 1: No redirect - Make no further changes to the webserver configuration.
 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
 new sites, or if you're confident your site works on HTTPS. You can undo this
 change by editing your web server's configuration.
 
 Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
 Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sonarqube.conf
 
 Congratulations! You have successfully enabled https://websitefortesting.com
 You should test your configuration at:
 https://www.ssllabs.com/ssltest/analyze.html?d=websitefortesting.com
 
 IMPORTANT NOTES:
 Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/websitefortesting.com/fullchain.pem
 Your key file has been saved at:
 /etc/letsencrypt/live/websitefortesting.com/privkey.pem
 Your cert will expire on 2021-11-27. To obtain a new or tweaked
 version of this certificate in the future, simply run certbot again
 with the "certonly" option. To non-interactively renew all of
 your certificates, run "certbot renew"
 If you like Certbot, please consider supporting our work by:
 Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 Donating to EFF:                    https://eff.org/donate-le 

De forma predeterminada, let’s encrypt agregará algunas líneas en el archivo de bloque del servidor Nginx.

Deberías tener algo como esto

server {
         server_name websitefortesting.com;
         add_header Strict-Transport-Security max-age=2592000;
         #rewrite ^ https://$server_name$request_uri? permanent;
         access_log  /var/log/nginx/sonarqube.access.log;
         error_log   /var/log/nginx/sonarqube.error.log;
     proxy_buffers 16 64k;     
           proxy_buffer_size 128k;     

           location / {
             proxy_pass http://127.0.0.1:9000;            
             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;     
           } 
          listen 443 ssl; # managed by Certbot 
          ssl_certificate /etc/letsencrypt/live/websitefortesting.com/fullchain.pem; # managed by Certbot 
           ssl_certificate_key /etc/letsencrypt/live/websitefortesting.com/privkey.pem; # managed by Certbot 
          include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 }
 server {
     if ($host = websitefortesting.com) {
         return 301 https://$host$request_uri;
     } # managed by Certbot
      listen 80;      server_name websitefortesting.com; return 404; # managed by Certbot

 }

Paso 10: Accede a SonarQube con HTTPS

Ahora puedes acceder a SonarQube de forma segura con la URL HTTPS configurada con let’s encrypt.

https://domain-name
Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Después de iniciar sesión, aparecerá la página de destino.

Cómo instalar SonarQube con Let's Encrypt en Ubuntu 20.04

Conclusión

En este tutorial, aprendimos cómo instalar SonarQube en Ubuntu 20.04. Hemos habilitado Sonarqube con SSL usando el certificado Let’s Encrypt usando Nginx como proxy inverso.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.