Guida all'installazione di un full node con Bitcoin Core: Blockchain Explorer (Ep. 4)

Crypto 11 feb 2025

Dopo aver visto negli articoli precedenti come avviare Bitcoin Core ed il Server Electrum, oggi andiamo ad installare il nostro Blockchain Explorer, che ci consentirà di interrogare transazioni, indirizzi e blocchi, senza utilizzare servizi di terze parti che possono ottenere i nostri indirizzi IP ed indirizzi BTC che visualizziamo.


Partiamo accedendo al server con l'utente "giuseppe" ed aggiorniamo i pacchetti, dal terminale digitiamo:

sudo apt-get update && sudo apt-get upgrade -y

Installiamo Nodejs ed NPM, quindi da terminale accediamo alla cartella temporanea:

cd /tmp

Aggiungeremo i repository ufficiali di NodeJs, per farlo, importiamo la chiave GPG di NodeSource

curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Impostiamo la variabile d'ambiente relativa alla versione di NodeJs che vogliamo scaricare (verifichiamo l'ultima versione qui), nella data in cui sto scrivendo il tutorial la versione è 23, quindi da terminale impostiamo la variabile:

VERSION=23

Creiamo la repository deb:

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Adesso aggiorniamo i pacchetti ed installiamo NodeJs:

sudo apt update && sudo apt install nodejs

Verifichiamo la versione installata:

node -v

Verifichiamo che anche NPM sia stato installato correttamente:

npm -v

Installiamo le dipendenze necessarie:

sudo apt install build-essential nginx

Verifichiamo l'installazione di nginx, per farlo lanciamo il comando:

sudo nginx -v

Riceveremo a video una risposta simile a questa:

Adesso andiamo a creare un certificato SSL valido per 10 anni

sudo openssl req -x509 -nodes -newkey rsa:4096 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -subj "/CN=localhost" -days 3650

Eseguiamo il backup della configurazione originale di nginx:

sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

E creiamo un nuovo file di configurazione con nano:

sudo nano /etc/nginx/nginx.conf

Il file dovrà essere così:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
  worker_connections 768;
}

