最近在工作中需要搭建一个可以处理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
本文详细介绍如何使用Windows+Apache+mod_wsgi+Flask结构搭建处理Office文档的Web应用,包括安装配置流程及注意事项。
1387

被折叠的 条评论
为什么被折叠?



