美文网首页我爱编程
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