前言
在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
- 下載安裝包:官網
- 解壓安裝包,打開
cmd
終端,進入到Apache/bin
目錄,輸入命令:httpd -k install
,不報錯表明安裝成功 - 雙擊
ApacheMonitor.exe
,打開服務管理UI界面,可以對Apache
服務進行管理。 - 也可以用命令對
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\
解決辦法:
- 打開這個網站
https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 搜索:
mod_wsgi
- 下載,然后安裝:
pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl
- 重啟
Apache
:httpd -k restart
好了。
Enjoy your code, good luck.