2020年最新apache2.4 + flask + python3.8 + windows10的部署

2020年最新apache2.4 + flask + python3.8 + windows的部署

在参考了许多apache的部署文章之后,写下这篇博客记录一下部署的完整过程和所遇到的问题(bug)
(注:该方法已成功部署)
  • 首先是所需要的环境
  • python3.8版本
  • apache2.4版本 + mod_wsgi版本
  • flask项目
  • Windows 10

需要注意的是:python版本、apache版本、mod_wsgi版本,这三个版本需要一一对应

下文就按照三大部分讲解

第一大部分:python3.8版本的下载和安装

python下载的是3.8.3(32位win)版本

我下载的是python的3.8.3版本的解释器,按照自己操作系统是几位的来下载几位的python解释器,一般电脑都是32位和64位,如果安装64位版本的python解释器在32位的电脑上就无法兼容了,所以建议安装32位的python版本
查看电脑的操作系统位数:桌面–> 你的电脑图标右键属性
在这里插入图片描述

python3.8.3的下载地址:https://www.python.org/downloads/

进入地址找到32位版本的python3.8.3
在这里插入图片描述
下载之后自定义安装到c盘的python38上面:c:\python38
在这里插入图片描述
安装完成之后,查看安装的python信息,注意:如果电脑上面又多个不同版本的解释器,直接进入c:\python38目录,双击打开python.exe文件就可以打开新安装的python了
在这里插入图片描述
红框里表示安装的是32位的

  • apache2.4版本的下载和安装
  • apache下载
  • 注意:apache版本的下载需要与python3.8.3的版本对应起来,上面红色框里面的MSC v.1925就是_MSC_VER值,需要找到对应的Visual Studio版本

1925 对应的是 16.5 所以知道对应的apache版本是vc16

这里就不做过多解释了,要了解对应关系,自行去查找

_MSC_VER值对应的Visual Studio版本,最新的对应版本可去微软官网,链接:Predefined macros
在这里插入图片描述

apache下载地址:http://httpd.apache.org/docs/current/platform/windows.html#down

在这里插入图片描述
ApacheHaus还没有最新的vc16版本,所以我去Apache Lounge中找到了对应的vc16(32位win)版本下载,有可能Apache Lounge这个网址打不开,无法下载到最新版本,下载不到文末可以给我留盐

在这里插入图片描述
在这里插入图片描述

第二大部分:安装apache和mod_wsgi模块

解压apache的下载文件,把Apache24文件夹复制到D或者H盘的根目录下(我的是H盘):H:\Apache24
> 1、更改httpd.conf文件

  找到apache目录H:\Apache24\conf下的httpd.conf文件,用编辑器打开(txt),更改37行的路径为
  自己的apache的路径:“H:\Apache24”,更改60行的80端口为18000,最好是1024以上的端口,80  端
  口经常被系统的服务占用,行数不对的话,自己去找

下这两行的数据来更改一下
在这里插入图片描述
在这里插入图片描述

> **2、以管理员身份运行cmd(右键点击cmd,看到管理员身份运行),进入H:\Apache24\bin目录下**,输入命令

	    > httpd -k install	         -->    安装

	    > httpd -k start            -->    启动
	    
	    > httpd -k start            -->    重动

	    > httpd -k stop             -->    停止

	    > httpd -k uninstall        -->    卸载


	在安装完成之后,输入httpd -k start就可以启动apache服务了,双击bin目录下的
	ApacheMonitor.exe就可以
	看到apache的状态了,右边可以手动控制apache服务

在这里插入图片描述
在这里插入图片描述

> 3、apache服务启动之后,在浏览器输入***localhost:18000***,显示It works!表示访问成功

在这里插入图片描述

  • 下载和安装mod_wsgi
    mod_wsgi模块可以实现WSGI标准,WSGI是一个同一的python接口标准,该标准讲述了python应用如何与web服务器通信,mod_wsgi模块可以实现python应用与web服务器之前的联系

mod_wsgi下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
mod_wsgi说明文档:https://dormousehole.readthedocs.io/en/latest/deploying/mod_wsgi.html

