1.前言:
在安装python3过程中,通过搜索一些文章参考,发现比较麻烦,而且还出现一些不可预期的报错。python3环境需要升级openssl,所以为了部署到其他环境更方便,写自动安装脚本方式,且安装模式为python3.x与python2.x共存,防止可能发生原有环境异常的情况。
现在我把脚本分享出来,希望可以帮助到有需要的人,业务采集监控python脚本文件不提供,因为那些跟实际业务开发关联比较紧,比较没有参考意义也不方便公开。
shell自动安装脚本,只需按说明简单修改配置,和调用集成脚本对应函数即可完成。安装过程大约30分钟,仅做参考,依网速快慢而定。
2.文件夹功能说明:
功能说明 | |
---|---|
python3_deploy | 存放部署需要shell脚本文件 |
python3_script |
3.python3_deploy下文件摘要说明
shell脚本文件 | 主要用途 | 备注 |
---|---|---|
cnl_function.sh | 常用方法(检测上一次操作是否正常完成) | 安装服务脚本引用 |
openssl_install_step_1.sh | openssl服务升级自动安装部署 | |
python3_install_step_2.sh | python3.7服务自动安装部署 | |
python3_process_step_3.sh | python3程序自动部署&启动监控信息采集脚本 | 需配置,下文详细说明 |
deploy_python3.sh | 集成脚本,主要操作入口 |
4.shell安装脚本
4.1. cnl_function.sh 脚本内容:
1 #!/bin/bash 2 #chennailuan's function 3 4 5 #check last command id Ok or not. 6 check_ok(){ 7 if [ $? != 0 ] 8 then 9 echo "Error,Check the error log." 10 exit 1 11 else 12 echo 13 fi 14 }
4.2.openssl_install_step_1.sh 脚本内容:
1 #!/bin/bash 2 # @author:xiufen.huang 3 # @date:2019-09-03 4 ############################################### 5 echo "" 6 echo "" 7 echo "***************************************************************" 8 echo "* *" 9 echo "* *" 10 echo "* openssl服务升级自动安装部署 *" 11 echo "* *" 12 echo "* *" 13 echo "***************************************************************" 14 echo "" 15 echo "" 16 echo "*****安装时间大约15分钟,仅做参考,依网速快慢而定,请耐心等待*****" 17 18 # 导入常用方法类 19 source ./cnl_function.sh 20 21 #获取脚本所在的当前路径 22 path_now=$(cd "$(dirname "$0")"; pwd) 23 echo "脚本执行当前路径为: $path_now " 24 25 start_time=$(date '+%Y-%m-%d %H:%M:%S') 26 echo "安装开始时间:$start_time" 27 28 echo "1.下载最新版openssl" 29 [ -f openssl-1.1.1a.tar.gz ] || wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz 30 31 # 如果存在解压路径删除 32 [ -d openssl-1.1.1a ] && rm -rf openssl-1.1.1a 33 34 echo "2.解压安装包" 35 tar -zxf openssl-1.1.1a.tar.gz 36 37 # 检验上一命令是否正常执行完成 38 check_ok 39 40 echo "3.备份原配置" 41 [ -f /usr/bin/openssl.bak ] || mv /usr/bin/openssl /usr/bin/openssl.bak 42 [ -f /usr/include/openssl.bak ] || mv /usr/include/openssl/ /usr/include/openssl.bak 43 44 #openssl安装目录 45 path_openssl=/usr/local/openssl 46 47 echo "4.创建安装目录" 48 echo "判断是否存在openssl文件夹,如果不存在则新建openssl文件夹" 49 if [ -d $path_openssl ] 50 then 51 echo "openssl文件夹已经创建,不需要重复创建!" 52 else 53 mkdir -p /usr/local/openssl 54 echo "openssl文件夹创建成功!" 55 fi 56 echo "" 57 58 echo "5.编译安装编译工具及库" 59 cd openssl-1.1.1a 60 check_ok 61 62 # 安装gcc编译器 63 yum install gcc* glien* -y 64 check_ok 65 66 echo "开始编译......" 67 # 一定要shared zlib,否则python3安装带ssl,pip无法使用 68 ./config --prefix=/usr/local/openssl shared zlib 69 check_ok 70 71 echo "开始安装......" 72 make 73 check_ok 74 make install 75 check_ok 76 77 echo "6.新版配置" 78 #将安装好的openssl命令软连到/usr/bin/openssl 79 [ -f /usr/bin/openssl ] || ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl 80 # 将安装好的openssl 的openssl命令软连到/usr/bin/openssl 81 [ -f /usr/include/openssl ] || ln -s /usr/local/openssl/include/openssl /usr/include/openssl 82 #软链到升级后的libssl.so 83 [ -f /usr/local/lib64/libssl.so ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so 84 # 添加软链 85 [ -f /usr/lib64/libssl.so.1.1 ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 86 [ -f /usr/lib64/libcrypto.so.1.1 ] || ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 87 88 echo "7.修改系统配置" 89 #写入openssl库文件的搜索路径 90 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf 91 92 #使修改后的/etc/ld.so.conf生效 93 /sbin/ldconfig -v 94 95 echo "8.查看openssl版本" 96 openssl version 97 98 echo "删除安装包" 99 rm -rf openssl-1.1.1a 100 rm -rf openssl-1.1.1a.tar.gz 101 102 end_time=$(date '+%Y-%m-%d %H:%M:%S') 103 echo "安装结束时间:$end_time" 104 105 echo "openssl服务升级完成."
4.3.python3_install_step_2.sh 脚本内容:
1 #!/bin/bash 2 # @author:xiufen.huang 3 # @date:2019-09-03 4 ############################################### 5 echo "" 6 echo "" 7 echo "***************************************************************" 8 echo "* *" 9 echo "* *" 10 echo "* python3.7服务自动安装部署 *" 11 echo "* *" 12 echo "* *" 13 echo "***************************************************************" 14 echo "" 15 echo "" 16 echo "*****安装时间大约12分钟,仅做参考,依网速快慢而定,请耐心等待*****" 17 18 # 导入常用方法类 19 source ./cnl_function.sh 20 21 #获取脚本所在的当前路径 22 path_now=$(cd "$(dirname "$0")"; pwd) 23 echo "脚本执行当前路径为: $path_now " 24 25 start_time=$(date '+%Y-%m-%d %H:%M:%S') 26 echo "安装开始时间:$start_time" 27 28 echo "1.下载Python-3.7.4.tgz" 29 [ -f Python-3.7.4.tgz ] || wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz 30 31 # 如果存在解压路径删除 32 [ -d Python-3.7.4 ] && rm -rf Python-3.7.4 33 34 echo "2.解压安装包" 35 tar -xvf Python-3.7.4.tgz 36 37 # 检验上一命令是否正常执行完成 38 check_ok 39 40 echo "3.安装编译工具及库" 41 cd Python-3.7.4 42 check_ok 43 44 # 安装gcc编译器 45 yum install gcc* glien* -y 46 check_ok 47 48 # 非必需--安装失败时,可以尝试安装组的开发工具: 49 yum grouplist 50 check_ok 51 yum groupinstall 'Development Tools' -y 52 check_ok 53 54 # 安装依赖包,解决make报错ModuleNotFoundError: No module named '_ctypes'的解决办法 55 yum install libffi-devel -y 56 57 # python3.7安装目录 58 path_python=/usr/local/python3 59 60 echo "4.创建安装目录" 61 echo "判断是否存在python3文件夹,如果不存在则新建python3文件夹" 62 if [ -d $path_python ] 63 then 64 echo "python3文件夹已经创建,不需要重复创建!" 65 else 66 mkdir -p /usr/local/python3 67 echo "python3文件夹创建成功!" 68 fi 69 echo "" 70 71 # 修改./Modules/Setup.dist文件,解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 72 # 代码块,echo一定要用单引号' 73 echo '_socket socketmodule.c' >> Modules/Setup.dist 74 echo 'SSL=/usr/local/openssl' >> Modules/Setup.dist 75 echo '_ssl _ssl.c \' >> Modules/Setup.dist 76 echo ' -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \' >> Modules/Setup.dist 77 echo ' -L$(SSL)/lib -lssl -lcrypto' >> Modules/Setup.dist 78 79 echo "5.开始编译" 80 ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=python 81 check_ok 82 83 echo "6.开始安装" 84 make 85 check_ok 86 sudo make install 87 check_ok 88 89 echo "7.创建快捷路径" 90 # 添加软链接 91 [ -f /usr/bin/python3 ] || ln -s /usr/local/python3/bin/python3 /usr/bin/python3 92 [ -f /usr/bin/pip3 ] || ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 93 94 echo "8.检验是否安装成功" 95 python3 -V 96 97 echo "删除安装包" 98 rm -rf Python-3.7.4 99 rm -rf Python-3.7.4.tgz 100 101 echo "升级pip3版本" 102 pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 103 pip3 install --upgrade setuptools -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 104 105 pip3 list 106 107 end_time=$(date '+%Y-%m-%d %H:%M:%S') 108 echo "安装结束时间:$end_time" 109 110 echo "python3.7服务安装完成."
4.4.python3_process_step_3.sh 脚本内容:
1 #!/bin/bash 2 # @author:xiufen.huang 3 # @date:2019-09-03 4 ############################################### 5 echo "" 6 echo "" 7 echo "****************************************************************************" 8 echo "* *" 9 echo "* *" 10 echo "* python3程序自动部署&启动监控信息采集脚本 *" 11 echo "* 部署需要的文件,需要提前用rz上传,详细请参阅:详细操作步骤说明.md *" 12 echo "* *" 13 echo "* *" 14 echo "****************************************************************************" 15 echo "" 16 echo "" 17 echo "***********部署时间大约3分钟,仅做参考,依网速快慢而定,请耐心等待************" 18 19 # 导入常用方法类 20 source ./cnl_function.sh 21 22 # 程序部署目录(根据自己情况,修改为自己的部署目录) 23 deploy_path="/apps/python3_script" 24 25 # 监控信息采集脚本 26 startup_file="collector_startup.py" 27 28 # 切到程序部署目录 29 cd $deploy_path 30 31 #获取脚本所在的当前路径 32 path_now=$(cd "$(dirname "$0")"; pwd) 33 echo "脚本执行当前路径为: $path_now " 34 35 start_time=$(date '+%Y-%m-%d %H:%M:%S') 36 echo "部署开始时间:$start_time" 37 38 echo "1.安装dos2unix命令" 39 yum -y install dos2unix* 40 41 check_ok 42 43 echo "2.安装postgresql插件" 44 # linux环境要安装模块psycopg2,需要先安装postgresql插件 45 yum install postgresql-devel* -y 46 47 # 判断是否上传脚本了 48 if [ ! -e requirements.txt ] 49 then 50 echo "本次部署需要脚本,请再次确认是否按【详细操作步骤说明.md】 上传了?" 51 exit 1 52 else 53 # 1.执行命令安装requirements.txt中的模块 54 echo "3.安装程序需要的python3模块" 55 pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 56 check_ok 57 fi 58 59 # 查看已经安装的模块 60 pip3 list 61 62 echo "4.睡眠2秒,查看安装模块" 63 sleep 2s 64 65 echo "5.转换脚本文件格式" 66 sudo find -name "*.py" | xargs dos2unix 67 68 check_ok 69 70 echo "6.批量增加可执行权限" 71 chmod +x *.py 72 73 echo "7.启动python程序" 74 nohup python3 -u $deploy_path/$startup_file & 75 76 sleep 1s 77 rm -rf nohup.out 78 79 end_time=$(date '+%Y-%m-%d %H:%M:%S') 80 echo "8.部署结束时间:$end_time" 81 82 echo "python3程序部署完成."
4.5.deploy_python3.sh 脚本内容:
1 #!/bin/bash 2 # @author:xiufen.huang 3 # @date:2019-09-03 4 ############################################### 5 echo "" 6 echo "" 7 echo "**************************************************" 8 echo "* *" 9 echo "* *" 10 echo "* python3程序部署集成脚本 *" 11 echo "* 详细请参阅:详细操作步骤说明.md *" 12 echo "* *" 13 echo "* *" 14 echo "**************************************************" 15 echo "" 16 echo "" 17 18 # openssl服务升级自动安装部署--shell脚本 19 step_1="openssl_install_step_1.sh" 20 21 # python3.7服务自动安装部署--shell脚本 22 step_2="python3_install_step_2.sh" 23 24 # python3程序自动部署--shell脚本 25 step_3="python3_process_step_3.sh" 26 27 # 程序部署目录(根据自己情况,修改为自己的部署目录) 28 deploy_path="/apps/python3_script" 29 30 # 监控信息采集脚本 31 startup_file="collector_startup.py" 32 33 # openssl服务升级自动安装部署 34 function openssl(){ 35 sh $step_1 36 } 37 38 # python3.7服务自动安装部署 39 function python3(){ 40 sh $step_2 41 } 42 43 # python3程序自动部署&启动监控信息采集脚本--shell脚本 44 function process(){ 45 sh $step_3 46 } 47 48 # 启动监控信息采集脚本 49 function start(){ 50 echo "开始启动监控信息采集脚本..." 51 #查找python3运行的进程数 52 num=`ps -ef|grep python3|grep -v grep|wc -l` 53 #echo "$num...." 54 #判断是否有python3进程运行,如果没有则运行执行nohup命令 55 if [ "$num" = "0" ] || [ "$num" = "2" ] ;then 56 # 切到程序部署目录 57 cd $deploy_path 58 nohup python3 -u $deploy_path/$startup_file & 59 echo "启动成功..." 60 sleep 1s 61 rm -rf nohup.out 62 else 63 echo "进程已经存在,启动失败,请检查..." 64 exit 0 65 fi 66 } 67 68 # 信息监控信息采集脚本 69 function stop(){ 70 echo "开始停止监控信息采集脚本..." 71 num=`ps -ef|grep python3|grep -v grep|wc -l` 72 #echo "$num...." 73 if [ "$num" = "0" ] || [ "$num" = "2" ];then 74 echo "服务未启动,无须停止..." 75 else 76 #正常停止python3 77 ps -ef|grep python3|grep -v grep|awk '{print $2;}'|xargs kill 78 echo "进程已经关闭..." 79 fi 80 } 81 82 83 #case 命令获取输入的参数,例:参数:start,执行start(),参数:stop,执行stop(), 84 case "$1" in 85 "openssl") 86 openssl 87 ;; 88 "python3") 89 python3 90 ;; 91 "process") 92 process 93 ;; 94 "start") 95 start 96 ;; 97 "stop") 98 stop 99 ;; 100 *) 101 ;; 102 esac
5.使用说明
5.1.配置部署路径-自动部署脚本
文件路径:/python3_deploy/python3_process_step_3.sh ,只需修改程序部署目录deploy_path的值
1 # 程序部署目录(根据自己情况,修改为自己的部署目录) 2 deploy_path="/apps/python3_script"
5.2.配置部署路径-集成脚本
文件路径:/python3_deploy/deploy_python3.sh ,只需修改程序部署目录deploy_path的值
1 # 程序部署目录(根据自己情况,修改为自己的部署目录) 2 deploy_path="/apps/python3_script"
5.3.上传部署shell脚本
上传文件夹:python3_deploy下的所有文件到指定目录,可以为部署目录(即步骤1、2配置值),也可自己创建的一个目录存储(建议单独目录存储)。假设存储目录:/apps/python3_deploy 。上传完成后,需要为shell脚本给定可执行权限。
1 # 批量增加可执行权限 2 chmod +x *.sh
5.4.升级openssl服务版本
升级openssl版本,是为了解决:使用pip3时报错: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
1 #自动升级命令 2 sh deploy_python3.sh openssl
升级完成,会给出提示信息:openssl服务升级完成,及升级后版本信息。
5.5.安装python3.7服务
安装只需要集成脚本提供的函数,完成自动安装,过程大约12分钟,仅做参考,依网速快慢而定。
1 # 自动安装命令 2 sh deploy_python3.sh python3
安装完成,会给出提示信息:python3.7服务安装完成,及安装版本,python3模块信息。
5.6.部署采集监控信息
该步骤完成python3程序自动部署环境初始化和启动监控信息采集脚本,原则上只执行一次,可执行多次。
1 # 自动部署命令 2 sh deploy_python3.sh process
部署完成,会给出提示信息:python3程序部署完成。
1 # 启动 2 sh deploy_python3.sh start 3 4 # 停止 5 sh deploy_python3.sh stop