windows2008+python3.6+apache+mod_wsgi部署flask应用小白跳坑指南

写在前面:

之前只用过iis,没有接触过flask应用的服务器部署,大家都说python应用在linux服务器上会相对简单,我由于条件所限只能用windows 2008当服务器所以就硬着头皮往下做。相关的参考教程网上有不少,但是我发现有些就是瞎抄的,按照上面的步骤完全没法正常运行,故在这里写一篇“跳坑指南”给像我这样的小白,让小白们少走一点弯路。

这篇教程只包含windows 2008的apache+mod_wsgi服务器部署,默认你已经写好了flask应用的代码,租了一个服务器,并且已经在服务器上安装好了对应版本的Python与flask。这篇教程中我开发的应用使用的是Python 3.6,flask 0.12.2,并且配置了python虚拟环境(virtualenv)。

另外由于windows服务器的安全性设置一般都比较高,在服务器上直接下载东西很麻烦,我建议小白们在自己的电脑把用到的各种包都下载好之后再远程放到服务器上去。


总的步骤如下:

1、安装Apache

2、安装mod_wsgi

3、创建测试应用flasktest

4、在Apache中配置flasktest站点

5、测试

下面一个个步骤详细讲。


详细步骤说明:

1、安装Apache

1.1 下载Apache包

下载链接:http://www.apachelounge.com/download/

Apach是开源软件,并不直接提供windows编译版本的下载,因此下载Apache时要特别注意与所用Python版本与windows的版本相互对应。比如我服务器是32位的windows 2008,Python版本为3.6是vc14编译版本,所以我下载的是vc14、32位的Apache。

根据需要下载对应版本的Apache。我下载的是Apache 2.4.29 win32版

1.2 安装并测试Apache服务

下载之后打开压缩包,把压缩包中的Apache24文件夹放到C盘根目录,即Apache的默认路径“c:\Apache24”。如果你要放到其他地方,那么注意文件路径中最好不要包含中文,否则可能会发生一些乱七八糟的问题。另外如果服务器上打开了iis要先关掉,因为iis跟Apache默认的端口都是80端口,端口冲突时会造成Apache服务无法安装或者启动。

然后打开cmd,cd到“c:\Apache24\bin”,运行“httpd”安装Apache服务。安装好之后在服务器管理器中就能看到Apache2.4服务了。如果它没有启动的话就给它点右键启动服务,最好设置成自动启动。

安装apache服务
安装后服务器管理器中看到Apache.24服务

Apache服务启动起来后,打开浏览器,在地址栏输入“127.0.0.1”或者“localhost”,如果浏览器显示的网页里边出现“It Works!”,就说明Apache服务安装成功。这个时候在你自己的电脑上输入服务器的ip地址也能看到这个页面。

Apache服务安装成功

如果没看到“It Works!”,那么倒回去检查是否有端口冲突,是否下载了正确版本的Apache,然后再装一遍。卸载不正确版本的Apache前记得停止Apache服务。

2、安装mod_wsgi

2.1下载mod_wsgi

下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

跟Apache类似,也要根据服务器的操作系统、Python版本和Apache版本来下载对应版本的mod_wsgi。对应我所用的服务器与Python,我下载的是mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win32.whl

下载对应版本的mod_wsgi

2.2 安装mod_wsgi

下载得到 一个名字很长的whl文件。有些教程中会说是解压这个whl文件找到mod_wsgi.so文件再如何如何,但是我找不到这个文件,所以用另一种解决办法:把这个文件丢到python安装目录中的Scripts文件夹里边,然后打开cmd,cd到python安装目录的Scripts文件夹,运行“pip install "mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win32.whl" ”安装它。

运行 pip install "mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win32.whl"

安装好之后运行“mod_wsgi-express module-config”,得到三行语句,把这三行语句复制出来,后边配置站点的时候会用到。

运行mod_wsgi-express module-config得到三行mod_wsgi配置语句,后边配置的时候会用到

3、创建测试flask应用

3.1 创建测试站点test.py

在c盘根目录创建一个flasktest文件夹,在该文件夹中新建一个test.py文件作为测试站点。test.py代码如下图所示。

测试站点flasktest的test.py

3.2 创建wsgi入口test.wsgi文件

在flasktest文件夹中新建一个test.wsgi文件,要注意里边的application一定不能改成别的,因为mod_wsgi解析的时候只认这个东西。最简版本的test.wsgi代码如下所示,它里边并没有包含python虚拟环境的内容,如果flask直接安装在Python的全局环境中并且没有配置虚拟环境的话直接用这个就可以:

最简版测试站点flasktest的test.wsgi文件

但是自己开发的flask应用往往配置了虚拟环境,因此所用的test.wsgi文件需要对应增加导入虚拟环境相关包的内容。扩充后的test.wsgi文件代码如下图所示,其中venv文件夹是我的虚拟环境文件夹。

导入虚拟环境相关包内容的test.wsgi文件

4、在Apache中配置flasktest站点(虚拟主机)

4.1配置httpd.conf

打开Apach安装目录c:\Apache24\conf\httpd.conf文件进行Apache配置。找到有很多LoadModule的位置,把之前得到的三行语句复制到里边去,表示使用wsgi来作为Python Web服务网关接口。

运行“mod_wsgi-express module-config”得到的三行语句复制到httpd.conf文件的这个位置

这时候保存httpd.conf去重启Apache服务,会发现Apache服务的名字变了。

加入mod_wsgi后的Apache服务

找到httpd.conf文件中“LoadModule vhost_alias_module modules/mod_vhost_alias.so”、“Include conf/extra/httpd-vhosts.conf”这两行,把前边的“#”号注释符删掉,表示启用虚拟主机并读取httpd-vhost.conf中的虚拟主机配置来配置站点。

启用虚拟主机配置文件httpd-vhost.conf文件

4.2 配置httpd-vhosts.conf

打开C:\Apache24\conf\extra\httpd-vhosts.conf文件,里边的两个VirtualHost例子可以在每行前边加“#”号注释掉或者直接删掉,再最后加上下面的语句:

配置虚拟站点

其中:

VirtualHost表示这是一个虚拟主机的配置,80指的是所用的端口为默认的80端口。可以弄很多不同的VirtualHost并使用其他端口,但是要记得去防火墙中添加对应的端口的例外,同时在httpd.conf中查找Listen相关配置代码段增加对应端口的监听。

ServerAdmin是服务器管理员的电子邮箱地址。

ServerName是服务器的IP地址。

DocumentRoot和Directory对应写上测试站点的路径。

WSGIScriptAlias需要写出test.wsgi文件的路径。中间那根斜杠表示url为根目录,也就是测试该站点的地址为http://127.0.0.1或者http://localhost。

至此配置完成,保存httpd.conf与httpd-vhosts.conf文件,然后重启Apache服务。每次修改配置文件之后都要重启Apache服务。

5、测试

打开浏览器,输入“http://你的服务器ip地址/hello?name=xxx”(如果是在服务器上测试就输入“http://127.0.0.1/hello?name=xxx”或者“http://localhost/hello?name=xxx”),网页显示“Hello xxx!”即表示服务器配置成功,然后照葫芦画瓢把自己开发的flask应用挂到Apache里边就搞定啦!

测试服务器是否配置成功

相关参考:

[1] https://www.jianshu.com/p/5a5e88389d5d

[2] http://blog.sina.com.cn/s/blog_6315541b0102wemd.html

[3] http://blog.csdn.net/chao_8023/article/details/74012324

[4] http://blog.csdn.net/flyear_cn/article/details/39011071

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

推荐阅读更多精彩内容