1. 程式人生 > >最新小白詳細描述在centos7.5上安裝python3並使用Nginx+virtualenv+supervisor來部署tornado專案(整理集合結合實際)系列1

最新小白詳細描述在centos7.5上安裝python3並使用Nginx+virtualenv+supervisor來部署tornado專案(整理集合結合實際)系列1

Centos7預設自帶了Python2.7版本(選擇最小安裝可能沒有),但是因為專案需要使用Python3.x你可以按照此文的三個方法進行安裝.(本文是大致部署好後一段時間才寫的,由於中間遇到許多坑導致無法知道有些步驟是否起作用了,細節可能會有一些出入請自行辨別。)

1.安裝python3.5

安裝必要工具 yum-utils ,它的功能是管理repository及擴充套件包的工具 (主要是針對repository)

su root 先切換到root使用者

yum install yum-utils

使用yum-builddep為Python3構建環境,安裝缺失的軟體依賴,使用下面的命令會自動處理.

yum-builddep python

完成後下載Python3的原始碼包(筆者以Python3.5.0為例),Python原始碼包目錄(我放在了/root下面):

https://www.python.org/ftp/python/

wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz

(這了要先獲取/root資料夾許可權chmod -R 777 命令)最後一步,編譯安裝Python3,預設的安裝目錄是 /usr/local 如果你要改成其他目錄可以在編譯(make)前使用 configure 命令後面追加引數 “–prefix=/alternative/path” 來完成修改。

chmod -R 777 /root

cd root

tar -xvJf Python-3.5.0.tar.xz

cd Python-3.5.0

./configure --prefix=/usr/local/python3

make && make install

最後建立軟連結(可以理解為相當於快捷方式複製到/user/bin/下)

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

 

2.Virtualenv來建立虛擬環境

前面也說到了由於專案原因需要的python環境為python35,故運用Virtualenv來建立虛擬環境。

安裝Virtualenv之前,先安裝pip(安裝Pip之前必須要先安裝setuptools,安裝setuptools之前,必須要安裝了Python)

接著在終端輸入:yum install -y python-setuptools,之後輸入easy_install pip,這樣就安裝好了pip

Virtualenv安裝首先在終端下輸入:

pip install virtualenv

virtualenv可以建立一個擁有自己安裝目錄的環境, 這個環境不與其他虛擬環境共享庫, 能夠方便的管理python版本和管理python庫。 下面是建立python3的虛擬環境

建立ENV目錄

cd ~ && mkdir ENV && cd ENV

建立python3虛擬環境

cd ~ && mkdir ENV && cd ENV

virtualenv -p /usr/local/python3/bin/python3.5 python3(一定要按這個來,按原文的來我在python3.5上torando專案啟動不了服務)
 

看到類似這樣的輸出說明虛擬環境我們已經建立成功,下面是使他生效:

[[email protected]_0_10_centos ENV]# source python3/bin/activate
(python3) [[email protected]_0_10_centos ENV]#

注意,在虛擬環境生效之後前面會有(python3)的提示,來指示現在所生效的虛擬環境名。 在建立虛擬環境的時候,如果加上--system-site-packages的話會整合系統現有的包。 這樣,虛擬環境就生效了,我們就可以使用pip來安裝包而不會和系統的包發生衝突。如下:

pip install tensorflow==1.8.0

pip install tornado

等相關包

這是我們最後執行tornado專案的python環境。接下來關閉可以使用如下命令來退出現在的虛擬環境:

(python3) [[email protected]_0_10_centos ENV]# deactivate
[[email protected]_0_10_centos ENV]#

可以看到,在退出之後前面的(python3)就會消失掉。到這裡虛擬環境建立完畢。

到這裡大部分引用了https://cloud.tencent.com/developer/article/1342114

以及pip安裝引用了http://www.mamicode.com/info-detail-1788904.html

 

3.安裝Supervisor

linux下安裝方法很簡單。

cd /

