Cómo instalar SonarQube con Nginx en Ubuntu 16.04
Sonarqube es una plataforma de código abierto para la inspección continua de la calidad del código. Está escrito en lenguaje Java y ofrece soporte por idiomas. Es compatible con varios lenguajes como Perl, PHP, Ruby, etc. Proporciona informes sobre varios análisis de calidad del código (como errores de codificación duplicados, el porcentaje de pruebas unitarias que fallaron y tuvieron éxito), cobertura del código y complejidad del código.
Arquitectura SonarQube
La plataforma SonarQube está formada por 4 componentes:
Un Sonar Runner, el código fuente que desea analizar, un analizador de sonar que toma el código fuente y lo analiza a través de varios procesos y finalmente proporciona un informe que se lleva a la base de datos y luego se puede utilizar para fines de informes.
Idealmente, debemos elegir cualquiera de estas herramientas de Java, a saber, Ant, Gradle, Maven, que invoca Sonar Runner y tomará su código fuente del repositorio. Como se mencionó anteriormente, SonarQube proporciona una mejora continua de su código fuente. Es compatible con muchos complementos, que integrarán el código fuente automáticamente desde los repositorios.
A continuación, viene el Sonar Analyzer, que analiza su código fuente. SonarQube admite más de 20 idiomas. Según el idioma que necesitamos analizar, debemos habilitar esos complementos que se encargarán de analizar esos códigos fuente según sea necesario.
Squid es un servidor de almacenamiento en caché, que se utiliza para almacenar informes temporales en el caché. Por tanto, su principal ventaja es que mantiene los informes en la caché y, por tanto, aumenta el rendimiento del servidor. Una vez que completa el análisis del código fuente, lo envía a la cola donde necesita procesar estos resultados. Después de esto, lo enviará a la base de datos donde está almacenado. Normalmente es compatible con la base de datos h2 de forma predeterminada. Pero no es escalable. Por lo tanto, siempre se recomienda integrar su servidor de base de datos con el servidor SonarQube. SonarQube admite muchos servidores de bases de datos como MSSQL, Oracle, PostgreSQL y MySQL. En función del requisito, podemos elegir la base de datos adecuada que cumpla con nuestro propósito. Por lo tanto, brinda flexibilidad para elegir el requerido e integrarlo al servidor SonarQube. Una vez que instale Sonar Qube y Sonar Runner, podemos acceder a los informes desde la URL http://localhost:9000
.
Prerrequisitos
- Requiere al menos 2 GB de RAM para funcionar de manera eficiente.
- Mínimo de 10 a 20 GB de espacio en disco (esto puede variar según la cantidad de código que analice con SonarQube)
- Debe instalarse en discos duros que tengan un excelente rendimiento de lectura y escritura.
En este tutorial, explicaré cómo instalar SonarQube con Nginx en un servidor Ubuntu 16.04. Comencemos con nuestros pasos de instalación uno por uno.
1) Actualizar los repositorios base
En primer lugar, debemos mantener nuestro sistema base actualizado actualizando y actualizando todos los paquetes de software en nuestro servidor.
$apt-get update $apt-get -y upgrade
2) Instalación de paquetes de Java
Como ya comentamos, SonarQube está escrito en lenguaje Java, por lo tanto, requiere una plataforma Java para ejecutarse. Agreguemos los repositorios de Java necesarios e instalemos Java.
$add-apt-repository ppa:webupd8team/java $apt-get update $apt-get -y install oracle-java8-installer $ java -version java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
Debe aceptar el acuerdo de licencia seleccionando «sí» en la ventana de licencia para completar el proceso de instalación.
3) Instalar MySQL
Nuestro siguiente paso es instalar nuestro servidor de base de datos. He planeado integrar MySQL con mi servidor SonarQube. Seguí estos pasos para instalar MySQL 5.6.
$add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty universe' $apt-get update $apt install mysql-server-5.6 $apt install mysql-client-5.6 Reading package lists... Done Building dependency tree Reading state information... Done mysql-client-5.6 is already the newest version (5.6.16-1~exp1). mysql-client-5.6 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. $systemctl start mysql
Durante el paso de instalación, puede establecer su contraseña de root de MySQL. Después de instalar MySQL, asegúrese de reiniciar el servicio y asegurar su instalación de MySQL ejecutando el script de instalación segura como se muestra a continuación:
$ mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist ... Failed! Not critical, keep moving... - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
4) Creación de la base de datos SonarQube
A continuación, necesitamos crear una base de datos para almacenar nuestros informes de análisis de código. He creado mi base de datos y otorgo todos los privilegios necesarios para el usuario «sonarqube» para gestionar el base de datos «sonarqube« usando estos comandos a continuación:
mysql> CREATE DATABASE sonarqube; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES on sonarqube.* to sonarqube@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
5) Instalación de Nginx
Estos informes deben entregarse a través de un servidor web. Nuestro siguiente paso es instalar un servidor web. Estoy instalando Nginx como proxy inverso para administrar mi servidor SonarQube. El uso de un proxy inverso nos permite dejar que Sonarqube se ejecute en el puerto predeterminado 9000. Necesitamos agregar el repositorio Nginx y actualizar los paquetes del repositorio para llevar a cabo las actualizaciones.
$wget -c -O- http://nginx.org/keys/nginx_signing.key | sudo apt-key add - --2016-11-15 06:58:17-- http://nginx.org/keys/nginx_signing.key Resolving nginx.org (nginx.org)... 95.211.80.227, 206.251.255.63, 2001:1af8:4060:a004:21::e3, ... Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1561 (1.5K) [application/octet-stream] Saving to: ‘STDOUT’ - 100%[==================================================================>] 1.52K --.-KB/s in 0s 2016-11-15 06:58:17 (246 MB/s) - written to stdout [1561/1561] OK $echo "deb http://nginx.org/packages/ubuntu/ trusty nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list > /dev/null $apt-get update $apt-get -y install nginx
6) Configurar el host virtual para SonarQube
Para crear el host virtual, simplemente mueva el archivo predeterminado en /etc/nginx/conf.d/ a sonarqube.conf. Solo necesita modificar el nombre del servidor con el nombre del servidor SonarQube y la raíz del documento como se muestra a continuación:
server { listen 80; server_name nodenixbox.com; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/sonarqube; index index.html index.htm; location / { proxy_pass http://localhost:9000;} }
Cree estas carpetas raíz de documentos si no existen.
7) Cómo instalar SonarQube
Necesitamos habilitar el paquete .deb binario del repositorio de SonarQube e instalarlo. Vamos a descargarlo e instalarlo usando los siguientes comandos:
$ echo "deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/" | sudo tee -a /etc/apt/sources.list.d/sonarqube.list > /dev/null $ apt-get update $apt-get -y install sonar
Sonarqube no se inicia de forma predeterminada después de la instalación. Tendremos que configurar Sonarqube antes de iniciar el servicio Sonarqube.
8) Configuración de SonarQube
Necesitamos abrir el archivo de configuración de SonarQube ubicado en /opt/sonar/conf/sonar.properties
. Modifique las credenciales de la base de datos con la que creamos a continuación:
Ahora que Sonarqube está listo, podemos iniciar Sonarqube usando el siguiente comando:
$ service sonar start $ service sonar status ● sonar.service - LSB: Sonar Loaded: loaded (/etc/init.d/sonar; bad; vendor preset: enabled) Active: active (exited) since Tue 2016-11-15 07:13:33 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 9062 ExecStart=/etc/init.d/sonar start (code=exited, status=0/SUCCESS) Nov 15 07:13:32 sonarqube01 systemd[1]: Starting LSB: Sonar... Nov 15 07:13:32 sonarqube01 su[9068]: Successful su for sonar by root Nov 15 07:13:32 sonarqube01 su[9068]: + ??? root:sonar Nov 15 07:13:33 sonarqube01 su[9068]: pam_unix(su:session): session opened for user sonar by (uid=0) Nov 15 07:13:33 sonarqube01 sonar[9062]: Starting SonarQube... Nov 15 07:13:33 sonarqube01 sonar[9062]: Started SonarQube. Nov 15 07:13:33 sonarqube01 systemd[1]: Started LSB: Sonar.
El primer proceso de inicialización tarda algún tiempo en completarse. Es necesario para la migración de la base de datos con la creación del esquema de la base de datos, el llenado de datos y la generación de una instancia de SecureRandom para los ID de sesión.
Podemos analizar los logs de SonarQube al iniciar el servicio, para confirmar con el correcto funcionamiento.
root@sonar01:~# tail -f /opt/sonar/logs/sonar.log 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0.0260s 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0 rows 2016.11.15 07:14:08 INFO web[][DbMigration] -- create_table("active_rules", {}) 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0.0280s 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0 rows 2016.11.15 07:14:08 INFO web[][DbMigration] -- create_table(:active_rule_parameters, {}) 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0.0250s 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0 rows 2016.11.15 07:14:08 INFO web[][DbMigration] == CreateRulesProfiles: migrated (0.0860s) =================================== 2016.11.15 07:14:08 INFO web[][DbMigration] 2016.11.15 07:14:08 INFO web[][DbMigration] == CreateSnapshotSources: migrating ========================================== 2016.11.15 07:14:08 INFO web[][DbMigration] -- create_table(:snapshot_sources, {}) 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0.0220s 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0 rows 2016.11.15 07:14:08 INFO web[][DbMigration] -- index_exists?(:snapshot_sources, :snapshot_id, {:name=>"snap_sources_snapshot_id"}) 2016.11.15 07:14:08 INFO web[][DbMigration] -> 0.0100s 2016.11.15 07:14:08 INFO web[][DbMigration] -- add_index(:snapshot_sources, :snapshot_id, {:name=>"snap_sources_snapshot_id"}) =============================================================================== 2016.11.15 07:14:55 INFO web[][o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"] 2016.11.15 07:14:55 INFO web[][o.s.s.a.TomcatAccessLog] Web server is started 2016.11.15 07:14:55 INFO web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000 2016.11.15 07:14:55 INFO app[][o.s.p.m.Monitor] Process[web] is up 2016.11.15 07:14:55 INFO app[][o.s.p.m.JavaProcessLauncher] Launch process[ce]: /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/opt/sonar/temp -javaagent:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar -cp ./lib/common/*:./lib/server/*:./lib/ce/*:/opt/sonar/lib/jdbc/mysql/mysql-connector-java-5.1.39.jar org.sonar.ce.app.CeServer /opt/sonar/temp/sq-process729761780515088296properties 2016.11.15 07:14:56 INFO ce[][o.s.p.ProcessEntryPoint] Starting ce 2016.11.15 07:14:56 INFO ce[][o.s.ce.app.CeServer] Compute Engine starting up... 2016.11.15 07:14:57 INFO ce[][o.e.plugins] [Ikaris] modules [], plugins [], sites [] 2016.11.15 07:14:58 INFO ce[][o.s.s.e.EsClientProvider] Connected to local Elasticsearch: [127.0.0.1:9001] 2016.11.15 07:14:58 INFO ce[][o.sonar.db.Database] Create JDBC data source for jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance 2016.11.15 07:15:02 INFO ce[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonar 2016.11.15 07:15:02 INFO ce[][o.s.c.c.CePluginRepository] Load plugins 2016.11.15 07:15:05 INFO ce[][o.s.s.c.q.PurgeCeActivities] Delete the Compute Engine tasks created before Thu May 19 07:15:05 UTC 2016 2016.11.15 07:15:05 INFO ce[][o.s.ce.app.CeServer] Compute Engine is up 2016.11.15 07:15:05 INFO app[][o.s.p.m.Monitor] Process[ce] is up
Finalmente, hemos terminado con la instalación de SonarQube. Ahora podemos acceder a nuestro Panel de SonarQube con la URL http: // nombre de dominio: 9000. Inicialmente, podemos usar «admin» como usuario y contraseña para iniciar sesión en el Panel.
9) Cambiar los inicios de sesión administrativos
Una vez que haya iniciado sesión en el Panel, puede cambiar sus credenciales de inicio de sesión a una segura. Consulte las capturas de pantalla sobre cómo restablecer la contraseña de administrador. Puede hacer clic en el menú desplegable superior derecho Administrador >> Elija Mi cuenta >> Seleccionar Seguridad pestaña para obtener esta opción.
10) Administrar los complementos
Como se discutió en la sección anterior, proporciona numerosos complementos para cumplir con nuestro propósito. Necesitamos habilitarlos en función de nuestros requisitos. Podemos habilitar esos complementos desde el propio Panel de SonarQube. Veamos cómo podemos hacerlo.
Inicie sesión en el Panel >> Elija la pestaña Administración
Esto le brinda dos opciones, una para ver la información actual del sistema y otra un Centro de actualización para instalar, desinstalar y eliminar complementos. También puede descargar las actualizaciones de SonarQube desde la pestaña Actualizaciones del sistema en esta página.
Después de actualizar los complementos necesarios, se mostrará un mensaje emergente para reiniciar la máquina. Luego podemos hacer clic en «Reiniciar» para actualizar estos cambios hechos. Una cosa importante a tener en cuenta con respecto al reinicio es que, en un entorno de producción, necesitamos programar la ventana de mantenimiento para las actualizaciones y reiniciar o de lo contrario, afectará a las organizaciones debido al tiempo de inactividad.
Conclusión
SonarQube le ayuda a escribir un código fuente bien intencionado, libre de duplicaciones y probado por unidades que se puede entender fácilmente. También le ayuda a mantener su código de acuerdo con las mejores prácticas de codificación estándar. Una de las características más poderosas de SonarQube es que le muestra no solo el estado actual de su proyecto, sino también cómo ha cambiado con el tiempo. Lo hace al mantener selectivamente los datos de análisis anteriores. Más allá de eso, hay una gran cantidad de funciones disponibles en SonarQube para mejorar la calidad de su código. ¡Puede comenzar a usar SonarQube, que lo ayudará a mejorar la calidad de su código y a hacer felices a sus clientes!