Browse By

Configurando un Full Node en una VPS desde cero!

Read English version

Introducción

En el siguiente tutorial los guiaré paso a paso en el proceso de instalar un Headless Full Node para la red de IOTA utilizando la última versión estable  del IRI release y un Virtual Private Server (VPS). Adicionalmente, instalaremos iota-pm, para poder tener un panel de control con que evaluar la performance nuestro nodo y la de nuestros vecinos. Para este tutorial usaremos Debian 9, tanto en la computadora desde la que se realizará como en el VPS. Quienes utilicen otro sistema operativo como Windows, pueden descargar una herramienta de acceso remoto tal como putty para conectar con su servidor y correr los comandos que iremos viendo.

Nota: no se precisa ser un gurú en Linux ni nada similar para realizar lo que veremos. Lo he llevado a cabo varias veces y he procurado «estandarizar el proceso» de modo de poder asegurar que si corren Debian 9 y siguen estos pasos llegarán al mismo resultado, sin sorpresas.

Obteniendo un VPS

Un Virtual Private Server es una servidor basado en una máquina virtual que nos permite conectarnos y trabajar en determinados sistemas operativos como si estuvieramos en una computadora dedicada exclusivamente a nosotros. Durante el tutorial, accederemos a un fresh install de Debian e instalaremos una serie de programas para poder configurar y correr nuestro Full Node. Los pasos vistos aquí deberían funcionar igualmente para distribuciones basadas en Debian tales como Ubuntu.

En este caso estaremos usando un plan de Contabo VPS con 4 CPU cores, 12 GB RAM y 300 GB de almacenamiento SSD storage. Al momento de escribir este artículo el plan en cuestión cuesta 8.99 Euros.

Una vez que hemos terminado de contratar y pagar el servicio de VPS, recibiremos la dirección de la IP pública que nos fue asignada junto con la contraseña de root para ingresar vía ssh y comenzar la administración. Estos serán los datos que deberemos utilizar a lo largo del tutorial, reemplazando la IP que les haya sido otorgada por la que emplearemos aquí (173.212.193.00). Así que, manos a la obra. Comenzaremos por ingresar e instalar algunos paquetes necesarios a través del comando apt install. 

Comenzando con la configuración

Como lo dijimos antes, vamos a asumir que la dirección IP pública que nos han dado para nuestro VPS es 173.212.193.00. A lo largo del tutorial los útimos números estarán borrados debido a que la IP aquí usada es la de un Full Node operativo, creado mientras se ecribía el tutorial.

Importante! 173.212.193.00 es la IP que me ha asignado mi VPS y deben reemplazarla en cada caso por la que su VPS les haya enviado junto con sus datos.

Entonces, comencemos por abrir una terminal (o putty, si estamos en windows) y solicitar acceso ssh con el siguiente comando:
ssh root@173.212.193.00. La primera vez nos pedirá que aceptemos realizar una nueva conexión a este servidor. Escribimos «yes» y damos enter. A continuación ingresamos la password que nos envío nuestro proveedor de VPS.

¡Ya estamos adentro! Nos moveremos al directorio /opt. Una vez allí instalaremos Git, Maven y Java 8. Para realizar esto, utilizaremos los siguientes comandos. Notese que cada vez que se ejecuta un comando apt install el sistema operativo nos pregunta si realmente deseamos instalar el paquete. En cada caso debe ingresarse la letra Y y apretar Enter.

root@vmi152766:/# cd /opt
root@vmi152766:/opt# apt install git
root@vmi152766:/opt# apt install maven
root@vmi152766:/opt# apt install default-jre
root@vmi152766:/opt# apt install default-jdk

 

Si todo ha salido como debería, podremos verificar qué versión  de Java hemos instalado a través del comando java -version 

Llegado este punto, estamos listos para comenzar a trabajar en la instalación del IRI de IOTA. Empecemos por clonar el repositorio de iotaledger Github IRI en nuestra carpeta para obtener una copia de la última versión estable. Esto no creará una carpeta iri dentro del directorio /opt (o sea que acabaremos /opt/iri). A continuación vamos a compilar y a crear los paquetes necesarios para obtener nuestro ejecutable.

