[testnet] Comment déployer un nœud NuLink ?¶
Avertissement
Ce guide est en partie obsolète depuis août 2024.
Ce guide est une traduction libre et simplifiée de la documentation officielle pour le déploiement d’un nœud NuLink, plus communément appelé node validator, worker node ou encore staker node. Système d’exploitation : Debian GNU/Linux ; Architecture : x86-64 ; Espace disque : 30 Gio NVMe ; Mémoire : 4 Gio de RAM ; Une adresse IP statique ; Le port 9951 ouvert. À savoir, il te faudra deux comptes : un compte staker qui stake ses NLK, n’importe quel compte Metamask ou Rabby fait l’affaire ; un compte worker qui sera lié au compte staker (on parle de bond en anglais), et nous verrons comment le créer par la suite.Configuration Requise¶
Avant-propos¶
Les futures commandes à taper dans une console sont précédées par une légende pour indiquer sur quel environnement elles doivent être exécutées.
Exemple avec une commande qui devra être tapée dans la console de l’ordinateur (PC) :
echo 'Coucou depuis le PC !'
Et une commande qui devra être tapée dans la console du serveur (VPS, pour Virtual Private Server) sur lequel le nœud sera déployé :
echo 'Coucou depuis le serveur !'
Astuce
Chaque commande peut être copiée/collée directement depuis cet article vers la console (il y a une icône qui apparait en haut à droite de chaque bloc de code quand la souris passe dessus). Quand il y a une partie de la commande a modifier manuellement :
je le préciserai en amont ;
la légende du bloc de code contiendra l’émoji ✍️ ;
la/les ligne en question sera surlignée.
Astuce
Afin de vérifier qu’une commande se soit terminée avec succès, la dernière ligne affichée dans la console, après l’avoir exécutée, devra être « OK ». Si ce n’est pas le cas, il y a eu une erreur.
Créer un Compte Worker¶
Important
Le compte du worker ne peut pas être un compte ordinaire Metamask.
Attention
Le mot de passe que tu créeras pour ce compte doit faire 8 caractères ou plus (source).
Nous devons passer par Geth pour la création du compte.
Donc, sur ton PC, installe Geth :
GETH_VERSION='1.13.11-8f7eb9cc'
GETH_FOLDER="geth-linux-amd64-${GETH_VERSION}"
wget "https://gethstore.blob.core.windows.net/builds/${GETH_FOLDER}.tar.gz" \
&& tar -xzf "${GETH_FOLDER}.tar.gz" \
&& cd "${GETH_FOLDER}" \
&& echo 'OK'
Et créé le compte :
./geth account new --keystore ./keystore \
&& echo 'OK'
Prudence
Garde bien les informations en sécurité (le mot de passe et le fichier contenant la clé privée).
Le fichier de la clé privée se trouve dans le dossier keystore et se nomme quelque chose comme UTC–xxx (où « xxx » est spécifique à chacun).
Hébergement¶
Créé ton compte sur Contabo, et utilise ce lien vers le serveur à louer avec la bonne configuration présélectionnée. À l’heure où j’écris ces lignes, la première facture est de 18,60 €, puis 11,40 €/mois.
Si tu décides d’utiliser un autre fournisseur, voire un ordinateur local, voici la configuration sélectionnée :
6 vCPU Cores
16 GB RAM
200 GB NVMe
Debian 12
Configuration SSH¶
Quand tu auras pris connaissance de l’adresse IP du serveur, configure l’accès SSH sur ta machine (remplace ADRESSE_IP
par l’adresse IP du serveur) :
cat << EOF >> ~/.ssh/config
Host nulink
User root
HostName ADRESSE_IP
Port 22
EOF
Sauvegarde la Clef Privée¶
Envoie le fichier de la clé privée depuis ton ordinateur vers le serveur :
scp keystore/UTC--* nulink:/root \
&& echo 'OK'
Connexion¶
Connecte-toi en SSH au serveur (utilise le mot de passe que tu as défini sur Contabo) :
ssh nulink
Installation¶
Mise à Jour¶
Mets à jour le système d’exploitation, puis redémarre :
apt update \
&& apt full-upgrade -y \
&& apt autoremove -y \
&& apt install -y unattended-upgrades \
&& reboot
Patiente quelques secondes et reconnecte-toi au serveur.
Pare-feu¶
Installe et configure le pare-feu pour autoriser seulement les connexions entrantes sur les ports SSH et du nœud :
apt install -y ufw \
&& ufw limit ssh \
&& ufw allow 9151/tcp \
&& ufw enable \
&& echo 'OK'
Docker¶
Installe Docker :
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc \
&& echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& apt update \
&& apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
&& echo 'OK'
NuLink¶
Pré-requis pour la prochaine étape :
mkdir nulink \
&& mv UTC--* nulink/ \
&& chmod -R 777 nulink \
&& echo 'OK'
Enfin, installe NuLink :
docker pull nulink/nulink:latest \
&& echo 'OK'
Configuration¶
Avertissement
Envoie maintenant un peu de tBNB sur le compte du worker.
Enregistre les mots de passe pour plus tard :
echo "export NULINK_KEYSTORE_PASSWORD='TON_MOT_DE_PASSE_POUR_NULINK'" >> ~/.profile
echo "export NULINK_OPERATOR_ETH_PASSWORD='LE_MOT_DE_PASSE_DU_COMPTE_WORKER'" >> ~/.profile
Tu dois te déconnecter pour prendre en compte les changements :
exit
Reconnecte-toi, et teste que les mots de passe sont visibles (tu devrais voir 3 lignes avec les 2 mots de passe et « OK ») :
echo "${NULINK_KEYSTORE_PASSWORD}" \
&& echo "${NULINK_OPERATOR_ETH_PASSWORD}" \
&& echo 'OK'
Initialise NuLink (remplace FICHIER_CLEF_PRIVEE
par le nom du fichier contenant la clé privée du compte worker [« UTC–xxx »] et ADRESSE_WORKER
par l’adresse publique du compte worker) :
docker run -it --rm \
-p 9151:9151 \
-v /root/nulink:/code \
-v /root/nulink:/home/circleci/.local/share/nulink \
-e NULINK_KEYSTORE_PASSWORD \
nulink/nulink nulink ursula init \
--signer keystore:///code/FICHIER_CLEF_PRIVEE \
--eth-provider https://data-seed-prebsc-2-s2.binance.org:8545 \
--network horus \
--payment-provider https://data-seed-prebsc-2-s2.binance.org:8545 \
--payment-network bsc_testnet \
--operator-address ADRESSE_WORKER \
--max-gas-price 10000000000 \
&& echo 'OK'
Prudence
Garde bien les informations en sécurité (les douze mots de la seed phrase et le fichier contenant la clé privée).
Depuis ton PC, récupère une copie de la clé privée :
scp nulink:'/root/nulink/keystore/*' . \
&& echo 'OK'
Exécution¶
Et c’est parti, démarre le nœud :
docker run --restart on-failure -d \
--name ursula \
-p 9151:9151 \
-v /root/nulink:/code \
-v /root/nulink:/home/circleci/.local/share/nulink \
-e NULINK_KEYSTORE_PASSWORD \
-e NULINK_OPERATOR_ETH_PASSWORD \
nulink/nulink nulink ursula run --no-block-until-ready \
&& echo 'OK'
Logs¶
Pour suivre ce qu’il se passe sur le nœud :
docker logs -f ursula
Si tu vois « Working ~ Keep Ursula Online! » et/ou « learn_from_teacher_node stop now RELAX. », ça veut dire que tout fonctionne nickel. Félicitations !
Mises à Jour¶
Ceci est à effectuer seulement lors d’une mise à jour du conteneur.
Action à faire dans l’ordre sur le serveur :
supprime le conteneur actuel, puis installe la dernière version :
docker stop ursula \
&& docker rm ursula \
&& docker pull nulink/nulink:latest \
&& echo 'OK'
enfin, relance le nœud.
Lier les Comptes¶
Le site web pour la gestion du staking est https://dashboard.testnet.nulink.org/staking. Plus bas dans cette page, il y a un bouton « Bond worker », clique dessus et renseigne l’adresse du compte worker. Et voilà !
📜 Historique¶
- 2024-03-03
Installation de
unattended-upgrades
pour garder le système d’exploitation à jour et réduire le temps de maintenance.- 2024-02-17
Règle SSH du pare-feu plus protectrice.
- 2024-02-10
Simplification des étapes nécessitant SSH.
Mise à jour de l’adresse du token NLKTest (
0xa22bfb00be8938c50833bfd2444ec721a9eeacc1
→0x06a0f0fa38ae42b7b3c8698e987862afa58e90d9
) suite à la migration de la phase 1 aux phases 2 & 3.- 2024-01-27
Premier jet.