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:
- Ubuntu 20.04 LTS con un usuario sudo configurado.
- 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».
Sonarqube le pedirá que actualice su contraseña para cambiar la predeterminada.
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
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.