基於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的程序,知道大家都懶,不想點擊,所以小編就加加班啦。

下次再會~~~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章