Deploy Flask app to Apache on Windows

时间:2024-03-26 20:34:02

内容已过期,分割线以下为原文存档。


故事背景

这次我需要将一个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

 def application(environ, start_response):
status = '200 OK'
output = b'Hello World!' response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers) return [output]

在配置文件里添加:

 <VirtualHost *:80>
WSGIScriptAlias /myapp c:\mydir\myapp.wsgi
<Directory c:\mydir>
Require all granted
</Directory>
</VirtualHost>

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

部署Flask应用

使用pip安装Flask:

pip install flask

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

 from flask import Flask
app = Flask(__name__) @app.route("/")
def hello():
return "Hello World!" if __name__ == '__main__':
app.run()

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

 import sys
sys.path.insert(0, 'c:\\mydir')
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