28 grudnia 2021

Bitcoin full node - docker

Przygotowanie obrazu oraz stack

Zamiast uruchamiać wirtualną maszynę, możemy uruchomić node BTC jako kontener dokera. Poza aplikacją bitcoind uruchamiamy również exporter danych, abyśmy mogli wizualizować stan synchronizacji w Grafana.

mkdir /external_data/BTC/blocks
FROM debian:11

MAINTAINER Robert Olechowski <robertolechowski@gmail.com>
ARG bitcoind_ver=22.0

RUN apt-get update && apt-get install -y wget
RUN wget https://bitcoin.org/bin/bitcoin-core-$bitcoind_ver/bitcoin-$bitcoind_ver-x86_64-linux-gnu.tar.gz  
RUN tar xzf bitcoin-$bitcoind_ver-x86_64-linux-gnu.tar.gz
RUN install -m 0755 -o root -g root -t /usr/local/bin bitcoin-$bitcoind_ver/bin/*
RUN rm -fr /bitcoin-$bitcoind_ver bitcoin-$bitcoind_ver-x86_64-linux-gnu.tar.gz

EXPOSE 8332 8333
CMD ["bitcoind", "-version"]
version: '3.8'
services:
  bitcoin:
    mem_limit: 4g
    stop_grace_period: 2m
    stop_signal: SIGINT
    container_name: Bitcoin
    image: btc_22.0:latest
    ports: [8332:8332, 8333:8333]
    command: bitcoind -disablewallet -conf=/config/btc/bitcoin.conf
    volumes:
      - all_config:/config:ro
      - /external_data/BTC:/data
    security_opt: [no-new-privileges:true]

  btc-exporter:
    image: 4ops/bitcoin-exporter:stable
    container_name: BTC_exporter
    restart: unless-stopped
    ports: [9133:9133]
    build: .
    environment:
      BITCOIN_RPCHOST: portainer-dell.lan
      BITCOIN_RPCUSER: "AAA"
      BITCOIN_RPCPASSWORD: "BBB"
      BITCOIN_RPCPORT: '8332'
      REFRESH_SECONDS: 15
      LOG_LEVEL: info
      LOG_DEBUG: '*'

volumes:
  all_config:
    driver: local
    name: all_config

Plik konfiguracyjny jest na osobnym wirtualnym dysku

blocksdir=/data/blocks
datadir=/data
dbbatchsize=16777214
dbcache=900
mempoolexpiry=30
txindex=1
assumevalid=0

# [rpc]
server=1
rpccookiefile=/data/cookie

rpcuser=AAA
rpcpassword=BBB

rpcport=8332
rpcthreads=2
rpcclienttimeout=500

rpcbind=0.0.0.0

rpcallowip=192.168.30.0/24

Zbieranie i wyświetlanie logów

BTC Grafana

Logi są rozdzielone, aby poprawnie formatować logi, jak w górnym oknie korzystamy z wyrażenia

{container_name="BTC_node"}|="UpdateTip:"| logfmt| line_format "H={{.height}}    V={{.version}}    P={{.progress}}    D={{.date}}"

RPC

Zdalne wywoływanie zapytań

bitcoin-cli -rpcconnect=portainer-dell.lan -rpcuser=AAA -rpcpassword=BBB   getblockcount

Linki