Windows 下 Apache + WSGI + Flask 的整合

通常情况下,基于开源软件的开发环境都会选择注入Linux等系统。但是,有些客观条件所限,我们不能选择环境,只能适应环境。

开源软件通常也会对Windows提供比较好的支持,这个毋庸置疑。但是对于基于开源软件开发的Web应用部署,很多情况下都是不能很好的支持。例如我用过的Ruby on Rails,早期有Mongrel的时代还真是幸福啊。因为Apache和Mongrel的集成是很容易的,Mongrel网站就有很浅显易懂的说明,按照说明一步步下来,就能够完成集成,但是后来Mongrel和RoR弄掰了,Ruby on Rails在Windows下同Apache的集成也就不能了!

扯远了,话说回来。Flask是基于Python的一个微框架,其各种扩展都属于热拔插性质的,根据需要加载进入就可以了。开发完毕后就需要部署,Python应用在Linux上的部署不是问题,问题是在Windows上的部署。

经过Google,学习材料,最后实践,下面这个方案是可行的:

软件预备:

  • Apache:著名的服务器软件,假设Apache安装路径为C:\apache;

  • Python:开发语言和环境,基于该语言的Flask在Windows上的安装开发等过程略掉,这里,假设已经完成的Flask应用路径为C:\flaskapp;

  • mod_wsgi:Web服务器网关接口

接下来是配置过程:

一、下载用于 Windows 平台的mod_wsgi,文件名字很长,mod_wsgi-win32-ap22py27-3.3.so 修改为我们更常用的前面提到的 mod_wsgi.so,然后将其放入 apache 文件夹内的 modules 内,在我的计算机上就是C:\apache\modules。

二、然后修改 C:\apache\conf 内的配置文件 httpd.conf,添加 

LoadModule wsgi_module  modules/mod_wsgi.so

 语句,加载相关模块;

三、启用 vhost,找到# Virtual host 行,将下面的 Include conf/extra/httpd-vhosts.conf 从注释中放出;

四、编辑 C:\apache\conf\extra\httpd-vhosts.conf,添加如下段落

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot C:\flaskapp
    ServerName localhost
    WSGIScriptAlias / C:\flaskapp\wsgi_handler.wsgi
    <Directory C:\flaskapp>
            Order deny,allow
            Allow from all
    </Directory>
</VirtualHost

在启用新的默认主页的同时,禁用原来的 DocumentRoot "D:/Apache2.2/htdocs" ,否则就不会找到你设定的主页目录;

五、 现在万事俱备,只欠东风了。这东风就是上面设定的 WSGIScriptAlias / C:\flaskapp\wsgi_handler.wsgi 的wsgi_handler.wsgi 了。该文件是一个Flask应用与wsgi接口联通的文件,文件名可以自己定,但是扩展名应为.wsgi,内容如下:

import sys, os
    sys.path.insert(0, os.path.dirname(__file__))
    from yourapplication import app as application

其中需要修改的是 yourapplication,修改为你的 Flask 应用的主文件名,例如我的应用主文件叫做 dog.py,这里我就要修改为

from dog import app as application

这句代码只能修改这里,别的地方不需要动。

六、 接下来,你就可以重启 Apache 来察看一下你的应用了。

你可能感兴趣的:(apache,flask)