基于docker实现人人影视CVNT虚拟化多开,基于selinum实现自动化点击程序

意义

          各位矿工在参与CVNT项目时为了到达一机多挖的效果,选择了虚拟机Vmware等方式。但Vm占用资源高且安装效率慢。而docker则可以很好的解决这个问题。现为大家讲解,如何以最优雅的方式实现一机多挖。

我的微信:laughing_jk      由于各种原因,脚本下载地址暂时关闭,如果您需要脚本请添加我的微信,加我请备注出处。

脚本已更新至2019.11.1  已适配CVNT最新版本,

针对官方限制虚拟机流量,我的方案是,多开筛选。比如  一台机器打算跑40个 在虚拟的时候 虚拟100个
这样起码应该有40个有流量 拿低保  想相当于最大化利用资源。
虽治标不治本,但能更多地保证低保

虚拟节点数量建议:;

虚拟个数 =3*(心仪节点数)-0零点的节点

ps:假如您打算虚拟40个虚拟节点。 在安装过程的中 可以将参数填写为虚拟120个,然后让节点跑一个小时后,在super-user.rrysapi.com删除0流量的节点。
 

一、必要配置以及准备(若有python3,则跳过此步骤)

           我们是基于python3开发的脚本,所以在运行一键安装CVNT脚本时,必须确保本机有装有python3。

1.1判断是否有python3

     请在服务器端打开终端输入python3 ,若出现如下界面,则代表您已经安装过python3,可跳过配置阶段。

                                                                                          图1.1

1.2安装python3

     1.2.1请复制链接并打开浏览器,点击download.zip(如图):https://github.com/lsy-zhaoshuaiji/Installcvnt.git

1.2.2  解压文件

          解压后您将会看到两个文件installCvnt.py和python.sh,请将这两个文件复制到您的目录中,并在此目录中打开命令终端。           1.2.3切换管理员权限,(切换root)

          请输入 su root   点击回撤,并输入密码 再点击回撤

           ps(小编抱怨一句):不要问我为什么输入密码不显示,如果这个你都不懂 ,你自己请技术去安装。这类问题,也不要在群里问我,问我,我也不想说。

1.2.3安装python3.6

         请在终端输入:

          sh python.sh

         脚本会自动帮您安装python3,这个过程是编译安装,可能需要5-10分钟,机器会一直刷屏。请您耐心等待

1.2.4检验是否安装成功

       再次输入python3  若出现如图1.1所示就代表成功安装python3.

       ps:出现如图1.1所述就代表成功了,其他的显示不重要。

二、一键安装多台Cvnt(重点来了哦)

2.1下载脚本文件

      请复制链接并打开浏览器,点击download.zip(如图):https://github.com/lsy-zhaoshuaiji/Installcvnt.git

2.2解压文件

     解压后您将会看到两个文件installCvnt.py和python.sh,请将这两个文件复制到您的目录中,并在此目录中打开命令终端。

     1.2.3切换管理员权限,(切换root)

     请输入 su root   点击回撤,并输入密码 再点击回撤

2.3挂载并获取硬盘挂载位置方法(若您已经挂载过,可跳过此步骤):

请输入以下命令:

fdisk -l  

比如5.5T的硬盘,/dev/sda  这就是我要挂载的硬盘名,再输入:

mkdir /home/data1
mkfs.ext4 /dev/sda
mount /dev/sda /home/data1 

检查硬盘大小,请输入下面的命令,若出现了正确的大小,则代表挂载完成

df -h --total

其中/dev/sda为您的硬盘,请根据自己的硬盘名称填写

其中/home/data1为硬盘挂载点,也就是下文您mount_dev参数。请记住这个参数

开机自动挂载:(可跳过此步骤,请点击下面地址)

自动挂载https://blog.csdn.net/up_com/article/details/51264872

2.4执行安装程序脚本(重点)

1.在终端输入

python3 installCvnt.py docker_num(虚拟节点的个数)   cvnt_uid(您人人影视的uid) mount_dev(外接硬盘的挂载目录)

