先说一下我花了多久,距离上一篇搭建好apache之后,花了我一天的时间搞定,现在回想起来其实也就5个部分,按我下列的几个步骤来不出错仅仅只需要15分钟,这就是程序员的极易秃顶的原因,错误能把你磨到崩溃!!!
成功之后,我差点激动的要把电脑砸了!!!真特么喜极而泣(夸张一点无所谓啦)!!!
如果你要参考我的博客,请注意我会很罗嗦,但是我觉得你看仔细的话会少走一些弯路,因为很多大佬的博客都是及其精简,精简到明明我跟着一步一步来了,结果还是出错,因为有些情况大佬没说,或者忘记说,或者根本没时间写那么多~~~,总之你嫌罗嗦就直接看你想要的吧
Notice一下我搭建成功的环境是:windows!!!linux跟mac可以借鉴不可照搬!!
apache2.4.37 (64位)+ python 3.5.3(64位) + (pip install mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl) + flask
请保证你的apache和python都是统一的位数!!!要不然就是失败!!!要换的64位的apache参考我的上一篇博客
首先申明,我参考了很多大佬的博客,也踩了很多大佬无意间留下的坑,,我说一下我解决了哪些坑,如果不是一开始就按我这篇文章部署flask的话 ,那你可以根据我踩的坑确定我下面的操作是否对你有用,一开始就按我这篇博客来的,可以跳过这部分。
坑pool:
第一,mod_wsgi怎么安装。我看的大部分教程都是很久了,对于apache扩展mod_wsgi模块他们推荐是去一些网站下载XXXXX.so,再loadModule进去,此方法在我看来对python3.x来说用不了,因为我没找到对应版本的.so文件,也有可能是linux或者mac版本才有.so文件。所以就通过python安装,但我没用pip install mod_wsgi的方式,你要是成功那就ok,安装失败的话,就去下载对应的whl文件(我下面有链接),通过pip install xxxx.whl文件的方式。
第二,通过上一步安装的mod_wsgi怎么添加到apache扩展里面。参考我下面的操作,如果遇到添加我操作里面的三句代码 之后不能启动apache,说明你的python跟apache的位数对不上,直接来说就是不兼容,具体错误去查看apache的error.log(在apache目录的logs文件里面),当然不排除其他可能,这里面会有提示!!!
第三,测试mod_wsgi报错。有什么string类型错误,有什么不正确的结尾,如果你通过将第二(上一个)的坑,添加那三句代码并成功启动apache,只能说明是你写的测试文件里面的代码不对,比如你参考别的教程要求的xxx.wsgi。解决办法就是请你手打我下面贴出来的测试文件的代码,对的,或许就是你用复制的代码夹带了一下你看不到的东西!!!除了这个就是拜托你仔细对面代码有没有敲错一个字符或者空格!!!
第四,如果你通过了测试wsgi,即就是确定你的apache的wsgi能成功运行了,在你写了一个简单的flask程序测试的时候,报错了,首先界面是500错误!!,查看apache的错误日志,如果是什么找不到什么文件,查看是不是你的路径没填对,我主要讲的是importErro,no find module 'flask'!!!就是你当前的项目文件家里没有找到你之前安装好的module的文件夹,我百度,google很久了,没找到怎么让它找到我们全局安装的site-pakeages的方法或者代码,你找到了,麻烦评论告知一下,谢谢。我用的是另一种方法----virtualenv,具体怎么做看我下面的操作。用它就能单独给一个项目配置module,麻烦的就是你需要重新按一遍你项目需要的module,所以在此先告诫大家,下次写python项目,一开始就用virtualenv单独给库,提一句用pycharm写python项目,设置一下就可以就可以很方便的安装module,也可以用以前安装好的,但是我没设置成功,因为我创建的项目文件夹中的site-packages没有那些module,这个也希望有心人写篇优秀的博客给我参考参考(我参考过其他人的都没成功),在此谢谢了。
第五,给apache配置虚拟访问站点。就是让你的flask项目能通过apache代理访问,这里就只需要在apache中定义一下就好了,如果你测试的时候服务器报404错误,什么forbidden,什么no find错误,就是你的定义你项目的站点出错了,具体还是参考我下面的操作~
过了这几个坑 不出意外 基本上 你 几乎 就能成功,毕竟我没遇到除此这外的错误类型,也可以评论问我,或许我也忘记说了呢,哈哈。
我基本上按照这位大佬的博客来的(注明出处,以示尊重),跟我自己的情况作了修改和一些优化!!!
废话说完了,开始我的表演~~
前提准备:
1.apache2.4.37(64位) ----已安装
2.python3.5.3(64位) -----已安装
3.mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl 点击这里下载对应你自己python版本(注意是64位)的whl文件!!!
准备好这几样就可以开始配置部署!(建议以下所有的操作命令及代码自己手打,别复制我的,因为你的可能跟我不一样,要做相应的修改,别傻瓜式的复制,我吃过亏的!!!)
第一部分:项目环境搭建(python虚拟环境及python安装mod_wsgi)
1.cmd 安装 virtualenv(简单来说就是给不同的python项目搭建一个它自身的虚拟环境,避免不同项目的包依赖冲突)
pip install virtualenv //提示安装成功就好,失败请百度解决
2.继续用cmd操作:
cd 到"你准备运行flask项目的文件夹",运行 "virtualenv venv" 命令,venv是你虚拟环境的名字,你可以取一个你爱听的名字
3.成功后,激活你的虚拟环境 --- (你自己取的虚拟环境名字)\Scripts\activate (退出激活的虚拟环境直接输入回车deactivate就可以了)
4.安装flask模块 --- pip install flask (解决ImportErro no find flask的问题在此,这样这个项目中就有flask模块了,你项目需要的其他模块也可以在这里一起安装好)
5.这时候你去看的项目的文件夹会有一个venv(你的应该是你取得爱称)
6.把我之前说要准备好的mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl复制到这里,在进行安装,也可以放在venv中,随你。只是在安装的时候要在虚拟环境中进到相应的文件夹中,例如我的就放在venv下,还需要cd到venv中,具体看图:进入到whl文件所在的文件夹,执行 ---- pip install "mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl"(这个双引号我是按快捷键tab补全名字它自动加的,不要纠结这个)
7.成功后第一部分完成,你已经成功了33%,继续努力!!! 对了先别关掉这个cmd界面哟,你手快当我没说
第二部分:配置apache的wsgi扩展,及测试是否配置成功
1.继续操作之前的cmd界面(你如果关了的话,按之前的操作进入到虚拟环境吧)
进入虚拟环境的 venv的Scripts文件夹执行 --- mod_wsgi-express module-config
复制出现的三句代码到 apache的配置文件httpd.conf,放最下面就好了。
现在重启你的apache服务,如果启动不了,你的python跟apache怎么还是不同位数啊????
启动之后说明apache成功加载python安装的mod_wsgi,但是还是要测试一下
在你项目的根目录,创建一个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]
有些同学参考其他大佬的文章总是报错string类型错误,是因为output = b"Hello wsgi"是要转字节型的而不是string,加前面b就好了
然后再apache的配置文件httpd.conf,最后面加下面的代码:
<VirtualHost *:80>
DocumentRoot 你的项目路径
WSGIScriptAlias /(这里可以取别名,我没有取) 你的项目路径\test.wsgi
<Directory '你的项目路径'>
AllowOverride AuthConfig FileInfo
Require all granted
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
ok,重启apache!!!在浏览器中输入 localhost/(你设置的别名) ,出现hello wsgi,就代表你成功了
第三部分:部署flask,测试!!!
这一步其实很简单了,首先我们写一个简单的flask程序,作为测试,你也可以用你自己写好的flask程序。
在项目的文件夹中,创建一个test.py
注意!!是跟test.wsgi在同一个文件夹中,如果不放在一起,需要注意一下引用路径,有需求的自行百度。
test.py:
from flask import Flask
app = Flask(__name__)
@app.route("/test")
def index():
return "hello flask"
if __name__ == '__main__':
app.run()
apache的httpd.conf中之前配置的站点不用改变,我们只需要修改好wsgi中的代码,如下:
import sys
sys.path.insert(0,'你项目的路径')
from test import app as application
最好重启一下apache,访问localhost/test,就能出现hello flask的字样了。
就这样我们成功的用apache的mod_wsgi部署我们写的flask程序。