0%

eosvoter | 代码的书写以及部署

后端部署全过程。

后端部署说明

eosvoter 主要分为两大模块。

  • 为外界提供服务
  • 自身抓取数据

所以,我们给数据抓取提供了一个 docker,而将服务代码放在宿主机上,自动化部署用的是 jenkins

ps:之所以这样做,不是因为这样设计更好,而是,历史问题的遗留。因为,其中一个抓取数据服务用到了 chrome driver ,但是,我图方便没有把它安装到 docker 中,而是安装到了 宿主机上,所以,当时一部分抓取数据的代码也放在了宿主机上。但是,这些都不是问题,这里主要记住,宿主机上运行的是为外界提供服务的代码,docker 中运行的是抓取服务的代码。

一共有两个启动脚本脚本。

  • start_app.sh
    • 抓取数据
  • start.sh
    • 为外界提供服务

start_app.sh

主要是开启后台服务

1
2
3
4
5
#!/usr/bin/env bash
PROJECT_PATH=/root/eosvoter
ps -ef | grep "${PROJECT_PATH}/main.py" | grep -v "grep" | awk -F " " '{print $2}' | xargs kill -9
ps -ef | grep "${PROJECT_PATH}/pool_data.py" | grep -v "grep" | awk -F " " '{print $2}' | xargs kill -9
nohup python3.7 ${PROJECT_PATH}/main.py > ${PROJECT_PATH}/logs/eos_vote_main.log 2>&1 &

start.sh

主要是开启抓取数据的脚本。

1
2
3
4
#!/usr/bin/env bash
PROJECT_PATH=/root/eosvoter
nohup python3.7 ${PROJECT_PATH}/eos_vote_calc.py > ${PROJECT_PATH}/logs/eos_vote_calc.log 2>&1 &
nohup python3.7 ${PROJECT_PATH}/eos_voter_app.py > ${PROJECT_PATH}/logs/eos_voter_app.log 2>&1 &

一般都是,将代码在服务器拉取最新的代码,然后运行 start_app.sh 脚本。

自动化部署

用的是 jenkins 来自动化开启的。

这里有一个颇有意思的点是,正常来讲 jenkins 的自动化部署是,你 push code 后,运行 jenkinsdocker和宿主机的代码就能自动更新并且运行起来,但是,我并没有这样做,采取以下方法纯属图省力,之后会进行优化。

当我 push 代码后,我会先进入宿主机内,将代码拉下来,然后 jenkins 开启 docker ,其中一个操作就是将最新的代码拷贝一份到 docker 中,然后各自运行相关脚本。

下面的 docker 脚本也能看出。

jenkinsSend build artifacts over SSH 模块下的 Exec command 里面的脚本代码是这样的

script
1
2
3
4
5
6
7
8
9
10
11
12
13
cd /root/eosvoter
./start_app.sh
docker stop eosvoter
sleep 5
docker rm eosvoter

docker run -dit --net=host --name eosvoter eosvoter:v2

docker cp /root/eosvoter eosvoter:/root/

sleep 5

docker exec -i eosvoter /bin/bash -c 'source /etc/profile && cd /root/proxy_pool/cli && sh ./start.sh && cd /root/eosvoter && sh ./start.sh'

请我喝杯咖啡吧~