您好,登錄后才能下訂單哦!
python web 部署方式為:nginx + gunicorn + supervisor + flask
一、準(zhǔn)備工作,先來安裝pip
詳細(xì)教程如:
1、首先檢查linux有沒有安裝python-pip包,直接執(zhí)行 yum install python-pip
※顯示No package python-pip available. 則沒有,繼續(xù)如下操作
2、沒有python-pip包就執(zhí)行命令 yum -y install epel-release
3、執(zhí)行成功之后,再次執(zhí)行yum install python-pip
4,、對(duì)安裝好的pip進(jìn)行升級(jí) pip install --upgrade pip
至此,pip工具就安裝好了。
二、創(chuàng)建一個(gè)項(xiàng)目和 python 虛擬環(huán)境
使用python的virtualenv創(chuàng)建虛擬環(huán)境 。用來在一個(gè)系統(tǒng)中創(chuàng)建不同的 python 隔離環(huán)境。相互之間還不會(huì)影響,而且使用相當(dāng)簡單。
mkdir myflask cd myflask virtualenv venv
創(chuàng)建了 venv 環(huán)境之后,激活就可以了
source venv/bin/activate
三、安裝 python web 框架 — flask
flask 是一個(gè) python web 輕型框架,簡潔高效。flask 依賴兩個(gè)庫 werkzeug 和 jinjia2??刹捎?pip 方式安裝:
pip install flask
測(cè)試我們的 flask 安裝是否成功,并使用 flask 寫一個(gè)簡單的 web 服務(wù)。
vim run.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello world!' if __name__ == '__main__': app.run()
啟動(dòng) flask
python run.py
此時(shí),用瀏覽器訪問 http://127.0.0.1:5000 就能看到網(wǎng)頁顯示 hello world!
三、使用 gunicorn 部署 python web
現(xiàn)在我們使用 flask 自帶的服務(wù)器,完成了 web 服務(wù)的啟動(dòng)。生產(chǎn)環(huán)境下,flask 自帶的 服務(wù)器,無法滿足性能要求。我們這里采用 gunicorn 做 wsgi容器,用來部署 python,用pip直接安裝。
pip install gunicorn
pip 是python 用來管理包的一個(gè)重要工具。每次安裝新庫后寫入一個(gè) requirement 文件里面,既能知道自己安裝了什么庫,也方便別人部署時(shí),安裝相應(yīng)的庫。
pip freeze > requirements.txt
以后每次 pip 安裝了新的庫的時(shí)候,都需freeze 一次。完整保存好requirement文本,重新安裝庫則只需要執(zhí)行如下操作:
pip install -r requirements.txt
當(dāng)我們安裝好 gunicorn 之后,需要用 gunicorn 啟動(dòng) flask,注意 flask 里面的name里面的代碼啟動(dòng)了 app.run(),這個(gè)含義是用 flask 自帶的服務(wù)器啟動(dòng) app。這里我們使用了 gunicorn,run.py 就等同于一個(gè)庫文件,被 gunicorn 調(diào)用。
gunicorn -w4 -b0.0.0.0:5000 run:app #-w worker數(shù)量 -b 訪問地址
此時(shí),我們可以用 5000 的端口進(jìn)行訪問。
想要結(jié)束 gunicorn 只需執(zhí)行 pkill gunicorn,有時(shí)候還需要用 ps 找到 pid 進(jìn)程號(hào)才能 kill。
四、使用nginx
nginx,一個(gè)高性能的web服務(wù)器。通常用來在前端做反向代理服務(wù)器。代理服務(wù),簡而言之,一個(gè)請(qǐng)求經(jīng)過代理服務(wù)器從局域網(wǎng)發(fā)出,然后到達(dá)互聯(lián)網(wǎng)上服務(wù)器,這個(gè)過程的代理為正向代理。如果一個(gè)請(qǐng)求,從互聯(lián)網(wǎng)過來,先進(jìn)入代理服務(wù)器,再由代理服務(wù)器轉(zhuǎn)發(fā)給局域網(wǎng)的目標(biāo)服務(wù)器,這個(gè)時(shí)候,代理服務(wù)器為反向代理(相對(duì)正向而言)。
1. gcc 安裝
安裝 nginx 需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:
yum install gcc-c++
2. PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個(gè)Perl庫,包括 perl 兼容的正則表達(dá)式庫。nginx 的 http 模塊使用 pcre 來解析正則表達(dá)式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發(fā)的一個(gè)二次開發(fā)庫。nginx也需要此庫。命令:
yum install -y pcre pcre-devel
3. zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對(duì) http 包的內(nèi)容進(jìn)行 gzip ,所以需要在 Centos 上安裝 zlib 庫。
yum install -y zlib zlib-devel
4. OpenSSL 安裝
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。
yum install -y openssl openssl-devel
5. 使用wget下載nginx:
wget https://nginx.org/download/nginx-1.13.12.tar.gz tar -zxvf nginx-1.13.12.tar.gz cd nginx-1.13.12 make make install #編譯安裝
然后配置Nginx,剛才安裝了Nginx之后,我們打開/etc/nginx/conf.d/default.conf,然后修改默認(rèn)的default.conf為:
server { listen 80; server_name localhost; location / { proxy_pass http://127.0.0.1:5000; proxy_redirect off; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
其中server_name就是你的域名,這里用localhost代表通過ip訪問,配置好default.conf之后試著啟動(dòng)Nginx!
[root@server ~]# service nginx start Starting nginx: [ OK ] [root@server ~]# nginx -s reload
ok!到這一步,整個(gè)部署過程就完成了!
六、為了方便管理使用supervisor
1.安裝 supervisor
pip install supervisor echo_supervisord_conf > supervisor.conf # 生成 supervisor 默認(rèn)配置文件 vim supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn和nginx
2.添加gunicorn到supervisor中,添加到配置最下面。此處因?yàn)槭褂昧藀ython虛擬環(huán)境,可先在虛擬環(huán)境找到gunicorn地址,使用whereis 如:/usr/local/bin/gunicorn,記住此位置加入到supervisor的command中,如下:
【program:myflask】 command = /usr/local/bin/gunicorn -w4 -b0.0.0.0:5000 run:app directory = /home/myflask #位置 autostart = true #自動(dòng)啟動(dòng) startsecs = 5 autorestart = true #自動(dòng)重啟 startretries = 3 #啟動(dòng)失敗時(shí)的最多重試次數(shù) redirect_stderr = true #重定向stderr到stdout stdout_logfile = /var/log/flask_supervisor.log
3、添加nginx進(jìn)程到supervisor
先新建一個(gè)log文件夾
mkdir /home/myflask/log
[program:up_nginx] command = /usr/sbin/nginx autostart = true #隨著supervisord的啟動(dòng)而啟動(dòng) autorestart = true #自動(dòng)重啟 startretries = 10 #啟動(dòng)失敗時(shí)的最多重試次數(shù) exitcodes = 0 #正常退出代碼 stopsignal = KILL #用來殺死進(jìn)程的信號(hào) stopwaitsecs = 10 #發(fā)送SIGKILL前的等待時(shí)間 redirect_stderr = true #重定向stderr到stdout stdout_logfile = /home/myflask/log/nginx.log stdout_logfile = /home/myflask/log/nginx.err
4.啟用supervisor管理工具
supervisord -c supervisord.conf #sudo unlink /tmp/supervisor.sock #如上面啟動(dòng)失敗先使用此命令之后在使用上面命令 supervisorctl start all
至此所有配置結(jié)束,試試網(wǎng)站是否如正常運(yùn)行吧,還可增加supervisor開機(jī)自啟動(dòng)(這個(gè)未試驗(yàn),大家試試看吧):
#開機(jī)任務(wù)自動(dòng)啟動(dòng) vi /etc/rc.d/rc.local #并在最后添加 supervisord -c /home/myflask/supervisord.conf #尾聲:通過以上步驟,那么基本上就可以開啟啟動(dòng)網(wǎng)站了!reboot試一試~~
※supervisor的基本使用命令
supervisord -c supervisor.conf #通過配置文件啟動(dòng)supervisor supervisorctl status #察看supervisor的狀態(tài) supervisorctl reload #重新載入 配置文件 supervisorctl start [all]|[appname] #啟動(dòng)指定/所有 supervisor管理的程序進(jìn)程 supervisorctl stop [all]|[appname] #關(guān)閉指定/所有 supervisor管理的程序進(jìn)程
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。