[JAVA] Comment créer un nœud NEM (version actuelle) (NIS1: NEM Infrastructure Server)

La blockchain NEM est actuellement en cours de préparation sur le testnet pour le lancement de la prochaine version de Symbol. Au milieu d'un tel timing, je pense qu'il existe une grande quantité de documentation et d'informations de référence sur la façon de construire des nœuds testnet pour la prochaine version de Symbol. Cependant, étonnamment, j'ai eu du mal à trouver de la documentation et des informations de référence sur la façon de créer des nœuds pour la version actuelle de la blockchain NEM. (Il peut aussi y avoir mon propre problème de googleability ...) Pour mon propre rappel, je vais résumer dans cet article comment créer un nœud pour la version actuelle de NEM (appelée NIS1 ... NEM Infrastructure Server) sur Google Cloud Ploatform. Si vous avez des erreurs ou de meilleurs moyens, veuillez me le faire savoir. Je vous remercie.

Aperçu

  1. Créez une règle de pare-feu
  2. Créez une VM avec GCE et connectez-vous avec SSH
  3. Installation de Java
  4. Téléchargez et décompressez le corps principal de NIS1
  5. Modifiez le script de démarrage du nœud
  6. Démarrez le nœud
  7. Confirmation après le démarrage

procédure

1. Créez une règle de pare-feu

NIS1 semble utiliser le port 7890 pour http et le port 7778 pour WebSocket. De plus, il semble habituel d'utiliser le port 7891 pour https et le port 7779 pour WebSocket (SSL). Créez une règle de pare-feu comme indiqué dans l'exemple ci-dessous. Le nom et la balise cible sont gratuits, mais la balise cible sera utilisée plus tard dans les paramètres de la VM.

  1. Cliquez sur le menu de navigation (icône à trois lignes) en haut à gauche
  2. Cliquez sur "Réseau VPC" (faites défiler vers le bas pour le voir)
  3. Cliquez sur "Pare-feu"
  4. Cliquez sur «Créer une règle de pare-feu» pour «Créer» les deux règles de pare-feu suivantes

1ère règle de pare-feu: pour http

--Nom: nem-http-allow

Deuxième règle de pare-feu: pour https

--Nom: nem-https-allow

2. Créez une VM avec GCE

Après avoir enquêté à l'avance et écouté les rumeurs, il semblait que le traitement intensif fonctionnerait tel quel, alors j'ai d'abord essayé de le régler sur une spécification plus élevée. Lorsque la synchronisation au moment du réglage initial est terminée et que l'état est stable, je pense qu'il vaut mieux envisager de réduire les spécifications compte tenu du coût. L'exemple de configuration de VM est le suivant.

Exemple de configuration de VM

--Nom: nem-mainnet-1 --Région: Asie-Nord-Est1 (Tokyo) --Zone: asie-nord-est1-b

Connexion SSH à la VM

Après un certain temps après la création de la VM, le démarrage de la VM sera terminé, et vous pourrez cliquer sur la liste de sélection "SSH" dans la colonne "Connecter" dans la liste des VM. .. Les opérations suivantes sont principalement effectuées sur cet écran.

3. Installation de Java

Java 8 est requis pour exécuter NIS1, alors installez-le. Faisons également d'autres mises à jour. Exécutez la commande suivante.

mise à jour

sudo apt update

Installation de Java 8 (OpenJDK 8 pour être exact)

sudo apt install -y openjdk-8-jdk

Confirmer l'installation de Java 8

Exécutez la commande suivante

java -version

Si vous obtenez le résultat suivant, l'installation est réussie.

openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

4. Téléchargez et décompressez le corps principal de NIS1

L'outil pour exécuter NIS1 sous Linux est compressé dans un fichier tgz et distribué à partir de l'URL suivante, alors téléchargez-le, décompressez-le et utilisez-le. Dernière version au 30 mai 2020: https://bob.nem.ninja/nis-0.6.97.tgz Page avec des liens vers d'autres versions et des données associées: https://bob.nem.ninja/

