基础配置:
将一个Flask应用部署到本地的Windows服务器上。操作系统是64位的,程序是基于Python 3.6开发的。
部署选择:
mod_wsgi + Apache
注意事项:
准备:
Apache,官网即可,要选择版本一致的,我选择了官网的这个2.4版本,解压即可使用;安装Python时要选择“Install for all users”。另外,自定义项目里的“Add python.exe to Path”也最好选上。
把Apache24文件夹解压缩到c:\Apache24。(因为配置文件里是默认的这个路径,如果要放在别的地方,就自己修改下相应的配置)
ps.为了方便排错,可以在这里先测试一下Apache是否正常。运行bin文件夹里httpd.exe,然后访问http://localhost/,如果没有问题应该可以看到测试页。
对于mod_wsgi的配置,就比较坑了,目前网上可见的打包好的资源(.so包)貌似只到4.4.12版本,而这个版本只兼容到python3.3且对应VC10,所以与我这的3.6不兼容(当然为省事,可以换成python3.3版本,可是总觉得3.5以前的版本不成熟),针对这两种情况,解决方式如下:
若有.so包:
把mod_wsgi-py34-VC10.so复制到c:\Apache24\modules目录下,文件名改成mod_wsgi.so,然后把
LoadModule wsgi_module modules/mod_wsgi.so
添加到配置文件(httpd.conf)里。
若没有so包:
- 下载mod_wsgi Python的插件
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
本人使用的这个 mod_wsgi‑4.5.15+ap24vc14‑cp36‑cp36m‑win_amd64.whl
i. 这个插件对应的Apache版本是24 VC是14
ii. Python版本是3.6
iii. 64位系统
在下载时要选择相应的版本,否则Apache启动时会有问题.
2.把下载的.whl文件复制到pythona安装目录 (os.file对应的地址) 的python\Scripts下使用
然后命令行里
pip install “mod_wsgi-4.5.15+ap24vc14-cp36-cp36m-win_amd64.whl”
进行安装,在安装成功后,在python的安装目录的\scripts文件夹下dos里运行mod_wsgi-express module-config
输出类似如下三行结果:
LoadFile “d:/program files/python36/python36.dll”
LoadModule wsgi_module “d:/program files/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd”
WSGIPythonHome “d:/program files/python36”
把这三行内容复制到http.cnf文件下进行配置
取代有so包情况下的
LoadModule wsgi_module modules/mod_wsgi.so
测试:
将测试文件保存为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]
在apache的配置文件conf/httpd.conf里最末行添加:
WSGIScriptAlias /myapp c:\mydir\myapp.wsgi
Require all granted
重新运行httpd.exe,然后访问http://localhost/myapp,看到Hello World!就说明安装成功了。
这里,可能存在端口冲突的问题,这种情况下,可以更改配置文件conf/httpd.conf为一个没有占用的端口,具体可以百度;
作者: 刘咸尚
部署Flask应用:
这里,我用pycharm做开发,pycharm里,安装flask,然后创建hello.py文件,代码如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Well done"
if __name__ == '__main__':
app.run()
mod_wsgi要求WSGI应用的入口叫“application”,所以我们还需要创建一个.wsgi文件来做转换。把下面的代码保存为myapp.wsgi,然后按照之前的方式,更改apache配置文件里的VirtualHost 标签里的路径,改成目前pycharm项目所在目录。
myapp.wsgi内容为:
import sys
sys.path.insert(0, '替换你的项目源码包的目录')
from hello import app as application
重启Apache,查看一下配置好的成果吧,浏览器输出Well done,就说明成功啦。
一些坑:
暂时先这么多吧。