1. 程式人生 > >Flask + mod_wsgi + Apache on Windows 部署成功(隨時接受提問)

Flask + mod_wsgi + Apache on Windows 部署成功(隨時接受提問)

blob rect 之前 放棄 admin 我們 net rgs 官方

前言

說是前言,純粹就是吐槽。

假設你趕時間。全然能夠跳過這部分,我保證不會在這裏隱藏不論什麽實用的內容。

人上年紀後。可能沖勁不足,我花了大概兩周的時間才成功的將flask部署到windows上。還好沒有放棄,終於找到了答案。

只是這也說明我在開源軟件的應用和配置上還非常差勁呀,當我看到要用VC10的C/C++編譯器編譯源碼時,頭都大了。你說我們這些平時習慣了Vistual Studio編譯的。哪還懂什麽make命令呀。

還好網上什麽都有,連幫你編譯的都有,因此,編譯這一難沒有經歷。

對於flask這種開源軟件來說,部署總是有多種選擇。我如今吐槽一下我試過的,但沒有成功的經歷。

  1. PyISAPIe + IIS
  2. CGI + IIS (盡管配置成功,可是不能解析wsgi)
  3. FastCGI + Nginx
  4. FastCGI + Lighttpd (須要cygwin進行編譯)
當然,flask官方有關於部署文檔。可是寫得太簡單。但我還是將鏈接粘出來。

http://dormousehole.readthedocs.org/en/latest/deploying/index.html


參考

https://claudiosparpaglione.wordpress.com/2013/03/06/how-to-deploy-flask-applications-to-apache-webserver/

我參考過非常多鏈接,可是是這篇文章把我引向正途。


終於方案

Flask + mod_wsgi + Apache Flask: 一個Python的web框架 mod_wsgi: 一個為Python編寫的Apache的FastCGI模塊 Apache: 一個類似於IIS的Webserver
!!。註意 !

!!

假設以下這一點沒有做到。整個過程有99%的可能性會失敗。

Apache,mod_wsgi和Python都必須用同樣版本號的C/C++編譯器生成,它們要麽是32位的,要麽是64位的,不能混用。

由於我從Python官方網站上下載的Python 3.4就是32位的。而且是用VC10編譯出來的。因此在下載Apache和mod_wsgi時。也必須選擇32位的用VC10編譯出來的版本號。

之前我就是沒有註意到這個問題,所以導致一直沒有成功安裝。


這個問題的詳解,參見: https://github.com/GrahamDumpleton/mod_wsgi/blob/master/win32/README.rst

另外,Python官方網站提供的似乎都是32位的版本號。假設要64位的,預計須要自己動手編譯了。
Windows下的編譯器。參見: http://www.microsoft.com/express/vc/




步驟

  1. 安裝Apache
  2. 安裝mod_wsgi
  3. 安裝Python
  4. 安裝Flask
  5. 創建測試Web App
  6. 在Apache中配置網站
  7. 測試

1. 安裝Apache

Apache是開源軟件,針對windows環境。它不直接提供編譯版本號。
能夠在http://www.apachelounge.com/download/ 下載適合自己環境的版本號。 依據我自己當前的環境。我選擇的是Win32 VC10編譯出來的Apache2.4版本號
將壓縮包下載到本機,然後將壓縮包裏面的Apache24目錄復制到C:\。


當然,你能夠復制到你的系統的不論什麽位置,但Apache的默認配置是C:\Apache24。

假設你本機執行了IIS。將其關掉。由於IIS和Apache都默認用的是80port。假設你想配置其他port。我相信那也不難。等把Flask部署成功後再來搗鼓吧。

打開cmd
>cd c:\
>cd Apache24\bin\
>httpd

然後打開瀏覽器,輸入
http://localhost

假設網頁上顯示 It Works! ,那說明apacheserver執行起來了。


2. 安裝mod_wsgi

這個module可不能隨便裝,它是啟動Python的關鍵。

我不知道為什麽Flask的官方網站上不把這個模塊的安裝列出來。僅僅是簡單的說了一下httpd.confg的配置,實在是太不負責任了。
從以下這個鏈接下載mod_wsgi https://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi-win32-ap22py27-3.3.so
這個包裏面包括了32位和64位的編譯版本號。下載完畢後選擇 mod_wsgi-windows-4.4.12.tar\mod_wsgi-windows-4.4.12\Apache24-win32-VC10\modules\mod_wsgi-py34-VC10.so。 由於我當前安裝的Python是32位的,所以必須選擇mod_wsgi-py34-VC10.so

將mod_wsgi-py34-VC10.so拷貝至C:\Apache24\modules\下,並更名為mod_wsgi.so。

打開 c:\Apache24\conf\httpd.conf 加入例如以下配置
LoadModule wsgi_module modules/mod_wsgi.so

從新啟動httpd,假設沒有報錯。說明mod_wsgi模塊在apache裏面載入成功了。

3. 安裝Python

我在這裏安裝的是Python 3.4。默認安裝在c:\Python34\ 文件夾下。
Python 3.4安裝時。最好選擇將Python加入到系統文件夾。安裝完畢後就能夠直接執行Python的相關程序了,比如以下安裝flask時用到的pip


4. 安裝flask

很諷刺的是。我在嘗試部署flask應用的過程中,竟然忘記裝flask。導致我在網頁上面看到apache爆出的錯誤信息。期初我還覺得是Apache的問題,經過查看c:\Apache24\logs\error.log後才發現,原來是flask沒有安裝。
直接打開cmd。執行例如以下命令
pip install flask

它會自己主動將flask和flask依賴的兩個庫所有裝上,這太方便了。

5. 創建Web App

以下的代碼直接拷貝而來
創建C:\Test_Web\test.py
from flask import Flask, request
app = Flask(__name__)

@app.route(‘/hello‘)
def hello_world():
name = request.args.get(‘name‘,‘‘)
return ‘Hello ‘ + name + ‘!‘
if __name__ == ‘__main__‘:
app.run()


創建C:\Test_Web\test.wsgi
import sys

#Expand Python classes path with your app‘s path
sys.path.insert(0, "c:/Test_Web")

from test import app

#Put logging code (and imports) here ...

#Initialize WSGI app object
application = app


註意,application一定不能改成別的。

由於mod_wsgi在解析這個文件時,僅僅認application。


另外。同IIS不同的時,不須要給C:\Test_Web目錄增加NETWORK SERVICE用戶的訪問權限。



6. 在Apache中配置網站

僅僅須要將下面代碼增加到C:\Apache24\conf\httpd.conf文件裏。
<VirtualHost *:80 >
ServerAdmin [email protected]
DocumentRoot c:\Test_Web 
<Directory "c:\Test_Web">
Order allow,deny
Allow from all 
</Directory>
WSGIScriptAlias /flasktest c:\Test_Web\test.wsgi
</VirtualHost>


我對Apache的配置純粹是外行。

我的理解是一個VirtualHost節點就相當於在IIS裏面的一個Web Site節點。

假設我的理解有誤,還望各位路過的Apache配置高手糾正。
我在研究的過程中還看見有人將網站的配置放在另外一個conf文件裏。然後將其包括至httpd.conf。




7. 測試

如今。打開瀏覽器。輸入 http://localhost/flasktest/hello?name=CZY

假設你看見網頁上出現 Hello CZY! 說明你的網站執行起來了。

剩下的工作就是以當前的工作為原型,開始Python的Web App開發之旅吧。

假設你在嘗試的過程中遇到什麽問題。請給我隨時在CSDN上留言。







































Flask + mod_wsgi + Apache on Windows 部署成功(隨時接受提問)