Flask + mod_wsgi + Apache Window
写了一个爬虫小程序,想通过 API 接口调用程序,返回抓取结果,就简单使用Flask写了一个后端服务,现在准备部署在Windows Server 2012服务器上 ,百度了一下,大多数使用了两种方 IIS部署和Apache部署,这里采用了第二种方法部署
1. 首先准备环境
使用的Python环境为3.6版本
根据对应python的 VC 版本可以选择对应的Apache版本,我这里使用了 Apache2.4 。
还要准备对应的 mod_wsgi 版本 这里使用的是 mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win_amd64.whl
2. 安装Apache
下载网址: https://www.apachehaus.com/cgi-bin/download.plx
解压,将里面的Apache24文件夹拷贝存放在所要安装的目录下
进入文件夹下的 conf 子文件夹找到 httpd.conf 文件,编辑文件
# 1. 找到 Define SRVROOT 这一行,屏蔽,改为本地的安装路径
#Define SRVROOT "/Apache24"
Define SRVROOT "D:\SoftWare\Apache24"
# 2. 找到 Listen 80 这里默认为80端口,如果80端口被使用,要修改为未占用的端口号
#Listen 80
Listen 8082
进入 cmd 命令行 ,切换到指定bin目录下,执行命令启动Apache
cd Apache24/bin
httpd –k start
没有报错信息证明启动成功,在浏览器输入 localhost:8082 ,显示为Apache页面即为启动成功。
2. 安装mod_wsgi
进入项目的Python虚拟环境中,将 mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win_amd64.whl 文件准备好,安装 mod_wsgi 库。
pip isntall "mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win_amd64.whl"
这里之所以推荐 whl 文件安装方式是因为直接通过 pip install xx 会报错缺少 vc14++ 解决需要下载3个G 多的包,很麻烦。直接使用 whl 文件即可安装成功。
安装成功后,在 Python 虚拟环境中的 scripts 文件夹中进入 cmd 命令行 ,执行命令
mod_wsgi-express module-config
会生成三行数据,这三行数据保存下载,是需要的数据
LoadFile "c:/program files/python36/python36.dll"
LoadModule wsgi_module "c:/program files/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/program files/python36"
这表明的是将要使用的 Python 解释器路径和 mod_wsgi 路径 和使用 WSGIPython 路径。
3. 配置 wsgi
在 Flask 程序路径下 创建 wsgi 文件。
import sys
from BoatWebAPI import app
#app's path Flask项目文件夹
sys.path.insert(0,"F:/work/Python/BOATRECORD")
#Initialize WSGI app object 将Flask 中的app 导入
application = app
Flask 项目文件
from flask import Flask,jsonify
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/BOATNINFO/<boatname>', methods=['GET'])
def ws(boatname):
return jsonify({'success': 'true', 'msg': '调用成功!'})
@app.route('/')
def hello():
return '欢迎使用船舶查询API接口!'
if __name__ == '__main__':
app.run()
4. 再次配置Apache
mod_wsgi 配置完成后 要将信息配置在Apache中,打开之前的 httpd.conf 文件,在后面追加配置。
#前三个是mod_wsgi 生成的环境路径
LoadFile "c:/program files/python36/python36.dll"
LoadModule wsgi_module "c:/program files/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/program files/python36"
#后面是配置环境的 wsgi文件路径和项目路径 以及访问限制
<VirtualHost *>
ServerName example.com
WSGIScriptAlias / F:\work\Python\BOATRECORD\Flaskweb.wsgi
<Directory F:\work\Python\BOATRECORD\>
Require all granted
</Directory>
</VirtualHost>
至此,整个 Apache 配置完成。重启 Apache 。
httpd –k restart
输入访问路径,即可访问部署的 Web 服务。
5. 补充
如果部署在服务器上需要将服务器的中 Web 服务使用的 8082 端口打开,否则外网和局域网无法访问。具体开端口自行百度即可。