**一.**前言
最近,刚来公司实习,在leader的要求下,想办法把开发的自动化测试平台部署到服务器上,一开始,我认为这个问题可能会不难,可事实上我太轻浮了。
一开始,问了很多做开发的人员,很多人说flask的部署可以用uwsgi和gunicron,于是兴致勃勃的在博客上去寻找如何安装uwsgi,最开始那股认真劲,觉得我一定行,一定可以解决,我按照网上的步骤一步一步的来,几乎所有博客都看了。安装过程你会出现各种各样的Bug。直到看到了这篇博客,整个人傻了,耽误了我一整天,当时我的leader还帮我查了很久的问题。事实上,Windows就是不支持uwsgi(如果有大佬能解决的话可以在评论区告诉我一下,谢谢),有很多人水博客,最后一步的难题我目前没找到解决办法!!!!! 附录二 windows上直接安装uwsgi(不可行)_Suyuoa的博客-CSDN博客_windows 安装uwsgi
后来,吸取flask的经验,在安装gunicron之前,我先去问度娘,得到的结果是在Windows下部署不支持uwsgi和gunicorn。因此,我不得不寻找其他办法方法来解决,最终选择了Apache+mod_wsgi的部署方式。
首先,我的python版本是python3.7,值得一提的是,我们需要保证python、apache、mod_wsgi的版本统一,如果不统一的话,会出现很多头疼的问题。
二.安装Apache
- 下载地址:Download - The Apache HTTP Server Project
- vc14下载地址:https://www.apachelounge.com/download/VC14/
因为我是64位的win10系统,
因此,我们需要进入到下载页面选择我们需要的VC14的版本。将下载好的Apache放在D盘顶级目录下(你也可以放在其他位置)
接下来,需要对apache文件里面的 Apache24\conf\httpd.conf进行一些修改。
(1)找到下面的语句 ,可以将监听端口改为一个没有被占用的,比如我的8068。
#Listen 12.34.56.78:80
Listen 80
(2)找到Define SRVROOT "/Apache24"语句,将后面的地址设置为你的地址。比如我的地址:Define SRVROOT "D/Apache24"。
(3)我们利用CMD命令打开命令行窗口,进入到D盘。然后在目录下使用httpd -k install -n "Apache2.4"安装Apache,然后输入httpd 启动命令。然后在浏览器输入http://localhost:8068/。如果网页上显示 It Works! ,那说明apache服务器运行起来了。你应该庆幸自己的第一步成功了·。如果没看到“It Works!”,那么倒回去检查是否有端口冲突,是否下载了正确版本的Apache,然后再装一遍。卸载不正确版本的Apache前记得停止Apache服务。
>CD D:\Apache24\bin
三.安装mod_wsgi
1.下载mod_wsgi:下载页面
我的python37,amd64代表64位的,所以我选择安装mod_wsgi‑4.9.0‑cp37‑cp37m‑win_amd64.whl。接下来将下载好的文件解压到任意目录下。使用命令行界面(以管理员身份运行)进入到
mod_wsgi-4.9.0-cp37-cp37m-win_amd64.whl
对应目录,直接安装。
>pip install mod_wsgi-4.7.1-cp37-cp37m-win_amd64.whl
Installing collected packages: mod-wsgi
Successfully installed mod-wsgi-4.9.0
当出现Successfully installed mod-wsgi-4.9.0字样时就说明我们的mod_wsgi安装成功。但这时你先别着急退出,接着输入mod_wsgi-express module-config。输入完成后会出现一下三行代码。我们将其复制到httpd.conf文件的LoadMoudle后面。
LoadFile "c:/python37/python37.dll"
LoadModule wsgi_module "c:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/python37"
接下来我们对httpd.conf里面的文件进行配置,在上面的语句下面添加WSGIApplicationGroup %{GLOBAL}。将LoadModule access_compat_module modules/mod_access_compat.so前面的#去掉。
四. 编写测试文件
为了验证我们的mod_wsgi是否安装成功,我们可以编写一个测试文件,我们将其命名为test.wsgi,部署时,我们先不要引用其他文件的app。
test.wsgi文件:
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]
配置好wsgi文件后,重启apache:httpd –k restart
访问:http://127.0.0.1:8068 当页面出现Hello wsgi说明我们的mod_wsgi配置成功。至此,apache服务算是搭建成功了一大半~
五. 配置flask项目的wsgi文件
接下来的部分,本应该很快完成,但对于一个入门不深的人来说,还是面临许多挑战。
在wsgi文件中可以引入其他模块的对象,在这里需要从项目中引入ap和api
在引入时需要把项目目录添加到系统环境变量中,让wsgi能够识别到需要引入的对象位置
注意:在填写路径时大家可以采用我的方法:"r+\" ,不然极容易出现ImportError: cannot import name 'app' from 'app'的错误。
然后我们在httpd.conf进行最终配置。
配置完成后在我们的浏览器输入local host:8068,就会出现我的test-web项目界面
这样,我们的Flask项目就算是成功部署在本地了,当然在这过程中你会遇到各种各样的错误,你可以查看Apache下面的error.log(apache日志),分析错误,解决错误。
用apache+wsgi部署flask服务的作用:
用apache部署了flask服务后,不用运行flask api代码,直接访问apache中配置的地址就可以访问api服务,每次访问时,apache会把请求转给flask api服务程序,进行返回
第一次创作,可能写的不完美,语言不够精简,大家有困惑的地方可以评论区留言哟!!!
感谢
https://www.cnblogs.com/xiaxiaoxu/p/10964907.html
flask在window下使用Apache进行部署的详细指南
版权归原作者 不爱敲代码的阿发 所有, 如有侵权,请联系我们删除。