Procédure pour mettre en place un nœud du réseau duniter

Bonjour,

Je dispose de deux serveurs dédiés sur lesquels j’ai installé duniter-server-1.8.0. Chacun a donc directement son ipv4 et ipv6 publique (pas besoin de nat).

Sur les 2 machines j’ai utilisé les commandes suivantes pour paramétrer duniter:

duniter wizard network  (ipv4 lo 127.0.0.1, remote ipv4 (l'ip publique), port 10900, g1.halpanet.org)
duniter config --noupnp --ws2p-noupnp --ws2p-port 20900 --ws2p-host 127.0.0.1 --ws2p-remote-port 443 --ws2p-remote-host g1.halpanet.org
duniter config --ws2p-remote-path /ws2p
duniter sync g1.duniter.org 443

Sur le second serveur j’ai précisé un autre hostname (g1.bourdon.eu.org), j’ai également fait un « duniter config --prefix 2 ».

Voici la config nginx que j’ai pour les 2 machines :

location / {
    proxy_pass http://127.0.0.1:10900;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /ws2p {
    proxy_pass http://127.0.0.1:20900;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Ensuite, après avoir recharger nginx, je lance duniter avec la commande suivante en y indiquant l’id/pass de mon compte membre (Abpio1ZP):

duniter direct_start --keyprompt

À priori cela semble fonctionner sauf que je ne suis visiblement pas considéré comme un nœud membre puisque j’ai régulièrement sur le 1er serveur (g1.halpanet.org) :

warn: Local node is not a member. Waiting to be a member before computing a block.

D’abord est-ce cette procédure vous semble correcte pour devenir au moins un mirroir ?
Que dois-je faire pour devenir un nœud membre ?

Merci d’avance d’y prêter attention. Bonne journée !

PS: seul le port 443 est ouvert à l’extérieur sur mes serveurs, est-ce suffisant ?

1 J'aime

Vous avez synchronisé jusqu’au bloc 443. La bonne commande est :

duniter sync g1.duniter.org:443

2 J'aimes

La syntaxe a changé, c’est duniter sync g1.duniter.org:443, sinon tu te synchronises jusqu’au bloc 443 et n’est bien entendu pas membre à ce bloc.
Faut vraiment mettre à jour cette documentation. Ou as-tu trouvé cette information ?

OK, merci.

Je l’ai trouvé ici.

1 J'aime

En effet, maintenant ça fonctionne.

Merci bien. Bonne fin de journée !

Bonjour @ThomasBourdon :slight_smile:

Alors concernant BMA, il ne faut pas indiquer de remote ip si tu a un domaine. Voici ma conf a titre d’exemple :

$ duniter wizard network
? IPv4 interface lo 127.0.0.1
? IPv6 interface None
? Port 10901
? Remote IPv4 None
? Remote port 443
? Does this server has a DNS name? Yes
? DNS name: g1.librelois.fr

Pour WS2P la config est bonne, j’ai testé wss://g1.halpanet.org/ws2p et wss://g1.bourdon.eu.org/ws2p et ça fonctionne :smiley:

Par contre je ne trouve pas tes fiches de peer sur le réseau, il faut peut-être juste attendre un peu :thinking:

Oui :slight_smile:

OK @elois , merci pour la précision à propos de l’IP, je vais corriger ça.
Oui il fallait sûrement attendre un peu car je vois bien mes 2 serveurs en tant que membre du réseau. d’ailleurs j’utilise mon propre nœud sous cesium avec succès.

1 J'aime

en remote IPv4, j’ai toujours mis mon IP publique. ça sert à rien du coup si je comprends bien ?
Du coup, faudrait ptet que je mette à jour mon tuto.

1 J'aime

Du moment que le nom de ta machine pointe bien vers la bonne ip, il n’est pas nécessaire de préciser ton ip dans la config. J’ai adapté ma config comme me l’a suggéré @elois , puis j’ai dû, ce matin, relancer duniter car il avait planté, et tout fonctionne bien.

2 J'aimes

si tu as des suggestions pour améliorer mon tutoriel, je suis preneur :wink:

Je ne suis pas encore un spécialiste, je n’utilise duniter que depuis cette semaine. Ton tuto me semble bien, et il est adapté pour un usage avec du NAT :+1:. Dans mon cas je ne fais pas de NAT puisque j’ai directement une IP publique.

À priori la seule info que je n’ai pas vu dans ton tuto (j’ai lu vite, je peux me tromper), explique l’intérêt de lancer duniter en avant-plan avec --keyprompt afin de ne pas stocker l’id/mdp sur la machine.

2 J'aimes

Bonjour,

Sur l’un de mes deux nœuds duniter, tous les jours entre 6h et 7h, duniter-1.8.0 plante avec cette erreur :

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Savez-vous d’où vient le problème ?

Bonne journée !

Un manque de RAM à un moment. Il arrive que Duniter, et c’est normal pour un logiciel, a des sursauts d’occupation de RAM, par exemple quand il ajoute un bloc, et le kernel tue le processus via un (OOM) out of memory.
Observe ton serveur avec htop pour voir ce que ça dit.

Mmmh, je vais regarder mais je pensais que mes 32Go étaient largement suffisants.

Sinon, c’est Duniter qui crashe sans donner d’info de pourquoi. C’est connu comme problème.

Merci de tes réponses rapides @Moul. Dès qu’il replante, je posterai le message d’erreur complet.

Bonjour,

duniter a replanté plusieurs fois depuis (1x par jour en général). Voici l’erreur complète :

<— JS stacktrace —>
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0x8fb090 node::Abort() [node]
2: 0x8fb0dc [node]
3: 0xb031ce v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
4: 0xb03404 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
5: 0xef7462 [node]
6: 0xef7568 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [node] 7: 0xf03642 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node]
8: 0xf03f74 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [nod
e]
9: 0xf06be1 v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [node]
10: 0xedbec0 [node]
11: 0xede8c2 v8::internal::factory::NewJSTypedArray(v8::internal::ExternalArrayType, v8::internal::PretenureFlag) [node]
12: 0xedec0d v8::internal::factory::NewJSTypedArray(v8::internal::ExternalArrayType, v8::internal::Handlev8::internal::JSArrayBuffer, unsigned long, unsigned long, v8::internal::PretenureFlag) [node]
13: 0xb14dbd v8::Uint8Array::New(v8::Localv8::ArrayBuffer, unsigned long, unsigned long) [node]
14: 0x91be6e node::Buffer::Copy(node::Environment*, char const*, unsigned long) [node]
15: 0x91bf8d node::Buffer::Copy(v8::Isolate*, char const*, unsigned long) [node]
16: 0x91035e napi_create_buffer_copy [node]
17: 0x7f0e362cd962 NextWorker::HandleOKCallback() [/opt/duniter/node_modules/leveldown/prebuilds/linux-x64/node.napi.glibc.node]
18: 0x7f0e362cc669 BaseWorker::Complete(napi_env__, napi_status, void) [/opt/duniter/node_modules/leveldown/prebuilds/linux-x64/node.napi.glibc.node]
19: 0x906ced [node]
20: 0xa6cb55 [node]
21: 0xa71041 [node]
22: 0xa83968 [node]
23: 0xa719cb uv_run [node]
24: 0x905535 node::Start(v8::Isolate*, node::IsolateData*, std::vector<std::string, std::allocatorstd::string > const&, std::vector<std::string, std::allocatorstd::string > const&) [node]
25: 0x90379f node::Start(int, char**) [node]
26: 0x7f0e3d58f7d0 __libc_start_main [/lib64/libc.so.6]
27: 0x8bce95 [node]

Du coup j’ai fait une tâche cron qui vérifie toutes les 5 minutes si duniter tourne toujours et le redémarre le cas échéant.

1 J'aime