在Windows环境,采用Apache + mod_wsgi的方式部署flask

本文详细介绍在Windows环境下使用Apache和mod_wsgi部署Flask应用的步骤,包括环境配置、软件安装及常见问题解决,适用于希望在Windows平台进行Web应用部署的开发者。

在Windows环境,采用Apache + mod_wsgi的方式部署flask,不如Linux下方便。
Apache、mod_wsgi、python三者必须是同位数,比如同为X64或者X86。另外,查看对应的VC版本。
说明:在Windows环境中,Apache不支持flask中的多进程或多线程功能,具体见 flask

完整项目: https://github.com/Hooddi/Apache_flask_windows


安装Apache

Apache下载地址
本人用的是X64,python3.5,所以选择VC15编译的"Apache 2.4.39 Win64"
下载完毕后解压得到Apache24,打开进入conf文件,用文本打开,我这里采用notepad++打开。
现在说明一下,我们需要修改的地方:

  1. ServerRoot “C:/Apache24”:修改成自己的目录地址,Apache的默认配置是C:/Apache24。
  2. Listen 8080:监听端口配置,默认的80端口可能被IIS占用,可以将其改成"8080"或者其他,也可以添加多个监听端口。
  3. (备选)一般都是在虚拟环境中部署项目,因此在conf文件中修改两处,表示将启用虚拟主机:
    • #LoadModule vhost_alias_module modules/mod_vhost_alias.so 前面的#去掉
    • #Include conf/extra/httpd-vhosts.conf 前面的#去掉
      第3点可以自行选择是否准备启用虚拟环境,本教程中使用虚拟主机。

修改conf文件后,保存。
打开cmd,cd到"C:\Apache24\bin",运行: httpd –k install
安装Apache服务,顺便启动它。
(常用命令:运行服务httpd –k start,停止服务 httpd –k stop,也可以直接从服务器管理器中操作)
打开服务器管理器可以看到Apache2.4服务,如下图所示:

在浏览器中输入网址:“localhost:8080”,看到下图说明Apache安装成功
说明:8080端口与conf文件中一致

安装mod_wsgi

mod_wsgi下载地址

"cp35"表示对应python3.5,选择与python版本对应的下载。
本教程选择的是:

mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl

mod_wsgi可以选择安装在本地系统或者部署项目时的虚拟环境中,本教程选择安装在本地。
可以直接通过pip安装:

pip install mod_wsgi-4.5.24+ap24vc14-cp35-cp35m-win_amd64.whl

使用pip安装后,使用cmd进入python目录下的Scripts文件夹,运行:

mod_wsgi-express module-config

将上图中红色方框中的三行信息复制,打开conf文件
找到:# LoadModule foo_module modules/mod_foo.so
将复制的信息粘贴在下方,表示使用wsgi来作为Python Web服务网关接口

此时,重启Apache服务,可以看到Apache服务的名字变了,如下图所示:

到此,mod_wsgi安装完成并在Apache的conf文件中修改相关配置信息。

测试

本教程是在虚拟环境中部署flask,python虚拟环境自行百度

pip install virtualenv

切换到目标文件夹下,创建虚拟环境:

virtualenv venv

此时,目标文件夹中生成"venv"文件, 切换到.\venv\Scripts目录下,运行;

activate

当虚拟环境激活后,可以运用pip在虚拟环境中安装需要用到的工具包,不与本地工具包冲突(用虚拟环境的原因)。本教程中仅安装Flask:

pip inatll flask

当虚拟环境搭建好之后,运行:

deactivate

关闭虚拟环境

首先,目标文件夹中创建test.py文件

from flask import Flask, request
app = Flask(__name__)

@app.route('/lulu')
def hello_1():
	return 'Hello lulu!'
	
@app.route('/hudi')
def hello_2():
	return 'Hello hudi!'

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

然后,目标文件夹中创建test.wsgi(wsgi入口文件)

activate_this = r'F:\Github_hudi\Public\Apache_Flask_windows\venv\Scripts\activate_this.py'
exec(compile(open(activate_this, "rb").read(), activate_this, 'exec'), dict(__file__=activate_this))
import sys
#Expand Python classes path with your app's path
sys.path.insert(0, r'F:\Github_hudi\Public\Apache_Flask_windows')
from test import app as application

其中:

activate_this = r'F:\Github_hudi\Public\Apache_Flask_windows\venv\Scripts\activate_this.py'
exec(compile(open(activate_this, "rb").read(), activate_this, 'exec'), dict(__file__=activate_this))

表示启用虚拟环境,即test.py是在虚拟环境中运行
F:\Github_hudi\Public\Apache_Flask_windows表示项目路径(目标文件夹)
在wsgi入口文件中,路径一定要用r’'包起来,否则可能会出错!

配置Apache的vhost.conf文件
打开httpd-vhost.conf,在文件最后加上test.wsgi的配置信息:

<VirtualHost *:8080 >
	ServerAdmin webmaster@dummy-host.example.com
	ServerName localhost
	WSGIScriptAlias / F:\Github_hudi\Public\Apache_Flask_windows\test.wsgi 	
	<Directory "F:\Github_hudi\Public\Apache_Flask_windows">
		AllowOverride none
		Require all granted
		Require host ip
	</Directory>
</VirtualHost>

