在Windows环境,采用Apache + mod_wsgi的方式部署flask

在Windows环境,采用Apache + mod_wsgi的方式部署flask,不如Linux下方便。
Apache、mod_wsgi、python三者必须是同位数,比如同为X64或者X86。另外,查看对应的VC版本。
说明:在Windows环境中,Apache不支持flask中的多进程或多线程功能,具体见 flask

完整项目: https://github.com/Hooddi/Apache_flask_windows


安装Apache

Apache下载地址
本人用的是X64,python3.5,所以选择VC15编译的"Apache 2.4.39 Win64"
下载完毕后解压得到Apache24,打开进入conf文件,用文本打开,我这里采用notepad++打开。
现在说明一下,我们需要修改的地方:

  1. ServerRoot "C:/Apache24":修改成自己的目录地址,Apache的默认配置是C:/Apache24。
  2. Listen 8080:监听端口配置,默认的80端口可能被IIS占用,可以将其改成"8080"或者其他,也可以添加多个监听端口。
  3. (备选)一般都是在虚拟环境中部署项目,因此在conf文件中修改两处,表示将启用虚拟主机:
    • #LoadModule vhost_alias_module modules/mod_vhost_alias.so 前面的#去掉
    • #Include conf/extra/httpd-vhosts.conf 前面的#去掉
      第3点可以自行选择是否准备启用虚拟环境,本教程中使用虚拟主机。

修改conf文件后,保存。
打开cmd,cd到"C:\Apache24\bin",运行: httpd –k install
安装Apache服务,顺便启动它。
(常用命令:运行服务httpd –k start,停止服务 httpd –k stop,也可以直接从服务器管理器中操作)
打开服务器管理器可以看到Apache2.4服务,如下图所示:

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第1张图片
image

在浏览器中输入网址:"localhost:8080",看到下图说明Apache安装成功
说明:8080端口与conf文件中一致

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第2张图片
image

安装mod_wsgi

mod_wsgi下载地址

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第3张图片
image

"cp35"表示对应python3.5,选择与python版本对应的下载。
本教程选择的是:

mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl

mod_wsgi可以选择安装在本地系统或者部署项目时的虚拟环境中,本教程选择安装在本地。
可以直接通过pip安装:

pip install mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl

使用pip安装后,使用cmd进入python目录下的Scripts文件夹,运行:

mod_wsgi-express module-config

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第4张图片
image

将上图中红色方框中的三行信息复制,打开conf文件
找到:# LoadModule foo_module modules/mod_foo.so
将复制的信息粘贴在下方,表示使用wsgi来作为Python Web服务网关接口

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第5张图片
image

此时,重启Apache服务,可以看到Apache服务的名字变了,如下图所示:

在Windows环境,采用Apache + mod_wsgi的方式部署flask_第6张图片
image

到此,mod_wsgi安装完成并在Apache的conf文件中修改相关配置信息。

测试

本教程是在虚拟环境中部署flask,python虚拟环境自行百度

pip install virtualenv

切换到目标文件夹下,创建虚拟环境:

virtualenv venv

此时,目标文件夹中生成"venv"文件, 切换到.\venv\Scripts目录下,运行;

activate

当虚拟环境激活后,可以运用pip在虚拟环境中安装需要用到的工具包,不与本地工具包冲突(用虚拟环境的原因)。本教程中仅安装Flask:

pip inatll flask

当虚拟环境搭建好之后,运行:

deactivate

关闭虚拟环境

首先,目标文件夹中创建test.py文件

from flask import Flask, request
app = Flask(__name__)

@app.route('/lulu')
def hello_1():
    return 'Hello lulu!'
    
@app.route('/hudi')
def hello_2():
    return 'Hello hudi!'

if __name__ == '__main__':
    app.run()

然后,目标文件夹中创建test.wsgi(wsgi入口文件)

activate_this = r'F:\Github_hudi\Public\Apache_Flask_windows\venv\Scripts\activate_this.py'
exec(compile(open(activate_this, "rb").read(), activate_this, 'exec'), dict(__file__=activate_this))
import sys
#Expand Python classes path with your app's path
sys.path.insert(0, r'F:\Github_hudi\Public\Apache_Flask_windows')
from test import app as application

其中:

activate_this = r'F:\Github_hudi\Public\Apache_Flask_windows\venv\Scripts\activate_this.py'
exec(compile(open(activate_this, "rb").read(), activate_this, 'exec'), dict(__file__=activate_this))

表示启用虚拟环境,即test.py是在虚拟环境中运行
F:\Github_hudi\Public\Apache_Flask_windows表示项目路径(目标文件夹)
在wsgi入口文件中,路径一定要用r''包起来,否则可能会出错!

配置Apache的vhost.conf文件
打开httpd-vhost.conf,在文件最后加上test.wsgi的配置信息:


    ServerAdmin [email protected]
    ServerName localhost
    WSGIScriptAlias / F:\Github_hudi\Public\Apache_Flask_windows\test.wsgi  
    
        AllowOverride none
        Require all granted
        Require host ip
    

保存文件,重启Apache。

测试:在浏览器中输入网址:"localhost:8080/hudi",若看到下图所示信息,表示部署成功。


在Windows环境,采用Apache + mod_wsgi的方式部署flask_第7张图片
image

若自己在测试过程中出现500或404等错误时,查看Apache中的错误日志文件快速找到错误原因

参考文献

★★★★★http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
★★★★★https://zhuanlan.zhihu.com/p/43354041
★★★★ https://www.cnblogs.com/cxchanpin/p/6936880.html
★★★★ https://blog.csdn.net/zhangtao0417/article/details/81564444

你可能感兴趣的:(在Windows环境,采用Apache + mod_wsgi的方式部署flask)