Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Hướng dẫn cài đặt và khởi chạy ethereum full node
1. Lời nói đầu
Hi all, trong quá trình làm việc tại công ty thì mình có cài đặt 1 node ethereum cho dự án. Bài viết này sẽ tóm tắt các bước để có được 1 node chạy phần mềm ethereum client full sync với mạng lưới ethereum. Một số phần mềm ethereum client nổi tiếng là geth (go ethereum), parity (viết bằng rust), ... Trong phạm vi bài viết mình chỉ hướng dẫn cài đặt và khởi chạy đối với geth.
2. Yêu cầu đối với hệ thống khi cài đặt geth
Minimum requirements:
CPU with 2+ cores
At least 80 GB free storage space
4 GB RAM minimum with an SSD, 8 GB+ if you have an HDD
8 MBit/sec download internet service
Recommended specifications:
Fast CPU with 4+ cores
16 GB+ RAM
Fast SSD with at least 500 GB free space
25+ MBit/sec download internet service
Dựa trên yêu cầu trên thì mình sử dụng AWS EC2 t2.medium instance với Number of vCPUs là 2, RAM 8GB và 400GB SSD để lưu trữ dữ liệu blockchain.
Chú ý: Nên sử dụng t2.medium trở lên, t2.small sẽ không chịu được nhiệt (ban đầu mình đã thử với t2.small cho tiết kiệm nhưng không ăn thua)
3. Môi trường thực hiện
Ubuntu server 18.04
4. Cài đặt và cấu hình geth
Cài đặt geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt update
sudo apt install ethereum
Create geth config file:
touch /home/ubuntu/.ethereum/ethconfig.toml
Get default contents for mainnet:
geth dumpconfig
1 số config quan trọng:
[Eth]
NetworkId = 1 (mainnet)
SyncMode = "fast"
[Node]
DataDir = "/home/ubuntu/.ethereum"
IPCPath = "geth.ipc"
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["web3", "eth", "txpool", "net"]
WSPort = 8546
WSModules = ["web3", "eth", "txpool", "net"]
Tham khảo thêm ý nghĩa của các config: https://godoc.org/github.com/ethereum/go-ethereum/node#Config
5. Cài đặt supervisor để quản lý geth
Install supervisor:
sudo apt install supervisor
Create config file for supervisor in following path:
sudo touch /etc/supervisor/conf.d/geth.conf
Content of file:
[program:geth]
command=/usr/bin/geth --config /home/ubuntu/.ethereum/ethconfig.toml
user=ubuntu
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/geth.err.log
stdout_logfile=/var/log/supervisor/geth.out.log
Start geth:
sudo supervisorctl start geth
6. Securing the node
Chú ý: Trường hợp chỉ chấp nhận kết nối từ localhost thì không cần quan tâm đến bước này.
Using Nginx HTTP basic Auth for securing the node:
6.1.Install nginx:
sudo apt update
sudo apt install nginx
6.2. Install apache2-utils:
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/geth.htpasswd gethrpc
Có thể kiểm tra nội dung của username và password (đã được mã hóa) vừa tạo:
cat /etc/nginx/geth.htpasswd
6.3. Config nginx using basic authentication:
sudo vi /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
auth_basic "Protected Ethereum Client";
auth_basic_user_file /etc/nginx/geth.htpasswd;
location / {
proxy_pass http://localhost:8545;
}
location /ws {
proxy_pass http://localhost:8546/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
6.4. Reload nginx:
sudo nginx -s reload
7. Relax time
Công việc phía ethereum node đã hoàn tất, chúng ta ngồi đợi cho node đồng bộ với toàn mạng lưới blockchain (có thể mất đến 1 tuần hoặc hơn nữa).
Bây giờ chúng ta có thể tự tin mở cổng 80 đối với IP của App server để App server có thể kết nối đến node.
8. Config phía app server connect tới node
Tiếp theo chúng ta cần config phía server app để connect tới nối và thực hiện các cuộc gọi rpc hoặc lắng nghe các thay đổi từ mạng blockchain.
Chúng ta có thể config url dạng như sau:
ETH_WEBSOCKET_PROVIDER=ws://${ETH_BASIC_AUTH_USERNAME}:${ETH_BASIC_AUTH_PASSWORD}@${ETH_NODE_IP}/ws
ETH_HTTP_PROVIDER=http://${ETH_BASIC_AUTH_USERNAME}:${ETH_BASIC_AUTH_PASSWORD}@${ETH_NODE_IP}
Hoặc lấy thông tin basic auth dưới dạng base64 và set vào header của request.
echo -n <username>:<password> | base64
9. Kết luận
Như vậy là chúng ta đã có được 1 node ethereum full sync với mạng lưới blockchain. Bây giờ chúng ta có thể khởi tạo ethereum client thông qua thư viện Web3 đối với js hoặc 1 số thư viện khác tùy thuộc vào ngôn ngữ bạn lựa chọn.
10. Tài liệu tham khảo
Tham khảo official docs của các service sử dụng trong bài viết.




