前提准备:
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项目主要参考这篇博客进行的)
本文详细介绍如何使用Apache和mod_wsgi部署Flask应用,并在局域网内访问。涵盖环境搭建、配置步骤及常见问题解决方案。

5068

被折叠的 条评论
为什么被折叠?



