lunes, 9 de marzo de 2020

Instalar Código Fuente de Thingsboard

Realizado en un Ubuntu Server 18.04.

PRE-REQUISITOS


Primero debemos actualizar el sistema con los comandos update y upgrade en la terminal de Ubuntu.

$ sudo apt update
$ sudo apt upgrade

Una vez actualizado, debemos instalar python 2.7, ya que Ubuntu 18 ya no lo tiene integrado desde la instalación, sino que vienen precargada sólo la versión 3. Aún así, sigue estando en la lista de paquetes de Ubuntu así que usamos el comando:

$ sudo apt-get install python2.7

NodeJs

La versión actual de NodeJs no es completamente compatible con el código fuente de Thingsboard, así que es necesario recurrir a instalar desde fuente la versión 10.15.3 descargando el tarball de dicha versión e instalarla manualmente.

Entre los prerequisitos para instalar NodeJs están gcc, g++ y make, por lo que hay que instalarlos antes que NodeJs para evitar complicaciones. También existen en el servidor de paquetes de Ubuntu:

$ sudo apt-get install gcc g++ make

Ahora ya podemos construir e instalar NodeJs 15. Descomprimimos el tarball con:

$ tar xvzf <tarballName>.gz

Cambiamos la terminal al directorio resultante de la descompresión y configuramos la instalación:

$ ./configure

Una vez terminado el proceso, construimos el paquete de instalación con:

$ make

El paso anterior podría tomar algunos minutos en finalizar. Pero una vez terminado y, si no hubo ningún error, procedemos a instalar el paquete:

$ sudo make install

Herramientas para Thingsboard

Thingsboard está construido con Java, como un proyecto Maven, así que es necesario tener ambos instalados en el sistema operativo.

Para el caso de Java, la versión requerida es la 8 y está en la lista de paquetes de Ubuntu:

$ sudo apt install openjdk-8-jdk

Para Maven, la versión requerida es la 3.1.0 ó superior. En la lista de paquetes de Ubuntu al momento de realizar esta redacción es 3.6, así que funciona bien.

$ sudo apt-get install maven

Si ya has instalado antes una versión anterior de Java puede que Maven reconfigure el path para que el sistema opere con la versión 7, así que es necesario cambiarlo para que la versión por default sea la 8, esto se puede realizar con el siguiente comando:

$ sudo update-alternatives --config java

También es necesario instalar libpng:

$ sudo apt-get install libpng-dev

Instalación del Código Fuente


Primero debemos clonar el repositorio git de Thingsboard con el comando git, que ya viene preinstalado en esta versión de Ubuntu:

$ git clone https://github.com/thingsboard/thingsboard.git

Cambiamos al directorio creado luego de clonar el repositorio y cambiamos a la rama de la versión 2.4 de Thingsboard:

$ git checkout release-2.4


Y dentro del mismo directorio usamos:

$ npm install pkg


Antes de realizar la instalación, debemos configurar Maven para que trabaje con el protocolo seguro de sus repositorios, por alguna razón, al momento de la redacción, el paquete que se instala desde apt viene con la configuración errónea, así que debemos agregar un perfil en el archivo xml de configuración de Maven entre las etiquetas <profiles></profiles> del mimso:

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>

Usualmente el directorio raíz de Maven se encuentra /usr/share/maven/, y el archivo estará en .../maven/conf/settings.xml.
De no ser así, el comando version de mvn arrojará el directorio raíz.

También es necesario cambiar la versión de npm que usa la interfaz gráfica de usuario para su instalación, esto se realiza modificando el archivo pom.xml que se encuentra en el directorio /ui de thingsboard. Debería verse así:

<npmVersion>3.10.8</npmVersion>

Ahora procedemos a instalar el código fuente con mvn:

$ sudo mvn clean install

Si ocurre un error de acceso denegado a los repositorios de gradle, debemos cambiar el archivo pom temporal creado por la instalación. Usualmente se encuentra dentro de la carpeta /root/ si se ejecuta con sudo o permisos de superusuario, así que dicho archivo se encontraría en

/root/.m2/repository/org/fortasoft/gradle-maven-plugin/1.0.8/gradle-maven-plugin-1.0.8.pom

