SonarQube es una plataforma de código abierto para inspeccionar continuamente la calidad del código de las aplicaciones. Está escrito en lenguaje Java y admite múltiples bases de datos. Puede inspeccionar el código y verificar el estado de una aplicación para más de 20 lenguajes de programación, incluidos Java, C, C ++, C #, PHP y lenguajes web como JavaScript, HTML y CSS. SonarQube puede analizar el código fuente, encontrar vulnerabilidades de seguridad, detectar errores y mostrar el resultado en un panel basado en la web. Puedes integrar fácilmente SonarQube con Maven, Ant, Gradle, MSBuild, LDAP, Active Directory y GitHub.
En este tutorial, aprenderemos a instalar SonarQube en un servidor Ubuntu 18.04 LTS (Bionic Beaver).
Requisitos
- Un servidor con Ubuntu 18.04.
- Un usuario no root con privilegios sudo.
Cómo empezar
Antes de comenzar, deberá actualizar su sistema con la última versión. Puede hacerlo ejecutando el siguiente comando:
sudo apt-get update -y
sudo apt-get upgrade -y
Una vez que su sistema esté actualizado, reinícielo para aplicar los cambios.
Instalar Java
SonarQube está escrito en lenguaje Java, por lo que deberá instalar Java en su sistema. Primero, agregue el repositorio de Java con el siguiente comando:
sudo add-apt-repository ppa:webupd8team/java
A continuación, actualice el repositorio e instale Java con el siguiente comando:
sudo apt-get update -y
sudo apt-get install oracle-java8-installer -y
Una vez que Java esté instalado, verifique la versión de Java usando el siguiente comando:
java -version
Salida:
openjdk version "10.0.2" 2018-07-17 OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3) OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3, mixed mode)
Instalar y configurar PostgreSQL
De forma predeterminada, la última versión de PostgreSQL no está disponible en el repositorio predeterminado de Ubuntu 18.04. Por lo tanto, deberá agregar el repositorio de PostgreSQL a su sistema.
Puedes hacer esto con 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'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
A continuación, actualice el repositorio e instale PostgreSQL con el siguiente comando:
sudo apt-get update -y
sudo apt-get install postgresql postgresql-contrib
Una vez completada la instalación, verifique el estado de PostgreSQL con el siguiente comando:
sudo systemctl status postgresql
Salida:
? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Sun 2018-12-02 08:49:29 UTC; 4h 30min ago Process: 1295 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 1295 (code=exited, status=0/SUCCESS) Dec 02 08:49:29 ubuntu1804 systemd[1]: Starting PostgreSQL RDBMS... Dec 02 08:49:29 ubuntu1804 systemd[1]: Started PostgreSQL RDBMS.
A continuación, cambie al usuario de postgres con el siguiente comando:
su - postgres
A continuación, cree un usuario de sonda con el siguiente comando:
createuser sonar
A continuación, cambie al shell de PostgreSQL con el siguiente comando:
psql
A continuación, establezca la contraseña para el usuario de la sonda y cree una base de datos de la sonda con el siguiente comando:
ALTER USER sonar WITH ENCRYPTED password 'password';
CREATE DATABASE sonar OWNER sonar;
A continuación, salga del shell de PostgreSQL:
\q
Instalar y configurar SonarQube
Primero, crea un usuario para SonarQube con el siguiente comando:
sudo adduser sonar
A continuación, descarga la última versión de SonarQube con el siguiente comando:
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.6.zip
Una vez completada la descarga, descomprima el archivo descargado con el siguiente comando:
unzip sonarqube-6.7.6.zip
A continuación, copie el directorio extraído en /opt con el siguiente comando:
sudo cp -r sonarqube-6.7.6 /opt/sonarqube
A continuación, otorgue la propiedad al usuario del sonar con el siguiente comando:
sudo chown -R sonar:sonar /opt/sonarqube
A continuación, deberá configurar SonarQube para que se ejecute como usuario de sonda. Puedes hacer esto con el siguiente comando:
sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh
Realice los siguientes cambios:
RUN_AS_USER=sonar
Guarde y cierre el archivo. Luego, abra el archivo de configuración predeterminado de SonarQube y modifique las credenciales de la base de datos con la que creamos anteriormente:
sudo nano /opt/sonarqube/conf/sonar.properties
Realice los siguientes cambios:
sonar.jdbc.username=sonar sonar.jdbc.password=password sonar.jdbc.url=jdbc:postgresql://localhost/sonar sonar.web.host=127.0.0.1 sonar.search.javaOpts=-Xms512m -Xmx512m
Guarde y cierre el archivo cuando haya terminado.
Crear archivo de Systemd Service para SonarQube
A continuación, deberá crear un archivo de servicio systemd para administrar el servicio SonarQube. Puedes hacer esto con el siguiente comando:
sudo nano /etc/systemd/system/sonar.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 [Install] WantedBy=multi-user.target
Guarde y cierre el archivo cuando haya terminado. Luego, inicie el servicio SonarQube y habilítelo para que se inicie en el momento del arranque con el siguiente comando:
sudo systemctl start sonar
sudo systemctl enable sonar
Puedes comprobar el estado del servicio de SonarQube con el siguiente comando:
sudo systemctl status sonar
Salida:
? sonar.service - SonarQube service Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2018-12-02 13:55:34 UTC; 2min 52s ago Process: 2339 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS) Main PID: 2396 (wrapper) Tasks: 133 (limit: 2323) CGroup: /system.slice/sonar.service ??2396 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=SonarQ ??2399 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrapper- ??2445 /usr/lib/jvm/java-8-oracle/jre/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOc ??2545 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp - ??2622 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp - Dec 02 13:55:33 ubuntu1804 systemd[1]: Starting SonarQube service... Dec 02 13:55:33 ubuntu1804 sonar.sh[2339]: Starting SonarQube... Dec 02 13:55:34 ubuntu1804 sonar.sh[2339]: Started SonarQube. Dec 02 13:55:34 ubuntu1804 systemd[1]: Started SonarQube service.
Configurar Apache para SonarQube
De forma predeterminada, SonarQube escucha en el puerto 9000. Por lo tanto, deberá instalar y configurar Apache como proxy inverso para acceder a SonarQube mediante el puerto 80.
Para hacerlo, instala Apache con el siguiente comando:
sudo apt-get install apache2 -y
A continuación, habilite el módulo mod_proxy con el siguiente comando:
sudo a2enmod proxy
sudo a2enmod proxy_http
A continuación, cree un archivo de host virtual de Apache para SonarQube con el siguiente comando:
sudo nano /etc/apache2/sites-available/sonar.conf
Agregue las siguientes líneas:
<VirtualHost *:80> ServerName example.com ServerAdmin [email protected] ProxyPreserveHost On ProxyPass / http://127.0.0.1:9000/ ProxyPassReverse / http://127.0.0.1:9000/ TransferLog /var/log/apache2/sonarm_access.log ErrorLog /var/log/apache2/sonar_error.log </VirtualHost>
Reemplace example.com con su propio nombre de dominio. Guarde y cierre el archivo. Luego, habilite el archivo de host virtual de SonarQube con el siguiente comando:
sudo a2ensite sonar
Finalmente, reinicia el servicio de Apache y SonarQube para aplicar todos los cambios con el siguiente comando:
sudo systemctl restart apache2
sudo systemctl restart sonar
De forma predeterminada, SonarQube almacena sus registros en el directorio /opt/sonarqube/logs. Puedes consultar el registro de SonarQube con el siguiente comando:
sudo tail -f /opt/sonarqube/logs/sonar.log
Salida:
Launching a JVM... Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved. 2018.12.02 13:55:43 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp 2018.12.02 13:55:44 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001 2018.12.02 13:55:45 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch -Epath.conf=/opt/sonarqube/temp/conf/es 2018.12.02 13:55:45 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running 2018.12.02 13:55:48 INFO app[][o.e.p.PluginsService] no modules loaded 2018.12.02 13:55:48 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin] 2018.12.02 13:56:34 INFO app[][o.s.a.SchedulerImpl] Process[es] is up 2018.12.02 13:56:34 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.1.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process420500314195865484properties
También puede consultar el registro web de SonarQube con el siguiente comando:
sudo tail -f /opt/sonarqube/logs/web.log
Salida:
2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarJava / 4.15.0.12310 / 572454b93016ec73a53fe0e07b2ffdc356d21ba9 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPHP / 2.11.0.2485 / 741861a29e5f9a26c6c99c06268facb6c4f4a882 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPython / 1.8.0.1496 / 3fe3bc4d0273a5721ea2fb368dc45b1bb82fede3 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: Git / 1.3.0.869 / 4da53e3f9e55f4f2e5796625cb0c5768ed152079 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: SVN / 1.6.0.860 / 2111fdbd1dddda4ad6d4ed6486fd0b18c1010d3b 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarTS / 1.1.0.1079 / 042c9e65239a47d92d305f9767f730b3cc1e5ed3 2018.12.02 13:57:03 INFO web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarXML / 1.4.3.1027 / 39588245cecf538bb27be4e496ff303b0143d20b 2018.12.02 13:57:07 INFO web[][o.s.s.p.d.m.c.PostgresCharsetHandler] Verify that database charset supports UTF8 2018.12.02 13:57:09 INFO web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/system/migrate_db/*, ...], exclusions=[/api/properties*, ...]}] 2018.12.02 13:57:09 INFO web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000 2018.12.02 13:57:16 INFO web[][o.s.s.p.UpdateCenterClient] Update center: https://update.sonarsource.org/update-center.properties (no proxy)
Accede a SonarQube
SonarQube ya está instalado y configurado. Es hora de acceder a él a través del navegador web.
Abra su navegador web y escriba la URL http://example.com. Será redirigido a la siguiente página:
Aquí, haga clic en Registrar En botón. Debería ver la siguiente página:
Proporcione el nombre de usuario y la contraseña de la cuenta de administrador predeterminados como admin / admin y haga clic en Iniciar sesión En botón. Debería ver el panel predeterminado de SonarQube en la siguiente página:
¡Felicidades! ha instalado correctamente SonarQube en el servidor Ubuntu 18.04. Ahora puede realizar fácilmente revisiones automáticas y comprobar el estado de una aplicación con SonarQube.