flask自带的开发Web服务器表现很差,响应慢,而且直接通过nginx进行反向代理,经常无法响应请求。有两个可以在生产环境中使用、性能良好且支持Flask程序的服务器,分别是Gunicorn和uWSGI,但是这两个模块不提供对window的支持。
因此我们需要使用mod_wsgi这个模块使得flask能够在apache上进行部署,mod_wsgi模块是一个python写的Apache的FastCGI模块。
安装
需依次安装pyhton、flask、Apache、mod_wsgi,必须要保证的是,python的版本和mod_wsgi的版本一致,python的MSC版本和Apache的VC++版本一致,否则极有可能会失败。
查看python版本
在cmd下输入命令python看到MSC版本号是v.1500,对应了VC9。
安装Apache
根据提示,下载apache_24vc9 32位,解压后,放到本地某个位置
修改默认的80和443,如不修改可能会出现如下错误
安装apache服务:httpd –k install
运行目录:在apache的bin目录下
启动apache:httpd –k start
重启apache:httpd –k restart
修改80为8022
- 关闭Apache服务
- 进入conf配置文件中的extra文件,我的extra文件位置:D:\Program Files\Apache24\conf\extra
- 修改httpd.conf,有80的地方改为8022就可以了
修改443为4403
- 关闭Apache服务
- 进入conf配置文件中的extra文件,我的extra文件位置:D:\Program Files\Apache24\conf\extra
- 修改httpd-ahssl.conf和httpd-ssl.conf中的,有443的地方改为440就可以了
安装mod_wsgi
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
根据本机环境选择相关文件下载
解析:mod_wsgi-express module-config
(arcpyenv27) C:\Users\tlw>mod_wsgi-express module-config LoadFile "c:/users/tlw/.conda/envs/arcpyenv27/python27.dll" LoadModule wsgi_module "c:/users/tlw/.conda/envs/arcpyenv27/lib/site-packages/mod_wsgi/server/mod_wsgi.pyd" WSGIPythonHome "c:/users/tlw/.conda/envs/arcpyenv27" (arcpyenv27) C:\Users\tlw>
将出现的三行内容复制到httpd.conf文件中,添加至LoadModule之后,保存。
重启Apache,没有报错表明mod_wsgi加载成功。
找到httpd.conf文件中
LoadModule vhost_alias_module modules/mod_vhost_alias.so、
Include conf/extra/httpd-vhosts.conf
这两行,把前边的“#”号注释符删掉,表示启用虚拟主机并读取httpd- vhost.conf中的虚拟主机配置来配置站点。
测试配置wsgi
在python项目目录中新建test.wsgi文件
#encoding = 'utf-8' def application(environ,start_response): status = "200 Ok" output = b"Hello wsgi" response_headers=[('Content-type','text/plain'),('Content-Length',str(len(output)))] start_response(status,response_headers) return[output]
在D:\Program Files\Apache24\conf文件中,修改httpd.conf内容
<VirtualHost *> ServerName localhost WSGIScriptAlias / D:\Space_GIS\gis\gisarcpy\test.wsgi <Directory D:\Space_GIS\gis\gisarcpy\> Require all granted </Directory> </VirtualHost>
重启Apache
测试
Flask项目部署
WSGI日志查看
python - Flask WSGI日志记录在Apache2上的错误级别
python记录日志
import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) logger.info("transform_shp2dwg:%s",successfulBool)
查看记录的日志:D:\Program Files\Apache24\logs