Deploy Flask app to Apache on Windows

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Deploy Flask app to Apache on Windows相关的知识,希望对你有一定的参考价值。

故事背景

这次我需要将一个Flask应用部署到本地的Windows服务器上。操作系统是64位的,程序是基于Python 3开发的,大体就是这样。

部署选项

根据Flask的部署指南,可供选择的方式还是蛮多的,IIS、Apache、nginx……
本着享受生活不折腾的原则,我们应该选择标准的方便的用户多的技术。
再按照页面上的提示,“Just remember that your Flask application object is the actual WSGI application“,于是,mod_wsgi(Apache)就成了我的不二选择。

Running mod_wsgi on Windows

在Windows上运行Apache with mod_wsgi需要一些技巧。
有4点是必须严格遵守的:

  1. 不能混用32位和64位的文件
  2. 安装Python时要选择“Install for all users”
  3. 构建Apache使用的编译器版本要与构建Python的一致
  4. 构建mod_wsgi使用的编译器版本要与构建Python的一致

下载
mod_wsgi的下载地址是https://github.com/GrahamDumpleton/mod_wsgi/releases,但不是每一次更新都有预编译好的二进制文件。
我使用的是mod_wsgi 4.4.12,对应的Python是3.3.5或者3.4.2。
Apache的下载地址是https://www.apachelounge.com/download/VC10/,我使用64位的版本。

安装
安装Python时要选择“Install for all users”。另外,自定义项目里的“Add python.exe to Path”也最好选上。
把Apache24文件夹解压缩到c:\Apache24。(因为配置文件里是默认的这个路径,如果要放在别的地方,就自己修改下相应的配置)
ps.为了方便排错,可以在这里先测试一下Apache是否正常。运行httpd.exe,然后访问http://localhost/,如果没有问题应该可以看到测试页。
把mod_wsgi-py34-VC10.so复制到c:\Apache24\modules目录下,文件名改成mod_wsgi.so,然后把

LoadModule wsgi_module modules/mod_wsgi.so

添加到配置文件(httpd.conf)里。

测试
将测试文件保存为c:\mydir\myapp.wsgi

1 def application(environ, start_response):
2     status = 200 OK
3     output = bHello World!
4 
5     response_headers = [(Content-type, text/plain),
6                         (Content-Length, str(len(output)))]
7     start_response(status, response_headers)
8 
9     return [output]

在配置文件里添加:

1 <VirtualHost *:80>
2     WSGIScriptAlias /myapp c:\mydir\myapp.wsgi
3     <Directory c:\mydir>
4         Require all granted
5     </Directory>
6 </VirtualHost>

重新运行httpd.exe,然后访问http://localhost/myapp,看到Hello World!就说明安装成功了。

部署Flask应用

使用pip安装Flask:

pip install flask

把Flask例程保存为c:\mydir\hello.py

1 from flask import Flask
2 app = Flask(__name__)
3 
4 @app.route("/")
5 def hello():
6     return "Hello World!"
7 
8 if __name__ == __main__:
9     app.run()

mod_wsgi要求WSGI应用的入口叫“application”,所以我们还需要创建一个.wsgi文件来做转换。把下面的代码保存为c:\mydir\myapp.wsgi

1 import sys
2 sys.path.insert(0, c:\\mydir)
3 from hello import app as application

将c:\mydir加入系统环境的Path变量是为了确保我们的hello模块可以被解释程序找到。
重启Apache,查看一下配置好的成果吧。

扩展阅读

Running Apache as a Service

Working with Virtual Environments

Running mod_wsgi on Windows

 

以上是关于Deploy Flask app to Apache on Windows的主要内容,如果未能解决你的问题,请参考以下文章

script deploy war to weblog

GitLab CICD Day 30 - 完整代码

Flask and uWSGI - unable to load app 0 (mountpoint='') (callable not found or import error)(

flask web开发 Set it to True to suppress this warning问题

Flask - Elastic Beanstalk Deploy - requirements.txt 非零退出状态

Flask路由之重定向