Télécharger

Vous pouvez le télécharger sous le nom de fichier nis1.tgz avec la commande suivante. Le nom de fichier de nis1.tgz peut être n'importe quoi tant qu'il a une extension de .tgz, mais veuillez lire la partie du nom de fichier de manière appropriée dans la commande de décompression suivante.

curl -o nis1.tgz https://bob.nem.ninja/nis-0.6.97.tgz

Dégivrer

(Si vous l'avez téléchargé avec le nom de fichier nis1.tgz au moment du téléchargement) Vous pouvez le décompresser avec la commande suivante. Lorsque vous le décompressez, vous aurez un dossier appelé package.

tar -xzvf nis1.tgz

5. Script de démarrage du nœud fixe

Accédez au dossier du package avec la commande suivante

cd package

Ouvrez le fichier nix.runNis.sh (script shell pour démarrer le nœud) avec la commande suivante et modifiez-le. Voici un exemple d'utilisation de nano comme éditeur, mais veuillez utiliser l'éditeur de votre choix.

nano nix.runNis.sh

Au minimum, les modifications que vous devez apporter sont:

Utilisation maximale détendue de la mémoire

Avec les paramètres par défaut, il semble qu'il n'y ait pas assez de mémoire pour démarrer normalement. Cette fois, je crée une VM avec 16 Go de mémoire, donc je vais franchir le pas et l'essayer comme un paramètre pouvant utiliser jusqu'à 14 Go de mémoire pour le processus NIS1. (Peut-être qu'une allocation de mémoire maximale légèrement plus conservatrice fonctionnera.)

Ajoutez nohup au début de la commande de démarrage et & à la fin de la commande de démarrage

Lorsque j'exécute le script shell de démarrage du nœud par défaut, NIS1 s'exécute au premier plan. Cela forcera NIS1 à se fermer lorsque vous vous déconnecterez. En ajoutant nohup au début de la commande de démarrage et & à la fin de la commande de démarrage, il semble qu'elle puisse être exécutée en arrière-plan même si vous n'êtes pas connecté.

変更前のnix.runNis.sh

#!/bin/bash

cd nis
java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter
cd -

変更後のnix.runNis.sh

#!/bin/bash

cd nis
nohup java -Xms512M -Xmx14G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter &
cd -

Lorsque nano est utilisé comme éditeur, pour écraser et enregistrer, appuyez d'abord sur "Ctrl" + "X", puis sur "Y", et lorsque le nom du fichier est affiché, appuyez sur "Entrée".

6. Démarrez le nœud

Maintenant que vous êtes prêt à démarrer le nœud, démarrez le nœud avec la commande suivante.

./nix.runNis.sh

7. Confirmation après le démarrage

Comme il est configuré pour fonctionner en arrière-plan, aucun message spécial, etc. n'est affiché à l'écran même après le démarrage, alors appuyez sur l'API pour obtenir les informations de hauteur de bloc et de nœud de l'extérieur et une valeur appropriée sera renvoyée. Allons vérifier. Veuillez lire l'adresse IP comme votre propre environnement.

Hauteur de bloc

http://35.200.86.73:7890/chain/height

{"height":44967}

Comme c'est juste après le lancement, vous pouvez voir que la synchronisation n'est pas encore terminée et que la synchronisation n'est terminée qu'à un endroit bien inférieur à la dernière hauteur de bloc. Ce nombre augmentera petit à petit, et lorsqu'il rattrapera la dernière hauteur de bloc, la construction des nœuds sera séparée une fois.

À l'origine, afin de raccourcir le temps requis pour cette synchronisation, il est possible de télécharger et d'étendre séparément les informations de base de données de la blockchain jusqu'à un certain point, je voudrais donc ajouter cette méthode quelque part. Je suis.

Informations sur le nœud

http://35.200.86.73:7890/node/info

{
	"metaData": {
		"features": 1,
		"application": null,
		"networkId": 104,
		"version": "0.6.97-BETA",
		"platform": "Private Build (1.8.0_252) on Linux"
	},
	"endpoint": {
		"protocol": "http",
		"port": 7890,
		"host": "35.200.86.73"
	},
	"identity": {
		"name": "NBAKSE34ZOWCIZC4AUU2XXMNAANH7BSXMGV4AYEC",
		"public-key": "79140632da5b00327bba8d5cb3b258d04843c10520cb757fde1a5a859f0ae567"
	}
}

De plus, si vous accédez à l'API des informations de nœud, etc., vous approfondirez votre confiance dans vos propres paramètres. Vous pouvez voir que networkId 104 indique MAIN_NET, qui indique les versions NIS1 et Java, ainsi que le protocole API, le port et le nom d'hôte. De plus, ce que j'ai trouvé un peu intéressant, c'est qu'un compte NEM est automatiquement généré en tant qu'identité lorsque le nœud est démarré et utilisé comme identifiant. (Je me demande si ces comptes sont liés aux paramètres de récolte, etc.)

Impressions

Après y avoir travaillé, je me suis dit: "Est-ce que c'est juste le script shell?" (Donc, il y a beaucoup de parties qui n'ont pas besoin d'être expliquées ... et vous ne pourrez peut-être pas trouver beaucoup d'informations comme une procédure solide ... Bien sûr, cela se fait en interne après le démarrage du script shell. J'ai l'impression qu'être là-bas est très compliqué ...)

Démarrez-le pour le moment et laissez-le tranquille! Si le niveau est bon (≒ ce niveau d'article), j'ai une impression simple.

Cependant, où est la correction de la valeur maximale de la mémoire, le point où elle sera exécutée au premier plan par défaut, et où mettre le programme principal NIS1? Je pense qu'il y a des "points de dépendance" à certains égards, donc j'ai senti que s'il n'y avait pas de tels éléments de dépendance par défaut, ce serait heureux pour les utilisateurs qui construiront NIS1 à l'avenir.

Contenu à ajouter (à ajouter)

Je voudrais ajouter le contenu suivant en temps voulu.

Informations de référence

J'ai évoqué les informations suivantes. Merci à tous les pionniers.

Recommended Posts

Comment créer un nœud NEM (version actuelle) (NIS1: NEM Infrastructure Server)
Comment créer mon propre serveur Linux
Comment configurer un serveur de développement local
[PyTorch] Exemple ⑧ ~ Comment créer un modèle complexe ~
Comment créer un environnement Django (python) sur Docker
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Comment créer un simple script serveur / client TCP
Comment exécuter Django sur IIS sur un serveur Windows
Comment créer un environnement Python sur Amazon Linux 2
Comment créer un nouvel environnement virtuel Python sur Ubuntu
Comment spécifier un serveur HTTP simple Python de répertoire public
Créer un environnement Python et transférer des données vers le serveur
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Comment installer Tabpy 1.0 (version 2020-01)
Comment appeler une fonction
Comment pirater un terminal
Comment changer la version de Python
Remarques sur la création d'un environnement LAMP à l'aide de Vagrant et VirtulBox
Présentation de la création d'un socket serveur et de la création d'un socket client
Remarque sur la façon de vérifier la connexion au port du serveur de licences
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Comment continuer le traitement après avoir renvoyé une réponse sur aiohttp Server
Comment faire une traduction japonais-anglais
Comment mettre un lien symbolique
Comment créer un bot slack
Comment créer un package Conda
Comment créer un robot - Avancé
Comment obtenir la version Python
Comment créer une fonction récursive
Comment créer un pont virtuel
Comment créer un Dockerfile (basique)
[Blender] Comment créer un plug-in Blender
Comment supprimer un conteneur Docker
Comment créer un robot - Basic
Comment créer un pilote de langage MongoDB C
Comment vérifier la version du système d'exploitation Linux
Comment créer un fichier de configuration
Résumé de la création d'un environnement LAMP + Wordpress avec Sakura VPS
Le programmeur s'est efforcé de construire un serveur pour le surmonter, disant que l'infrastructure semble être difficile. Édition du serveur WebAP