美文网首页我爱编程
Flask部署:virtualenv+apache+mod_ws

Flask部署:virtualenv+apache+mod_ws

作者: 曹八一 | 来源:发表于2017-08-17 18:24 被阅读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就可以看到自己的项目了。

相关文章

网友评论

    本文标题:Flask部署:virtualenv+apache+mod_ws

    本文链接:https://www.haomeiwen.com/subject/qyhnrxtx.html