矿机环境部署(未完善,修改中)

0. NKN运行所需要的文件

  1. nknd
  2. config.json
  3. wallet.dat
  4. Log 日志目录
  5. Chain 目录 如果不存在 矿机会自动创建 并从0开始同步

所以 你不需要像之前那么复杂的 编译,或者 NKNMining 那个
只需要根据你的机子架构系统版本来选择编译好的矿机
下载地址 https://github.com/nknorg/nkn/releases
也就是说 你的 目录下有下面几个 就可以 运行矿机了

- nkn
    Chain
    Log
    nknd
    config.json
    wallet.dat

运行 命令
/usr/bin/nohup ./nknd -p 钱包密码 --no-check-port > /dev/null 2>&1 &

1. 原理

  1. 通过自搭建web服务器执行指定shell脚本
比如 访问  http://xxx.com/?a=http://xxx.com/install.sh
服务器就会下载 install.sh 并执行

2. 编写Web服务器(go代码)

如何编译 自行搜索
为了防止别人调用,需要自己添加访问控制权限
编译后 得到可执行文件 这里重命名为 simple-server

package main

import (
	"fmt"
	"github.com/lizongshen/gocommand"
	"net/http"
)

func IndexHandler(w http.ResponseWriter, r *http.Request) {

	vars := r.URL.Query()

	a, a_ok := vars["a"]

	if !a_ok {
		fmt.Fprintln(w, "参数错误")
	} else {
		b := a[0]
		gocommand.NewCommand().Exec("rm -rf run.sh")
		gocommand.NewCommand().Exec("wget -O run.sh " + string(b))
		gocommand.NewCommand().Exec("chmod +x run.sh")
		gocommand.NewCommand().Exec("nohup ./run.sh > /dev/null 2>&1 &")
		fmt.Fprintln(w, "start")
	}

}

func FaviconHandler(w http.ResponseWriter, r *http.Request) {
	// fmt.Println("123")
}

func main() {
	http.HandleFunc("/favicon.ico", FaviconHandler)
	http.HandleFunc("/", IndexHandler)
	http.ListenAndServe(":8088", nil)
}

3. 在需要运行NKN的节点机子上运行该web服务器

这里假定目录为 /root/server/
把上面编译好的 simple-server 放入到 该目录
分配可执行权限 chmod +x /root/server/simple-server
运行,命令 nohup /root/server/simple-server > /dev/null 2>&1 &

---- 华丽的分割线 — 每个机器都 执行 3 的步骤 后面就可以批量部署维护了

4. 本人的 shell 脚本

需要根据你自己的情况修改
我是有单独的机子 放置 shell 脚本 config.json wallet.dat

#!/bin/bash

MY_NKN_REMOTE_URL="http://xxxxx.com/nkn/test/scripts"

NKN_VERSION="v0.5.5-alpha"
NKN_PLATFORM="linux-amd64"
NKN_CHAIN_VERSION="Chain_395413"

NKN_WALLET_URL="$MY_NKN_REMOTE_URL/wallet.dat"
NKN_CONFIG_URL="$MY_NKN_REMOTE_URL/config.json"


NKN_RELEASE_URL="https://github.com/nknorg/nkn/releases/download/$NKN_VERSION/$NKN_PLATFORM.zip"
NKN_CHAIN_URL="https://storage.googleapis.com/nkn-testnet-snapshot/$NKN_CHAIN_VERSION.zip"


BASE_DIR="/root"
NKN_BASE_DIR="$BASE_DIR/nkn"

MONITOR_SCRIPTS_DIR="$BASE_DIR/monitor-scripts"

rm -rf $NKN_BASE_DIR
rm -rf $MONITOR_SCRIPTS_DIR
rm -rf $BASE_DIR/linux-*
echo "#" >> conf && crontab conf && rm -f conf

cd $BASE_DIR

apt-get update

apt-get install -y wget unzip

# 下载nkn执行程序
wget -N $NKN_RELEASE_URL 
unzip $NKN_PLATFORM.zip
mv $NKN_PLATFORM nkn
# 下载nkn执行程序

# 建立 Log 目录
mkdir $NKN_BASE_DIR/Log
# 建立 Log 目录

# 下载 Chain 账本
wget -N $NKN_CHAIN_URL
unzip $NKN_CHAIN_VERSION.zip
mv Chain $NKN_BASE_DIR/Chain
# 下载 Chain 账本

# 下载配置文件
wget -N $NKN_CONFIG_URL
mv config.json $NKN_BASE_DIR
# 下载配置文件


# 下载钱包文件
wget -N $NKN_WALLET_URL
mv wallet.dat $NKN_BASE_DIR
# 下载钱包文件


# 清理文件
rm $BASE_DIR/$NKN_PLATFORM.zip
rm $BASE_DIR/$NKN_CHAIN_VERSION.zip
# 清理文件


# 定时任务
mkdir $MONITOR_SCRIPTS_DIR
wget -N $MY_NKN_REMOTE_URL/09-nkn-monitor.sh
chmod +x 09-nkn-monitor.sh
mv 09-nkn-monitor.sh $MONITOR_SCRIPTS_DIR
echo "#" >> conf && crontab conf && rm -f conf
crontab -l > conf && echo "*   * * * * /root/monitor-scripts/09-nkn-monitor.sh &" >> conf && crontab conf && rm -f conf
# 定时任务


定时监控脚本

#!/bin/bash

# *   * * * * /root/monitor-scripts/09-nkn-monitor.sh &

pid=`ps -ef | grep nknd | grep -v grep | awk '{print $2}'`

if [ -z "$pid" ];
then
    rm -rf cd /root/nkn/Log/*
    cd /root/nkn

    /usr/bin/nohup ./nknd -p cjeruen0922 --no-check-port > /dev/null 2>&1 &
fi



spid=`ps -ef | grep simple-server | grep -v grep | awk '{print $2}'`

if [ -z "$spid" ];
then
    /usr/bin/nohup /root/server/simple-server > /dev/null 2>&1 &
fi

总结

  1. 你需要单独的一台机子用来存放需要的文件 (可以是节点机器的一个)
  2. 每个节点第一次只需要运行 simple-server 就可以
  3. 通过 simple-server 访问 就可执行 部署脚本, 比如
访问 http://8.8.8.8:8088/?a=http://xxxx.com/nkn/install.sh
  1. 就会执行 install.sh 进行部署
  2. 不同节点 使用其 ip 替换 访问即可
4 Likes

太赞啦,社区需要你这样的大牛提供技术支持~

如果能有更详细的教程和讲解就对了

大佬继续完善呀