在这里插入图片描述
下载完成之后,把文件复制到python的安装目录的Scripts目录下:C:\python38\Scripts
打开cmd,进入C:\python38\Scripts执行命令:

pip install mod_wsgi-4.7.1-cp38-cp38-win32.whl

在这里插入图片描述
安装完成后,继续输入以下命令,把生成的3行代码复制到apache的httpd.conf配置文件中,进行apache配合mod_wsgi模块使用

mod_wsgi-express module-config

在这里插入图片描述
复制3行代码到apache的httpd.conf配置文件中:
在这里插入图片描述

第三大部分:创建Flask小项目

下面分3个步骤讲解

第一步:写个简单Flask的例子:

from flask import Flask


application = Flask(__name__)

@application.route('/demo')
def test():
    return '无穷鸡蛋'

application.run(debug=True)

python3.8版本运行Flask项目的时候会运行出错,如下错误:

ImportError: cannot import name 'cached_property' from 'werkzeug' 

原因因为 werkzeug 库新版本里需要显式导入该模块,所以找到werkzeug 库的路径:

C:\python38\Lib\site-packages\werkzeug\__init__.py
# 添加如下代码,手动导入模块
from werkzeug.utils import cached_property

如图,就可以解决错误了:
在这里插入图片描述

第二步:编写wsgi文件
wsgi文件可以通过mod_wsgi模块把flask项目和apache服务连接起来

import sys

sys.path.insert(0, "H:\pythonpro\Runflask")  # 添加项目路径到python解释器的搜索路径中
from testt import application  # 这里必须是application

如果项目里面的不是application的话,还可以这样写:

from testt import app as application
# 或者是写成
from testt import app
application = app

第三步:添加wsgi文件的路径到apache服务的httpd.conf文件中
在httpd.conf文件中,把下面的文本复制进去,把路径和端口信息改为你自己的信息。一般在文本的最后添加这个信息,部署多个项目,可以添加多个这个文本,把路径和端口信息改为项目的信息

Listen 18001
<VirtualHost *:18001>
     WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi
     <Directory "H:\pythonpro\Runflask">  # 注意这里不加双引号可能会出错,有的电脑不加也可以
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>
</VirtualHost>

解读:
Listen 18001:这里是监听18001端口,可以监听多个端口 <VirtualHost

<VirtualHost *:18001>:这里的18001端口是进入你项目的端口,但是没有Listen监听的端口的话,这里面的内容不会生效

WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi:这里的WSGIScriptAlias / 是固定的,斜杠不能去掉,后面的路径表示的是wsgi文件的路径,这里告诉apache去这个路径找到wsgi文件

<Directory"H:\pythonpro\Runflask">:这里表示的是项目的路径

后面这两项是必填的:
WSGIApplicationGroup%{GLOBAL}
Require all granted

再多说一下:这个文本的端口是多少,浏览器访问的端口就是多少,会重定向到你的项目,无论你项目里面写的端口是多少

我的项目目录结构如下:
在这里插入图片描述

查看项目是否部署成功

访问地址:http://localhost:18001/demo

如下图,表示访问成功,部署成功了,访问地址的时候,记得要加 /demo ,项目里面的路由是/demo
在这里插入图片描述

部署遇到的问题

一般都是自己粗心造成的错误,下面列举一些遇到的错误:
以下问题是我总结了自己说的,当时部署的时候问题解决了,现在复现不了,没有截图,所以总结一下
一、地址访问正确了,但是会报错(具体错误具体分析)。在apache安装目录下的logs文件下的error.log里面可以查看错误日志,遇到问题的解决步骤:
1、首先检查apache服务是否安装成功,能否启动成功,显示It works!表示访问成功

2、在pycharm中运行项目,看下是否能访问正常,访问失败,说明项目有bug未解决,apache部署不成功

3、在pycharm成功运行访问项目后,如果项目正常运行没有bug的话,查找下个问题的思路是查找wsgi文件是否编写正确,wsgi文件编写不正确会影响是否能访问项目是否成功,如何查看?
例如:

