国内以太坊节点数量不足300个,而且国内特殊的网络原因也会影响到国内用户同步区块数据。为了国内用户更加流畅地同步区块,EthFans 发起星火节点计划。
由于国内的骨干网连接欧美的出口带宽长期拥挤不堪,在高峰期延时,丢包现象普遍,且无法在短期内缓解,所以我们请求每个加入星火节点计划的机构或者组织,如果能力允许的话,希望能启用两个或更多的节点,并且将其中一个节点安置在韩国,日本,香港,台湾,东南亚,新加坡等周边地区,这样通过中国大陆与周边地区迂回的方式,实现更好的海外节点同步效率,减少延迟,真正发挥星火节点计划的价值,这对于所有参与者和以太坊生态在国内的发展都是非常有意义且多赢的事情。
1. 系统要求
我们建议选择国内主要的几家云主机平台的 VPS 服务,运行以太坊节点对算力没有要求,但是请配置尽可能大的磁盘空间以适应区块链数据未来增长的需要。
节点服务器最小配置:
操作系统: Ubuntu
CPU: 2核
内存: 2G
硬盘: 100G
网络: 独立IP,2MB 带宽
防火墙: 开启 22 和 30303 端口,分别用于 SSH 和以太坊节点数据同步
2. 节点服务器部署
说明: 官方提供了安装说明,并且提供了一个自动安装脚本,但是经过实际测试结果表明,自动安装脚本并不适合国情,所以下面的内容将一步一步引导你安装部署,并接入由 EthFans 提供的节点状态信息统计网站 https://stats.ethfans.org。
创建 deploy 用户
当 VPS 服务器启动后,可以通过 ssh 首次登陆服务器。
ssh root@your_vps_ip
此时应立即创建 deploy 用户,并添加 deploy 的 sudo 执行权限并设置强密码,后续操作将全部默认通过 deploy 用户完成。
adduser deploy adduser deploy sudo su - deploy
安装系统依赖库
sudo apt-get update sudo apt-get install build-essential git unzip wget ntp
安装 geth(以太坊客户端)
添加以太坊官方 APT 源,并安装以太坊客户端。
sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum
此时可以通过 geth 创建一个 account,可以解决节点详细信息显示的问题,本文档
3. 日常运维
部分有相关解释
geth account new
通过 nvm 安装 NodeJS
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bashsource ~/.bashrc nvm install v6.9.1
安装 ethstats-client 项目
ethstats-client 项目用于实时抓取本地 geth 节点数据,然后通过 WebSocket 提交给节点状态信息统计网站。
克隆项目到 ~/ethstats-client
目录下,然后安装项目的 NPM 依赖包。
cd ~ git clone https://github.com/cubedro/eth-net-intelligence-api ethstats-clientcd ethstats-client npm install
安装后台进程管理工具
以太坊全数据节点服务器需要确保 geth 和 ethstats-client 一直在后台运行,所以需要一个后台进程管理工具 这里使用官方推荐的 PM2 作为后台进程管理工具
npm install -g pm2
下载 pm2 配置文件 processes.json
cd ~ curl -O https://gist.githubusercontent.com/lgn21st/530faf0f9f31febc6ec5c4e3f0301dca/raw/92558a5bc42d1b4fab1b12690f4184ce480f01f4/processes.json
编辑 processes.json
文件并修改 INSTANCE_NAME
和 CONTACT_DETAILS
信息,改成你的自定义节点名称和联系方式,例如:
[ { "name" : "geth", "cwd" : "/usr/bin/", "script" : "geth", "args" : "--rpc --fast --maxpeers 100 --cache 512", "log_date_format" : "YYYY-MM-DD HH:mm Z", "merge_logs" : false, "watch" : false, "max_restarts" : 10, "exec_interpreter" : "none", "exec_mode" : "fork_mode" }, { "name" : "ethstats-client", "cwd" : "/home/deploy/ethstats-client/", "script" : "app.js", "log_date_format" : "YYYY-MM-DD HH:mm Z", "log_file" : "/home/deploy/ethstats-client/logs/node-app-log.log", "out_file" : "/home/deploy/ethstats-client/logs/node-app-out.log", "error_file" : "/home/deploy/ethstats-client/logs/node-app-err.log", "merge_logs" : true, "watch" : false, "max_restarts" : 10, "exec_interpreter" : "node", "exec_mode" : "fork_mode", "env": { "NODE_ENV" : "production", "RPC_HOST" : "localhost", "RPC_PORT" : "8545", "LISTENING_PORT" : "30303", "INSTANCE_NAME" : "", //<-双引号内填写您的节点名称信息。如果是公司运行的节点,建议写成【贵公司网站】+公司名字,如果是个人运行的节点,建议写成【Ethfans】+个人名字。 "CONTACT_DETAILS" : "", //<-双引号内填写您的联系信息,如网址或邮箱地址。 "WS_SERVER" : "wss://stats.ethfans.org", "WS_SECRET" : "ethfans4you", "VERBOSITY" : 2 } }]
提交您的节点信息星火节点计划
关于如何提交,请访问 星火节点计划超级节点列表
3. 日常运维
pm2 进程管理工具的常用命令
# 载入配置文件并启动后台进程pm2 start processes.json# 停止后台进程pm2 kill# 查看应用的进程状态以pm2 status# 实时日志输出pm2 logs geth pm2 logs ethstats-client
以太坊客户端 geth 版本升级
# 当新版本的 geth 发布后,可以直接通过 apt 升级,升级完成后需要重启 geth 后台服务进程sudo apt-get update sudo apt-get upgrade
关于节点信息显示不完整的问题
我们发现如果使用 geth 1.4 之后的版本,在节点状态信息统计网站上显示信息不完整的情况,具体表现为鼠标悬停在节点名称上,相关的节点信息悬浮窗口不会自动弹出,这是由于当前节点内帐号为空导致 JavaScript 执行错误,官方可能会在之后的版本中解决这个问题,但是目前临时的解决方案很简单方便,只需创建一个空帐号即可。
# 创建过程中会要求输入两次密码,可填写任意密码geth account new
关于如何加速同步
节点建立后,首次初始化将会非常耗费时间,为了能尽快同步区块链数据,以太坊爱好者社区很早就启动了一个 长期节点 计划,通过下载静态节点配置文件 static-nodes.json
并放置到 ~/.ethereum
目录下,然后重启 geth 即可,星火节点计划官方会不定期修改静态节点文件。
# 下载静态节点配置文件 static-nodes.jsoncurl -O https://gist.githubusercontent.com/lgn21st/9e7ef6b9dc9a9b45b700e72a6ce49b91/raw/59e343d9f32d1313edd369b3113d9ea677d2ed0a/static-nodes.json# 移动 static-nodes.json 到指定目录下mv static-nodes.json ~/.ethereum# 重启 geth 后台服务进程pm2 restart geth
关于硬盘扩容
通常 VPS 供应商都会提供挂载额外的硬盘来解决磁盘空间扩容问题。geth 在 Linux 下的默认数据目录的存储位置是 ~/.ethereum
,通过挂载额外的硬盘可以解决数据目录在磁盘的容量增长导致的剩余磁盘空间压力问题。具体做法是将数据目录迁移到挂载的硬盘上,最后通过软链接(Symbol link)的方式链接回默认数据目录位置。
# 先通过 PM2 停止 geth 和 ethstats-client 后台进程mv ~/.ethereum /path/to/extra/disk/ethereum ln -s /path/to/extra/disk/ethereum ~/.ethereum
4. 相关资源
本文来自以太坊爱好者
网友评论