Procedimiento para crear un nodo de red de prueba para la próxima versión de NEM Symbol en GCP (Google Cloud Platform)

¡Fortalezcamos en GCP!

Seminario de NEM 2020

El otro día, en NEM SEMINAR 2020, escuché sobre varias historias relacionadas con NEM, y una de ellas incluía contenido relacionado con la operación de nodos.

La palabra poderosa “Juki” fue tan impresionante que decidí probarla.

Comentario de Slack del desarrollador principal Jaguar

Leí que un desarrollador principal hizo el siguiente comentario sobre Slack:

1579698504スクリーンショット 2020-01-22 22.07.45.png

Para que un nodo de red de prueba opere más de 1000 nodos, sería bueno si hubiera un artículo que detallara el procedimiento … Escribí este artículo.

La conclusión es que pudimos configurar nodos de red de prueba con bastante facilidad, por lo que sería bueno si los no ingenieros pudieran asumir el desafío audaz.

Por cierto, ¡comencemos con el castillo lo antes posible!

Procedimiento de construcción del castillo

Diagrama de Flujo

  • Cree un nuevo proyecto en GCP (Google Cloud Platform)
  • Cree una instancia de VM GCE (Google Compute Engine) (≒ Prepare la máquina virtual (マ シ ン servidor) en la nube)
  • Conexión a la instancia de VM creada
  • Entorno de compilación en la instancia de VM (Instalar Docker, Docker Compose)
  • Introduzca la herramienta de construcción de nodo de red de prueba de símbolos con Git y el nodo de inicio
  • Verifique el estado operativo del nodo localmente en la instancia de VM (verifique presionando / chain / height)
  • Configurado para poder acceder a nodos con direcciones IP desde fuera de GCP (Google Cloud Platform)
  • Establezca “host” y “friendlyName” en / node / info adecuadamente

Pasos detallados

  1. Cree un nuevo proyecto en GCP (Google Cloud Platform)

Primero, creemos un nuevo proyecto. Ingrese un nombre de proyecto, seleccione una ubicación si es necesario y haga clic en el botón Crear. Si no está seguro del valor de configuración, continúe con el siguiente ejemplo de configuración tal como está. Después de crear el proyecto, espere un momento y la creación del proyecto se completará.

Ejemplo:

Nombre del proyecto
symbol-testnet-node-challenge
Ubicación
Si no hay un compromiso particular, el valor predeterminado "Sin organización" está bien

2. Crear instancia de VM GCE (Google Compute Engine)

  1. Espere unos momentos para completar la creación del proyecto. Luego, el proyecto creado anteriormente (symbol-testnet-node-challenge según el ejemplo de configuración) se puede seleccionar de la lista desplegable de selección de proyecto, así que seleccionémoslo.
  2. En ese estado, haga clic en el botón de tres líneas que muestra el menú de navegación en la esquina superior izquierda de la pantalla, mueva el cursor a Compute Engine en el elemento informático y haga clic en la instancia de VM en el menú que aparece.
  3. Espere un poco hasta que Compute Engine esté disponible. Es aproximadamente un minuto. Cuando Compute Engine esté disponible, podrá hacer clic en el botón Crear cerca del lugar donde se muestra la instancia de VM, así que creemos una instancia de VM haciendo clic.
  4. El ejemplo de configuración se resume a continuación. Si no está seguro, continúe con el procedimiento tal como está. Los elementos no mencionados en el ejemplo de configuración no necesitan hacer nada.
  • Nombre
    • símbolo-testnet-api-nodo-1
  • Región
    • asia-noreste1 (Tokio)
  • Zona
    • asia-noreste1-b
  • Configuración de la máquina
    • Familia de máquinas
      • Propósito general
    • Serie
  • N1
    • Tipo de máquina
    • n1-standard-2 (2 vCPU, 7.5 GB de memoria)
    • Disco de arranque
  • Haga clic en el botón Cambiar, marque el botón de radio Ubuntu 18.04 LTS, ingrese 40 en el campo Tamaño (GB) y haga clic en el botón Seleccionar
  • Cortafuegos
    • Marque Permitir tráfico HTTP
    • Marque Permitir tráfico Https