http {
  ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
  ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
  ssl_session_cache shared:HTTP-TLS:1m;
  ssl_session_timeout 4h;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  include /etc/nginx/sites-enabled/*.conf;
}

stream {
  ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
  ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
  ssl_session_cache shared:STREAM-TLS:1m;
  ssl_session_timeout 4h;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  include /etc/nginx/streams-enabled/*.conf;
}

Salviamo il file cliccando CTRL+X e confermiamo con "Y", a questo punto andiamo a creare due directory per gli streams che ci serviranno per futuri file di configurazione:

sudo mkdir /etc/nginx/streams-available
sudo mkdir /etc/nginx/streams-enabled

Rimuoviamo il file di configurazione "default" dai siti disponibili:

sudo rm /etc/nginx/sites-enabled/default

A questo punto possiamo procedere con il riavvio di nginx, quindi da terminale digitiamo:

sudo nginx -t && sudo systemctl restart nginx

Ecco la risposta a video che riceveremo dal terminale:

Ora possiamo aggiungere la configurazione di BTC RPC Explorer, per farlo andiamo ad abilitare il proxy inverso nginx per instradare il traffico HTTPS crittografato esterno internamente a BTC RPC Explorer. E daremo una direttiva che indicherà ai browser che inviano richieste HTTP di inviarle nuovamente su HTTPS (protocollo crittografato), quindi sul terminale digitiamo:

sudo nano /etc/nginx/sites-available/btcrpcexplorer-reverse-proxy.conf

Copiamo la seguente configurazione:

server {
  listen 4000 ssl;
  error_page 497 =301 https://$host:$server_port$request_uri;
  location / {
    proxy_pass http://127.0.0.1:3002;
  }
}

Salviamo il file cliccando CTRL+X e confermiamo con "Y" ed andiamo a creare un collegamento simbolico su sistes-enable:

sudo ln -s /etc/nginx/sites-available/btcrpcexplorer-reverse-proxy.conf /etc/nginx/sites-enabled/

Andiamo a riavviare nginx:

sudo nginx -t && sudo systemctl restart nginx

Adesso abilitiamo la porta 4000 del firewall tramite ufw:

sudo ufw allow 4000/tcp comment "allow BTC RPC Explorer SSL from anywhere"

Creiamo un nuovo utente sul nostro server , in modo da farlo eseguire il nostro BTC Explorer, quindi da terminale:

sudo adduser --disabled-password --gecos "" btcrpcexplorer

Aggiungiamolo al gruppo bitcoin così da potergli consentire la lettura del file .cookie

sudo adduser btcrpcexplorer bitcoin

Accediamo al nuovo utente creato:

sudo su - btcrpcexplorer

Ed iniziamo importando la chiave GPG dello sviluppatore di BTC RPC Explorer:

curl https://github.com/janoside.gpg | gpg --import

Ecco a video cosa ci verrà mostrato dal terminale:

Scarichiamo adesso il codice di BTC RPC Explorer dal repo ufficiale Github:

git clone https://github.com/janoside/btc-rpc-explorer.git

E rechiamoci nella cartella appena scaricata:

cd btc-rpc-explorer

Verifichiamo il commit:

git verify-commit $(git rev-parse HEAD)

Se tutto va bene riceveremo una risposta simile:

Installiamo adesso tutte le dipendenze utilizzando NPM (potrebbe volerci qualche minuto):

npm install

Controlliamo l'installazione corretta richiedendo la versione da terminale:

head -n 3 /home/btcrpcexplorer/btc-rpc-explorer/package.json | grep version

Dovremmo ricevere a video questa risposta:

Adesso andiamo a configurare il file di enviroment, quindi sul terminale digitiamo:

nano .env

Ed incolliamo questo file di enviroment:

# Cambiare se il path dei data di Bitcoin è diverso:
BTCEXP_BITCOIND_COOKIE=/data/bitcoin/.cookie
BTCEXP_ADDRESS_API=electrum
BTCEXP_ELECTRUM_SERVERS=tcp://127.0.0.1:50001
BTCEXP_SLOW_DEVICE_MODE=false
# Per avere una privacy maggiore disabilitiamo le query verso l'esterno:
BTCEXP_PRIVACY_MODE=true
BTCEXP_NO_RATES=true
BTCEXP_DEMO=true
# Se si vuole aggiungere una password d'accesso basterà togliere dalla prossima riga:
# BTCEXP_BASIC_AUTH_PASSWORD=LaPasswordForte!

Salviamo premendo la combinazione di tasti CTRL + X e confermiamo con "Y", effettuiamo il log-out dall'utente btcrpc ed accediamo con l'utente "giuseppe".
Assicuriamoci di essere quindi loggati come "giuseppe", ed andiamo a creare un nuovo servizio su systemd:

sudo nano /etc/systemd/system/btcrpcexplorer.service

Copiamo il seguente contenuto:

[Unit]
Description=BTC RPC Explorer
Requires=bitcoind.service fulcrum.service
After=bitcoind.service fulcrum.service

[Service]
WorkingDirectory=/home/btcrpcexplorer/btc-rpc-explorer
ExecStart=/usr/bin/npm start

User=btcrpcexplorer
Group=btcrpcexplorer

PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true

[Install]
WantedBy=multi-user.target

Abilitiamo il servizio all'avvio automatico ed avviamolo:

sudo systemctl enable btcrpcexplorer
sudo systemctl start btcrpcexplorer

Assicuriamoci che il servizio si sia avviato correttamente lanciando il comando:

sudo systemctl status btcrpcexplorer

A video dovremmo ricevere una risposta simile:

Adesso accediamo con il nostro browser all'indirizzo:

https://IPdelNODO:4000/

Il browser visualizzerà un avviso perché utilizziamo un certificato SSL auto firmato. Clicchiamo su "Avanzate" e procediamo all'interfaccia web di Block Explorer:

Accesso da remoto

Ammettiamo di voler accedere al nostro esploratore di blockchain personale da remoto, per farlo facilmente dobbiamo aggiungere un servizio nascosto Tor sul nostro nodo così facendo riusciamo ad accedere a BTC RPC Explorer con il browser Tor da qualsiasi dispositivo. Per farlo colleghiamoci con l'utente "giuseppe" ed andiamo a modificare il file torcc:

sudo nano +63 /etc/tor/torrc --linenumbers

Aggiungiamo la seguente riga nella sezione ## This section is just for location-hidden services ##

# Hidden Service BTC RPC Explorer
HiddenServiceDir /var/lib/tor/hidden_service_btcrpcexplorer/
HiddenServiceVersion 3
HiddenServicePoWDefensesEnabled 1
HiddenServicePort 80 127.0.0.1:3002

Ricarichiamo tor:

sudo systemctl reload tor

Ed andiamo a copiarci il nostro indirizzo .onion dal terminale:

sudo cat /var/lib/tor/hidden_service_btcrpcexplorer/hostname

Riceveremo a video una risposta simile a questa:
indirizzoblablabla.onion

Adesso accedendo al sito .onion saremo in grado di poter visualizzare il nostro esploratore.

Aggiornare BTC-RPC Explorer:

Se, verificando la pagina ufficiale GitHub di BTC-RPC Explorer ci accorgessimo che è stata rilasciata una nuova versione non ci resta che aggiornarlo, l'operazione è molto semplice, per prima cosa andiamo a stoppare il servizio, quindi con l'utente "giuseppe" digitiamo:

sudo systemctl stop btcrpcexplorer

Effettuiamo il login all'interno dell'utente btcrpcexplorer

sudo su - btcrpcexplorer

Accediamo alla cartella dell'esploratore ed effettuiamo il pull da github:

cd btc-rpc-explorer && git pull origin $(git rev-parse --abbrev-ref HEAD)

Installiamo eventuali dipendenze con npm:

npm install

A questo punto possiamo uscire dall'utente btcrpcexplorer

CTRL + D

Ed effettuiamo l'avvio del servizio:

sudo systemctl start btcrpcexplorer

Fine Episodio 4


Tag