设为首页 收藏本站
查看: 925|回复: 0

[经验分享] Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)

[复制链接]

尚未签到

发表于 2017-12-25 07:32:05 | 显示全部楼层 |阅读模式
前言
  说是前言,纯粹就是吐槽。
  假设你赶时间。全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容。
  人上年纪后。可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上。还好没有放弃,终于找到了答案。
  只是这也说明我在开源软件的应用和配置上还非常差劲呀,当我看到要用VC10的C/C++编译器编译源码时,头都大了。你说我们这些平时习惯了Vistual Studio编译的。哪还懂什么make命令呀。
  还好网上什么都有,连帮你编译的都有,因此,编译这一难没有经历。
  对于flask这种开源软件来说,部署总是有多种选择。我如今吐槽一下我试过的,但没有成功的经历。


  • PyISAPIe + IIS
  • CGI + IIS (尽管配置成功,可是不能解析wsgi)
  • FastCGI + Nginx
  • FastCGI + Lighttpd (须要cygwin进行编译)
当然,flask官方有关于部署文档。可是写得太简单。但我还是将链接粘出来。
http://dormousehole.readthedocs.org/en/latest/deploying/index.html  

  

  


參考

https://claudiosparpaglione.wordpress.com/2013/03/06/how-to-deploy-flask-applications-to-apache-webserver/  

  


我參考过非常多链接,可是是这篇文章把我引向正途。  


终于方案

Flask + mod_wsgi + Apache
Flask:  一个Python的web框架
mod_wsgi: 一个为Python编写的Apache的FastCGI模块
Apache: 一个类似于IIS的Webserver  


!!。注意 !  !!

假设以下这一点没有做到。整个过程有99%的可能性会失败。
Apache,mod_wsgi和Python都必须用同样版本号的C/C++编译器生成,它们要么是32位的,要么是64位的,不能混用。  

  


由于我从Python官方网站上下载的Python 3.4就是32位的。而且是用VC10编译出来的。因此在下载Apache和mod_wsgi时。也必须选择32位的用VC10编译出来的版本号。  之前我就是没有注意到这个问题,所以导致一直没有成功安装。
  


这个问题的详解,參见: https://github.com/GrahamDumpleton/mod_wsgi/blob/master/win32/README.rst  

  


另外,Python官方网站提供的似乎都是32位的版本号。假设要64位的,预计须要自己动手编译了。  
Windows下的编译器。參见: http://www.microsoft.com/express/vc/
  

  

  

  


步骤


  • 安装Apache
  • 安装mod_wsgi
  • 安装Python
  • 安装Flask
  • 创建測试Web App
  • 在Apache中配置网站
  • 測试
1. 安装Apache

Apache是开源软件,针对windows环境。它不直接提供编译版本号。  
能够在http://www.apachelounge.com/download/ 下载适合自己环境的版本号。

依据我自己当前的环境。我选择的是Win32 VC10编译出来的Apache2.4版本号  
将压缩包下载到本机,然后将压缩包里面的Apache24目录复制到C:\。
  
当然,你能够复制到你的系统的不论什么位置,但Apache的默认配置是C:\Apache24。
  

  
假设你本机执行了IIS。将其关掉。由于IIS和Apache都默认用的是80port。假设你想配置其他port。我相信那也不难。等把Flask部署成功后再来捣鼓吧。
  

  
打开cmd
  
>cd c:\
  
>cd Apache24\bin\
  
>httpd
  

  
然后打开浏览器,输入
  
http://localhost
  

  
假设网页上显示 It Works! ,那说明apacheserver执行起来了。
  

  

  


2. 安装mod_wsgi

这个module可不能随便装,它是启动Python的关键。
我不知道为什么Flask的官方网站上不把这个模块的安装列出来。仅仅是简单的说了一下httpd.confg的配置,实在是太不负责任了。  

从以下这个链接下载mod_wsgi
https://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi-win32-ap22py27-3.3.so  
这个包里面包括了32位和64位的编译版本号。下载完毕后选择

mod_wsgi-windows-4.4.12.tar\mod_wsgi-windows-4.4.12\Apache24-win32-VC10\modules\mod_wsgi-py34-VC10.so。
由于我当前安装的Python是32位的,所以必须选择mod_wsgi-py34-VC10.so  

  
将mod_wsgi-py34-VC10.so拷贝至C:\Apache24\modules\下,并更名为mod_wsgi.so。
  

  
打开 c:\Apache24\conf\httpd.conf 加入例如以下配置
  
LoadModule wsgi_module modules/mod_wsgi.so
  

  
从新启动httpd,假设没有报错。说明mod_wsgi模块在apache里面载入成功了。
  

  


3. 安装Python

我在这里安装的是Python 3.4。默认安装在c:\Python34\ 文件夹下。  
Python 3.4安装时。最好选择将Python加入到系统文件夹。安装完毕后就能够直接执行Python的相关程序了,比如以下安装flask时用到的pip
  

  

  


4. 安装flask

很讽刺的是。我在尝试部署flask应用的过程中,竟然忘记装flask。导致我在网页上面看到apache爆出的错误信息。期初我还觉得是Apache的问题,经过查看c:\Apache24\logs\error.log后才发现,原来是flask没有安装。  
直接打开cmd。执行例如以下命令
  
pip install flask
  

  
它会自己主动将flask和flask依赖的两个库所有装上,这太方便了。
  

  


5. 创建Web App

以下的代码直接拷贝而来  
创建C:\Test_Web\test.py
  

from flask import Flask, request  
app = Flask(__name__)
  

  
@app.route('/hello')
  
def hello_world():
  
name = request.args.get('name','')
  
return 'Hello ' + name + '!'
  
if __name__ == '__main__':
  
app.run()
  

  
创建C:\Test_Web\test.wsgi
  

import sys  


  
#Expand Python>  
sys.path.insert(0, "c:/Test_Web")
  

  
from test import app
  

  
#Put logging code (and imports) here ...
  

  
#Initialize WSGI app object
  
application = app
  

  
注意,application一定不能改成别的。
  由于mod_wsgi在解析这个文件时,仅仅认application。
  
另外。同IIS不同的时,不须要给C:\Test_Web目录增加NETWORK SERVICE用户的訪问权限。
  

  


6. 在Apache中配置网站

仅仅须要将下面代码增加到C:\Apache24\conf\httpd.conf文件里。  

<VirtualHost *:80 >  
ServerAdmin example@company.com
  
DocumentRoot c:\Test_Web
  
<Directory "c:\Test_Web">
  
Order allow,deny
  
Allow from all
  
</Directory>
  
WSGIScriptAlias /flasktest c:\Test_Web\test.wsgi
  
</VirtualHost>
  

  
我对Apache的配置纯粹是外行。
  我的理解是一个VirtualHost节点就相当于在IIS里面的一个Web Site节点。
  假设我的理解有误,还望各位路过的Apache配置高手纠正。
  
我在研究的过程中还看见有人将网站的配置放在另外一个conf文件里。然后将其包括至httpd.conf。
  

  

  


7. 測试

如今。打开浏览器。输入 http://localhost/flasktest/hello?name=CZY  

  
假设你看见网页上出现 Hello CZY! 说明你的网站执行起来了。
  

  
剩下的工作就是以当前的工作为原型,開始Python的Web App开发之旅吧。
  假设你在尝试的过程中遇到什么问题。请给我随时在CSDN上留言。
  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427701-1-1.html 上篇帖子: Could not initialize class org.apache.jsp.index 下篇帖子: org.apache.struts2.json.JSONException: java.lang.IllegalAccessException
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表