新版本加入了mount_dev参数,可根据此参数让虚拟节点内部存储到硬盘上、此参数可以为空。但由于固态空间比较小,如果您需要虚拟大于20个节点时,建议您在矿机上接一块硬盘。

例如:

python3 installCvnt.py 25 123456 /home/data2

#25为虚拟25个cvnt节点
#123456为UID值
#/home/data2 为硬盘挂载点

如果您虚拟的节点数量比较小,可以不填写mount_dev参数,让cvnt存储在固态硬盘上:

例如:

   

python3 installCvnt.py 5 123456

#5为虚拟5个cvnt节点
#123456为UID值

请按照自己的需求修改参数值,不改的话,您就没收益了,。

~~~代码执行过程中需要获取dockerHub的镜像,虽然我用阿里云加速了 但可以还是会等待很久,所以请您耐心等待5-10分钟(根据您的网速来决定)

2.4在web端开启挖矿(后续我会将基于selenium自动化一键开启挖矿的程序开源 ,目前您还是手动点击开启挖矿)

执行完脚本后会返回如下界面,其中[60001,60005.......]就是您的web开启端口,如图:

请在浏览器中输入您的公网ip+端口访问 并点击开启挖矿

您的本机IP可以在终端通过命令ip addr 或者 ifconfig获取

若您是UPNP则按照您实际的公网IP 填写

如在浏览器中输入----->     171.8.91.65:60001        (第一个节点)

                             ----->     171.8.91.65:600015       (第二个节点)

........等

2.5请在浏览器输入http://super-user.rrysapi.com/#/ 查看运行状态

在执行后上述操作后,在此后台可以查看矿机状态,大概一/二个小时就会显示公网ip

若显示了公网ip则代表安装成功。

到此安装教程结束,下面我们对源码进行说明(感兴趣的小伙伴可以看看,不感兴趣则跳过)

功能更新:(可忽略)

一.自动化点击web端开启挖矿程序:

(前提:您必须已经安装谷歌浏览器,其他浏览器暂时不支持)

1.1请复制链接并打开浏览器,点击download.zip:https://github.com/lsy-zhaoshuaiji/Installcvnt.git并下载autoclick.rar文件,如图:

1.2解压autoclick程序,并运行autoclick.exe

1.2.3按照要求填写信息,系统将自动开启挖矿

二.机器重启后,自动恢复掉线的CVNT节点

1.2.1请复制链接并打开浏览器,点击download.zip:https://github.com/lsy-zhaoshuaiji/Installcvnt.git

1.2.2 下载restart_cvnt.py文件:

1.2.3在矿机端执行 python3 restart_cvnt.py

执行后 掉线的节点会自动恢复,过一个小时,后台便会恢复状态。

三、关键源码解读(如果您改善了源码,请联系我)

我的微信:laughing_jk      加人请备注来源

逻辑上我定义了这几个方法,如图:

其中:

# -*- coding:utf-8 -*-


#这个是让服务器能识别UTF-8编码的

1.检测安装docker

这个逻辑很简单:

1.根据which docker的返回值判断是否安装了docker

2.针对不同linux内核版本配置阿里源

3.安装并启动docker

def install_docker():
    '''
    判断系统内核,安装docker
    :return:
    '''
    output = subprocess.getoutput('which docker')
    if len(output) < 2:
        print('正在安装docker中.......')
        output = subprocess.getoutput('lsb_release -a')
        if 'CentOS' in output:
            print('您的系统为:CentOS')
            docker_shell = 'yum install -y yum-utils device-mapper-persistent-data lvm2 &&' \
                           'yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo &&' \
                           'yum makecache fast &&' \
                           'yum install docker-ce -y'
            output = subprocess.getoutput(docker_shell)
        elif 'Ubuntu' in output:
            print('您的系统为:Ubuntu')
            docker_shell='apt-get update &&' \
                         'apt-get -y install apt-transport-https ca-certificates curl software-properties-common &&' \
                         'curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - &&' \
                         'add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" &&' \
                         'apt-get  update &&' \
                         'apt-get -y install docker-ce'
        else:
            docker_shell ='apt-get -y install docker-ce && yum install docker-ce -y'
        output = subprocess.getoutput(docker_shell)
        subprocess.getoutput('systemctl enable docker && systemctl start docker && systemctl status docker')
        print("成功安装docker,正在安装CVNT------------>")
    else:
        print("您已经安装过docker了,无须安装,正在安装CVNT------------>")

