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

來源:互聯網
上載者:User

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

說是前言,純粹就是吐槽。如果你趕時間,完全可以跳過這部分,我保證不會在這裡隱藏任何有用的內容。

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

不過這也說明我在開源軟體的應用和配置上還很差勁呀,當我看到要用VC10的C/C++編譯器編譯原始碼時,頭都大了。你說我們這些平時習慣了Vistual Studio編譯的,哪還懂什麼make命令呀。還好網上什麼都有,連幫你編譯的都有,因此,編譯這一難沒有經曆。

對於flask這樣的開源軟體來說,部署總是有多種選擇,我現在吐槽一下我試過的,但沒有成功的經曆。

當然,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 + ApacheFlask:  一個Python的web架構mod_wsgi: 一個為Python編寫的Apache的FastCGI模組Apache: 一個類似於IIS的Web伺服器
!!!注意 !!!如果下面這一點沒有做到,整個過程有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. 安裝ApacheApache是開源軟體,針對windows環境,它不直接提供編譯版本。
可以在http://www.apachelounge.com/download/ 下載適合自己環境的版本。根據我自己當前的環境,我選擇的是Win32 VC10編譯出來的Apache2.4版本
將壓縮包下載到本機,然後將壓縮包裡面的Apache24檔案夾拷貝到C:\。
當然,你可以拷貝到你的系統的任何位置,但Apache的預設配置是C:\Apache24。

如果你本機運行了IIS,將其關掉。因為IIS和Apache都預設用的是80連接埠。如果你想配置其它連接埠,我相信那也不難。等把Flask部署成功後再來搗鼓吧。

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

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

如果網頁上顯示 It Works! ,那說明apache伺服器運行起來了。


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, requestapp = 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 pathsys.path.insert(0, "c:/Test_Web")from test import app#Put logging code (and imports) here ...#Initialize WSGI app objectapplication = app


注意,application一定不能改成別的。因為mod_wsgi在解析這個檔案時,只認application。
另外,同IIS不同的時,不需要給C:\Test_Web檔案夾加入NETWORK SERVICE使用者的存取權限。

6. 在Apache中配置網站只需要將以下代碼加入到C:\Apache24\conf\httpd.conf檔案中。
<VirtualHost *:80 >ServerAdmin example@company.comDocumentRoot c:\Test_Web <Directory "c:\Test_Web">Order allow,denyAllow 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上留言。







































聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.