En la etiqueta <url> de la sección de repositorios hay que agregar una s a http, quedando esto:

<url>https://repo.gradle.org/gradle/libs-releases-local/</url>

Una vez realizada la modificación, debemos volver a ejecutar el comando install de mvn, pero ahora sin usar la opción clean, para evitar que borre el archivo que acabamos de modificar:

$ sudo mvn install

Y listo, el código fuente debería estar listo para importarlo a nuestro IDE preferido.


Fuentes:
https://github.com/thingsboard/thingsboard/issues/2341 
https://thingsboard.io/docs/user-guide/contribution/how-to-contribute/
https://github.com/thingsboard/thingsboard/issues/1923 
https://github.com/thingsboard/thingsboard/issues/1864
https://stackoverflow.com/questions/59763531/maven-dependencies-are-failing-with-a-501-error
https://stackoverflow.com/questions/25393298/what-is-the-correct-way-of-forcing-maven-to-use-https-for-maven-central/25411658#25411658
https://github.com/thingsboard/thingsboard/issues/1335
https://computingforgeeks.com/installing-node-js-10-lts-on-ubuntu-18-04-16-04-debian-9/
https://nodejs.org/download/release/v10.15.3/

martes, 3 de marzo de 2020

Servidor NodeJs con proxy de Ngnix

Este tutorial está realizado con un sistema operativo Ubuntu Linux 18.04 LTS


INSTALACIÓN DE NODEJS

NodeJs es un entorno de ejecución de JavaScript orientado a eventos asíncronos, es decir, orientada a aplicaciones de red. Construido en el motor de Chrome permite la creación sencilla, rápida y escalable de dichas aplicaciones.

  • Paso 1:  Agregar el PPA de NodeJs
Agregar NodeJs tiene una versión LTS y una versión actual, es tu decisión cuál utilizar.

Para la versión actual: En la última actualización de este tutorial la versión actual de NodeJs es la 13, entonces:

$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -

Para la versión LTS: La número 12 en la última actualización de este post.

$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -


  • Paso 2: Instalar Node.js en Ubuntu
Luego de agregar exitosamente el PPA de Node, sólo es necesario usar apt-get de Ubuntu para realizar la instalación. El comando para instalar es el siguiente:
 
$ sudo apt-get install nodejs

  • Paso 3: Revisar la instalación
Node.js instalará todos los paquetes que necesita para funcionar, además de la versión asociada de npm, entonces con los siguientes comandos podemos revisar ambas versiones:

$ node -v 
 v13.9.0

Para la versión de npm:

$ npm -v 
 6.13.7

  • Paso 4 [Opcional]: Crear un servidor web de prueba
Para comprobar que Nodejs funciona correctamente podemos escribir un pequeño script de javascript para escuchar y responder a peticiones web.

Primero creamos el archivo "server.js" en el directorio de tu preferencia:


$ vim server.js
   
Y agregamos el siguiente contenido:

Guardamos e iniciamos la aplicación, desde el mismo directorio, con el siguiente comando:

$ node server.js 
 Server running at http://127.0.0.1:3000


Deberías ver algo parecido a esto pero con la dirección de localhost (127.0.0.1):


INSTALACIÓN DE NGINX

  • Paso 1: Instalar
Nginx está disponible en el administrador de paquetes de Ubuntu, así que sólo hay que usar apt para su instalación:

$ sudo apt install nginx

Para configurar un host virtual, necesitamos crear un archivo de configuración para tal dominio dentro del directorio /etc/nginx/conf.d/:

$ sudo vim /etc/nginx/conf.d/example.com.conf

Y agregamos el siguiente contenido:

 
Iniciamos la aplicación node 'server.js' y reiniciamos nginx para que cargue la configuración del nuevo sitio:


$ sudo systemctl restart nginx

Al entrar en el dominio example.com, el resultado debería ser el mismo "Hello World" que cuando entramos a 127.0.0.1:3000.

Fuentes: 
https://tecadmin.net/setup-nginx-as-frontend-server-for-nodejs/ 
https://nodejs.org/es/about/ 
https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/