Windows环境下:python + mod_wsgi + apache 部署flask应用程序

本文详细介绍如何使用Apache和mod_wsgi部署Flask应用,并在局域网内访问。涵盖环境搭建、配置步骤及常见问题解决方案。

前提准备:
1.Python:python3.7.5(64位)
2.Pycharm:pycharm-professional-2020.3.2

第一部分:基础环境的搭建

安装Apache和mod_wsgi时要注意与python的版本进行对应,此处python使用3.7.5(64位)、Apache使用2.4.23(64位)、mod_wsgi使用对应python3.7的64位版本

1.apache的搭建

Apache下载:
https://www.apachelounge.com/download/VC10/
在这里插入图片描述
安装apache:

根据解压出来的readme文件操作即可:
直接解压到c盘根目录,可能也可以在别的目录,但是要改配置文件,我没试过,所以我直接解压在c盘。
在这里插入图片描述

在cmd中进入Apache24的bin目录下,输入httpd.exe命令后打开浏览器输入localhost,出现It works则表示可以运行了。
在这里插入图片描述
在这里插入图片描述
接着以管理员方式运行cmd,进入Apache24的bin目录下,输入httpd.exe -k install将Apache作为服务安装,之后可以通过windows服务进行查看、运行等。
在这里插入图片描述

2.mod_wsgi的安装

由于在windows环境下使用pip install命令安装很容易失败这里直接下载whl文件进行安装。

mod-wsgi下载网址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
在这里插入图片描述
cmd中进入到下载whl文件的目录下,使用pip install mod_wsgi-4.7.1-cp37-cp37m-win_amd64.whl命令安装mod_wsgi,再输入mod_wsgi-express module-config,出现如下结果表示安装成功:
在这里插入图片描述

第二部分:配置并测试apache的wsgi扩展

1.配置apache的wsgi扩展

在配置的过程中可能会出现故障,无法重启Apache,可能是由于后台更新过慢导致,多重启几次试试,如果试了一两分钟仍然无法重启,可以在Apache的错误日志中查看原因(查看错误日志可以很好地了解Apache无法正常工作的原因建议出错时多查看),如果日志中出现子进程无法创建可以重启windows试试(其他情况Apache无法重启也可以尝试重启windows),可能是进程号被占用之类的错误:
在这里插入图片描述
将上述测试mod_wsgi安装成功与否的结果以及Python的相关路径(WSGIPythonPath)配置到Apache的conf目录的httpd.conf文件中,直接写在最后面即可:
在这里插入图片描述

LoadFile “d:/python3.7.5/python37.dll”
LoadModule wsgi_module “d:/python3.7.5/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd”
WSGIPythonHome “d:/python3.7.5”
WSGIPythonPath “d:/python3.7.5/Lib;d:/python3.7.5/Lib/site-packages;d:/python3.7.5/DLLs”
重启Apache服务,如果能够成功重启则表示配置apache的wsgi扩展完成,失败则查看错误日志进行具体解决。

2.测试apache的wsgi扩展

使用Pycharm创建flask测试项目,在项目根目录下创建项目的配置文件test.wsgi,首先在配置文件test.wsgi写测试代码:
在这里插入图片描述

def application(environ,start_response):
    status = "200 Ok"
    output = b"Hello wsgi"
    response_headers=[('Content-type','text/plain'),('Content-Length',str(len(output)))]
    start_response(status,response_headers)
    return[output]

然后在apache的配置文件httpd.conf,最后面加下面的代码:

Listen 8080		#默认端口为80,监听80端口的命令写在58行,可以注释掉写监听8080的这条也可以直接改成8080
<VirtualHost *:8080>	#建议端口号改为8080,这样进程的端口号不容易被占用,如果不改可以直接将8080改成80或者写成<VirtualHost *>
 DocumentRoot C:\Users\ddd\Documents\FlaskProject\test	#此处为整个项目包的路径
 WSGIScriptAlias / C:\Users\ddd\Documents\FlaskProject\test\test.wsgi	#此处为项目包配置文件的路径,中间的"/"为项目包的别名可以自定义为"/别名"
 <Directory C:\Users\ddd\Documents\FlaskProject\test>	#此处为整个项目包的路径
  Require all granted	#接受所有ip的访问,但是要注意防火墙配置(见博客末尾)
  #出错再加上下面代码试试,这个VirtualHost配置经常出错无法启动Apache,多尝试几次,我在自己的机子上加上下面代码会出错,所以没加
  #Order allow,deny
  #Allow from all
 </Directory>
</VirtualHost>

重启Apache,在浏览器中输入 localhost:8080/(你设置的别名) (注:如果使用默认80端口可以直接写localhost/(你设置的别名)),出现hello wsgi,就代表测试apache的wsgi扩展成功。

第三部分:部署并测试flask项目

对Pycharm创建的测试项目的启动文件app.py稍作修改:
app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/test')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

将使用Pycharm创建的测试项目的启动文件app.py更名为hello.py以免进行整体flask项目配置时出现"app"与预定义的变量重名。
在这里插入图片描述
在项目配置文件test.wsgi中删掉所写的测试Apache的mod_wsgi的代码,改为如下代码:

import sys
sys.path.insert(0,'C:\\Users\\ddd\\Documents\\FlaskProject\\test')	#字符串中为整个flask项目包的路径,由于"\"表示转义字符,所以用"\\"表示"\"
from hello import app as application	#hello为项目启动文件hello.py的文件名

重启Apache,浏览器访问localhost/test(注:如果是8080端口则相应改为localhost:8080/test即可),出现Hello World!表示成功将flask项目部署到了Apache中。
在这里插入图片描述

第四部分:在局域网内访问flask应用

根据上述配置在Apache的httpd.conf配置文件中将项目设置为Require all granted接受所有ip访问后,设置好防火墙:

打开windows防火墙——高级设置——入站规则——新建规则——选择“端口”——下一步——选择tcp、特定本地端口(填写8080)——下一步——下一步——命名——完成
在这里插入图片描述
完成后重启Apache服务,在同一局域网中可以通过访问地址:本机ip:8080/test访问上述flask项目(本机ip通过cmd中ipconfig命令查看),例如:192.168.43.135:8080/test。

参考文献:
https://blog.csdn.net/zhangtao0417/article/details/81564444(注:我主要是参考这篇博客并根据自己环境进行部署的)https://blog.csdn.net/weixin_43049347/article/details/108660698(注:Apache与mod_wsgi主要是参考这篇博客进行下载的)
https://blog.csdn.net/u013291076/article/details/49784269(注:在局域网内访问flask项目主要参考这篇博客进行的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值