先退回到根目錄,這樣配置檔案才會出現在etc下

pip install supervisor

安裝好supervisor之後,預設是沒有生成配置檔案的。可以通過以下命令生成配置檔案(這一步相當於是給你一個預設的模版)

echo_supervisord_conf > /etc/supervisord.conf

接著輸入

mkdir /etc/supervisor

touch /etc/supervisor/basics.conf

chmod -R 777 /etc

在/etc目錄下找到supervisord.conf並開啟(/etc/supervisord.conf就是這個路徑,當然你也可以配置到其它任意位置),拖到最下面改成如下所示。

當然相對應的要在/etc下建立一個supervisor資料夾(名字可以隨意選者,不過相對應的要在supervisord.conf中更改)。

接著開啟/etc/supervisor/basics.conf進行新增服務程式碼。

下面以我實際配置的新增的程式碼為例:

[group:strapp]
programs=strategy

[program:strategy]
command=/root/ENV/python3/bin/python /home/xlc-centos7-pc/test/ts.py --port=80%(process_num)02d
directory=/home/xlc-centos7-pc/test
process_name = %(program_name)s%(process_num)d
autorestart=false
redirect_stderr=true
stdout_logfile=/home/xlc-centos7-pc/var/log/tornado.log
stdout_logfile_maxbytes=500MB
stdout_logfile_backups=50
stderr_logfile=/home/xlc-centos7-pc/var/log/tornado.log
loglevel=info
numprocs = 4
numprocs_start = 1

/root/ENV/python3/bin/python時python路徑(虛擬環境),/home/xlc-centos7-pc/test/ts.py是執行web服務的目標檔案,port=80%(process_num)02d是埠配合下面的numprocs = 4和numprocs_start = 1,表示8001,8002,8003,8004,當然你還可以直接part=8001,那麼如果你要開啟四個服務就要寫四遍。還要注意的是autorestart這引數,如果值是true的話,你會發現這些服務無論都關不掉了,kill 之後還會自動重起程序。這就是supervisor最強大的地方,我為了關掉這些服務(因為當時發現一個問題想要看看日誌,卻發現無論怎麼重起服務新加的程式碼都不生效,重新配置啟動卻一直報告說這些埠被佔用),最後將autorestart改成false才將服務停止。所以在除錯的時候最好先設定為false,部署的時候設定為true防止服務掛掉。

接著我使用了下面的程式碼在終端啟動了配置檔案,這要服務就起來了(說到這裡之前的程式碼中可能是需要root使用者下才可以使用的,而有些資料夾的需要許可權才可操作,使用chmod -R 777 目錄(檔案)或chmod +x 檔案 就是給執行許可權的意思

supervisord -c /etc/supervisord.conf 

我的專案程式碼打開了127.0.0.1:8001,可以看到如下圖。

當然如果你想要重新配置或者配置有了更新可以使用以下程式碼

supervisorctl shutdown

supervisord -c /etc/supervisord.conf

unlink/tmp/supervisor.sock

supervisord -c /etc/supervisord.conf

如果僅僅是要更新配置則用以下程式碼即可(不過使用前必須啟動supervisor(使用過supervisord -c /etc/supervisord.conf))

supervisorctl update

先對應的還有

# 停止某一個程序,program_name 為 [program:x] 裡的 x
supervisorctl stop program_name
# 啟動某個程序
supervisorctl start program_name
# 重啟某個程序
supervisorctl restart program_name
# 結束所有屬於名為 groupworker 這個分組的程序 (start,restart 同理)
supervisorctl stop groupworker:
# 結束 groupworker:name1 這個程序 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部程序,注:start、restart、stop 都不會載入最新的配置檔案
supervisorctl stop all
# 載入最新的配置檔案,停止原有程序並按新的配置啟動、管理所有程序
supervisorctl reload
# 根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重啟
supervisorctl update

參考:https://www.cnblogs.com/zhaoding/p/6257363.html

https://blog.csdn.net/wr166/article/details/79051725