zoukankan      html  css  js  c++  java
  • Windows环境下flask+Apache+mod_wsgi部署及爬坑

    前言

    在Windows下部署Flask真的是一项挑战,但只要有耐心+细心,就一定可以成功。

    我在部署的时候遇到了几个坑,在此记录下,方便以后查阅。

    安装python

    下载安装包python-3.6.5-amd64.exe,直接双击打开即可一步步安装,非常简单。

    安装virtualenv和virtualenvwrapper

    安装virtualenv

    pip install virtualenv
    

    安装virtualenvwrapper

    pip install virtualenvwrapper-win
    

    配置环境变量:

    打开系统环境变量,添加:WORKON_HOME=C:virtualenvs注意这个目录是虚拟环境存放的目录

    配置完环境变量,一定要重启cmd窗口,要不然环境变量不生效。

    常用命令:

    • 新建虚拟环境:mkvirtualenv test_env_36
    • 查看所有虚拟环境:workon
    • 进入虚拟环境:workon test_env_36
    • 退出虚拟环境:进入到虚拟环境的目录,例如:C:virtualenvsLibraFlaskPy36Scripts, 输入:deactivate
    • 激活虚拟环境:进入到虚拟环境的目录,例如:C:virtualenvsLibraFlaskPy36Scripts 输入:activate.bat

    PS: 激活虚拟环境我通常的做法是:workon test_env_36

    安装mod_wsgi

    在这个网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 上找到编译好的包,进入到安装包的路径,输入如下命令,进行安装

    pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl
    

    安装Apache

    1. 下载安装包:官网
    2. 解压安装包,打开cmd终端,进入到Apache/bin目录,输入命令:httpd -k install,不报错表明安装成功
    3. 双击ApacheMonitor.exe,打开服务管理UI界面,可以对Apache服务进行管理。
    4. 也可以用命令对Apache服务进行管理

    常用命令:

    httpd -k start  # 启动
    httpd -k stop  # 停止
    httpd -k restart  # 重启
    

    如果有报错,可以查看日志:Apache/logs/error.log

    安装Apache遇到的坑

    配置apache,在Apache24/conf/httpd.conf的最后添加上如下的配置,使用mod_wsgi-express module-config > myconfig.txt,可以得到 mod_uwsgi 配置:

    # mod_wsgi 配置
    LoadFile "c:/python36/python36.dll"
    LoadModule wsgi_module "c:/virtualenvs/libraflaskpy36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
    WSGIPythonHome "c:/virtualenvs/libraflaskpy36"
    
    # 参考:https://dormousehole.readthedocs.io/en/latest/deploying/mod_wsgi.html
    <VirtualHost *>
        ServerName 192.168.6.27:80    # 这里我少写了80端口,坑死了
        WSGIScriptAlias / C:	oolsLflaskLibra.wsgi
        <Directory C:	oolsLflask>
                # Order deny,allow
                # Allow from all
                Require all granted
        </Directory>
    </VirtualHost>
    

    中间有一段配置也要改,这里坑死,搞了好久:

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    

    改成这样:

    
    <Directory />
        AllowOverride All    # 为了让别人访问到这个IP地址
        Require all granted
    </Directory>
    

    修改证书的配置,去掉ssl认证,因为是公司内部使用,不需要绑定域名和认证,将下面这句话注释掉:

    LoadModule ssl_module modules/mod_ssl.so
    

    新建app.wsgi文件,写上如下代码:

    # 添加虚拟环境的路径
    activate_this = 'C:\virtualenvs\LibraFlaskPy36\Scripts\activate_this.py'
    with open(activate_this) as file_:
        exec(file_.read(), dict(__file__=activate_this))
    

    在这里重点说明下,配置的时候,一直报错:

    [Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286]   File "C:/tools/ZLflask/Libra.wsgi", line 5, in <module>
    , referer: http://192.168.6.27/index
    [Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286]     from app import app as application
    , referer: http://192.168.6.27/index
    [Tue Oct 30 19:28:59.312419 2018] [wsgi:error] [pid 5972:tid 1148] [client 192.168.6.27:50286] ModuleNotFoundError: No module named 'app'
    , referer: http://192.168.6.27/index
    

    后来找了好久,加上下面的2行代码,成功了:

    import sys
    sys.path.insert(0, "C:\tools\ZLflask")
    

    app.wsgi 文件的完整代码:

    # 添加虚拟环境的路径
    activate_this = 'C:\virtualenvs\LibraFlaskPy36\Scripts\activate_this.py'
    with open(activate_this) as file_:
        exec(file_.read(), dict(__file__=activate_this))
    
    # 将你的项目路径添加到系统
    import sys
    sys.path.insert(0, "C:\tools\ZLflask")
    

    安装mod_uwsgi的坑

    安装的时候一直报这个错:

    Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:UsersDellAppDataLocalTemppip-install-pnicet59mod-wsgisetup.py", line 158, in <module>
            raise RuntimeError('No Apache installation can be found. Set the '
        RuntimeError: No Apache installation can be found. Set the MOD_WSGI_APACHE_ROOTDIR environment to its location.
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:UsersDellAppDataLocalTemppip-install-pnicet59mod-wsgi
    

    解决办法:

    1. 打开这个网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/
    2. 搜索:mod_wsgi
    3. 下载,然后安装:pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl
    4. 重启Apache: httpd -k restart 好了。

    Enjoy your code, good luck.

    不积跬步,无以至千里。
  • 相关阅读:
    Zookeeper 基础知识【1】
    Spark 基础复习【1】
    ZooKeeper 入门 一致性
    Hive 视图 索引
    Yarn调度 历史与基础
    mysql 优化【1】
    TCP IP知识梳理
    Java 基础 锁
    Spark 累加器使用
    RATE-MAX----beta答辩博客
  • 原文地址:https://www.cnblogs.com/DeaconOne/p/12664431.html
Copyright © 2011-2022 走看看