LINUX

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 se pueda implementar fácilmente en entornos de ensayo y producción. Una herramienta que puede ayudarlo a lograr esto es la canalización de CI/CD. 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 su código y detectar errores y otras inconsistencias.

SonarQube se puede integrar en plataformas como GitHub, Gitlab, BitBucket y Azure DevOps, por nombrar algunas. 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 comunitaria ya que es gratis para descargar y activar certificado SSL (https) con vamos a cifrar 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 vCPU

Necesitarás instalar algunas herramientas.

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

También necesita aumentar el núcleo 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 límites de recursos

$ ulimit -n 65536
$ ulimit -u 4096

Puede hacer que los cambios sean persistentes cambiando los parámetros del sistema de /etc/sysctl.conf Archivo de configuración

$ 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. Después de eso, ábrelo. limits.conf expediente

$ 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 el servidor.

Paso 1: Instalar OpenJDK

Debido a que 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 comprobar su versión de Java.

$ java -version

Paso 2: Instale la base de datos PostgreSQL

A partir de 2016, SonarQube dejó de admitir MySQL y ahora solo es compatible con 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 -

Después de eso, 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 de 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 el estado de salud.

$ sudo systemctl status postgresql

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

$ sudo systemctl enable postgresql

Hasta ahora nuestro PostgreSQL está funcionando sin problemas.

Paso 3: configurar PostgreSQL

Continuando, estableceremos la contraseña para el usuario de Postgres, que generalmente viene por defecto cuando se instala PostgreSQL. Para hacer esto, ejecute el comando:

$ sudo passwd postgres

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

$ su - postgres

Luego continúe 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;

A continuación, asigne u otorgue todos los privilegios al uso de la base de datos para que tenga 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

A continuación, descargaremos el último archivo zip binario de SonarQube. Por el momento, la última versión de Community Edition, que es una versión Long Term Service (LTS), es la versión 9.0.1 de SonarQube. Puedes dirigirte a Página de descarga de SonarQube para las últimas descargas.

Para descargar el archivo zip, ejecute el comando:

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

A continuación, descomprima el archivo archivado.

$ unzip sonarqube-9.0.1.46107.zip

Y muévelo a /opt/ ruta.

$ 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

Luego 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 vamos a configurar 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 son el usuario y la contraseña de la base de datos de SonarQube que creamos en el servidor de la base de datos PostgreSQL. Así que llena los valores en consecuencia.

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

Luego modifique estas líneas para que se vean como lo que se proporciona

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

Después de eso, modifique las siguientes líneas para que aparezcan como se muestra.

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, cambie 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 aparezca como se muestra.

RUN_AS_USER=sonar

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

Actualmente, nuestro sistema no tiene forma de iniciar el servicio de SonarQube. Por lo tanto, necesitamos crear un servicio systemd. Para hacer esto, 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 sus cambios y salga del archivo.

Habilite el servicio de SonarQube para que se inicie al inicio

$ 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

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

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

Verifique que 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 y el número de puerto de su servidor en su navegador, es decir http://<server-ip>:9000/. El nombre de usuario predeterminado del administrador es «admin» y la contraseña es «admin».

Página de inicio de sesión de SonarQube

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

Cambiar tu contraseña de SonarQube

Paso 8: Instale y configure Nginx con SSL (opcional)

Para acceder a su Sonarqube con su nombre de dominio habilitado para SSL, deberá instalar un proxy inverso como Nginx. El servidor web se conectará 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 realizar 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 comienza el servicio

$ sudo systemctl start nginx

Para que el servidor web reconozca SonarQube, crearemos un archivo de configuración que se muestra.

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

Luego pegue el contenido provisto.

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. Entonces activa el sitio de Sonarqube:

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

Verifica que la configuración sea 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 los cambios surtan efecto.

$ 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 realizar los cambios.

$ sudo ufw --reload

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

Aquí, usaremos gratis para cifrar el certificado. Para configurar esto, 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 al 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
SonarQube con SSL habilitado

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

Conclusión

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

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar