Windows環境下flask+Apache+mod_wsgi部署及爬坑


前言

在Windows下部署Flask真的是一項挑戰,但只要有耐心+細心,就一定可以成功。

我在部署的時候遇到了幾個坑,在此記錄下,方便以后查閱。

安裝python

下載安裝包python-3.6.5-amd64.exe,直接雙擊打開即可一步步安裝,非常簡單。

安裝virtualenv和virtualenvwrapper

安裝virtualenv

pip install virtualenv

安裝virtualenvwrapper

pip install virtualenvwrapper-win

配置環境變量:

打開系統環境變量,添加:WORKON_HOME=C:\virtualenvs注意這個目錄是虛擬環境存放的目錄

配置完環境變量,一定要重啟cmd窗口,要不然環境變量不生效。

常用命令:

  • 新建虛擬環境:mkvirtualenv test_env_36
  • 查看所有虛擬環境:workon
  • 進入虛擬環境:workon test_env_36
  • 退出虛擬環境:進入到虛擬環境的目錄,例如:C:\virtualenvs\LibraFlaskPy36\Scripts, 輸入:deactivate
  • 激活虛擬環境:進入到虛擬環境的目錄,例如:C:\virtualenvs\LibraFlaskPy36\Scripts 輸入:activate.bat

PS: 激活虛擬環境我通常的做法是:workon test_env_36

安裝mod_wsgi

在這個網站 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 上找到編譯好的包,進入到安裝包的路徑,輸入如下命令,進行安裝

pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl

安裝Apache

  1. 下載安裝包:官網
  2. 解壓安裝包,打開cmd終端,進入到Apache/bin目錄,輸入命令:httpd -k install,不報錯表明安裝成功
  3. 雙擊ApacheMonitor.exe,打開服務管理UI界面,可以對Apache服務進行管理。
  4. 也可以用命令對Apache服務進行管理

常用命令:

httpd -k start  # 啟動
httpd -k stop  # 停止
httpd -k restart  # 重啟

如果有報錯,可以查看日志:Apache/logs/error.log

安裝Apache遇到的坑

配置apache,在Apache24/conf/httpd.conf的最后添加上如下的配置,使用mod_wsgi-express module-config > myconfig.txt,可以得到 mod_uwsgi 配置:

# mod_wsgi 配置
LoadFile "c:/python36/python36.dll"
LoadModule wsgi_module "c:/virtualenvs/libraflaskpy36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/virtualenvs/libraflaskpy36"

# 參考:https://dormousehole.readthedocs.io/en/latest/deploying/mod_wsgi.html
<VirtualHost *>
    ServerName 192.168.6.27:80    # 這里我少寫了80端口,坑死了
    WSGIScriptAlias / C:\tools\ZLflask\Libra.wsgi
    <Directory C:\tools\ZLflask>
            # Order deny,allow
            # Allow from all
            Require all granted
    </Directory>
</VirtualHost>

中間有一段配置也要改,這里坑死,搞了好久:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

改成這樣:


<Directory />
    AllowOverride All    # 為了讓別人訪問到這個IP地址
    Require all granted
</Directory>

修改證書的配置,去掉ssl認證,因為是公司內部使用,不需要綁定域名和認證,將下面這句話注釋掉:

LoadModule ssl_module modules/mod_ssl.so

新建app.wsgi文件,寫上如下代碼:

# 添加虛擬環境的路徑
activate_this = 'C:\\virtualenvs\\LibraFlaskPy36\\Scripts\\activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

在這里重點說明下,配置的時候,一直報錯:

[Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286]   File "C:/tools/ZLflask/Libra.wsgi", line 5, in <module>\r, referer: http://192.168.6.27/index
[Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286]     from app import app as application\r, referer: http://192.168.6.27/index
[Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286] ModuleNotFoundError: No module named 'app'\r, referer: http://192.168.6.27/index

后來找了好久,加上下面的2行代碼,成功了:

import sys
sys.path.insert(0, "C:\\tools\\ZLflask")

app.wsgi 文件的完整代碼:

# 添加虛擬環境的路徑
activate_this = 'C:\\virtualenvs\\LibraFlaskPy36\\Scripts\\activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

# 將你的項目路徑添加到系統
import sys
sys.path.insert(0, "C:\\tools\\ZLflask")

安裝mod_uwsgi的坑

安裝的時候一直報這個錯:

Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Dell\AppData\Local\Temp\pip-install-pnicet59\mod-wsgi\setup.py", line 158, in <module>
        raise RuntimeError('No Apache installation can be found. Set the '
    RuntimeError: No Apache installation can be found. Set the MOD_WSGI_APACHE_ROOTDIR environment to its location.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Dell\AppData\Local\Temp\pip-install-pnicet59\mod-wsgi\

解決辦法:

  1. 打開這個網站 https://www.lfd.uci.edu/~gohlke/pythonlibs/
  2. 搜索:mod_wsgi
  3. 下載,然后安裝:pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl
  4. 重啟Apache: httpd -k restart 好了。

Enjoy your code, good luck.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM