星火节点计划 Ubuntu 接入文档

由于国内的骨干网连接欧美的出口带宽长期拥挤不堪,在高峰期延时,丢包现象普遍,且无法在短期内缓解,所以我们请求每个加入星火节点计划的机构或者组织,如果能力允许的话,希望能启用两个或更多的节点,并且将其中一个节点安置在韩国,日本,香港,台湾,东南亚,新加坡等周边地区,这样通过中国大陆与周边地区迂回的方式,实现更好的海外节点同步效率,减少延迟,真正发挥星火节点计划的价值,这对于所有参与者和以太坊生态在国内的发展都是非常有意义且多赢的事情。

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 | bash
source ~/.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-client
cd 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_NAMECONTACT_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.json
curl -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. 相关资源