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](https://github.com/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 มีลักษณะดังนี้:

```text

.

├── 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 อัปเดตแพ็กเกจและอัปเกรดระบบ:

```bash

sudo apt update && sudo apt upgrade -y

```

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

```bash

sudo apt install wget curl gnupg tar ufw python3 -y

```

### 2. ติดตั้ง Docker:

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

```bash

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

```

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

```bash

sudo sh get-docker.sh

```

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

```bash

docker --version

```

2.4 ตั้งค่าสิทธิ์ให้กับกลุ่ม Docker:

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

```bash

sudo usermod -aG docker ${USER}

```

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

```bash

su - ${USER}

```

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

```bash

docker ps

```

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

```

notoshi@notoshi:~$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

```

### 3. ตั้งค่า Firewall:

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

```bash

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:

```bash

sudo ufw enable

```

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

```bash

sudo ufw status

```

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

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

```bash

mkdir bitcoin-node && cd bitcoin-node

```

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

```bash

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

```

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

```bash

nano data/bitcoin/bitcoin.conf

```

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

```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:

```bash

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

```

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

```bash

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 ของคุณ:

```conf

rpcauth=bitcoin:ffcd7d2c9d797345bbb5729d93233342$b719656c7bf93101bfa9bd03cf44ac87261f483f731a6d0896eb82c6e0a6760b

```

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

```bash

nano data/tor/config/torrc

```

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

```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:

```bash

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

```

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

```

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:

```conf

torpassword=bitcoin

```

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

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

```bash

nano docker-compose.yml

```

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

```yaml

# Docker Compose configuration for Bitcoin, Tor, and I2P services

services:

bitcoin:

container_name: bitcoind

image: lnliz/bitcoind:v30.2

user: 1000:1000

restart: always

stopgraceperiod: 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:

```bash

docker-compose up -d

```

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

```bash

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:

```bash

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 ของคอนเทนเนอร์:

```bash

exit

```


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

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

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

#Siamstr #Bitcoin






No comments yet.