Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问) - 火狐设计的专栏 - CSDN博客

来源: Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问) – 火狐设计的专栏 – CSDN博客

前言

说是前言,纯粹就是吐槽。如果你赶时间,完全可以跳过这部分,我保证不会在这里隐藏任何有用的内容。

人上年纪后,可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上。还好没有放弃,最终找到了答案。

不过这也说明我在开源软件的应用和配置上还很差劲呀,当我看到要用VC10的C/C++编译器编译源代码时,头都大了。你说我们这些平时习惯了Vistual Studio编译的,哪还懂什么make命令呀。还好网上什么都有,连帮你编译的都有,因此,编译这一难没有经历。

对于flask这样的开源软件来说,部署总是有多种选择,我现在吐槽一下我试过的,但没有成功的经历。

  1. PyISAPIe + IIS
  2. CGI + IIS (虽然配置成功,但是不能解析wsgi)
  3. FastCGI + Nginx
  4. 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的Web服务器
!!!注意 !!!
如果下面这一点没有做到,整个过程有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/

步骤

  1. 安装Apache
  2. 安装mod_wsgi
  3. 安装Python
  4. 安装Flask
  5. 创建测试Web App
  6. 在Apache中配置站点
  7. 测试

1. 安装Apache

Apache是开源软件,针对windows环境,它不直接提供编译版本。
可以在http://www.apachelounge.com/download/ 下载适合自己环境的版本。
根据我自己当前的环境,我选择的是Win32 VC10编译出来的Apache2.4版本
将压缩包下载到本机,然后将压缩包里面的Apache24文件夹拷贝到C:\。
当然,你可以拷贝到你的系统的任何位置,但Apache的默认配置是C:\Apache24。

如果你本机运行了IIS,将其关掉。因为IIS和Apache都默认用的是80端口。如果你想配置其它端口,我相信那也不难。等把Flask部署成功后再来捣鼓吧。

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

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

如果网页上显示 It Works! ,那说明apache服务器运行起来了。

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

  1. from flask import Flask, request
  2. app = Flask(__name__)
  3. @app.route(‘/hello’)
  4. def hello_world():
  5. name = request.args.get(‘name’,)
  6. return ‘Hello ‘ + name + ‘!’
  7. if __name__ == ‘__main__’:
  8. app.run()

创建C:\Test_Web\test.wsgi

  1. import sys
  2. #Expand Python classes path with your app’s path
  3. sys.path.insert(0“c:/Test_Web”)
  4. from test import app
  5. #Put logging code (and imports) here …
  6. #Initialize WSGI app object
  7. application = app

注意,application一定不能改成别的。因为mod_wsgi在解析这个文件时,只认application。
另外,同IIS不同的时,不需要给C:\Test_Web文件夹加入NETWORK SERVICE用户的访问权限。

6. 在Apache中配置站点

只需要将以下代码加入到C:\Apache24\conf\httpd.conf文件中。

  1. <VirtualHost *:80 >
  2. ServerAdmin example@company.com
  3. DocumentRoot c:\Test_Web
  4. <Directory “c:\Test_Web”>
  5. Order allow,deny
  6. Allow from all
  7. </Directory>
  8. WSGIScriptAlias /flasktest c:\Test_Web\test.wsgi
  9. </VirtualHost>

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

7. 测试

现在,打开浏览器,输入 http://localhost/flasktest/hello?name=CZY

如果你看见网页上出现 Hello CZY! 说明你的站点运行起来了。

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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