这是去年5月份写的文章…不知道为何一直在草稿箱里面,现在才发现,把它发表出来好了
在前面的章节中我们使用 python manage.py runserver 来运行服务器。这只适用测试环境中使用。正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, Nginx, lighttpd等,菜鸟教程中是以 Nginx 为例。现在我用Apache作为服务器进行部署。
环境:Windows 10
python:3.6-64位
Django:2.0.5
Apache:2.4-64位
虽然在网上也有很多在Windows上部署的文章,但是我在部署的时候也遇到了很多问题,搜索了大量的资料才得以解决。所以在这里记录一下。
#1. 安装Apache2.4
地址:http://www.apachelounge.com/download/
下载vc_redist_x64/86.exe.和httpd-2.4.33-win64-VC14.zip
如果你也是用的python3.6,这里一定要选择VC14版本进行下载。后面再做解释。
##1.1 vc_redist_x64/86.exe
直接安装:
##1.2 Apache
环境变量
解压下载的压缩文件httpd-2.4.33-win64-VC14.zip并配置环境变量:path增加…Apache24\bin; (视自己的解压目录而定)
配置文件
修改配置文件: Apache24\conf\httpd.conf :
这里的端口号可自行设置
服务名也可自己设置,端口号与Listen中一致
测试
在Apache\Apache24\bin使用cmd>httpd 。然后访问Listen中配置的地址加index.html。如我的为:
显示**It works!**表示安装成功。
#2. mod_wsgi
安装mod_wsgi。
先安装:pip install wheel。
然后在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi中下载对应你版本的whl文件,如根据我的环境,我选择了下面这个文件
看吧,python3.6 只有VC14版本的Apache能匹配,这都是我走过的弯路。。。
下载了之后 使用pip 安装(这步我是把文件复制到python的scripts目录下执行的):pip install mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win_amd64.whl
但是我的还是还是报了错:
mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win_amd64.whl is not a supported wheel on this platform.
在网上查了资料,.whl文件的命名格式很严格,我们在网上下载的文件不符合。因此查看pip的支持:
import pip._internal.pep425tags as my
print(my.get_supported())
得到
[('cp36', 'cp36m', 'win32'), ('cp36', 'none', 'win32'),
('py3', 'none', 'win32'), ('cp36', 'none', 'any'),
('py3', 'none', 'any'), ('py35', 'none', 'any'),
('py34', 'none', 'any'), ('py33', 'none', 'any'),
('py32', 'none', 'any'), ('py31', 'none', 'any'),
('py30', 'none', 'any')]
所以安装这个规则,我把文件更改为mod_wsgi-4.6.4+ap24vc14-cp36-cp36m-win32.whl
再次使用pip安装,安装成功。
3. 配置项目工程
配置Apache2.4、mod_wsgi、django项目工程 。
##3.1 配置mod_wsgi
网上很多教程指出,将 \mod_wsgi.so 拷贝至 Apache24\modules下 。
然后在httpd.conf中添加mod_wsgi.so 模块
LoadModule wsgi_module modules/mod_wsgi.so
如果你找得到这个方法,就这样做。
但是我这里找不到mod_wsgi.so文件,再次查阅资料得到解决方法。
在python的scripts目录下执行命令
mod_wsgi-express module-config
得到三行输出:
LoadFile "d:/environment/python36/python36.dll"
LoadModule wsgi_module "d:/environment/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"
WSGIPythonHome "d:/environment/python36"
将这三行输出添加到httpd.conf中取代 LoadModule wsgi_module modules/mod_wsgi.so
3.2 配置Django
指定静态资源路径
Alias /statics/ D:/workspace/workspaceDjango/testApp/templates/
<Directory D:/workspace/workspaceDjango/testApp/templates>
Require all granted
</Directory>
指定项目的wsgi.py配置文件路径
WSGIScriptAlias / D:/workspace/workspaceDjango/testApp/testApp/wsgi.py
指定项目路径
WSGIPythonPath D:/workspace/workspaceDjango/testApp
<Directory D:/workspace/workspaceDjango/testApp/testApp>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
3.3 编辑setting.py
编辑项目中的setting.py文件