基于 Python 开发的 Web 应用(Django、Flask、Tornado 等)基本上都是部署在 Linux 服务器上的。鉴于 Linux 上部署 Python 应用的便利性,这是大多数项目推荐的部署方式,也是大多数人的选择。
但是在一些场景下,我们需要将应用部署在 Windows 主机或服务器上,比如公司内部的应用、个人使用的应用。
通过虚拟机安装一个 Linux 系统,再对应用进行基于 Linux 的部署是一个方式,但是对计算机资源的占用并不太友好。
通过 docker 方式进行安装?在 Windows 上安装 docker 本身就不是一件简单的事儿。
通过 WSL 在 Linux 子系统中进行应用部署?确实是一个好的方法,但是受限于 Windows 系统的版本,只能在 Win10 中进行操作,这里暂且不表。
下面,我们通过觅道文档 MrDoc 在 Windows Server 2012 R2 下的部署实例,介绍使用 Apache 在Windows 系统中部署 Python Web 应用。
根据 Django 官网的介绍:
利用 Apache 和 mod_wsgi 在生产环境部署已经过充分测试。……Django 支持所有支持 mod_wsgi 的 Apache 版本。
首先,我们通过 git 命令下载 MrDoc 项目的源码到 D 盘:
git clone https://gitee.com/zmister/MrDoc.git
然后安装依赖库:
pip install -r requirements.txt
接着执行 MrDoc 的初始化命令,对数据库、管理员用户登进行初始化创建:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
最后,我们运行测试服务器:
python manage.py runserver 0.0.0.0:80
这样,就可以在浏览器中访问到运行的 MrDoc 了。
经过测试服务器运行成功之后,我们来准备使用 Apache 部署运行 MrDoc。
首先到网站:https://www.apachelounge.com/download/ 下载对应操作系统的 Apache:
因为演示服务器操作系统是 64 位的,所以这里下载的是Apache 2.4.48 Win64
解压后得到Apache24
文件夹,将其复制或移动到 C 盘,最终 Apache 的路径为C://Apache24
。
我们先对 Apache 做一些基础性的配置,使我们访问服务器IP地址的时候,能够确定 Apache 是启动的。
打开C://Apache24/conf/httpd.conf
文件。
在 37 行附近,确定ServerRoot
的值为 Apache 的路径:
Define SRVROOT "c:/Apache24"
ServerRoot
"${SRVROOT}"
在 60 行附近,设置Listen
的值为应用运行的端口,在这里,我们直接设置为 80 端口:
Listen
80
在 227 行附近,设置ServerName
的值为你需要的域名或IP地址,在这里,我们直接设置为服务器的 IP 地址:
ServerName
139.159.152.121:80
然后在 C://Apache24//bin
目录打开命令行窗口,输入如下命令,将 Apache 安装为系统服务:
httpd -k install
如果命令执行成功,那么在 Windows 的服务管理中,就可以看到 Apache 的服务:
这时候,如果我们继续在浏览器访问服务器的 IP 地址,那么可以看到 Apache 运行成功的默认页面:
这说明我们的 Apache 服务已经安装并启动了。
mod_wsgi 是一个 Apache 模块,它可以管理任何 Python WSGI 应用,我们需要安装这个模块用来实现 Apache 与 Python WSGI 应用的连接。
我们可以直接使用pip
命令进行下载:
pip install mod_wsgi==4.7.1
mod_wsgi 4.8版本在它的 GitHub 仓库上有很多关于异常报错导致 Apache 服务无法启动的 issues,所以保险起见,我们安装 mod_wsgi 4.7.1 版本
如果在安装中提示需要 C++ 2015,那么一个解决方案是通过 microsoft visual c++ build tools 工具进行安装,另一个方式则是通过下载第三方提供了编译好的 whl 文件进行安装
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
根据计算机的 Python 版本下载合适的 whl 文件。
然后使用 pip 命令进行安装。
安装成功后,我们可以在 Python 安装目录的 Scripts 文件夹内看到一个名为 mod_wsgi-express.exe 的文件:
我们在这里目录下打开命令行窗口,执行如下命令:
mod_wsgi-express module-config
会输出三行类似于下面这样的文本,我们将其复制出来备用:
LoadFile
"c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome
"c:/users/administrator/appdata/local/programs/python/python37"
接着,咱们继续打开 Apache 的配置文件 httpd.conf,在文件末添加一些内容。
首先,把执行mod_wsgi-express module-config
命令输出得到的文本添加到 httpd.conf 中:
LoadFile
"c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome
"c:/users/administrator/appdata/local/programs/python/python37"
然后,指定应用的 wsgi 配置文件路径:
WSGIScriptAlias
/ c:/MrDoc/MrDoc/wsgi.py
接着,指定项目的路径:
WSGIPythonPath c:/MrDoc
接下来,确保 Apache 能够访问到 wsgi.py 文件:
<Directory
c:/MrDoc/MrDoc>
<Files
wsgi.py>
Require all granted
</Files>
</Directory>
继续指定静态文件的目录和媒体文件的路径:
Alias
/media/ c:/MrDoc/media/
Alias
/static/ c:/MrDoc/static/
<Directory c:/MrDoc/static>
Require all granted
</Directory>
<Directory c:/MrDoc/media>
Require all granted
</Directory>
添加完成之后,保存文件。再重启一下 Apache 服务。
回到浏览器,访问服务器的 IP 地址,可以发现,MrDoc 已经成功运行了。
这样,我们就通过 Apache 实现了在 Windows 上部署 Python Web 应用(Django)。
还是很简单的,赶紧试试吧!
?分享、点赞、在看,给个三连击呗!?