windows系统使用Apache+mod_wsgi 启动 Flask项目

背景

pycharm开发的flask项目,需要在生产环境中使用,因此需要部署到window10系统上(目前只有一台服务器 操作系统还不让动。。。。)。网上查的资料版本很对,有的部署后还启不来,自己部署好后整理下吧…

环境

os:win10专业版 64位
python:3.6.8  64位
Apache:2.4.41 64位
mod_wsgi:4.7.1 64

注意:以上位数要保持一致,Apache 版本根据操作系统
mod_wsgi的版本要根据python版本和位数去下载

下载

Apache下载链接:https://www.apachelounge.com/download/VC14/
浏览器打开,选择64位进行下载
windows系统使用Apache+mod_wsgi 启动 Flask项目_第1张图片
mod_wsgi 下载链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
浏览器打开,选择64位进行下载
windows系统使用Apache+mod_wsgi 启动 Flask项目_第2张图片

安装

下载后Apache解压到任何目录(最好放根目录,或者没有中文字符的目录)
解压后的目录如下
windows系统使用Apache+mod_wsgi 启动 Flask项目_第3张图片
mod_wsgi 安装
使用命令:

pip install C:\Users\Administrator\Desktop\mod_wsgi-4.7.1-cp36-cp36m-win_amd64.whl

pip是python自带的工具,install 安装的意思,后面是whi文件的路径
安装成功后会提示

Successfully installed mod-wsgi-4.7.1

安装完后执行mod_wsgi-express module-config

C:\Users\Administrator>mod_wsgi-express module-config
LoadFile "c:/users/administrator/appdata/local/programs/python/python36/python36.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python36"

将输出结果保持下来,后面配置要用。

至此Apache和mod_wsgi就算安装好了!

配置

找到我们的Apache24文件夹,进入到conf目录中,打开httpd.conf文件。
1.找到ServerRoot "c:/Apache24"这一行
修改成自己Apache的安装地址

Define SRVROOT "D:\flask_web\Apache24"

2.找到 Listen 80 这一行
修改监听端口为8088(不要与已经使用的端口重复,否则会提示端口被占用)

#Listen 12.34.56.78:80
Listen 8088

3.紧接着下面新增一行,端口要与监听的端口保持一致

ServerName localhost:8088

4.找到LoadModule access_compat_module modules/mod_access_compat.so,去掉前面的# (取消注释)
增加前面执行mod_wsgi-express module-config后输出的三行内容

LoadModule access_compat_module modules/mod_access_compat.so
LoadFile "c:/users/administrator/appdata/local/programs/python/python36/python36.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python36"

5.找到Directory "${SRVROOT}/cgi-bin"行,用四行代替原来的三行
修改后如下:

<Directory "${SRVROOT}/cgi-bin">
    Options FollowSymLinks     
	AllowOverride None     
	Order deny,allow     
	Allow from all
</Directory>

6.配置Virtual hosts
找到刚才新增的ServerName localhost:8088,下面增加虚拟以下代码

#跟上面监听的端口一致
<VirtualHost *:8088>
    ServerAdmin webmaster@dummy-host2.example.com
    #指定网站根目录
    DocumentRoot "D:\flask_web\monitor_platform"
    #指定网站用localhost:8088来访问
    ServerName localhost:8088
    #这条命令就是指定对 localhost:8088/.. 的访问都转由网址根目录下flaskApp.wsgi来处理
    WSGIScriptAlias / D:/flask_web/monitor_platform/flaskApp.wsgi
    #指定日志的路径及文件名
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
    #指定flask工程目录下的文件都可访问
    <Directory "D:\flask_web\monitor_platform">
        Require all granted
  		Require host ip
  		Allow from all
    </Directory>
</VirtualHost>

7.站点
在flask工程根目录下,新建flaskApp.wsgi文件,用于实现apache和webapp连接
打开文件,复制以下代码并修改第二行的flask工程路径

import sys
# 加入flask工程目录,以便知道启动文件monitor.py
sys.path.insert(0, "D:\\flask_web\\monitor_platform")
from monitor import app as application

目录结构为:

----|flask_web (文件夹)
--------|monitor_platform (文件夹)
------------|app (文件夹)
------------|monitor (启动文件)
------------|flaskApp.wsgi  (文件)

Apache配置完成!

启动

安装Apache
进入Apache bin目录下,执行安装Apache,没有报错说明没有问题

httpd -k install

启动
执行以下命令,没有报错说明没有问题

httpd -k start

常用命令

httpd -k restart  重启
httpd -k stop     停止

启动完成后,在浏览器中输入ip:8088/路由,即可访问网站
注意:启动文件中monitor.py中未指定ip和端口

常见错误

如果访问网址有报错,可以查看Apache目录下logs/dummy-host2.example.com-error
我遇到的报错是

ModuleNotFoundError: No module named 'monitor'

改原因就是7配置站点时未执行路径,导致flaskApp.wsgi导入monitor.py时找不到文件,添加路径后可以正常访问

OK,记录本次部署历程,听说Linux部署会比较简单,下次再研究

你可能感兴趣的:(python,服务器,windows,apache,flask)