您当前的位置:首页 > 计算机 > 服务器 > Apache

Apache24 + wsgi + Flask on Python3.8部署实践

时间:04-22来源:作者:点击数:
1. 安装Apache2.4

Apache官网没有Windows安装包,只有源码需要自己编,可以下载ApacheHaus编译版

下载:httpd-2.4.46-o111j-x64-vc15.zip https://download.csdn.net/download/fm0517/15466535

解压到本地目录E:\GreenSoftware\Apache24

编辑Apache的配置文件:Apache24/conf/httpd.conf

Define SRVROOT "/Apache24"

改为

Define SRVROOT "E:\GreenSoftware\Apache24"

至此可以通过命令/Apache24/bin/httpd.exe启动Apache,然后在浏览器中可以看到Apache的欢迎页面。

在这里插入图片描述

如果出现错误,可以检查标准输出或者/Apache24/logs/error.log

常见的错误原因可能是端口号80(或443)被别的进程占用。用命令

netstat -ano|findstr 80

netstat -ano|findstr 443

将对应的进程停掉,然后重启httpd.exe即可。

2. 安装Python-3.8.5

从官网找到python-3.8.5-amd64.exe

点此处下载:https://www.python.org/downloads/windows/

3. 安装mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl

Apache HTTP服务器的mod_wsgi扩展模块,实现了Python WSGI标准,可以支持任何兼容Python WSGI标准的Python应用,当然也包括了Flask。

下载:mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl https://download.csdn.net/download/fm0517/15466562

把下载的.whl文件复制到python38\Scripts下,然后使用pip进行安装

D:\Python38\Scripts>pip install mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
Processing d:\python38\scripts\mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
Installing collected packages: mod-wsgi
Successfully installed mod-wsgi-4.7.1
WARNING: You are using pip version 20.3.1; however, version 21.0.1 is available.
You should consider upgrading via the 'd:\python38\python.exe -m pip install --upgrade pip' command.

安装成功后在python38\Scripts下运行

D:\Python38\Scripts>mod_wsgi-express module-config
LoadFile "d:/python38/python38.dll"
LoadModule wsgi_module "d:/python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
WSGIPythonHome "d:/python38"

将安装后生成的文件mod_wsgi.cp38-win_amd64.pyd移动到Apache的modules目录下

E:\GreenSoftware\Apache24\modules\mod_wsgi.cp38-win_amd64.pyd

编辑Apache的配置文件:Apache24/conf/httpd.conf

增加模块引入:

LoadModule wsgi_module modules/mod_wsgi.cp38-win_amd64.pyd

去掉模块mod_vhost_alias.so前的注释

LoadModule vhost_alias_module modules/mod_vhost_alias.so
4. 创建Flask项目

目录结构

在这里插入图片描述

文件hello.py

from flask import Flask
app = Flask(__name__)


@app.route('/')
def root():
    return '<h1>网站建设中</h1>'


@app.route('/hello')
def hello():
    return '<h1>Hello world!</h1>'


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

文件wsgi.py

import sys

sys.path.insert(0, "D:/000/testweb")

from hello import app
application = app

5. 将Flask项目配置到Apache中
<VirtualHost *>
    WSGIScriptAlias / D:\000\testweb\wsgi.py
    <Directory 'D:\000\testweb'>
        Require all granted
        Require host ip
    </Directory>
</VirtualHost>
6. 效果展示

一定是http://localhost/hello,不能https

在这里插入图片描述

域名绑定也能正常发布

在这里插入图片描述
7. 遗留的问题
7.1. 版本匹配

网上的主要说法都认为,Apache,Python,mod_wsgi必须版本匹配,主要是Python版本对应的编译器,和Apache版本对应的编译器应保持相同。查看对应版本的方法如下:

【Python版本号和编译器版本号】

在这里插入图片描述

【编译器版本号和VS/VC大版本的对应关系】

microsoft官方文档https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160

在这里插入图片描述

【Apache预编译包的编译器版本】

在这里插入图片描述

实践过程中发现对于Python3.8.5,编译器版本1924来说,Apache无论是vc15还是vs16,都没有问题。

7.2. SSL

做完步骤5以后,总是出不来Flask项目的界面,我反复查一直以为是flask的wsgi没能正确调用。折磨了好久最后才发现如果是http就可以,https就不行。如图:

在这里插入图片描述

原因后面再谈就,希望看到这里的人,不必和我一样为了查原因而走弯路,耽误过多的时间。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门