初学django,想在windows下,用apache和mod_wsgi部署一个简单的django学习环境,没想到由于操作系统用的是win8 64位和python3,安装的并不顺利,本文即对安装过程的总结。
搭建环境及准备
- 操作系统;win8.1 64位
- python版本:pyton3.3.2 64位
- django版本:django-1.5.4
- 准备一个可以runserver下正常用的django project
注意上面python安装的版本是64位的。
安装apache
这里需要安装apche64位版本,否则wsgi会不认,无法加载,造成apche无法启动。可以直接到awamp下载一个套件,或者到aapachelounge下载已经编译好的单独的64位apache,本文的apache版本是2.4.4。wamp正常的安装就可以了,apachelounge的应该是绿色版的。
安装mod_wsgi
官方最新的版本是3.4,只有python2.6和2.7的,没有python3的。我们不用自己编译(在windows下几乎没有编译成功过),有现成的,到http://www.lfd.uci.edu/下载需要的版本(这里有很多windows下的编译好的扩展),根据本文环境选择mod_wsgi-3.4.ap24.win32-py3.3.zip,之后搭建成功后,访问网页,得到的http头里的server显示是mod_wsgi/3.5-BRANC。
解压压缩包,把mod_wsgi.so文件拷进apache安装路径的modules文件夹下,打开httpd.conf,添加一行LoadModule wsgi_module modules/mod_wsgi.so
。cmd命令行窗口,执行apache的bin目录下的httpd,如果没有任何报错,应该就正常加载了。
部署django项目
假设你用django-admin.py startproject mysite
,创建一个mysite的项目,它的目录结构如下:
假设你的项目在D盘根目录,我们就此来配置项目。
添加程序入口文件
在mysite项目根目录,新建apche目录,这个目录在manage.py那个文件所在的目录,在其下面新建django.wsgi,将来WSGI连接它来代替默认的mange.py,作为网站的入口配置。在其内添加如下代码:
import os import sys #添加setting文件地址 os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' #添加项目路径到sys.path sys.path.append('D:/mysite') import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
上面的代码只修改为你项目的地址和对应名称,后面conf配置的时候用到这个文件的地址。
配置虚拟主机
因为可能同时要运行多个项目,而且还有其他语言的项目,所以用vhost来配置是最方便的。到apache安装目录的conf\extra里找到httpd-vhosts.conf文件,这个文件是虚拟主机的配置文件【1】,编辑打开,贴入如下代码:
#如果是80端口这句不用写,主配置文件httpd.conf已经有了 #Listen 80 #这句貌似也不用,2.4的不需要这句 #NameVirtualHost *:80 #配置端口号,*可以换成主机ip,如果ip不固定,就有*就好了,很方便 <VirtualHost *:80> #配置访问的域名 ServerName example.com #配置主目录权限 <Directory /> Options FollowSymLinks AllowOverride Order allow,deny Allow from all </Directory> #配置项目配置文件目录权限,禁止访问 <Directory "D:/mysite/mysite/"> Order Deny,Allow Deny from all </Directory> #关键一句配置项目入口点 WSGIScriptAlias / "D:/mysite/apache/django.wsgi" #配置管理员静态文件目录,及其权限 Alias /static/admin D:/Python33/Lib/site-packages/django-1.5.4-py3.3.egg/django/contrib/admin/static/admin <Directory "D:/Python33/Lib/site-packages/django-1.5.4-py3.3.egg/django/contrib/admin/static/admin/"> Order allow,deny Allow from all </Directory> #配置静态文件目录,及其权限 Alias /static D:/mysite/static/ <Directory "D:/mysite/static/"> Order allow,deny Allow from all </Directory> </VirtualHost>
下面说一说上面代码里应该注意的地方:
- 首先,项目结构如前面图片,假设保存在D盘,前面几句是主机地址、域名以及涉及目录权限的相关设置,到达WSGIScriptAlias这里,就填上刚才添加的django.wsgi的地址,这里是配置成功与否的关键。
- 凡是不想让wsgi处理,按实际文件夹结构访问的,都可以用Alias来添加,这样访问的时候就不会去找urls里配view了。添加的时候注意Alias第一个目录后面不要用
/
结尾。 【2】 本例以static目录为静态文件夹 - 本例使用static为静态文件目录,因为django1.5的admin的静态文件地址为
域名/stacic/admin/*
。另外注意的是django1.5不在使用media文件存放静态文件,改为contrib/admin/static/admin了。如果你想把其他静态文件也放在static下面,记住Alias /static
一定要在Alias /static/admin
后面,要不然由于优先级造成短路,登陆admin的时候,admin的静态文件永远也不会加载的。
最后到编辑httpd.conf文件,取消Include conf/extra/httpd-vhosts.conf
的注释,并保存。
至此,部署完成,当然这只是windows下用python3学django的一个学习环境,仅供学习用。另外,wsgi有两种运行模式:一种是daemon mode,一种是embedded mode。在daemon mode下,每次修改不用重启apche,windows下不支持,修改完代码只能重启apche,还有就是不要忘了吧settings.py里的ALLOWED_HOSTS填上你的域名。
mod_wsgi.so 文件解压后并没有啊?能告知下这个文件是怎么生成的吗?
我的解压方式 是:mod_wsgi‑4.5.15+ap24vc14‑cp36‑cp36m‑win_amd64.whl 将.whl更改为.zip 后直接解压
更改后直接解压,也没有.so文件。这应该怎么破?
好长时间没有看过了,是不是现在用pip install 安装,你可以看看解压后的文件DESCRIPTION.rst,看看里面怎么说的
方便留一下您的联系方式吗?有几个部署方面的问题想请教您,我是部署在windows上的本地django应用。