欢迎来到NiceSpace!祝大家开心每一天!
  • mod_wsgi
  • apache
  • django
  • python
Apache+mod_wsgi本地部署Django(Windows系统)

搭建博客网站,开始用Django内置的manage.py runserver 0.0.0.0:8080来本地搭建,本地数据库,逻辑和模板都写好并跑通后上网查找接下来需要将自己的程序托管到Apache,Apache的组件中mod_wsgi对python的支持最好,所以本着跟随主流,决定用Apache+mod_wsgi部署自己的网站。其中遇到了很多坑,折磨的很痛苦。
 

一、安装Apache


有2.2x和2.4x两种版本,自己下的2.4x,但是官网上没有windows的release版,因此只能从目前网络中获取release版,或者自己编译一个release版,但是就像官网说的一样,将Apache编译到windows真的是一件棘手的事情。编译教程:http://man.chinaunix.net/newsoft/ApacheManual/platform/win_compiling.html。release版本下载:,VC10(vs2012编译),VC14(vs2015编译),VC9(vs2008编译):http://www.apachehaus.com/cgi-bin/download.plx,
VC14:https://www.apachelounge.com/download/。上网查找都说这个需要跟操作系统有关,win64位下载x64的,win32的下载x86的。并且与python版本有关,一般python2.7下载VC9,python3.x下载VC10, 因此我下载了httpd-2.4.25-x64-r1.zip(VC9)(因此埋下了巨坑!)下载好后解压到了与项目目录的同级目录,我的项目目录是D:/WebSite/blog, 所以解压后Apache在D:\WebSite\Apache24,之后修改conf/httpd.conf文件,
如下:

 

  1. ...  
  2. #其实这里改好后凡是引用该变量的地方不需要再更换了,但是自己还是按照网上说的都给换了。  
  3. Define SRVROOT "D:/WebSite/Apache24"    
  4. ServerRoot "D:/WebSite/Apache24"  
  5. ...  
  6. #修改端口号,但是你监听的端口号很有可能被其他进程占用了,所以在监听时你应该确保该端口号没有被占用!  
  7. Listen 127.0.0.1:8089   
  8. ...  
  9. #这里2.4是打开的,2.2注释掉了,需要你打开否则Apache start时会失败。  
  10. ServerName localhost:8089 
  11. ...  
  12. DocumentRoot "D:/WebSite/Apache24/htdocs"  
  13. <Directory "D:/WebSite/Apache24/htdocs">  
  14. ...  
  15. ScriptAlias /cgi-bin/ "D:/WebSite/Apache24/cgi-bin/"  
  16. ...  
  17. <Directory "D:/WebSite/Apache24/cgi-bin">  
  18.    AllowOverride None  
  19.    Options None  
  20.    Require all granted  
  21. </Directory>  
  22. ...  

以上这些就是启动Apache的基本修改,主要是端口号和路径,下面准备启动Apache
cmd下进入到D:/WebSite/Apache24/bin
输入:httpd.exe -k install#安装Apache服务,如果报错根据错误提示找原因(我没报错。。)
安装后输入:httpd.exe -k start 这个地方比较容易失败,主要的原因就是上面的配置有问题。
启动成功后在自己的浏览器中输入http://127.0.0.1:8089(我监听的是8089),如果提示it works或者Apache haus的页面表示成功了。

至此Apache的安装就OK了。
 

二、安装mod_wsgi


