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点是必须严格遵守的:
- 不能混用32位和64位的文件
- 安装Python时要选择“Install for all users”
- 构建Apache使用的编译器版本要与构建Python的一致
- 构建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,查看一下配置好的成果吧。
扩展阅读
Working with Virtual Environments
Deploy Flask app to Apache on Windows的更多相关文章
- Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)
前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...
- Docker:Deploy your app
Prerequisites Install Docker. Get Docker Compose as described in Part 3 prerequisites. Get Docker Ma ...
- Docker5之Deploy your app
Make sure you have published the friendlyhello image you created by pushing it to a registry. We’ll ...
- APACHE 在windows下的配置
目前apache在windows下只支持到2.2 所以php必须下载相应的线程安全的 然后打开apache的配置页面 listen directory 和 load_module修改 httpd -k ...
- Inside Flask - app.py - 2
Inside Flask - app.py - 2 Flask 初始化参数 Flass 类是 Flask 框架的核心,一个 flask 对象处理视图函数注册.URL规则.模板配置.参数设置等等. 一般 ...
- Inside Flask - app.py - 1
Inside Flask - app.py - 1 除 werkzeug 和 jinja2 等依赖库外,app.py 是在 Flask 的 __init__.py 中导入的第一个 Flask 自身的模 ...
- 部署django - Apache + mod_wsgi + windows
部署django - Apache + mod_wsgi + windows 1.环境 django 1.6.2 python 3.3 32位 apache 2.4.7 32位 一个可以使用的djan ...
- IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统
原文:IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统 asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的 ...
- Flask源码阅读-第四篇(flask\app.py)
flask.app该模块2000多行代码,主要完成应用的配置.初始化.蓝图注册.请求装饰器定义.应用的启动和监听,其中以下方法可以重点品读和关注 def setupmethod(f): @setupm ...
随机推荐
- Spring Cloud Zuul 2(基于配置中心的动态API网关)
在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...
- form表单中的button按钮
如果在form表单中 , 存在button元素,button元素就充当了submit的角色
- 常用的正则规则,直接copy就OK了
import re #用户名验证:(数字字母或下划线6到20位)re.match("/^\w{6,20}$/",匹配对象) #邮箱验证: re.match(" /^[a ...
- tomcat报503 或者无法启动应用
一般都是配置文件有问题,或者路径问题,或者jvm的参数路径问题.... 总之,报错实在是不清楚!这点比resin差远了!!
- 自定义的parse_url逆向函数http_build_url,将数组转为url字符串
parse_url函数可以讲一个url字符串解析成一个数组,但是php中似乎没有parse_url的逆向函数来讲一个解析出来的数组组合成url字符串,只有一个http_build_query用来将数组 ...
- Docker学习笔记_Dockerfile基本知识
Dockerfile由一行行命令语句组成,并支持以#开头的注释行. 1.编写一个Dockerfile文件 创建一个空的Docker工作目录,进入该目录,使用sudo vim Dockerfile指令新 ...
- Ubuntu下libpcap安装步骤
第一步,先安装GCC ,一般都会自动安装 sudo apt-get install build-essential 第二步,GNU M4可以从此处ftp.gnu.org/gnu/m4/ 下载 sudo ...
- PHP中 null ,false , 区别
先来测试一下吧: if(0 ==''){ echo '<br/>在PHP中0 ==\'\'' ; } if(0 !==''){ echo '<br/>在PHP中0 !==\'\ ...
- mysql for visual
http://dev.mysql.com/downloads/file.php?id=458484
- Html5-Video标签以及字幕subtitles和captions的区别
<video id="mainvideo" src="video.mp4" type="video/mp4"controls auto ...