2.pull镜像

这个我要重点讲一下封装的docker镜像,很多人用docker采集不到公网ip就是因为这一步骤:

1.首先我在封装镜像时使用的是centos,并将采集ip的所以工具手动装了上去,比如:
yum install lsb
dmidecode -t1
sudo ip link show
sudo ip addr show
yum install sudo
yum install dmidecode
因为CMDB的采集都会用到这些工具,我们不确定官网采集是用的什么方式,所以我们提前需要将采集工具封装在容器中。

这部分源码逻辑是:

1.判断docker images中是否有我封装的镜像

2.若无镜像,则修改docker源为阿里云,并pull镜像,若有则跳过。

def pull_docker():
    images_status = subprocess.getoutput("docker images|grep reg|awk '{print $(NF-6)}'")
    if images_status == "registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work":
        print("已存在,跳过pull")
        return
    Change_docker_Source="sudo tee /etc/docker/daemon.json <<-'EOF'\n" \
                         "{\n" \
                         "  \"registry-mirrors\": [\"https://o4hd5pcr.mirror.aliyuncs.com\"]\n" \
                         "}\n" \
                         "EOF\n" \
                         "sudo systemctl daemon-reload\n" \
                         "sudo systemctl restart docker\n"
    subprocess.getoutput(Change_docker_Source)
    print("成功修改docker源......正在获取镜像.....请耐心等待几分钟......")
    output=subprocess.getoutput("docker pull registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work:v1.0")
    print("容器Images为:%s"%output)

3.运行容器并修改容器配置文件

代码逻辑为:

1.定义映射端口,并随机生成mac地址

2.docker run 开启重启

3.docker exec -c 在进入容器时执行shell命令

def install_cvnt(docker_num,cvnt_uid):
    name_num = 1
    port_web = 60001
    port_list=[]
    for i in range(docker_num):
        mac=randomMAC()
        container_name = "cvnt{}".format(name_num)
        a = port_web + 1
        b = port_web + 2
        c = port_web + 3
        port_list.append(port_web)
        run_container = "docker run -d -it --name {} " \
                        " --net bridge --mac-address {} -p " \
                        "{}:10000 -p {}:59606 -p {}:59608 -p {}:59843 " \
                        "-h {} " \
                        "registry.cn-hangzhou.aliyuncs.com/cs_work/cvnt_work:v1.0 ".format(container_name, mac, port_web,
                                                                                          a, b, c, container_name)
        container_Id = subprocess.getoutput(run_container)
        start_cvnt = r'docker exec %s bash -c "cd /usr/local/yyets_20190829/yyets_20190829;cd conf;' \
                     r"echo -e '#本地账户信息\nuid=%d' > " \
                     r'user.conf;cd /usr/local/yyets_20190829/yyets_20190829;./install.sh start;"' % (container_Id,cvnt_uid)
        result=subprocess.getoutput(start_cvnt)
        print(result)

        port_web = c
        port_web += 1
        name_num += 1
    return port_list

4.随机生成mac地址

这部分安装mac地址的要求来生成即可,很简单,用随机数。

def randomMAC():
    mac = [0x52, 0x54, 0x00,
           random.randint(0x00, 0x7f),
           random.randint(0x00, 0xff),
           random.randint(0x00, 0xff)]
    return ':'.join(map(lambda x: "%02x" % x, mac))

大概就是这些,其实程序本身只是用python、shell与docker交互并不困难。难点在于封装一个可用的docker容器。

当然在大容器管理下,我还是推荐用k8s集群化管理。

~~最后,小编会在这两天去开发一键点击web的程序,知道大家都懒,不想点击,所以小编就加加班啦。

下次再会~~~~~~~

发布了20 篇原创文章 · 获赞 0 · 访问量 3795

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/100269974
今日推荐