在Windows上部署Flask項目

說明

本來想用Nginx+uwsgi的方式部署Flask項目构蹬,但uwsgi在Windows環(huán)境下還需其他依賴困后,而且要修改部分文件內(nèi)容鹉梨,照著Windows 10安裝uWSGI:不可行婴程、失敗了一頓操作晋辆,最終還是失敗了G觥!瓶佳!于是嘗試使用Apache+mod_wsgi芋膘。

方案一:Apache+mod_wsgi

安裝Apache

下載Apache包
打開壓縮包,把Apache24文件夾放到C盤根目錄霸饲,即Apache的默認路徑“C:\Apache24”为朋。另外如果服務(wù)器上打開了iis要先關(guān)掉,因為iis跟Apache默認的端口都是80端口厚脉,端口沖突時會造成Apache服務(wù)無法安裝或者啟動习寸。
然后打開cmd,cd到“C:\Apache24\bin”傻工,運行“httpd –k install”安裝Apache服務(wù)霞溪,然后啟動它。(常用命令:運行服務(wù)httpd –k start中捆,停止服務(wù) httpd –k stop)
啟動后Windows的控制面板>管理工具>服務(wù)中可看到Apache2.4服務(wù)鸯匹。
打開瀏覽器,在地址欄輸入“127.0.0.1”或者“l(fā)ocalhost”泄伪,如果瀏覽器顯示的網(wǎng)頁里邊出現(xiàn)“It Works!”忽你,就說明Apache服務(wù)安裝成功。這個時候在你自己的電腦上輸入服務(wù)器的ip地址也能看到此頁面臂容。

安裝mod_wsgi

下載mod_wsgi
使用pip install命令安裝此whl文件科雳。
安裝好之后運行“mod_wsgi-express module-config”,得到三行語句脓杉,把這三行語句復(fù)制出來糟秘,后邊配置站點的時候會用到。

開始配置

創(chuàng)建wsgi入口文件

在項目文件夾中新建一個 wsgi.py文件球散,要注意里邊的application一定不能改成別的尿赚,因為mod_wsgi解析的時候只認這個東西。最簡版本的wsgi.py代碼如下所示:

import sys
Sys.path.insert(0, 'D:\path\to\project') #第二個參數(shù)為項目路徑
from test import app as application # wsgi只認這個application

在Apache中配置站點

配置httpd.conf

打開Apach安裝目錄c:\Apache24\conf\httpd.conf文件進行Apache配置蕉堰。找到有很多LoadModule的位置凌净,把之前得到的三行語句復(fù)制到里邊去,表示使用wsgi來作為Python Web服務(wù)網(wǎng)關(guān)接口屋讶。
這時候保存httpd.conf去重啟Apache服務(wù)冰寻,會發(fā)現(xiàn)Apache服務(wù)的名字變了。
找到httpd.conf文件中
LoadModule vhost_alias_module modules/mod_vhost_alias.so皿渗、
Include conf/extra/httpd-vhosts.conf
這兩行斩芭,把前邊的“#”號注釋符刪掉轻腺,表示啟用虛擬主機并讀取httpd- vhost.conf中的虛擬主機配置來配置站點。

配置httpd-vhosts.conf

打開C:\Apache24\conf\extra\httpd-vhosts.conf文件划乖,里邊的兩個VirtualHost例子可以在每行前邊加“#”號注釋掉或者直接刪掉贬养,在最后加上下面的語句:

<VirtualHost *:80>
    ServerAdmin serveradmin@yourserver.com
    DocumentRoot D:\path\to\project
    ServerName http://dummy-host.example.com
    <Directory "D:\path\to\project">
        Require all granted
        Require host ip
    </Directory>
    WSGIScriptAlias / E:\path\to\project\wsgi.py
    ErrorLog "logs/error.log"
</VirtualHost>

配置虛擬站點,配置相關(guān)的端口號琴庵,項目目錄误算,wsgi.py的路徑等
其中:
VirtualHost表示這是一個虛擬主機的配置,80指的是所用的端口為默認的80端口迷殿《瘢可以弄很多不同的 VirtualHost并使用其他端口,但是要記得去防火墻中添加對應(yīng)的端口的例外贪庙,同時在httpd.conf中查找Listen相關(guān)配置代碼段增加對 應(yīng)端口的監(jiān)聽蜘犁。
ServerAdmin是服務(wù)器管理員的電子郵箱地址。
ServerName是服務(wù)器的IP地址止邮。
Directory是對應(yīng)的項目文件夾
WSGIScriptAlias需要寫出wsgi.py文件的路徑这橙。中間那根斜杠表示url為根目錄,也就是測試該站點的地址為http://127.0.0.1或者http://localhost导披。
至此配置完成屈扎,保存httpd.conf與httpd-vhosts.conf文件,然后重啟Apache服務(wù)撩匕。每次修改配置文件之后都要重啟Apache服務(wù)鹰晨。

