flask 部署在apache24.* + wsgi 填坑總結

  1. 下載安裝apachepython

  •  打開apache官網http://www.apache.org/   
  •  點擊右上角Download,出現如下界面 ,這裏是各鏡像服務器,隨便找一個,這裏用的是推薦版。
  •  出現目錄列表,這些是apache的項目列表,我也不明白apahce爲何用這種方式瀏覽。
  • 點「httpd",出現如下界面 
  • 點紅框部分,出現以下界面
  •    進入以下界面後,選擇第一項ApacheHaus,這是個第三方下載平臺,在它的網站下載獨立的Apache會是一個壓縮包。另外四個中,第二個也是獨立的Apache下載地址,另外三個是集成開發環境。
  • 在新的界面中,會發現VC9和VC11字樣,經過閱讀相關內容得知,VC9是指用VS2008編譯的代碼,而VC11是用VS2012編譯的,而用VS2012編譯的沒法在Windows XP和Server 2003中使用。

2.安裝apacheweb

把下載文件解壓到你要安裝目錄,如:d:express

安裝服務:打開cmd 進入apache\bin 文件 執行httpd.exe -k install -n Apache2.4apache

該命令的意思是,安裝apache服務,並將該服務名稱命名爲Apache2.4(你也能夠改爲別的)服務器

若是報一下錯誤app

sock: could not bind to address [::]:443
(OS 10013)以一種訪問權限不容許的方式作了一個訪問套接字的嘗試。  : AH00072: make_
sock: could not bind to address 0.0.0.0:443dom

說明你的443端口已經唄佔用,則須要修改 httpd-ssl.conf或httpd-ahssl.conf中的443端口改爲其它端口號,若是用不到443端口(用於https)能夠直接在httpd.config中,直接屏蔽掉對應的配置,以下:ide

<IfModule ssl_module>
#Include conf/extra/httpd-ssl.conf
#Include conf/extra/httpd-ahssl.conf
#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin
</IfModule>網站

啓動apache 服務能正常啓動說明安裝成功。ui

3.安裝mod_wsgi

設置環境變量「MOD_WSGI_APACHE_ROOTDIR」爲Apache安裝目錄 如D:\Apache24

而後運行pip install mod_wsgi 進行安裝,下載過程當中若是遇到以下錯誤:

    building 'mod_wsgi.server.mod_wsgi' extension
    error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat).
Get it from http://aka.ms/vcpython27

按指定目錄下載vcpython27並安裝就能夠了。

不知爲何用pip自動安裝的匹配的是mod_wsgi 4.5.23 但安裝一直失敗,報以下錯誤

D:\Heatnetwork\Apache24/include\httpd.h(44) : fatal error C1083: Cannot open inc
lude file: 'ap_config.h': No such file or directory

因而我下載了「mod_wsgi-4.5.22+ap24vc9-cp27-cp27m-win_amd64」的版本再進行安裝成功。下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

4.配置mod_wsgi

網上有的說解壓mod_wsgi對應的whl文件找到mod_wsgi.so文件放到apache安裝目錄裏面 modules 目錄下,但我解壓後怎麼也找不到mod_wsgi.so文件。找到其它方法

進行安裝在安裝成功後在python的安裝目錄的\scripts文件夾下運行 mod_wsgi-express module-config  

輸出以下:

把輸出中的"mod_wsgiNone"改爲「mod_wsgi」, 而後拷貝到httpd.conf文件的中,以下圖:

5.新建wsgi文件,即下面要配置的weatherSpiderV3.wsgi文件,文件名本身按本身狀況定義

    import sys 
    #Expand Python classes path with your app's path  
    sys.path.insert(0, "E:/PythonWeatherServer") 
    from weatherSpiderV3 import app
    #Put logging code (and imports) here ... 
    #Initialize WSGI app object  
    application = app 

6.配置Virtual hosts

    去掉「# Include conf/extra/httpd-vhosts.conf」 前的#號 以下:

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf

    打開httpd-vhosts.conf文件,註釋掉DocumentRoot "${SRVROOT}/htdocs" 以下:

    <VirtualHost _default_:80>
    #DocumentRoot "${SRVROOT}/htdocs"
    #ServerName www.example.com:80
    </VirtualHost>

添加一個

<VirtualHost *:2002>
    ServerName localhost
    #ServerAlias www.test.com
    #ServerAdmin root@test.com
    DocumentRoot "E:/PythonWeatherServer"
    #ErrorLog "E:/PythonWeatherServer/error.log"
    WSGIScriptAlias / E:/PythonWeatherServer/weatherSpiderV3.wsgi
    #Alias /static F:/web/static

    <Directory "E:/PythonWeatherServer">
        #Options +ExecCGI
        #AddHandler cgi-script .py
        #Options -Indexes +FollowSymLinks
        Require all granted  
        AllowOverride All
        WSGIScriptReloading On
    </Directory>
</VirtualHost>

按本身的實際狀況進行配置「端口號、ServerName、DocumentRoot、WSGIScriptAlias、<Directory」等。

重啓服務器便可。

相關文章
相關標籤/搜索