Voici une procédure détaillé, pas à pas, pour installer votre noeud Duniter 1.9-GVA sur votre machine.
Il s’agit de la dernière version en date de Duniter v1. Cette version rend notamment accessible la dernière API GVA, utile pour le fonctionnement de nombreux services comme Ğ1-stats, la carte monnaie libre, Ğ1 super bot ou Ginkgo.
Merci à @pini et @aya pour la dockerisation de cette version de Duniter !
N’hésitez pas à leur faire un don ! (leurs clés publiques sont visibles en cliquant sur leurs pseudo ici même).
Ils compléterons cette procédure si une erreur s’y est glissé, ou si des évolutions sont apportés à ce docker compose.
Il me semble que cette image Docker n’est disponible que pour les architectures x86 (amd64), et pas encore pour ARM, mais ça aussi ils le préciseront si je dis des bêtises.
- Installez Docker CE sur votre appareil en suivant leur documentation officielle.
- Créez un nouveau dossier sur votre appareil, que vous pouvez appeler
duniter
par exemple, et à l’intérieur, créez un nouveau fichier nommédocker-compose.yml
- Éditez ce fichier avec un éditeur de texte, et collez y ce contenu:
version: '3.6'
services:
duniter:
environment:
- DEBUG_ENTRYPOINT=${DUNITER_DEBUG_ENTRYPOINT:-${DEBUG_ENTRYPOINT:-${DEBUG:-}}}
- DUNITER_AUTO_SYNC=${DUNITER_AUTO_SYNC:-true}
- DUNITER_BMA_ENABLED=${DUNITER_BMA_ENABLED:-true}
- DUNITER_BMA_IP4=${DUNITER_BMA_IP4:-0.0.0.0}
- DUNITER_BMA_REMOTE_HOST=${DUNITER_BMA_REMOTE_HOST:-duniter.localhost}
- DUNITER_BMA_REMOTE_PORT=${DUNITER_BMA_REMOTE:-443}
- DUNITER_GVA_ENABLED=${DUNITER_GVA_ENABLED:-true}
- DUNITER_GVA_PATH=${DUNITER_GVA_PATH:-gva}
- DUNITER_GVA_PORT=${DUNITER_GVA_PORT:-30901}
- DUNITER_GVA_REMOTE_HOST=${DUNITER_GVA_REMOTE_HOST:-duniter.localhost}
- DUNITER_GVA_REMOTE_PATH=${DUNITER_GVA_REMOTE_PATH:-gva}
- DUNITER_GVA_REMOTE_PORT=${DUNITER_GVA_REMOTE_PORT:-443}
- DUNITER_GVA_REMOTE_TLS=${DUNITER_GVA_REMOTE_TLS:-false}
- DUNITER_GVA_WHITELIST=${DUNITER_GVA_WHITELIST:-127.0.0.1,::1}
- DUNITER_MANUAL_CONFIG=${DUNITER_MANUAL_CONFIG:-false}
- DUNITER_POW_PREFIX=${DUNITER_POW_PREFIX:-}
- DUNITER_POW_CPU=${DUNITER_POW_CPU:-0.8}
- DUNITER_POW_NBCORES=${DUNITER_POW_NBCORES:-1}
- DUNITER_START_OPTS=${DUNITER_START_OPTS:-direct_webstart}
- DUNITER_SYNC_HOST=${DUNITER_SYNC_HOST:-g1.duniter.org:443}
- DUNITER_SYNC_OPTS=${DUNITER_SYNC_OPTS:-}
- DUNITER_WS2P_HOST=${DUNITER_WS2P_HOST:-0.0.0.0}
- DUNITER_WS2P_PORT=${DUNITER_W2SP_PORT:-20901}
- DUNITER_WS2P_PUBLIC=${DUNITER_W2SP_PUBLIC:-true}
- DUNITER_WS2P_REMOTE_HOST=${DUNITER_WS2P_REMOTE_HOST:-duniter.localhost}
- DUNITER_WS2P_REMOTE_PATH=${DUNITER_WS2P_REMOTE_PATH:-ws2p}
- DUNITER_WS2P_REMOTE_PORT=${DUNITER_WS2P_REMOTE_PORT:-443}
image: duniter/duniter:dev
networks:
- private
ports:
- 0.0.0.0:10901:10901
- 0.0.0.0:20901:20901
- 0.0.0.0:30901:30901
- 0.0.0.0:9220:9220
restart: unless-stopped
volumes:
- data:/var/lib/duniter
- etc:/etc/duniter
networks:
private:
name: ${DOCKER_NETWORK_PRIVATE:-duniter}
public:
name: ${DOCKER_NETWORK_PUBLIC:-host}
volumes:
data:
etc:
Vous pouvez optionnellement remplacer les valeurs duniter.localhost
par le nom de domaine que vous souhaitez attribuer à votre noeud Duniter.
Enregistrer ensuite ce fichier.
4. Exécutez la commande suivante dans un terminal (attention à bien vous situer dans le répertoir contenant le fichier docker-compose.yml) :
docker compose up -d
Félicitation, votre noeud Duniter 1.9-GVA démarre, se synchronise au noeud g1.duniter.org
, puis démarre !
Si tout se passe bien, votre noeud devrait être accessible à cette adresse: http://127.0.0.1:10901
Ainsi que le playground GVA à cette adresse: http://127.0.0.1:30901/gva/playground
Bonus:
- Pour afficher les logs de votre noeud:
docker compose logs -f --tail 200
- Pour couper votre noeud:
docker compose down
- Vérifier si votre noeud tourne ou non (que le processus est lancé):
docker ps
Bonus 2:
Si vous voulez que votre noeud soit accessible depuis l’extérieur, voici le fichier de configuration nginx à adapter selon votre nom de domaine, et à placer dans votre répertoire /etc/nginx/conf.d/duniter.conf
:
server {
server_name mon-noeud-duniter.fr;
listen 80;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Porxy true;
proxy_pass http://127.0.0.1:10901;
proxy_redirect off;
# Socket.io support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
location /gva {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Proxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://127.0.0.1:30901;
proxy_redirect off;
}
location /gva-sub {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NgninX-Porxy true;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
proxy_pass http://127.0.0.1:30901;
proxy_redirect off;
# Socket.io support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location ^~ /ws2p/ {
rewrite ^/ws2p/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:20901;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Replacez simplement mon-noeud-duniter.fr
par votre nom de domaine, dont le DNS doit pointer sur l’adresse IP de votre machine.
Pour le moment, il n’est pas possible d’assigner votre clé publique membre à ce nœud via ce docker compose de manière à forger avec, mais cela viendra probablement dans de futures versions.
Vous pouvez néanmoins assigner votre clé membre manuellement en entrant dans le container Docker (docker exec -it duniter-duniter-1 sh
) et en exécutant la commande wizard de Duniter directement (duniter wizard key
)
N’hésitez pas si vous avez des questions/remarques.
N’hésitez pas également à partager le nom de domaine de votre noeud.