測試

打開瀏覽器進行測試,至此部署成功止毕!
但是模蜡!很快有新的問題出現(xiàn)了。請求某些接口時總是不能成功(本地測試可以扁凛,部署到服務(wù)器上就失斎碳病),至今沒有找到原因谨朝,待以后再探索卤妒。于是嘗試第二種方案:Nginx+Tornado

方案二:Nginx+Tornado

配置Nginx

下載Nginx包
解壓,利用cmd進入目錄后輸入:
start nginx.exe
即可啟動nginx服務(wù)器字币。啟動后在瀏覽器中輸入http://localhost會顯示nginx的歡迎畫面则披。
如果未顯示說明80端口被其它應(yīng)用占用了。
其他常用的命令有:

nginx.exe -s quit       #停止服務(wù)
nginx.exe -s stop       #停止服務(wù)
nginx.exe -s reload     #重啟服務(wù)

將Tornado用作wsgi

使用pip install命令安裝Tornado洗出。
在項目文件夾下創(chuàng)建server.py文件并寫下如下代碼:

from tornado.httpserver import HTTPServer
from tornado.wsgi import WSGIContainer
from app import app
from tornado.ioloop import IOLoop
s = HTTPServer(WSGIContainer(app))
s.listen(9900)
IOLoop.current().start()

Tornado負責(zé)監(jiān)聽9900端口士复。
使用python server.py將項目運行起來。

修改Nginx配置文件

修改nginx的配置文件nginx.conf(在解壓目錄下的conf子文件夾下):

 server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://localhost:9900; 
        }
    ....其他配置信息
}

修改location / 塊中的內(nèi)容共苛,添加一行proxy_pass判没,則將訪問localhost:80的請求全部轉(zhuǎn)發(fā)到localhost:9900端口蜓萄,也就是tornado監(jiān)聽的端口隅茎。

測試

重啟nginx服務(wù)器澄峰,輸入服務(wù)器地址進行測試。成功辟犀!且運行穩(wěn)定俏竞。

Tips

修改配置文件并重啟Nginx后,有時會出現(xiàn)無論如何都指向的是Nginx主頁面堂竟。其實是我們開啟了多個Nginx的進程魂毁,所以我們把多余的Nginx進程終止掉。
在nginx.exe的路徑下輸入命令

taskkill /fi "imagename eq nginx.exe" /f

再重新開啟Nginx:start nginx.exe就可以訪問了出嘹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末席楚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子税稼,更是在濱河造成了極大的恐慌烦秩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郎仆,死亡現(xiàn)場離奇詭異只祠,居然都是意外死亡,警方通過查閱死者的電腦和手機扰肌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門抛寝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曙旭,你說我怎么就攤上這事盗舰。” “怎么了桂躏?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵钻趋,是天一觀的道長。 經(jīng)常有香客問我沼头,道長爷绘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任进倍,我火速辦了婚禮土至,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾昆。我一直安慰自己陶因,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布垂蜗。 她就那樣靜靜地躺著楷扬,像睡著了一般解幽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烘苹,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天躲株,我揣著相機與錄音,去河邊找鬼镣衡。 笑死霜定,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廊鸥。 我是一名探鬼主播望浩,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惰说!你這毒婦竟也來了磨德?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤吆视,失蹤者是張志新(化名)和其女友劉穎典挑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揩环,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搔弄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丰滑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顾犹。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖褒墨,靈堂內(nèi)的尸體忽然破棺而出炫刷,到底是詐尸還是另有隱情,我是刑警寧澤郁妈,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布浑玛,位于F島的核電站,受9級特大地震影響噩咪,放射性物質(zhì)發(fā)生泄漏顾彰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一胃碾、第九天 我趴在偏房一處隱蔽的房頂上張望涨享。 院中可真熱鬧,春花似錦仆百、人聲如沸厕隧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吁讨。三九已至髓迎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間建丧,已是汗流浹背排龄。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茶鹃,地道東北人涣雕。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓艰亮,卻偏偏與公主長得像闭翩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子迄埃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351