Apache24 + wsgi + Flask on Python3.8部署实践
1. 安裝Apache2.4
Apache官網沒有Windows安裝包,只有源碼需要自己編,可以下載ApacheHaus編譯版
點此處下載:httpd-2.4.46-o111j-x64-vc15.zip
解壓到本地目錄E:\GreenSoftware\Apache24
編輯Apache的配置文件:Apache24/conf/httpd.conf
將
改為
Define SRVROOT "E:\GreenSoftware\Apache24"至此可以通過命令/Apache24/bin/httpd.exe啟動Apache,然后在瀏覽器中可以看到Apache的歡迎頁面。
如果出現錯誤,可以檢查標準輸出或者/Apache24/logs/error.log
常見的錯誤原因可能是端口號80(或443)被別的進程占用。用命令
netstat -ano|findstr 80
netstat -ano|findstr 443
將對應的進程停掉,然后重啟httpd.exe即可。
2. 安裝Python-3.8.5
從官網找到python-3.8.5-amd64.exe
點此處下載:https://www.python.org/downloads/windows/
3. 安裝mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
Apache HTTP服務器的mod_wsgi擴展模塊,實現了Python WSGI標準,可以支持任何兼容Python WSGI標準的Python應用,當然也包括了Flask。
點此處下載:mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
把下載的.whl文件復制到python38\Scripts下,然后使用pip進行安裝
D:\Python38\Scripts>pip install mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl Processing d:\python38\scripts\mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl Installing collected packages: mod-wsgi Successfully installed mod-wsgi-4.7.1 WARNING: You are using pip version 20.3.1; however, version 21.0.1 is available. You should consider upgrading via the 'd:\python38\python.exe -m pip install --upgrade pip' command.安裝成功后在python38\Scripts下運行
D:\Python38\Scripts>mod_wsgi-express module-config LoadFile "d:/python38/python38.dll" LoadModule wsgi_module "d:/python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd" WSGIPythonHome "d:/python38"將安裝后生成的文件mod_wsgi.cp38-win_amd64.pyd移動到Apache的modules目錄下
E:\GreenSoftware\Apache24\modules\mod_wsgi.cp38-win_amd64.pyd
編輯Apache的配置文件:Apache24/conf/httpd.conf
增加模塊引入:
去掉模塊mod_vhost_alias.so前的注釋
LoadModule vhost_alias_module modules/mod_vhost_alias.so4. 創建Flask項目
目錄結構
文件hello.py
文件wsgi.py
import syssys.path.insert(0, "D:/000/testweb")from hello import app application = app5. 將Flask項目配置到Apache中
<VirtualHost *>WSGIScriptAlias / D:\000\testweb\wsgi.py<Directory 'D:\000\testweb'>Require all grantedRequire host ip</Directory> </VirtualHost>6. 效果展示
一定是http://localhost/hello,不能https
域名綁定也能正常發布
7. 遺留的問題
7.1. 版本匹配
網上的主要說法都認為,Apache,Python,mod_wsgi必須版本匹配,主要是Python版本對應的編譯器,和Apache版本對應的編譯器應保持相同。查看對應版本的方法如下:
【Python版本號和編譯器版本號】
【編譯器版本號和VS/VC大版本的對應關系】
microsoft官方文檔https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160
【Apache預編譯包的編譯器版本】
實踐過程中發現對于Python3.8.5,編譯器版本1924來說,Apache無論是vc15還是vs16,都沒有問題。
7.2. SSL
做完步驟5以后,總是出不來Flask項目的界面,我反復查一直以為是flask的wsgi沒能正確調用。折磨了好久最后才發現如果是http就可以,https就不行。如圖:
原因后面再談就,希望看到這里的人,不必和我一樣為了查原因而走彎路,耽誤過多的時間。
總結
以上是生活随笔為你收集整理的Apache24 + wsgi + Flask on Python3.8部署实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flask开发实践
- 下一篇: Flask项目支持https