在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服务,如下图所示:

image

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

image

安装mod_wsgi

mod_wsgi下载地址

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

image

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

image

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

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的配置信息:

<VirtualHost *:8080 >
    ServerAdmin webmaster@dummy-host.example.com
    ServerName localhost
    WSGIScriptAlias / F:\Github_hudi\Public\Apache_Flask_windows\test.wsgi  
    <Directory "F:\Github_hudi\Public\Apache_Flask_windows">
        AllowOverride none
        Require all granted
        Require host ip
    </Directory>
</VirtualHost>

保存文件,重启Apache。

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


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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容