import sys
sys.path.insert(0, "H:\pythonpro\Runflask")  # 检查添加路径这里,含有\t,\n,\f等,都不行,一般在路径前面加上r来防转义
# sys.path.insert(0, r"H:\pythonpro\Runflask")
from testt import application  # 检查是否是application,这里的必须是application

4、确定第3步正确后,还是有问题的话,那就是httpd里面的配置有问题了,这时候,打开httpd.conf
查看mod_wsgi的3行配置信息是否添加进来了
在这里插入图片描述
检查配置wsgi文件信息的文本是否正确

Listen 18001
<VirtualHost *:18001>
     WSGIScriptAlias / H:\pythonpro\Runflask\tesk.wsgi
     <Directory "H:\pythonpro\Runflask">
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>
</VirtualHost>

特别注意: 路径信息不能填错了,填错了就找不到对应的文件了,特别是特殊含义的\t,\n,\f

二、第一个是很坑很坑的问题,当存在有第三方科学计算库导入(numpy,pandas,scipy库)的时候,在浏览器访问的时候,一直在转圈圈,错误日志也没有打印,也没有报错

在查阅了众多资料后发现:添加WSGIApplicationGroup %{GLOBAL}就能把问题解决了

     <Directory "H:\pythonpro\Runflask">
         WSGIApplicationGroup %{GLOBAL}
         Require all granted
     </Directory>

WSGIApplicationGroup
语法:WSGIApplicationGroup name

WSGIApplicationGroup指令,可用于指定WSGI应用程序或WSGI应用程序组属于哪个组。一般来说,在同一个应用程序组中,所有的WSGI应用程序处理请求的过程,都将在的同一个Python子解释器的上下文中执行。

在默认情况下,该“WSGIApplicationGroup”会被设置成“WSGIApplicationGroup %{RESOURCE}”,此时应用程序组的名称将被设置为服务器主机名和端口,如%服务器变量,WSGI环境变量scriptname的值被附加到文件分隔符中。

WSGIApplicationGroup %{GLOBAL},在该设置时,全局应用程序组中,任何WSGI应用程序都将在Python创建的第一个解释器上下文中执行。当Python的外部C语言扩展模块,使用简化的线程API来操作Python GIL时,就必须强制WSGI应用程序在第一个解释器中运行,原因是WSGI应用程序在Python创建的其余子解释器中都不能正确运行

到这里,Flask项目的apache部署就全部完成了,如果还有其他部署不成功的情况,可以留言一起讨论交流

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
1. 登录阿里云控制台,进入ECS实例页面,选择需要部署Flask项目的实例。 2. 在实例页面中,点击左侧导航栏中的“安全组”。在安全组页面中,点击“添加安全组规则”按钮,添加一个新的安全组规则,将协议设置为“TCP”、端口设置为“5000”(Flask默认端口),并选择允许所有来源IP访问。 3. 在实例页面中,点击左侧导航栏中的“SSH密钥对”。如果你还没有创建SSH密钥对,点击“创建SSH密钥对”按钮创建一个。 4. 在Windows系统中,使用PuTTYgen生成私钥和公钥。将私钥下载到本地,将公钥复制到ECS实例的“SSH密钥对”页面中。 5. 在Windows系统中,使用PuTTY连接到ECS实例。输入实例的公网IP地址、端口号(默认为22)、用户名(默认为root),并选择刚才下载的私钥文件。 6. 在PuTTY连接成功后,输入以下命令更新系统软件包: sudo apt-get update sudo apt-get upgrade 7. 安装Python和pip: sudo apt-get install python3-pip 8. 安装Flask和其他需要的Python库: sudo pip3 install flask 9. 编写Flask项目代码,并将代码上传到ECS实例中。可以使用SFTP客户端(如FileZilla)将代码上传到ECS实例中。 10. 在ECS实例中,进入Flask代码所在的目录,运行以下命令启动Flask应用: export FLASK_APP=app.py flask run --host=0.0.0.0 11. 在浏览器中输入实例的公网IP地址和Flask应用的端口号(默认为5000),访问Flask应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值