安装这个东西折磨了自己两天,茶不思饭不想。。
网上各种教程各种博客文章都说该模块下载地址是http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi,这里面有适合的mod_wsgi.so,下载后扔到Apache的modules下就好了,然后我进去找到适合我的版本,我本地配置是Apache2.4(vc9,x64), Python2.7,windows64位系统,所以我下载了mod_wsgi-4.5.15+ap24vc9-cp27-cp27m-win_amd64.whl,如果你的Python安装了wheel可以用wheel解压 wheel umpack xxx.whl,其实直接把whl换成zip用winrar也可以。。解压后我几乎翻遍了整个文件夹,mod_wsgi.so呢?好吧,可能以前的老版本该网址是收存mod_wsgi.so的,总之在这里没找到。。之后就一路苦逼的找mod_wsgi.so,找到了几个下载地址。https://github.com/GrahamDumpleton/mod_wsgi/releases/download/4.4.12/mod_wsgi-windows-4.4.12.tar.gz,貌似只有4.4.12有现成的二进制拓展库,其他的需要自己编。CSDN.NET:http://www.csdn.net/tag/mod_wsgi/download 有下载地址,其中http://download.csdn.net/detail/smartcore/9153731
是可以用的,其他的没有测试。有了mod_wsgi.so就按照教程继续配置httpd.conf文件,
如下:

 

  1. ...  
  2. LoadModule wsgi_module modules/mod_wsgi.so  
  3. #项目的wsgi.py配置文件路径  
  4. WSGIScriptAlias / D:/WebSite/blog/blog/wsgi.py  
  5.   
  6.   
  7. #项目路径  
  8. WSGIPythonPath D:/WebSite/blog  
  9.   
  10.   
  11. <Directory D:/WebSite/blog/blog>  
  12. <Files wsgi.py>  
  13.     Require all granted  
  14. </Files>  
  15. </Directory>  
  16. ...  

以上是加入好mod_wsgi.so后的修改,之后噩梦就开始了。。
cmd进入到D:/WebSite/Apache24/bin下输入httpd.exe -k start
提示cannot load modules/mod_wsgi.so into server,\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\a8\xb5\xc4\xa3\xbf\xe9\xa1\xa3。
然后就蒙了,以为我找的mod_wsgi.so是不对的?然后自己换了各种地址下的mod_wsgi.so,最后都报这个错误。后续就是苦逼的各种看文档各种尝试各种找资料,自己编译mod_wsgi.so,尝试换成Apache2.2,最后都没用。报的错误原因还是16进制数字,用python直接print这一串16进制数字,输出:无法找到指定模块,有了错误原因就继续上网搜,在一个网站上有这么一个回答:
1.那你没有隐藏的扩展,并已两次增加了扩展。
2.那mod_wsgi.so文件可读到任何Apache服务用户?。
3.那你的Apache是32位?
4.那你的Python是32位?
5.已安装你的Python为所有用户?,而不仅仅是用户安装它作为。
自己逐一对照了之后想到这里说的是你的Python是32位,而不是操作系统是32位,可是网上的教程要么只说64位下x64要么说windows64位下x64,没有说python是32位还是64位,我自己也没注意自己的python是64位还是32位,进入cmd下Python回车看到:python 2.7.10(default, may 23 2015,09:40:32)[MSC v.1500 32 bit(intel)] on win32,一看自己的Python装的是32位的,我的操作系统是64位的,好吧,重新下载了一个Apache2.4(VC9,x86),按照上面重新配置,最后httpd.exe -k start,启动成功!所以坑就在了这里,没人强调你的python是32还是64,一般都强调了你的Python,你的Apache,你的mod_wsgi.so最好编译环境要统一,否则很可能起不来。
 

三、最后


启动了之后再浏览器上键入http:127.0.0.1:8089可以看到了自己的网页,但是没有css元素,因为之前静态文件是Django来处理的,现在托管了Apache,静态文件需要
Apache来处理,在httpd.conf下配置:

 

  1. ...  
  2. Alias /static/ D:/WebSite/blog/static/  
  3.   
  4. <Directory D:/WebSite/blog/static/>  
  5.     Require all granted  
  6. </Directory>  
  7. ...  

Django有收集静态文件的方式,我将所有setting.py安装的app所需的静态文件都收集到了D:/WebSite/blog/static/下,如何收集看官方文档。之后就可以看到带有css,图片,js的网站了。

随机文章
lua的sort排序 3D图形学总结(二)—相机坐标转换(欧拉相机) 3D图形学总结(十一)—深度缓存 chrome javascript程序拓展(订餐插件) 3D图形学总结(十二)—纹理滤波
推荐文章