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

9 篇文章 0 订阅
4 篇文章 0 订阅
1. 安装Apache2.4

Apache官网没有Windows安装包,只有源码需要自己编,可以下载ApacheHaus编译版
点此处下载:httpd-2.4.46-o111j-x64-vc15.zip

解压到本地目录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

把下载的.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就不行。如图:
在这里插入图片描述
原因后面再谈就,希望看到这里的人,不必和我一样为了查原因而走弯路,耽误过多的时间。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皓月如我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值