Bitcoin Core Docker Setup [TH]

Set up your own Bitcoin Node on Docker
Bitcoin Core Docker Setup [TH]

คู่มือนี้จะแนะนำการ run docker container จาก docker image ของ lnliz/docker-bitcoindใน repository นี้ จะมี Dockerfile ที่ใช้ในการสร้าง image bitcoin สามารถเข้าไปตรวจสอบกันได้เลยครับ

สวัสดีครับ เจอกันอีกแล้วหลังจากที่ผมได้มีโอกาสสอนในคอร์ส “Set up your own Node” ของ RightShift มาสองครั้งแล้ว การติดตั้งซอฟต์แวร์ด้วยตนเองนั้นดีจริง ๆ สำหรับผม แต่บางครั้งมันก็มีความยุ่งยากอยู่บ้าง และอาจจะไม่เหมาะกับทุกคนที่อยากจะเป็นเจ้าของ Bitcoin Node ของตัวเอง จึงลองทดสอบติดตั้งบน Docker เพื่อดูว่ามันจะง่ายขึ้นหรือไม่ และได้ออกมาเป็นบทความนี้

ไม่ต้องพูดมากแล้ว เรามาเริ่มกันเลยดีกว่า

Requirements

ก่อนเริ่มต้น โปรดตรวจสอบว่าคุณมีสิ่งต่อไปนี้:

  • คอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Linux (Ubuntu, Debian เป็นต้น)
  • Docker
  • พื้นที่ดิสก์: แนะนำ SSD ขนาด 1TB ขึ้นไป (สำหรับข้อมูล Full Blockchain)

ซอฟต์แวร์ที่ใช้ (Software Used)

ในบทความนี้จะใช้ซอฟต์แวร์ดังต่อไปนี้:

  • Bitcoin Core: ซอฟต์แวร์หลักสำหรับรัน Bitcoin Node
  • Tor: สำหรับการเชื่อมต่อแบบไม่ระบุตัวตนและเพิ่มเสริมความเป็นส่วนตัว
  • I2P: สำหรับการเชื่อมต่อแบบไม่ระบุตัวตนและเพิ่มเสริมความเป็นส่วนตัว

โครงสร้างไฟล์ (File Structure)

โครงสร้างไฟล์สำหรับการตั้งค่า Bitcoin Node ด้วย Docker มีลักษณะดังนี้:

.
├── docker-compose.yml
└── data
    ├── bitcoin
    │   └── bitcoin.conf
    ├── tor
    │   └── config
    │       └── torrc
    └── i2pd

พอร์ตที่ใช้ (Ports Used)

Port Service
8332 Bitcoin RPC
8333 Bitcoin P2P
9050 Tor SOCKS
9051 Tor Control
7656 I2P SAM

ขั้นตอนการติดตั้ง (Step-by-Step)

1. อัปเดตแพ็กเกจให้เป็นปัจจุบัน:

1.1 อัปเดตแพ็กเกจและอัปเกรดระบบ:

sudo apt update && sudo apt upgrade -y

1.2 ติดตั้งแพ็กเกจที่จำเป็น:

sudo apt install wget curl gnupg tar ufw python3 -y

2. ติดตั้ง Docker:

2.1 ดาวน์โหลดสคริปต์ติดตั้ง Docker:

curl -fsSL https://get.docker.com -o get-docker.sh

2.2 รันสคริปติดตั้ง Docker:

sudo sh get-docker.sh

2.3 ตรวจสอบเวอร์ชั่นของ Docker:

docker --version

2.4 ตั้งค่าสิทธิ์ให้กับกลุ่ม Docker: โดยเริ่มต้น คำสั่ง Docker จำเป็นต้องใช้สิทธิ์ root หรือใช้ sudo ในการรันคำสั่ง เราจะมาตั้งค่าให้อยู่ในกลุ่มเดียวกันโดยใช้คำสั่งนี้

sudo usermod -aG docker ${USER}

2.5 สลับเข้าสู่ user อีกครั้ง

su - ${USER}

2.6 ทดสอบคำสั่ง:

docker ps

ถ้าทุกอย่างถูกต้อง คุณจะเห็น output แบบนี้:

notoshi@notoshi:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. ตั้งค่า Firewall:

3.1 เปิดพอร์ตที่จำเป็นสำหรับ Bitcoin Node:

sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 8333/tcp comment 'Bitcoin P2P'
sudo ufw allow 8332/tcp comment 'Bitcoin RPC'
sudo ufw allow 9050/tcp comment 'Tor SOCKS'
sudo ufw allow 9051/tcp comment 'Tor Control'
sudo ufw allow 7656/tcp comment 'I2P SAM'

3.2 เปิดใช้งาน Firewall:

sudo ufw enable

3.3 ตรวจสอบสถานะของ Firewall:

sudo ufw status

4. สร้างโฟลเดอร์สำหรับเก็บข้อมูลและไฟล์คอนฟิก:

4.1 สร้างโฟลเดอร์หลัก

mkdir bitcoin-node && cd bitcoin-node

4.2 สร้างโฟลเดอร์ย่อยตามโครงสร้าง:

mkdir -p data/bitcoin data/tor/config data/i2pd

4.3 สร้างไฟล์คอนฟิกสำหรับ Bitcoin Core:

nano data/bitcoin/bitcoin.conf

เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์:

# Bitcoin Core configuration file

# Network settings
server=1
daemon=0
maxconnections=40

# Indexing options
txindex=1
blockfilterindex=1
coinstatsindex=1

# ZMQ settings
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333
zmqpubhashblock=tcp://0.0.0.0:28334

# RPC settings
rpcauth=rpcuser:hashed_password
rpcport=8332
rpcbind=0.0.0.0
rpcallowip=0.0.0/0
rpcallowip=127.0.0.1
rpcallowip=172.0.0.0/16


# Privacy & Tor proxy
proxy=tor:9050
onion=tor:9050
listen=1
bind=0.0.0.0

# Tor integration
proxyrandomize=1
onlynet=onion
listenonion=1
torcontrol=tor:9051
torpassword=change_me

# I2P integration
i2p=1
onlynet=i2p
i2pacceptincoming=1
i2psam=i2p:7656

# Transaction broadcast settings
mempoolexpiry=336
maxmempool=300
minrelaytxfee=0.00001

# Logging
debug=net
debug=tor
logips=0

บันทึกและออกจาก nano โดยกด Ctrl + O แล้วกด Enter จากนั้นกด Ctrl + X

4.4 สร้าง rpcauth สำหรับการเข้าถึง RPC: ดาวน์โหลดสคริปต์ rpcauth:

wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py

รันสคริปต์เพื่อสร้าง rpcauth:

python3 rpcauth.py rpcuser rpcpassword

ผลลัพธ์จะมีลักษณะดังนี้:

notoshi@notoshi:~/test$ python3 rpcauth.py bitcoin bitcoin
String to be appended to bitcoin.conf:
rpcauth=bitcoin:ffcd7d2c9d797345bbb5729d93233342$b719656c7bf93101bfa9bd03cf44ac87261f483f731a6d0896eb82c6e0a6760b
Your password:
bitcoin

คัดลอกผลลัพธ์ที่ได้และเพิ่มลงในไฟล์ bitcoin.conf ของคุณ:

rpcauth=bitcoin:ffcd7d2c9d797345bbb5729d93233342$b719656c7bf93101bfa9bd03cf44ac87261f483f731a6d0896eb82c6e0a6760b

4.5 สร้างไฟล์คอนฟิกสำหรับ Tor:

nano data/tor/config/torrc

เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์:

# Tor configuration for Bitcoin Docker setup

# SOCKS proxy
SocksPort 0.0.0.0:9050
SocksPolicy accept 0.0.0.0/0

# Control port
ControlPort 0.0.0.0:9051
CookieAuthentication 0
HashedControlPassword hashed_password

# Log level
Log notice stdout

# Bitcoin-specific settings
StrictNodes 1
NumEntryGuards 4

# Allow IPv6
ClientUseIPv6 1

# Hidden service (optional)
#HiddenServiceDir /var/lib/tor/bitcoin_peer
#HiddenServicePort 8333 172.17.0.1:8333

บันทึกและออกจาก nano โดยกด Ctrl + O แล้วกด Enter จากนั้นกด Ctrl + X

สร้าง hash password สำหรับ Tor control port:

docker run --rm dockurr/tor tor --hash-password your_strong_password

ผลลัพธ์จะมีลักษณะดังนี้:

notoshi@notoshi:~/test$ docker run --rm dockurr/tor tor --hash-password bitcoin
16:891233E13110497E60FFE39190BD987748C17C6624862B7CEA38F1267E

คัดลอกผลลัพธ์ที่ได้และแทนที่ hashed_password ในไฟล์ torrc ด้วย hash ที่ได้จากคำสั่งด้านบน

