Flask部署:virtualenv+apache+mod_ws
2017-08-17 本文已影响0人
曹八一
一、前言
开发完Flask的项目之后,需要进行部署使用。在部署的过程中,遇到了很多的麻烦,很是心塞,最终部署成功。记录下来,或许可以给需要在Windows上部署Flask项目的朋友们作为参考。
二、部署过程
本次部署采取的方案为:virtualenv+apache+mod_wsgi
需要注意的是:Python,Apache和mod_wsgi应该都为32位或者64位,不能混用;而且Apache和mod_wsgi要是相同版本的C/C++编译器生成的。
1. virtualenv
使用virtualenv的理由:
- 隔离项目之间的第三方包依赖,不同项目依赖于不同的第三方包
- 部署应用方便,把开发环境的虚拟环境直接打包到生产环境即可
我用的是python2.7 64,cmd下:
- 安装virtualenv:
pip install virtualenv
- 新建虚拟环境:
virtualenv E:\virtualenv\ikmap
- cd进入E:\virtualenv\ikmap\Scripts目录,输入:
activate
激活虚拟环境 - 安装项目依赖包:
pip install -r requirements.txt
(requirements.txt是自己项目导出的)
2. Apache
我用的是Apache2.4.27 VC9 64:
- 解压到E:\Apache24
- 修改配置文件conf\httpd.conf:
Define SRVROOT "E:\Apache24"
Listen 80
- cmd管理员身份运行,进入E:\Apache24\bin目录:
httpd -k install -n Apache24
# 安装Apache服务
httpd -k uninstall -n Apache24
# 卸载Apache服务 - 启动Apache服务,浏览器输入:http://127.0.0.1:80 测试Apache是否成功安装。
3. mod-wsgi py27 VC9 64
- 将mod-wsgi.so文件拷贝至E:\Apache24\modules下
- 修改配置文件conf\httpd.conf,引入:
LoadModule wsgi_module modules/mod_wsgi.so
- 重新启动Apache服务,启动成功,Apache服务描述处有mod_wsgi等字样
4. 创建.wsgi文件
- 在自己项目的启动文件的相同路径下新建一个.wsgi结尾的文件,我的是app.wsgi:
activate_this = "E:/virtualenv/ikmap/Scripts/activate_this.py" # 虚拟环境激活文件
execfile(activate_this, dict(__file__=activate_this))
import site
import sys
# Remember original sys.path.
prev_sys_path = list(sys.path)
# Add site-packages directory.
site.addsitedir('E:/virtualenv/ikmap/Lib/site-packages') # 虚拟环境安装第三方包文件目录
# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
sys.path.insert(0, 'E:/PyCharmProjects/ikmap') # 项目文件目录
from app import app as application # 只能用application,因为mod_wsgi在解析时,只认application
注意:路径使用'/',注意方向!
5. 修改配置文件conf\extra\httpd-vhosts.conf
- 先删除默认的virtuaHost -default内容:
<VirtualHost _default_:80>
DocumentRoot "${SRVROOT}/htdocs"
#ServerName www.example.com:80
</VirtualHost>
- 添加以下内容:
<VirtualHost *:80 >
DocumentRoot "E:/PyCharmProjects/ikmap" # 项目路径
WSGIScriptAlias /ikmap "E:/PyCharmProjects/ikmap/app.wsgi" # .wsgi文件路径,前面添加了/ikmap,浏览器输入就应该是http://127.0.0.1:80/ikmap,避免直接输入http://127.0.0.1:80
<Directory "E:/PyCharmProjects/ikmap">
Options Indexes FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
注意:路径使用'/',注意方向!
- 修改配置文件conf\httpd.conf,引入:
Include conf/extra/httpd-vhosts.conf
三、测试
在浏览器输入:http://127.0.0.1:80/ikmap就可以看到自己的项目了。