Apache24 + wsgi + Flask on Python3.8部署实践
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部署实践相关推荐
- 容器化部署实践之Django应用部署(二)
上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下. 我们在开发的情况下: 浏览器请求→ python manage.py runserver(比如8000) → 到应用代码( ...
- [DeepSpeed]初代chatGPT模型部署实践
DeepSpeed Chat 部署方式 中间遇到很多坑,解决方法都写这里了DeepSpeed 部署中bug以及解决方法 环境 基于阿里云GPU 云服务器部署实践 操作系统版本: Ubuntu 18.0 ...
- TVM优化c++部署实践
TVM优化c++部署实践 使用TVM导入神经网络模型: 模型支持pytorch , tensorflow , onnx, caffe 等.平时pytorch用的多,这里给一种pytorch的导入方式. ...
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...
- centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解
[导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...
- 网易云海外推流部署实践
谈到直播,实时性和流畅性一直是整个服务体系中的重中之重.本文是网易云通信视频技术开发工程师何荣光在LiveVideoStack Meet杭州站沙龙的分享,着重梳理网易云在海外推流方面的部署实践,帮助开 ...
- tftp 服务器 ip_360Stack裸金属服务器部署实践
女主宣言 裸金属特性是一种将物理设备作为资源提供给租户的云计算服务,租户通过该服务可申请.管理和配置相应的物理设备资源,本文将介绍360Stack裸金属服务器的部署实践. PS:丰富的一线技术.多元化 ...
- 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践
以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...
- 时空大数据实践之GeoWave安装部署实践
2019独角兽企业重金招聘Python工程师标准>>> 时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz ...
最新文章
- jquery eval解析JSON中的注意点介绍
- VS2017 新建项目没有QT
- 复旦 哈工大计算机学院,国内高校中哈工大和上交复旦在一个档次吗?从这些方面看你就知道...
- jQuery Object 和 HTML Element间的转换
- 如何新建分支上传_如何创建git分支?
- Linux下c/c++项目代码覆盖率的产生方法
- C++虚函数表的总结
- 关于路径的问题(以后会慢慢的补进来)
- Nmap 可能引起cisco路由器Crash
- 3.9上午(周彤彤)
- ⑦企业级zabbix监控 微信报警、邮箱报警、钉钉报警、全网最细
- 传奇行会战攻略和战术技巧
- linux 安装 gdrive
- 129、易燃气体的分级
- 在spring boot中使用@WebFilter配置filter(包括排除URL)
- 舒老师AK的hu测 T2. LX还在迷路(线段树+等差数列)
- 关于openpyxl里“合并单元格和插入新行”与“冻结窗格”的坑
- NASA降水量数据的单位kg/m2与mm的关系
- 【软件设计】细数软件开发的核心原则
- 怎么将pdf转换成excel