Flask + mod_wsgi + Apache on Windows
前幾天接到了一個臨時的任務,寫一個 API。我速速就完成了工作,一切都滿順利的。直到昨天, Mentor 跟我說了一句話:你這個服務是要架在 Windows Server 上的哦…
前言
Flask 要 Deploy 有很多的方法,看了很多的文章,最後決定用 Apache + mod_wsgi 來完成。
所以我現在有三樣東西:
- Flask:一個 Python 的 Web 框架
- Apache:
一架直升機一個開放原始碼的網頁伺服器軟體 - mod_wsgi:一個為了那些以 Python 為主的 web application 要在 Apache 上運行所實作的 WSGI compliant interface
好,開始。
安裝各個元件之前,要先注意一件事,就是電腦裡的 Python 跟之後要安裝的 Apache 和 mod_wsgi 都必須是用相同版本的 C/C++ 編譯器產生的。比如說我的 Python 是 2.7.12 64bit,所以我的 Apache 也要選擇 64 bit 來裝,等下會有詳細說明。
以下是步驟(已經寫好 Flask Web App):
- 安裝 Apache
- 安裝 mod_wsgi
- 建立 wsgi 檔
- Apache 配置
- 測試
安裝 Apache
直接到 https://www.apachelounge.com/download/ 下載需要的版本。前面有說要載相同編譯器產生的版本。因為 Python 2.7 相對應的 C/C++ 編譯器版本是 VC9,所以這次我載的是 Apache 2.4 binaries VC10 (VC10 包含 VC9)Win64。載下來會是一個壓縮資料夾,解壓縮之後放入 C:\
,這也是 Apache 預設的配置。
解壓縮完成之後,打開 cmd ,到 C:\Apache\bin
底下,輸入指令:
httpd
然後打開瀏覽器,輸入:
http://localhost
如果畫面顯示 “It Works!” 就代表成功了。
安裝 mod_wsgi
跟 Apache 一樣,mod_wsgi 也要選擇正確的版本安裝。這邊從 https://github.com/GrahamDumpleton/mod_wsgi/releases 下載了一包 mod_wsgi-windows-4.4.12.tar.gz。解壓縮之後裡面有很多不同版本的 mod_wsgi,我選擇了 \Apache24-win64-VC10\modules\mod_wsgi-py27-VC9.so
這個檔案。
要放進 Apache 的方法很簡單,只要把這個檔案改名為 mod_wgsi.so 然後複製到 C:\Apache24\modules
,接著修改 Apache 的配置文件 C:\Apache24\conf\httpd.conf
,加入這一行:
LoadModule wsgi_module modules/mod_wsgi.so
存檔後再重新啟動一次 httpd,如果沒有噴錯,就成功囉。
建立 wsgi 檔
|
|
Apache 配置
修改 Apache 的配置文件 C:\Apache24\conf\httpd.conf
,在最下面加入:
|
|
至於為什麼和參考文不一樣,要加入 WSGIApplicationGroup,可以看這篇:http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html
另外這裡 VirtualHost 和 Listen 的 port 是 80,如果跟其他 port 有衝突,可以直接修改(兩個都要改)就可以了。
測試
只要打開瀏覽器,一樣到 localhost 上,看看 App 有沒有正常運行就可以了!大功告成!
好吧這真的是一個很特別的經驗,雖然寫起來一點點,但是中間的障礙我卻是弄了三天啊!最後才發現是 Python Lib 和沒有設定 WSGIApplicationGroup %{GLOBAL}
的問題,這些都弄好之後就很快了。僅以此紀念這次神奇的經驗。