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 syssys.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 grantedRequire 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就不行。如图:

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

Apache24 + wsgi + Flask on Python3.8部署实践相关推荐

  1. 容器化部署实践之Django应用部署(二)

    上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下. 我们在开发的情况下:     浏览器请求→ python manage.py runserver(比如8000) → 到应用代码( ...

  2. [DeepSpeed]初代chatGPT模型部署实践

    DeepSpeed Chat 部署方式 中间遇到很多坑,解决方法都写这里了DeepSpeed 部署中bug以及解决方法 环境 基于阿里云GPU 云服务器部署实践 操作系统版本: Ubuntu 18.0 ...

  3. TVM优化c++部署实践

    TVM优化c++部署实践 使用TVM导入神经网络模型: 模型支持pytorch , tensorflow , onnx, caffe 等.平时pytorch用的多,这里给一种pytorch的导入方式. ...

  4. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  5. centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解

    [导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...

  6. 网易云海外推流部署实践

    谈到直播,实时性和流畅性一直是整个服务体系中的重中之重.本文是网易云通信视频技术开发工程师何荣光在LiveVideoStack Meet杭州站沙龙的分享,着重梳理网易云在海外推流方面的部署实践,帮助开 ...

  7. tftp 服务器 ip_360Stack裸金属服务器部署实践

    女主宣言 裸金属特性是一种将物理设备作为资源提供给租户的云计算服务,租户通过该服务可申请.管理和配置相应的物理设备资源,本文将介绍360Stack裸金属服务器的部署实践. PS:丰富的一线技术.多元化 ...

  8. 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践

    以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...

  9. 时空大数据实践之GeoWave安装部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz ...

最新文章

  1. jquery eval解析JSON中的注意点介绍
  2. VS2017 新建项目没有QT
  3. 复旦 哈工大计算机学院,国内高校中哈工大和上交复旦在一个档次吗?从这些方面看你就知道...
  4. jQuery Object 和 HTML Element间的转换
  5. 如何新建分支上传_如何创建git分支?
  6. Linux下c/c++项目代码覆盖率的产生方法
  7. C++虚函数表的总结
  8. 关于路径的问题(以后会慢慢的补进来)
  9. Nmap 可能引起cisco路由器Crash
  10. 3.9上午(周彤彤)
  11. ⑦企业级zabbix监控 微信报警、邮箱报警、钉钉报警、全网最细
  12. 传奇行会战攻略和战术技巧
  13. linux 安装 gdrive
  14. 129、易燃气体的分级
  15. 在spring boot中使用@WebFilter配置filter(包括排除URL)
  16. 舒老师AK的hu测 T2. LX还在迷路(线段树+等差数列)
  17. 关于openpyxl里“合并单元格和插入新行”与“冻结窗格”的坑
  18. NASA降水量数据的单位kg/m2与mm的关系
  19. 【软件设计】细数软件开发的核心原则
  20. 怎么将pdf转换成excel

热门文章

  1. 各种SQL在Pig中实现
  2. MySql数据备份与恢复
  3. 一个棒棒糖引发的。。。
  4. 易语言操作mysql数据库
  5. java重量级框架_框架之轻量级和重量级
  6. apache2.2配置
  7. Python_切割和查找
  8. 解决ajax获取不到按钮的id
  9. Entityframework Code First 系列之项目搭建
  10. 过程作为黑箱抽象——《计算机程序的构造和解释》