Hướng dẫn cài đặt và khởi chạy ethereum full node
Blockchain
37
Ethereum
16
White

Lưu Xuân Trọng viết ngày 26/08/2019

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-get update
sudo apt-get 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-get install python-setuptools
easy_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

Using Nginx HTTP basic Auth for securing the node:

6.1.Install nginx:

sudo apt-get update
sudo apt-get install nginx

6.2. Install apache2-utils:

sudo apt-get 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.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Lưu Xuân Trọng

4 bài viết.
9 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
12 4
Lời nói đầu Trong thời gian qua, với cơn sốt về giá trị của các đồng tiền ảo mà nổi bật là Bitcoin, chắc chẳn mọi người cũng dần quen thuộc với thu...
Lưu Xuân Trọng viết hơn 1 năm trước
12 4
White
7 0
Lời nói đầu Xin chào các bạn, để tiếp tục loạt bài về blockchain, hôm nay mình xin nói về smart contract và các khái niệm, công cụ xoay quanh Smar...
Lưu Xuân Trọng viết hơn 1 năm trước
7 0
White
1 0
Lời nói đầu Đây là một bài viết mình đăng tải trong blog nội bộ công ty từ khá lâu. Hôm nay có dịp xem lại, mình thấy đây là một bài viết khá thú ...
Lưu Xuân Trọng viết 16 ngày trước
1 0
Bài viết liên quan
White
11 5
Tạm xóa
Giaosucan viết hơn 1 năm trước
11 5
White
10 2
Xin chào mọi người. Đây là phần 4 trong bài viết của mình về xây dựng 1 blockchain đơn giản với ngôn ngữ Go. Các bạn có thể có thể tham khảo 3 ph...
Trần Mỹ viết hơn 1 năm trước
10 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
9 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!