5. Una vez que haya configurado la configuración como se describe anteriormente, haga clic en el botón Crear para crear una instancia de VM.
6. La pantalla cambiará y verá una pantalla que enumera las instancias que está creando. Cuando se completa la creación de la instancia, se mostrará una marca de verificación verde a la izquierda del nombre, por lo que si puede confirmarse, continúe con el siguiente paso.

3. Conéctese a la instancia creada

  • Al hacer clic en Abrir en la ventana del navegador en el menú desplegable de la columna de conexión de la instancia de VM listada, se abre una pantalla negra en el navegador para conectarse a la instancia de VM. Las operaciones posteriores se realizan alrededor de esta pantalla negra.

4. Construcción del entorno

El procedimiento oficial está aquí (https://docs.docker.com/install/linux/docker-ce/ubuntu/), pero como está en inglés, la información necesaria se resume a continuación.

No hay problema si ejecuta los comandos en el orden que se muestra. Copie y pegue en una pantalla en negro y presione Entrar para ejecutar.

Tenga en cuenta que algunas preguntas como las siguientes pueden aparecer en el camino y el proceso puede detenerse. En ese caso, ingrese Y y presione Entrar para continuar el proceso.

Do you want to continue? [Y/n]
  1. Buscar actualizaciones de todo el software en el sistema operativo
sudo apt-get update

2. Instalación de varias herramientas necesarias para la instalación de Docker

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

3. Registre la URL de origen de descarga de Docker y la clave pública

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • OK si se muestra OK

4. Validación de origen de descarga de Docker

  • Ejecute el siguiente comando
sudo apt-key fingerprint 0EBFCD88
  • Compruebe que el contenido que se muestra coincide con el siguiente
pub   rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) docker@docker.com
sub   rsa4096 2017-02-22 [S]

5. Agregar URL de la última versión estable de Docker al sistema operativo

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

6. Actualice el destino de referencia de información del software del sistema operativo nuevamente

sudo apt-get update 

7. Instalar Docker

sudo apt-get install docker-ce docker-ce-cli containerd.io 

8. Ejecute el comando de verificación de la versión de Docker y, si se muestra la versión, tendrá éxito

  • Comando de confirmación de versión
docker --version 

Ejemplo de resultado de confirmación

Docker version 19.03.5, build 633a0ea838 

Instalar Docker Compose

