本篇內(nèi)容介紹了“centos怎么使用Nginx部署flask應(yīng)用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),雅安服務(wù)器托管、主機租用、主機托管,四川、重慶、廣東電信服務(wù)器租用,服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。
環(huán)境準備
python包安裝工具pip : sudo apt-get install pip
virtualenv:為了避免系統(tǒng)環(huán)境與應(yīng)用環(huán)境之間的沖突,使用虛擬環(huán)境來安裝應(yīng)用的依賴,virtualenv可以為每個python應(yīng)用創(chuàng)建獨立的開發(fā)環(huán)境,安裝方式:sudo pip install virtualenv
虛擬環(huán)境使用
flask項目地址:/usr/local/flasky,只需要在項目地址下運行指令:
virtualenv venv
約定俗成一般使用“venv”作為虛擬環(huán)境的名稱,這樣我們就創(chuàng)建了一個虛擬環(huán)境的文件夾venv如下圖紅框所示:
接下來激活虛擬環(huán)境,只用指令
source venv/bin/activate
激活虛擬環(huán)境后,命令行抬頭會有(venv)標識,僅需虛擬環(huán)境后,一切安裝python的操作都會講包和引用裝在虛擬環(huán)境中,不會影響全局的python環(huán)境
退出虛擬環(huán)境的指令,直接敲:
deactivate
即可退出虛擬環(huán)境
配置flask應(yīng)用環(huán)境
flask應(yīng)用開發(fā)的時候,會應(yīng)用到非常多的模板,“狗書”中有介紹一種比較方便的方式,直接把開發(fā)環(huán)境的flask依賴等導(dǎo)出為一個txt文件,然后在centos的虛擬環(huán)境中使用相應(yīng)指令根據(jù)這個txt文件安裝會非常方便。
pip freeze >requerements.txt
該指令導(dǎo)出一個文件名為requirements.txt的文本,里面的內(nèi)容如下圖所示
然后centos中使用以下指令
pip install -r requerments.txt
這樣就會在虛擬環(huán)境中安裝一個與開發(fā)環(huán)境一致的副本了。
注意一定要在虛擬環(huán)境中使用批量安裝指令,不然就安裝到全局去了,后果還是比較蛋疼的。
安裝uwsgi
flask的實際生產(chǎn)運行環(huán)境選擇不多,比較成熟的是【gunicorn】和【uwsgi】,這里推薦一本書董偉明的《python web開發(fā)實戰(zhàn)》里面有講這兩種部署。
以下內(nèi)容來自百度百科:
uwsgi是一個web服務(wù)器,它實現(xiàn)了wsgi協(xié)議、uwsgi、http等協(xié)議。nginx中httpuwsgimodule的作用是與uwsgi服務(wù)器進行交換。wsgi是一種web服務(wù)器網(wǎng)關(guān)接口。它是一個web服務(wù)器(如nginx,uwsgi等服務(wù)器)與web應(yīng)用(如用flask框架寫的程序)通信的一種規(guī)范。
安裝指令如下,注意一定要保證已經(jīng)進入了虛擬環(huán)境并激活:
pip install uwsgi
不需要使用sudo ,因為virtualvenv沒有權(quán)限要求。
上傳項目文件
博主使用的linux連接工具是xshell,在之前的一篇文章中有講如何上傳文件到linux主機,這里不再詳細說明,展示一下大概的項目結(jié)構(gòu)以及啟動文件manage.py
tree命令可以以樹形圖的形式展示文件結(jié)構(gòu),可以賦予參數(shù)設(shè)置樹的深度,這里博主展示了2層
安裝命令:
sudo apt-get install tree
manage.py代碼如下
#coding=utf-8 #!/usr/local/flasky/venv python ''' created on 2017/11/9 @author: savitar丶 project: ''' import os from app import create_app from flask_script import manager, shell app = create_app(os.getenv('flask_config') or 'default') manager = manager(app) def make_shell_context(): return dict(app=app) manager.add_command("shell", shell(make_context=make_shell_context)) @manager.command def deploy(): """run deployment tasks.""" pass if __name__ == '__main__': manager.run() #app.run()
命令行運行flask項目
python manage.py runserver
以上命令一般都是在開發(fā)環(huán)境進行調(diào)試的時候使用,或者注釋掉“manager.run()”,使用“app.run()”,后者可以直接在pycharm中執(zhí)行項目,這里不再詳細說明
配置uwsgi
我們直接在flask的根目錄下面新建一個文件“config.ini”,使用的方式是配置啟動。文件內(nèi)容如下
[uwsgi] # uwsgi 啟動時所使用的地址與端口 socket = 127.0.0.1:5000 #虛擬環(huán)境目錄 home = /usr/local/flasky/venv #指向網(wǎng)站根目錄 chdir = /usr/local/flasky #python啟動程序文件 wsgi-file = manage.py #python程序內(nèi)用于啟動的application變量名 callable = app #處理器數(shù) processes = 4 #線程數(shù) threads = 2 #狀態(tài)監(jiān)測地址 stats = 127.0.0.1:9191 #設(shè)置uwsgi包解析的內(nèi)部緩存區(qū)大小。默認4k buffer-size = 32768
配置文件的執(zhí)行方式,命令行輸入指令:
uwsgi config.ini
或者不寫配置文件(不建議這樣做),直接命令行輸入
uwsgi –socket 127.0.0.1:5000 –wsgi-file manage.py –callable app –process 4 –threads 2
這里的callable=app 這個app是manage.py程序文件內(nèi)的一個變量,這個變量的類型是flask的application類
這里是因為博主已經(jīng)配置好了項目自啟動,已經(jīng)有一個配置文件在運行了,大家按照正常流程配置就好。ctrl+c關(guān)閉程序,在實際項目中我們的服務(wù)器上可能會有多個項目在運行,我們需要應(yīng)用隨同服務(wù)器啟動并作為后臺服務(wù)運行才是實際項目需要,所以我們需要安裝另一個工具來引導(dǎo)執(zhí)行uwsgi
安裝supervisor
supervisor可以同時啟動多個應(yīng)用,最重要的是當某個應(yīng)用down掉的時候,他可以自動重啟該應(yīng)用,保證可用性。
sudo apt-get install supervisor
supervisor的全局配置文件在
打開該默認配置文件,最下面一行我們看到,該默認配置文件會從 /etc/supervisord/目錄下面加載所有的配置文件
我們不需要修改默認的配置文件,只需要在/etc/supervisord/目錄下新建一個配置文件(命名為flask_supervisor.conf)
該文件內(nèi)容如下:
[program:flasky] # 啟動命令入口 command=/usr/local/flasky/venv/bin/uwsgi /usr/local/flasky/config.ini # 命令程序所在目錄 directory=/usr/local/flasky #運行命令的用戶名 user=root autostart=true autorestart=true #日志地址 stdout_logfile=/usr/local/flasky/logs/uwsgi_super.log
這里command這一行代碼看起來很長,其實就是之前我們的 “uwsgi config.ini”指令,這里使用的是絕對路徑,保證命令和文件的準確性,大家也可以copy這一行代碼出去執(zhí)行,結(jié)果是ok的。autostart和autorestart參數(shù)保證了我們的應(yīng)用可以一直保持啟動的狀態(tài),即使是down掉了也能重啟服務(wù)。
啟動服務(wù)
sudo service supervisor start
終止服務(wù)
sudo service supervisor stop
安裝nginx
nginx是輕量級,性能強,占用資源少,能很好的處理高并發(fā)的反向代理軟件。
正向代理和反向代理
正向代理,作為一個媒介將互聯(lián)網(wǎng)上獲取的資源返回給相關(guān)聯(lián)的客戶端。代理和客戶端在一個局域網(wǎng),對于服務(wù)是透明的。反向代理,根據(jù)客戶端的請求,從后端的服務(wù)器上獲取資源,然后再講這些資源返回給客戶端。代理和服務(wù)器再一個局域網(wǎng),對客戶端是透明的。nginx是反向代理的最佳選擇。
反向代理的作用
提高動態(tài)語言的io處理能力
加密和ssl加速
安全。
負載均衡
緩存靜態(tài)內(nèi)容
支持壓縮。
nginx安裝指令:
sudo apt-get install nginx
配置nginx
我們找到nginx的配置文件,不要修改默認的nginx.conf(路徑 /etc/nginx/nginx.conf)文件,只需要在同樣的文件夾下面新建一個文件夾(conf.d)然后在conf.d下面新建配置文件(flask_ng.conf)即可,如下圖
flask_ng.conf文件內(nèi)容如下
server { listen 80; server_name www.cloud-test.com; #公網(wǎng)地址 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請求將轉(zhuǎn)發(fā)給uwsgi 處理 uwsgi_param uwsgi_pyhome /usr/local/flasky/venv; # 指向虛擬環(huán)境目錄 uwsgi_param uwsgi_chdir /usr/local/flasky; # 指向網(wǎng)站根目錄 uwsgi_param uwsgi_script manage:app; # 指定啟動程序 } }
啟動nginx
sudo service nginx restart
然后瀏覽器直接訪問服務(wù)器http://www.cloud-test.com地址,結(jié)果如下
小case,解決辦法,直接修改本機hosts,綁定就好了,如下圖所示
然后再去訪問
然后也可以找自己的同事一起訪問,看看并發(fā)請求,網(wǎng)站的運行情況,想來能解決在開發(fā)環(huán)境使用了host 0.0.0.0 也只能處理一個用戶的請求的問題
查看應(yīng)用的運行情況
supervisorctl 是 supervisord 的命令行客戶端工具,使用的配置和 supervisord 一樣,這里就不再說了。下面,主要介紹 supervisorctl 操作的常用命令:
輸入命令 supervisorctl 進入 supervisorctl 的 shell 交互界面(還是純命令行),可以看到應(yīng)用的運行情況
就可以在下面輸入命令了。:
help # 查看幫助
status # 查看程序狀態(tài)
stop program_name # 關(guān)閉 指定的程序
start program_name # 啟動 指定的程序
restart program_name # 重啟 指定的程序
tail -f program_name # 查看 該程序的日志
update # 重啟配置文件修改過的程序(修改了配置,通過這個命令加載新的配置)
也可以直接通過 shell 命令操作:
supervisorctl status
supervisorctl update
“centos怎么使用Nginx部署flask應(yīng)用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
本文題目:centos怎么使用Nginx部署flask應(yīng)用
轉(zhuǎn)載注明:http://muchs.cn/article28/gdohcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、企業(yè)建站、靜態(tài)網(wǎng)站、用戶體驗、網(wǎng)站維護、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)