root@vmi152766:/opt# git clone https://github.com/iotaledger/iri
root@vmi152766:/opt# cd iri
root@vmi152766:/opt/iri# mvn clean compile
root@vmi152766:/opt/iri# mvn package

 

Como podrán observar, luego de ejecutadas estas instrucciones se ha creado una nueva carpeta llamada  /target dentro de /iri. Es decir que deberíamos tener esta estructura (/opt/iri/target). Dentro de élla, encontraremos el ejecutable de nuestro IRI con el nombre iri-1.4.1.2.jar

Nota: en Linux tanto como en Windows, podemos desplazarnos hacia arriba y abajo por las carpetas usando el comando cd y cd .. (change directory).

Si todo ha salido bien, podremos ejecutar nuestro nodo para verificar que el proceso de compilación haya ido sin problemas. Debido a que aún no tenemos vecinos, lo iniciaremos nada más que para asegurarnos de que al ejecutar no hay errores. Una vez verificado esto, procederemos a apagarlo presionando ctrl + c.

root@vmi152766:/opt/iri# cd target
root@vmi152766:/opt/iri/target# java -jar iri-1.4.1.2.jar -p 14265

Debido a que debemos pasarle al programa del nodo varios parámetros (tales como el puerto, utilizado en el ejemplo anterior), vamos a crear un archivo en que almacenaremos todos los parámetros de configuración. Una vez que lo tengamos, podremos correr el Nodo pasando como único argumento dicho archivo y éste leerá de allí todos los valores de configuración. Para realizar esto usaremos nano, un editor de texto que funciona desde la consola. Todo lo que necesitamos conocer de nano es que nano archivo.txt abre un nuevo archivo en que podemos escribir. Ctrl + o guarda los cambios que hayamos escrito y ctrl + x nos saca del editor, devolviendonos a la consola. Comprendido esto, crearemos un archivo iri.ini dentro de la carpeta target en que nos encontramos.

root@vmi152766:/opt/iri/target# nano iri.ini

 

Veamos qué valores de configuración incluiremos en este archivo.

[IRI]
PORT = 14265
UDP_RECEIVER_PORT = 14600
TCP_RECEIVER_PORT = 15600
NEIGHBORS = udp://tu-neighbor-1:14600 udp://tu-neighbor-2:14600
IXI_DIR = ixi
HEADLESS = true
DEBUG = true
DB_PATH = mainnetdb
API_HOST= 173.212.193.00

 

Como puede observarse, en este archivo debemos listar nuestros vecinos. El sistema de vecinos de los Nodos es escencial para tener un Full Node saludable y lograr la sincronización. Básicamente, uno debe buscar otras personas corriendo Full Nodes e intercambiar direcciones: le damos la nuestra para que la ponga en el archivo de configuración de su nodo y nos da a cambio la suya para que nosotros la incluyamos en el nuestro. Es de fundamental importancia contar con vecinos cuyos nodos sean estables y estén dedicados 24/7 a la red. Sin esto, nuestro nodo no funcionará debididamente y será lo mismo que no tenerlo.  Para buscar vecinos pueden dirigirse al canal de Slack #nodesharing.

Vecinos (neighbors)

