本文适合有一定计算机运维知识+运营大量zen安全节点或准备运营安全节点用户。
由于文章受众是zen secure node持有者,“zencash” 和 “安全节点”的介绍省略,直接进入正题。
为什么要Docker来建安全节点
成本 降低85%
运行一个zen安全节点 ,普通的VPS方案需要一个至少10刀每月的vps服务器,运营成本约每月67元RMB,通过Docker来运营,可以将成本降低到每月10元左右。极大的降低了安全节点运营成本,极大的增加节点收益。
效率 提高千倍
建一个安全节点 ,从购买vps -> 初始化基础环境 -> 安装节点服务 -> 同步全网区块, 少则几小时,多则几天,通过docker建立安全节点镜像,可以在几分钟内完成节点上线。
步骤
初始环境
买linode 8G 实例(国内服务商拿不到大量IP地址,linode分配ipv6无限制);
这里买服务器
发ticket 要求分配ipv6 pool
初始配置
Image 选择Ubuntu 18.04 LTS
swap分区分配 32768MB
Disk 分区分配 131072MB
启动系统并ssh登陆。
配置ipv6地址 参照 Ubuntu 17.10
官方文档https://www.linode.com/docs/networking/linux-static-ip-configuration/
首先在remote access菜单找到 Public IP Pools,找到你的 ipv6 地址段;
然后编辑"/etc/systemd/network/05-eth0.network"
在末尾增加
Gateway=fe80::1
Address=2001:db8:2000:aff0::1/64
Address=2001:db8:2000:aff0::2/64
Address=2001:db8:2000:aff0::3/64
......
Address=2001:db8:2000:aff0::100/64
# 加个100个ip地址,地址根据 Public IP Pools算出
添加好后在终端执行 “netplan apply” 使配置生效
ifconfig -a 查看本地地址
(可使用 http://ipv6now.com.au/pingme.php
测试网络状况)
Docker 安装
参考官方 ,Ubuntu 18.04 LTS安装docker 很方便,复制官方文档命令即可。
官方文档参考
建立第一个安全节点
通过docker启动一个ubuntu实例
# 拉运行安全节点系统镜像
docker pull ubuntu
# 查看本地镜像 复制 image id (一串随机字母数字)
docker image ls
# 启动ubuntu
docker run -it image_id /bin/bash
# 配置基础环境 并安装 zen服务 和 secnodetracker 服务
apt-get update
apt-get install iputils-ping
apt-get install net-tools
剩下的和在vps安装节点一样
Zen安装参考官方
secnodetracker安装参考官方
证书生成
注意这里要生成通配符证书,避免后续多个节点需要重复建证书(18年3月才开始支持,所以以前的文档没提过这一点)
# 通配符证书 命令
./acme.sh --issue -d '*.example.com' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
命令第一次执行 会生成一个 “_acme-challenge” ,域名解析添加txt解析 ,记录值为生成的随机码。
# 注意这里是 renew
./acme.sh --renew -d '*.example.com' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
编辑 /root/.zen/zen.conf 文件 配置zen环境
# 重点关注端口配置
rpcport=18600
在用户目录 root 目录,新建zend启动脚本 ,保存为 start.sh
#!/bin/bash
while true;
do
zend -port=9000
sleep 10s
done
启动zend服务
nohup sh /root/start.sh & 2>&1
配置secnodetracker 并启动
node setup.js
node app.js
将第一个安全节点同步保存为 安全节点基础镜像
Ctrl+P+Q 退出容器交互终端
# 查看第一个安全节点的 container id 并复制
docker ps -a
# 将第一个安全节点container保存为image
docker commit --author "i love zen" --message "zen niubi" container_id securenode:v1
# 查看本地镜像
docker image ls
这时候应该已经看到刚才新建的镜像了,复制image id
通过镜像启动新安全节点
交互模式启动新容器, 网络模式为host, 取名node001
docker run -it --net=host --name node001 image_id /bin/bash
编辑监听端口 /root/start.sh /root/.zen/zen.conf 两个监听端口数都+1
rpcport=18601 # /root/.zen/zen.conf
-port=9001 # /root/start.sh
配置并启动zend 和 node服务
rm -fr /root/.zen/wallet.dat
rm -fr /root/secnodetracker/config
nohup sh /root/start.sh & 2>&1
node setup.js # 新配置
node app.js # 或者pm2 管理
Ctrl + p + q 退出交互式命令,完成第二个节点的启动。然后依次启动第3,4,5……20个。
测试8G RAM+ 32G swap 20个以后机器异常卡,理论上越高配机器,单节点性价比越高,所以币足够的情况下建议选更高配机器。
看效果
PS.
节点注册时 会验注册ip,会碰到提示ip已注册。我的解决也很简单,服务器有无限量
的IPv6地址,每注册一个节点,删除一个ip即可。
ip -6 addr del 2400:8xxx:xx:::/64 dev eth0
从docker容器 命令交互环境退出 用 Ctrl+P+Q ,不要直接Cmd+c或者exit,直接退出会导致容器 down,终止服务。