写在前面:
之前只用过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。
1.2 安装并测试Apache服务
下载之后打开压缩包,把压缩包中的Apache24文件夹放到C盘根目录,即Apache的默认路径“c:\Apache24”。如果你要放到其他地方,那么注意文件路径中最好不要包含中文,否则可能会发生一些乱七八糟的问题。另外如果服务器上打开了iis要先关掉,因为iis跟Apache默认的端口都是80端口,端口冲突时会造成Apache服务无法安装或者启动。
然后打开cmd,cd到“c:\Apache24\bin”,运行“httpd”安装Apache服务。安装好之后在服务器管理器中就能看到Apache2.4服务了。如果它没有启动的话就给它点右键启动服务,最好设置成自动启动。
Apache服务启动起来后,打开浏览器,在地址栏输入“127.0.0.1”或者“localhost”,如果浏览器显示的网页里边出现“It Works!”,就说明Apache服务安装成功。这个时候在你自己的电脑上输入服务器的ip地址也能看到这个页面。
如果没看到“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
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" ”安装它。
安装好之后运行“mod_wsgi-express module-config”,得到三行语句,把这三行语句复制出来,后边配置站点的时候会用到。
3、创建测试flask应用
3.1 创建测试站点test.py
在c盘根目录创建一个flasktest文件夹,在该文件夹中新建一个test.py文件作为测试站点。test.py代码如下图所示。
3.2 创建wsgi入口test.wsgi文件
在flasktest文件夹中新建一个test.wsgi文件,要注意里边的application一定不能改成别的,因为mod_wsgi解析的时候只认这个东西。最简版本的test.wsgi代码如下所示,它里边并没有包含python虚拟环境的内容,如果flask直接安装在Python的全局环境中并且没有配置虚拟环境的话直接用这个就可以:
但是自己开发的flask应用往往配置了虚拟环境,因此所用的test.wsgi文件需要对应增加导入虚拟环境相关包的内容。扩充后的test.wsgi文件代码如下图所示,其中venv文件夹是我的虚拟环境文件夹。
4、在Apache中配置flasktest站点(虚拟主机)
4.1配置httpd.conf
打开Apach安装目录c:\Apache24\conf\httpd.conf文件进行Apache配置。找到有很多LoadModule的位置,把之前得到的三行语句复制到里边去,表示使用wsgi来作为Python Web服务网关接口。
这时候保存httpd.conf去重启Apache服务,会发现Apache服务的名字变了。
找到httpd.conf文件中“LoadModule vhost_alias_module modules/mod_vhost_alias.so”、“Include conf/extra/httpd-vhosts.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