Windows环境Apache+mod_wsgi方法部署Flask应用

本文详细介绍如何使用Windows+Apache+mod_wsgi+Flask结构搭建处理Office文档的Web应用,包括安装配置流程及注意事项。

最近在工作中需要搭建一个可以处理office文档的web应用。经过调研,决定用使用Windows+Apache+mod_wsgi+Flask结构。选取python进行后台处理主要是因为python语法简单,并且win32com库处理office文档时功能比较强大。而且win32com库的接口基本上可以参考微软官方接口文档,虽然微软文档是针对C++/C#/VBA语言的,但接口的描述大体都能看懂。并且配合office本身的宏录制功能,基本上可以实现大部分office(excel, word)处理功能。选取Flask也是因为相对简单。但是Flask的官方文档不建议在生产环境使用Flask内建的服务器,建议将Flask部署到Apache或者Nginx等服务器上。下面就正式介绍整个安装部署过程。

mod_wsgi要依赖于Apache和python运行环境,所以要先安装python或者Apache。这里python推荐使用Anaconda的python,虽然占用空间比较大,但库比较全,pip,conda等工具都打包安装好了。Apache推荐使用Apache Lounge提供的Binary安装包[1][2]。注意,Apache官网是不提供编译好的binary包的。

安装好Apache和python之后就可以使用pip工具进行安装mod_wsgi插件。在cmd命令行输入以下命令进行安装。[1]

pip install mod-wsgi

然后需要配置MOD_WSGI_APACHE_ROOTDIR环境变量,例如:C:/Apache24。注意,这里要写“/”而不是“\“。[1]

还需要将mod_wsgi的插件的位置信息配置到Apache的配置文件中。在Windows命令行(CMD)运行

mod_wsgi-express module-config

命令,如下图:

将输出的内容复制到Apache的httpd.conf里。

还要将下面这行配置的注释打开:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

如下图:

 

安装完成后就可以试用mod_wsgi的功能。新创建一个名为sim.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]

然后在httpd.conf里添加如下配置

<VirtualHost *>
     DocumentRoot "F:\Codes\python\web"
     ServerName example.com
     WSGIScriptAlias /web F:\Codes\python\web\sim.wsgi
     <Directory "F:\Codes\python\web">
         Require all granted
         Require host ip
         WSGIScriptReloading On
     </Directory>
</VirtualHost>

在命令行启动Apache,如下:

打开浏览器,输入localhost/web,即可以看到sim.wsgi设定的内容:

至此,Apache+mod_wsgi是没问题的,但Flask还没有集成上来。接下来将Flask应用配置到Apache。参考Flask官方文档[3],创建simple_flask.py文件以及wsgi.pyy文件。simple_flask.py文件内容如下:

# -*- coding: utf-8 -*-
"""
By Tao
This is a temporary script file. simple_flask.py
"""

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, World! 2020-03-'


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

 wsgi.py内容如下:

import sys
sys.path.insert(0, 'F:\\Codes\\python\\web')
sys.path.insert(0, 'F:\\Codes\\python\\web\\simple_flask')

from simple_flask import app as application

注意,路径的两行不加的话会报错。还有路径的格式要注意,一个‘\’分隔也会报错。

然后修改Apache的httpd.conf文件: 

<VirtualHost *>
     DocumentRoot "F:\Codes\python\web"
     ServerName example.com
     WSGIScriptAlias /web F:\Codes\python\web\wsgi.py
     <Directory "F:\Codes\python\web">
         Require all granted
         Require host ip
         WSGIScriptReloading On
     </Directory>
</VirtualHost>

重启Apache,可以看到Flask应用的内容:

到此,整个部署就完成了~~!

最后,补充一下,Flask建议如下是大型项目,应用使用更复杂的结构,采用一定的工程结构,将工程内多个文件打包成一个应用。[4],但经过尝试,官方文档中描述只要在 yourapplication 文件夹旁添加一个 runserver.py 文件就 可以了,其内容如下:

from setuptools import setup

setup(
    name='yourapplication',
    packages=['yourapplication'],
    include_package_data=True,
    install_requires=[
        'flask',
    ],
)

但经过试验,runserver.py需要命名为setup.py才能正常运行。 

[1] https://pypi.org/project/mod-wsgi/

[2] https://github.com/GrahamDumpleton/mod_wsgi

[3] https://dormousehole.readthedocs.io/en/latest/deploying/mod_wsgi.html

[4] https://dormousehole.readthedocs.io/en/latest/patterns/packages.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值