El procedimiento oficial es según la pestaña de Linux en esta página (https://docs.docker.com/compose/install/), pero como está en inglés, la información necesaria se resume a continuación.

No hay problema si ejecuta los comandos en el orden que se muestra. Copie y pegue en una pantalla en negro y presione Entrar para ejecutar.

Tenga en cuenta que algunas preguntas como las siguientes pueden aparecer en el camino y el proceso puede detenerse. En ese caso, ingrese Y y presione Entrar para continuar el proceso.

Do you want to continue? [Y/n]
  1. Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

2. Establecer permisos de ejecución

sudo chmod +x /usr/local/bin/docker-compose 

3. Ejecute el comando de verificación de versión de Docker Compose, y si se muestra la versión, es exitosa

  • Comando de confirmación de versión
docker-compose --version 
  • Ejemplo de resultado de confirmación
docker-compose version 1.25.3, build d4d1b42b 

5. Introducir herramienta de construcción de nodo de red de prueba de símbolo y nodo de inicio

El procedimiento oficial está aquí (https://nemtech.github.io/ja/guides/network/running-a-test-net-node.html), pero si iniciar el nodo con la configuración del nodo API + nodo par Puede ser un poco difícil para aquellos que no conocen la situación determinar si iniciar el nodo solo con la configuración del nodo Peer.

El procedimiento para construir un nodo con la configuración del nodo API + nodo par se organiza a continuación. Si no está convencido por el procedimiento oficial, consulte aquí.

  1. Clonar herramientas necesarias de GitHub
git clone https://github.com/nemfoundation/catapult-testnet-bootstrap.git

2. Mover a la carpeta para construir el nodo API + nodo par

cd catapult-testnet-bootstrap 
cd api-harvest-assembly  

3. Ejecutar Docker Compose

sudo docker-compose up --build --detach 

Después de moverse y completarlos, se completa el inicio del nodo. Creo que hay una pantalla como esta al final.

Creating api-harvest-assembly_db_1                     ... done
Creating api-harvest-assembly_store-addresses_1        ... done
Creating api-harvest-assembly_generate-raw-addresses_1 ... done
Creating api-harvest-assembly_api-node_1               ... done
Creating api-harvest-assembly_api-broker_1             ... done
Creating api-harvest-assembly_update_vars_1            ... done
Creating api-harvest-assembly_init-db_1                ... done
Creating api-harvest-assembly_rest-gateway_1           ... done

6. Verifique el estado operativo del nodo localmente en la instancia de VM

Para verificar el estado del nodo, simplemente puede ejecutar el siguiente comando.

curl http://localhost:3000/chain/height 

Si el nodo se inició correctamente, se mostrará el siguiente resultado.

{"height":"16001"} 

Si ejecuta curl http: // localhost: 3000 / chain / height varias veces seguidas para verificar la altura del bloque del nodo, verá que el número de resultados aumenta a una velocidad tremenda. Este número se acercará gradualmente a la altura del bloque más avanzado de los otros nodos.

Para su referencia, la URL donde puede verificar la altura del bloque del nodo de red de prueba que he configurado se enumera a continuación, así que úsela para verificar si se ha puesto al día pronto.
http://symbol-testnet-api-1.next-web-technology.com:3000/chain/height

7. Configurado para poder acceder a nodos con direcciones IP desde fuera de GCP (Google Cloud Platform)

En este momento, se ha iniciado el nodo de red de prueba y se puede acceder a la red de prueba desde el entorno local de la instancia de VM donde se ejecuta el nodo.

Sin embargo, en realidad, desea poder acceder a él desde otro lugar que no sea el local de la instancia de VM (por ejemplo, desde el navegador de su computadora personal o desde el navegador del teléfono inteligente). Hagamos las configuraciones necesarias en GCP para eso.

Cambiar la dirección IP externa de efímera a estática

En la configuración predeterminada, la dirección IP externa que se establece es un valor temporal que cambia cuando se reinicia la instancia de VM. (≒ efímero)

Esto puede no ser un problema, pero por simplicidad, haga una reserva por adelantado para asignar la dirección IP a la instancia de VM para que se use la misma dirección IP incluso después de reiniciar.

  1. Haga clic en el botón de tres líneas para mostrar el menú de navegación en la parte superior izquierda de la pantalla y mueva el cursor a la red VPC en el elemento de red (parece ser necesario desplazarse hacia abajo porque es bastante bajo) Haga clic en la dirección IP externa en el menú que aparece.
  2. Cambie el tipo de dirección IP externa de efímera a estática al desplegar.
  3. En el cuadro de diálogo que aparece, se requiere un nombre para la configuración de reserva de esa dirección IP. Si no está seguro, ingrese el siguiente nombre y haga clic en el botón Guardar. La descripción es opcional y puede dejarse en blanco.

Poniendo como ejemplo

symbol-testnet-api-1-http

Crear reglas de firewall

Luego, abra el puerto No. 3000 para que el acceso como http: // dirección IP: 3000 / chain / height sea posible desde fuera de GCP.

  1. Haga clic en Reglas de firewall y haga clic en Crear regla de firewall con la marca +.
  2. Realice los ajustes para abrir el puerto No. 3000 en la pantalla que aparece. Si no está seguro del valor de configuración, utilice el siguiente ejemplo de configuración tal como está. Los contenidos que no se describen en los ejemplos de configuración son probablemente los predeterminados. Una vez que haya ingresado la configuración, haga clic en el botón Crear. Antes de hacer clic en el botón Crear, copie el valor de la etiqueta de destino para facilitar los pasos posteriores.
  • Poniendo ejemplo
    • Nombre
    • símbolo-testnet-http-allow
  • Dirección del tráfico
    • Subiendo
    • Acción en partido
  • Permiso
    • Target
    • Seleccione la etiqueta de destino especificada en el menú desplegable
  • Etiqueta de destino
    • symbol-testnet-http-allow … Copie este valor para su uso posterior.
  • Además, sentí que cómo escribir la configuración de la etiqueta de destino aquí le daría al ingeniero la impresión de que se debe describir la información de la instancia de VM a la que se asigna esta regla de firewall. Correctamente, lo que se establece aquí es el nombre de la etiqueta que representa esta regla de firewall, y parece que la imagen de que este nombre de etiqueta se establece en el lado de la instancia de VM es correcta.
  • Filtro fuente
    • Rango de IP
    • Rango de IP de origen
  • 0.0.0.0/0
    • Protocolo y puerto
  • Verifique el botón de radio para el protocolo y puerto especificados
    • Comprobar tcp
  • Ingrese 3000 en el campo de entrada a la derecha de tcp

Aplicar reglas de firewall a instancias de VM GCE (Google Compute Engine)

  1. Haga clic en el botón de tres líneas para mostrar el menú de navegación en la parte superior izquierda de la pantalla, mueva el cursor a Compute Engine en el elemento informático que contiene y haga clic en la instancia de VM en el menú que aparece.
  2. Haga clic en el nombre de la instancia de VM de destino (symbol-testnet-api-1 si es el mismo que el ejemplo de configuración) y haga clic en la edición en la parte superior de la pantalla que aparece.
  3. Ingrese el valor de la etiqueta de destino copiada anteriormente (symbol-testnet-http-allow en el ejemplo de configuración) en el elemento llamado etiqueta de red (puede que no lo encuentre a menos que se desplace hacia abajo), y Haga clic en el botón Guardar a continuación.
  4. Regrese a la pantalla de la lista de instancias de VM con la flecha y verifique la dirección IP externa. Las direcciones IP externas se enumeran en la columna denominada IP externa. Por ejemplo, en mi caso, la dirección IP externa era 104.198.94.48. En este caso, puede verificar la altura del bloque accediendo a la siguiente dirección desde su PC o teléfono inteligente. Lea y reemplace la dirección IP externa de acuerdo con su entorno.

http://104.198.94.48:3000/chain/height

8. Establezca “host” y “friendlyName” en / node / info adecuadamente

Este es el último elemento de este artículo. Hay dos elementos de configuración para el nodo, host y friendlyName. Si inicia el nodo con la configuración predeterminada, estos valores se establecerán en blanco para host y algunos valores misteriosos para friendlyName.

Para reconfigurar correctamente, parece necesario detener el nodo, editar el archivo de configuración e iniciar el servicio del nodo nuevamente.

El procedimiento aquí tuvo la impresión de “¿Es realmente necesario?” (Si se requiere host = host name?, ¿Por qué debería tomarlo automáticamente en el proceso de inicio del nodo? Si el usuario da friendlyName como apodo, escríbalo en el archivo de configuración antes de iniciar el nodo. Me pregunté si iniciar el nodo completaría el inicio del nodo de una sola vez. El archivo de configuración no existía antes de que el nodo se iniciara por primera vez, por lo que se preguntó si había alguna restricción.

  1. Nodo de Inicio
sudo docker-compose down 

2. Edición del archivo de configuración (config-input.yaml)

  • Ir a la ubicación del archivo de configuración
    • Si siguió los pasos de este artículo, ahora se encuentra en la carpeta api-harvest-assembly. En ese caso, creo que puede moverse a la carpeta donde se encuentra el archivo de configuración config-input.yaml con el siguiente comando. Después de mover, asegúrese de que el archivo de configuración esté en esa carpeta.
    • Mover comando de carpeta
cd api-node 
  • Comando para mostrar archivos y carpetas en esa carpeta
ls

OK si hay una pantalla de config-input.yaml

  • Edición de archivos de configuración
    • Edición en una pantalla negra
    • Comandos para usar nano
sudo nano config-input.yaml 
  • Editar parte
  • friendlyName
  • Antes del cambio
friendly_name:  
  • Después del cambio (ejemplo de configuración)
friendly_name: symbol-testnet-api-node-1  
  • Guardar y cerrar
  • Ctrl + X
  • Ingrese Y y Enter
  • Presione Entrar para guardar y cerrar el nombre del archivo

Edición del archivo de configuración (config-node.properties.template)

  • Ir a la ubicación del archivo de configuración
    • Si siguió los pasos de este artículo, ahora está en la carpeta api-node. En ese caso, creo que puede moverse a la carpeta donde se encuentra el archivo de configuración config-input.yaml con el siguiente comando. Después de mover, asegúrese de que el archivo de configuración esté en esa carpeta.
  • Mover comando de carpeta
cd userconfig
cd resources

Comando para mostrar archivos y carpetas en esa carpeta

ls

OK si hay una pantalla de config-node.properties.template

  • Edición de archivos de configuración
    • Edición en una pantalla negra
    • Comandos para usar nano
sudo nano config-node.properties.template 
  • Editar parte
    • anfitrión
    • Antes del cambio
host =
  • Después del cambio (ejemplo de configuración)
host = symbol-testnet-api-node-1 
  • Guardar y cerrar
    • Ctrl + X
    • Ingrese Y y Enter
    • Presione Entrar para guardar y cerrar el nombre del archivo

4. Regrese a la carpeta donde está docker-compose.yaml e inicie el servicio de nodo nuevamente

Comando para regresar a la carpeta anterior (Repita tres veces para regresar a esa carpeta)

cd .. 

Comando para reiniciar el nodo

sudo docker-compose up --build --detach 

Con esto, el nodo se puede construir con el host y friendlyName correctamente configurados, y ahora es posible el acceso a una dirección IP externa.

http://104.198.94.48:3000/node/info

Impresión

Aunque se convirtió en un volumen considerable en el manual de procedimientos, como trabajo real, sentí la impresión de que construir un nodo blockchain era bastante fácil.

Algunas personas han lanzado el script de automatización de construcción de nodos de AWS, por lo que puede ser bueno construir un castillo en AWS.

Si tiene alguna pregunta o error, no dude en comentar.

Antes de iniciar su red principal, asegúrese de que su red de prueba pueda ayudarlo a cerrar la red de prueba, encontrar problemas y conducir a mejores lanzamientos de red principal donde los problemas se solucionen por adelantado. Estoy rezando

Vamos, digamos “¡Vamos a construir!”

Información referida

  • Hice un script para construir el nodo de red Catapult test. (Para AWS EC2 Amazon Linux2)
    • https://nemlog.nem.social/blog/36829
  • GCP (GCE) + ubuntu 18.04 LTS y configurar el nodo Symbol
    • https://nemlog.nem.social/blog/38049

Será agregado

  • En la operación real, querrá asignar un dominio y usar una URL de cadena en lugar de especificar directamente la dirección IP. Me gustaría agregar algunas configuraciones de dominio en alguna parte.
  • Creo que se necesita un nodo https en un entorno de producción. Me gustaría agregar algo sobre la configuración de SSL y el procedimiento para convertirlo en un nodo https.

Fuente: Qiita website