HashedControlPassword 16:891233E13110497E60FFE39190BD987748C17C6624862B7CEA38F1267E

แก้ไขไฟล์ bitcoin.conf เพื่อเพิ่มรหัสผ่านสำหรับ Tor control port:

torpassword=bitcoin

5. สร้างไฟล์ docker-compose.yml และใช้งาน:

5.1 สร้างไฟล์ docker-compose.yml ในโฟลเดอร์หลักของคุณ:

nano docker-compose.yml

เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์:

# Docker Compose configuration for Bitcoin, Tor, and I2P services
services:
  bitcoin:
    container_name: bitcoind
    image: lnliz/bitcoind:v30.2
    user: 1000:1000
    restart: always
    stop_grace_period: 15m30s
    ports:
      - "8333:8333"
      - "8332:8332"
      - "28332:28332"
      - "28333:28333"
    volumes:
      - ./data/bitcoin:/data/.bitcoin

  tor:
    container_name: tor
    image: dockurr/tor:latest
    user: root
    command: tor -f /etc/tor/torrc
    restart: always
    ports:
      - "9050:9050"
      - "9051:9051"
    volumes:
      - ./data/tor/config:/etc/tor
      - ./data/tor/data:/var/lib/tor

  i2p:
    container_name: i2p
    image: purplei2p/i2pd:latest
    user: root
    command: --sam.enabled=true --sam.address=0.0.0.0 --sam.port=7656 --loglevel=error
    restart: always
    ports:
      - "7656:7656"
    volumes:
      - ./data/i2pd:/home/i2pd/data

บันทึกและออกจาก nano โดยกด Ctrl + O แล้วกด Enter จากนั้นกด Ctrl + X

5.2 รัน Docker Compose:

docker-compose up -d

5.3 ตรวจสอบสถานะของคอนเทนเนอร์:

docker-compose ps

คุณจะเห็นสถานะของคอนเทนเนอร์ทั้งสาม (bitcoin, tor, i2p) ว่ากำลังทำงานอยู่หรือไม่

5.4 วิธีตรวจสอบดู log ของคอนเทนเนอร์แต่ละ service:

docker-compose logs -f bitcoin
docker-compose logs -f tor
docker-compose logs -f i2p

วิธีใช้งาน bitcoin-cli:

อยากใช้คำสั่ง bitcoin-cli ต้องเข้าสู่ shell ของคอนเทนเนอร์ก่อน

วิธีเข้าสู่ shell ของคอนเทนเนอร์ bitcoind:

docker exec -it bitcoind sh

จากนั้นคุณสามารถใช้คำสั่ง bitcoin-cli ได้ตามปกติ เช่น:

notoshi@notoshi:~/test$ docker exec -it bitcoind sh
/ $ bitcoin-cli -netinfo
Bitcoin Core client v30.2.0 - server 70016/Satoshi:30.2.0/

        onion     i2p   total   block
in          0       0       0
out         6       4      10       2
total       6       4      10

Local services: network, witness, network limited, p2p v2

Local addresses
f2vh2kkbwxpg7nunggxzi72i2bjlqo2ymdbhdsyd72sp6f3yxgvezsqd.onion     port   8333    score      4
r7lkobgevhrzr5drrljpkehs75jctnluqouzc6vuecr2p4e3vgqa.b32.i2p       port      0    score      4
/ $

วิธีออกจาก shell ของคอนเทนเนอร์:

exit

เป็นอย่างไรกันบ้างครับกับการ Set up Bitcoin Node ด้วย Docker หวังว่าบทความนี้จะช่วยให้ทุกคนสามารถมี Bitcoin Node ของตัวเองได้ง่ายขึ้นนะครับ ถ้ามีจุดไหนผิดพลาดสามรถแจ้งได้เลยครับผมยินดีรับฟังและแก้ไขให้ดีขึ้นครับ

หากบทความนี้มีประโยชน์ อย่าลืม zap หรือแชร์ต่อ และฝากติดตามผลงานของผมด้วยนะครับ ขอบคุณครับ!

หมายเหตุ: บทความได้ไอเดียตั้งต้นมากจาก https://github.com/notoshi404/node-guide-th/tree/main/docker/bitcoin ขอบคุณ kohanucha ที่ PR มาเข้ามาใน repository นี้ครับ

#Siamstr #Bitcoin


Write a comment
No comments yet.