保存文件,重启Apache。

测试:在浏览器中输入网址:“localhost:8080/hudi”,若看到下图所示信息,表示部署成功。

若自己在测试过程中出现500或404等错误时,查看Apache中的错误日志文件快速找到错误原因

参考文献

★★★★★http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
★★★★★https://zhuanlan.zhihu.com/p/43354041
★★★★ https://www.cnblogs.com/cxchanpin/p/6936880.html
★★★★ https://blog.youkuaiyun.com/zhangtao0417/article/details/81564444

<think>嗯,用户想在Windows上用Apachemod_wsgi部署Flask应用,需要详细的示例教程。首先,我需要回忆一下之前相关的引用内容,看看有哪些信息可以利用。比如,引用[1]提到了VirtualHost配置中的路径使用反斜杠,引用[3]说明了通过Apache重启来启动应用,引用[4]提供了虚拟主机的配置示例。 用户可能需要一步步的指导,包括安装必要的软件,配置Apache,编写WSGI文件,以及处理常见问题。首先,安装Apachemod_wsgi是关键步骤。mod_wsgi的安装可能需要通过pip,然后找到对应的模块文件,并配置到Apache中。这里需要注意Windows下的路径问题,特别是反斜杠和正斜杠的使用,引用[1]提到必须用反斜杠,但根据我的知识,可能有时正斜杠也可以,不过最好按照示例来。 接下来是配置虚拟主机。用户需要修改httpd.conf或者httpd-vhosts.conf文件,添加VirtualHost配置。引用[2]和[4]都给出了配置示例,特别是WSGIScriptAlias和Directory的设置。需要确保路径正确,并且有访问权限。同时,WSGI文件的内容也很重要,引用[1]和[3]提到需要正确设置应用实例,比如导入app,并设置application变量。 然后,处理静态文件可能需要额外的配置,用户可能不知道需要为静态文件和模板设置目录权限。常见错误如500错误,可能由于路径错误、权限问题或模块未加载引起。需要提醒用户检查日志文件,这点在引用中没有提到,但根据经验很重要。 用户可能的疑问还包括如何验证安装是否成功,以及如何调试。可能需要指导用户访问本地服务器,并查看Apache的错误日志。另外,虚拟环境的配置可能也是一个问题,是否需要使用venv,这可能需要额外的步骤。 需要确保所有的步骤都详细,并且适用于Windows系统,比如使用绝对路径,注意转义字符,服务重启命令使用httpd.exe等。同时,示例代码要准确,特别是WSGI文件和VirtualHost的配置,避免用户因为语法错误而失败。 最后,生成相关问题,可能涉及性能优化、虚拟环境集成、HTTPS配置等,这些都是用户后续可能会遇到的问题。要确保问题相关且有助于用户进一步学习。</think>### 分步教程:WindowsApache+mod_wsgi+Flask部署 #### 一、环境准备 1. **安装Apache** - 从[Apache Haus](https://www.apachehaus.com/cgi-bin/download.plx)下载对应VC++版本的Apache压缩包(推荐2.4.x版本) - 解压到`C:\Apache24`目录,管理员权限运行`bin\httpd.exe`测试安装 2. **安装mod_wsgi** - 通过pip安装:`pip install mod_wsgi` - 执行命令获取模块路径:`mod_wsgi-express module-config` - 输出示例: ``` LoadFile "C:/Python39/python39.dll" LoadModule wsgi_module "C:/Python39/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd" ``` #### 二、配置Apache 1. **修改httpd.conf** - 添加mod_wsgi模块配置[^3]: ```apache # 添加在LoadModule区域 LoadFile "C:/Python39/python39.dll" LoadModule wsgi_module "C:/Python39/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd" ``` - 添加虚拟主机包含文件: ```apache Include conf/extra/httpd-vhosts.conf ``` 2. **配置虚拟主机(conf/extra/httpd-vhosts.conf)** ```apache <VirtualHost *:80> ServerName localhost WSGIPassAuthorization On WSGIScriptAlias / "D:/flask_app/wsgi.wsgi" <Directory "D:/flask_app"> Require all granted Options Indexes FollowSymLinks AllowOverride None </Directory> Alias /static "D:/flask_app/static" <Directory "D:/flask_app/static"> Require all granted </Directory> </VirtualHost> ``` #### 三、创建Flask应用 1. **app.py文件** ```python from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello Apache+WSGI!" if __name__ == "__main__": app.run() ``` 2. **wsgi.wsgi文件** ```python import sys sys.path.insert(0, 'D:/flask_app') from app import app as application ``` #### 四、验证与调试 1. **启动Apache服务** ```cmd # 安装为系统服务 httpd.exe -k install # 启动服务 httpd.exe -k start ``` 2. **访问测试** - 浏览器打开`http://localhost` - 若出现500错误,检查`logs/error.log`中的Python异常信息 #### 常见问题处理 1. **路径问题** - 所有Windows路径必须使用**双反斜杠**或**正斜杠**,例如: ```apache WSGIScriptAlias / "D:\\flask_app\\wsgi.wsgi" ``` 2. **权限问题** - 确保Apache服务账户对应用目录有完全控制权限 3. **模块加载失败** - 检查Python与Apache的**位数一致性**(必须同为32位或64位)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值