De acuerdo a  Come From Beyond (uno de los fundadores de IOTA), es mejor tener 3 o 4 vecinos funcionando muy bien que una docena de ellos con nodos inestables. El máximo recomendado de vecinos es 7 (siete). A partir de la experiencia que he tenido, aconsejo buscar vecinos e intercambiar addresses para evaluar qué tan bien funcionan sus nodos. Al intercambiar, otros usuarios les pasarán las direcciones de sus nodos (udp://143.22.33.43:14600, por ejemplo) y nosotros les daremos las nuestras (udp://173.212.193.00:14600, según la configuración ya explicada).

Cada vez que deseamos agregar o quitar un vecino, tendremos que detener nuestro Nodo, editar el archivo con nano iri.ini para agregar cuidando que siempre quede un espacio en blanco entre direcciones, salvar el archivo (ctrl + o) y salir (ctrl + x). Finalmente, reciniciamos el nodo.

Una vez que nuestro archivo de configuración está listo, iniciamos el nodo nuevamente pasando como único argumento al comando el archivo que apunta a nuestra configuración -c iri.ini. De este modo se aplican todas las configuraciones definidas sin necesidad de enumerarlas al correr el iri. Si los vecinos que hemos agregado nos han agregado y están funcionando bien, comenzaremos a ver algo de información, como puede apreciarse al final de la siguiente pantalla.

root@vmi152766:/opt/iri/target# java -jar iri-1.4.1.2.jar -c iri.ini

Verificando la API de nuestro Nodo

Antes de instalar una interface gráfica para monitorear nuestro nodo y en el de nuestros vecinos, tendremos que realizar una pequeña evaluación para corroborar que la API del nodo que tenemos corriendo es accesible. Esto puede realizarse utilizando Curl, tal como se explica en IRI API Reference Guide. La IP de nuestro nodo, según establecimos al principio, es 173.212.193.00 de modo que su API debería ser accesible desde  http://173.212.193.00:14265. Para verificar esto, correremos el siguiente comando en la terminal.

Nota: recuerden que la IP http://173.212.193.00:14265 utilizada a lo largo del tutorial debe ser reemplazada por la de su VPS!

curl http://173.212.193.00:14265 \
-X POST \
-H 'Content-Type: application/json' \
-H 'X-IOTA-API-Version: 1' \
-d '{"command": "getNodeInfo"}'

 

Si todo ha salido como lo esperamos, el comando Curl debería retornar una salida como la que vemos a continuación.

Instalando una Interface Gráfica para monitorear nuestro Full Node

Hasta aquí hemos logrado poner a correr nuestro nodo y vemos cómo la información baja por la pantalla de la consola. Sin embargo, esto no es muy práctico a la hora de tener un panorama de cómo están funcionando nuestros vecinos y qué tan bien va la sincronizción del nodo. Por suerte, existe una herramienta que nos permitirá resolver esto, creando un punto de acceso público al que podremos ingresar desde nuestro navegador web. Instalaremos entonces  iota-pm (IOTA Peer Manager). Este programa escrito en node.js nos simplificará mucho los analytics de nuestro Full Node.

Para poder poner a funcionar esta valiosa herramienta vamos a instalar Curl, node.js and nmp utlizando los comandos a continuación.

root@vmi152766:/opt# apt install curl
root@vmi152766:/opt# curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
root@vmi152766:/opt# apt install nodejs
root@vmi152766:/opt# npm i -g iota-pm

 

¡Y eso es todo! Ahora tenemos nuestro Peer Manager instalado. Para poder acceder y ver la infomación deberemos encenderlo utilizando la siguiente orden

root@vmi152766:/opt# iota-pm -i http://173.212.193.00:14265 -p 173.212.193.00:8888

 

Ejecutado el comando, podemos abrir nuestro navegador y dirigirnos a http://173.212.193.00:8888 para ver un panel de administración.

Acerca de esta imagen

Como puede apreciarse en la captura de pantalla del iota-pm recién instalado, nuestro nodo aún no ha comenzado a sincronizarse (243000/295958) y posee dos vecinos que no están funcionando y se listan en rojo. La calidad y velocidad con que nuestro Full Node se sincronizará está directamente conectada con la salud de nuestros vecinos, por lo que habría que instarlos a que revisen por qué sus nodos están apagados y si esto no se soluciona a la brevedad deberíamos removerlos de nuestro archivo de configuración y reiniciar el nodo.

Tras un poco de limpieza y habiendo intercambiado información con 3 vecinos más, se decidió eliminar a los dos que no funcionaban para quedar con 4 vecinos cuyo funcionamiento es -de momento- bastante óptimo. Como se puede ver en la imagen que sigue, la sincronización ha comenzado y nuestro nodo va por 250511/296397. Nuestros vecinos parecen estar con una actividad razonable.

Sincronizando nuestro nodo

Para poder conectar a nuestra GUI Wallet con nuestro Full Node éste deberá estar sincronizado con el último Milestone. Si observan la imagen del iota-pm verán que el proceso de sincronización ha comenzado y el Latest Solid Milestone Index va aumentando. Eventualmente este valor llegará a igualarse con el de Latest Milestone Index. Cuando esto suceda, tendremos un nodo sincronizado y listo para utilizar.

Si bien podemos esperar a que el proceso se complete, debe destacarse que en muchos casos puede tomar horas/días. Afortunadamente, existe una versión de la base de datos (mainnetdb) que se actualiza cada 30 minutos y nos permite arrancar la sincronización desde allí. De este modo, nuestro nodo sincronizará en pocos minutos y ya estará listo para funcionar. Veamos a continuación, cómo importar y utilizar la base de datos.

Vamos a descargar el mainnetdb en el directorio /tmp, descomprimirla y pegarla en el directorio /mainnetdb (dentro de nuestro IRI).

root@vmi152766:/opt# wget -P /tmp/ http://db.iota.partners/IOTA.partners-mainnetdb.tar.gz
root@vmi152766:/opt# tar xfvz /tmp/IOTA.partners-mainnetdb.tar.gz -C /opt/iri/target/mainnetdb

 

Una vez instalada la mainnetdb con 30 minutos de antigüedad, editaremos nuestro config file (iri.ini) para agregar el parametro DB_RESCAN con valor true al final. El archivo debería quedar así:

[IRI]
PORT = 14265
UDP_RECEIVER_PORT = 14600
TCP_RECEIVER_PORT = 15600
NEIGHBORS = udp://tu-neighbor-1:14600 udp://tu-neighbor-2:14600
IXI_DIR = ixi
HEADLESS = true
DEBUG = true
DB_PATH = mainnetdb
API_HOST= 173.212.193.00
DB_RESCAN = true

 

Salvamos el archivo con ctrl+o. Lo cerramos para volver a la terminal con ctrl+x y reiniciamos nuestro nodo. Esta vez, el nodo tardará en comenzar porque debe realizar un rescan de toda la Base de Datos que hemos importado. Al finalizar, tendremos un Latest Solid Milestone Index muy cercano al último Milestone de la red y la sincronización se realizará en breve, quedando nuestro nodo operativo para transaccionar.

Consideraciones Finales

Los Full Nodes son de utilidad para asistir al fortalecimiento de la red de IOTA solo en la medida en que están corriendo 24/7, poseen intercambio con vecinos que gozan de buena salud y se encuentran en computadoras con recursos suficientes. Para comenzar, les recomiendo que agreguen 4 o 5 vecinos como mucho y estudien su performance. Muy probablemente deberán remover algunos y agregar otros. Todo esto, como lo hemos visto, involucra editar nuestro iri.ini para quitar/agregar vecinos. Luego de cada edición, el nodo debe ser detenido y reiniciado para detectar los cambios.

Al iniciar nuestro nodo tendremos que lidiar con el proceso de syncing. Este puede durar horas o días dependiendo de la salud de nuestros vecinos y los recursos con que nuestro nodo cuenta. Recuerden que es mejor tener 4 vecinos funcionando muy bien que 7 vecinos entre los cuales hay nodos inestables.

Por último, para poder correr los comandos que inicializan el nodo y el iota-pm como procesos en segundo plano, lo cual nos permitirá cerrar la terminal desde la que los ejecutamos sin que se interrumpan, usaremos el comando nohup y el ampersand (&) al final. A continuación, los ejemplos.

root@vmi152766:/opt/iri/target# nohup java -jar iri-1.4.1.2.jar -c iri.ini &
root@vmi152766:/opt# nohup iota-pm -i http://173.212.193.00:14265 -p 173.212.193.00:8888 &

 

Finalmente, podemos chequear que los procesos estén corriendo en nuestro sistema listando todo lo que se encuentra en ejecución en el momento con el comando ps ax. Como se puede ver en la pantalla que sigue nuestro nodo corre con PID (process ID) 10705 y el iota-pm con PID 12994. En Linux, los procesos pueden terminarse enviando una Kill signal y especificando el PID en cuestión. Es decir que, si precisaramos detener nuestro nodo podríamos hacerlo a través del siguiente comando

root@vmi152766:/opt/iri/target# ps ax
[ Obtenemos el PID del listado de procesos: IRI corriendo en 10705 ]
root@vmi152766:/opt/iri/target# kill -9 10705
[ Interrumpimos el proceso (apagamos el nodo para modificar algo en el iri.ini) ]
root@vmi152766:/opt/iri/target# nohup java -jar iri-1.4.1.2.jar -c iri.ini &
[ Finalizados los cambios, volvemos a encenderlo ]

 

Comentarios

comentarios