1.前言:python
在安裝python3過程當中,經過搜索一些文章參考,發現比較麻煩,並且還出現一些不可預期的報錯。python3環境須要升級openssl,因此爲了部署到其餘環境更方便,寫自動安裝腳本方式,且安裝模式爲python3.x與python2.x共存,防止可能發生原有環境異常的狀況。linux
如今我把腳本分享出來,但願能夠幫助到有須要的人,業務採集監控python腳本文件不提供,由於那些跟實際業務開發關聯比較緊,比較沒有參考意義也不方便公開。sql
shell自動安裝腳本,只需按說明簡單修改配置,和調用集成腳本對應函數便可完成。安裝過程大約30分鐘,僅作參考,依網速快慢而定。 shell
2.文件夾功能說明:python3.x
功能說明 | |
---|---|
python3_deploy | 存放部署須要shell腳本文件 |
python3_script |
3.python3_deploy下文件摘要說明bash
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安裝腳本 app
4.1. cnl_function.sh 腳本內容: socket
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下的全部文件到指定目錄,能夠爲部署目錄(即步驟一、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