已经搭了无数遍,但是每次都忘了,要找回资料去做,太烦。
windows下:
软件版本:
这两种系统是不同的:32bit 和 64bit,所以千万一定务必必须要知道你是在哪个位数系统下搭站点的。
下面是我在两个不同的环境下的尝试
32bit:
0. windows7 32bit/64bit、windows8.1 64bit --这三个系统我都试过使用32位的方法搭,没有问题
1. python2.7.10 32 bit
https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi
2. apache2.2 32bit
http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.31-win32-src.zip
3. mod_wsgi for python27 32bit
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 下载(mod_wsgi-4.4.21+ap24vc9-cp27-none-win32.whl),相信我,和apache版本、vc runtime版本无关。
4. Django1.7.1 这个不重要啦,自己去下载和配置吧
64bit:
0. windows2008 R2 64bit --2008只有64位的
1. python2.7.8 64bit
https://www.python.org/ftp/python/2.7.8/python-2.7.8.amd64.msi 这个扯淡的windows2008除了2.7.8这个版本,其它版本都报错,客官不信可以试试。
2. apache2.2 64bit
http://download.csdn.net/detail/xuboke/4578999 话说我在官网没有找到apache的64位版本,具体原因可能是我《文献检索》这门课没有学好。
3. mod_wsgi for python27 64bit
http://download.csdn.net/detail/qustwr/8095291 不知道这个小伙伴是怎么找到支持py27的64位mod_wsgi的。
4. Django1.7.1 这个不重要啦,自己去下载和配置吧
如果嫌麻烦,apache和mod_wsgi我都已经打包好了,在以下两个地址下载,免积分:
CSDN资源:apache2.2 with mod_wsgi for win32_X86 --32位专用
CSDN资源:apache2.2 with mod_wsgi for amd64_X64 --64位专用
而且这两个资源都是我本机测试站点的配置,如果项目名和路径都和我一致的话(这不是扯淡么),就可以直接用。
-----------------------------2016-01-22更新-开始----------------------------------------
昨天装了win10,试着玩玩,无意中发现这个python的版本还是有限制的。
在win10 64bit 下安装了python2.7.11 X64,启动apache没有报错。
但是浏览http://localhost:8000的时候卡了很久,去apache的日志看了一下,error.log日志不断在刷新……
大致内容就是没有找到module里面的site方法,果断卸了2.7.11装2.7.8(手头有,懒得下别的版本了)。
启动成功。
apache日志如下:
[Fri Jan 22 15:44:34 2016] [warn] mod_wsgi: Compiled for Python/2.7.6.
[Fri Jan 22 15:44:34 2016] [warn] mod_wsgi: Runtime using Python/2.7.11.
[Fri Jan 22 15:44:34 2016] [notice] Apache/2.2.19 (Win64) mod_wsgi/3.5 Python/2.7.11 configured -- resuming normal operations
[Fri Jan 22 15:44:34 2016] [notice] Server built: May 28 2011 15:18:56
[Fri Jan 22 15:44:34 2016] [notice] Parent: Created child process 2788
[Fri Jan 22 15:44:34 2016] [warn] mod_wsgi: Compiled for Python/2.7.6.
[Fri Jan 22 15:44:34 2016] [warn] mod_wsgi: Runtime using Python/2.7.11.
[Fri Jan 22 15:44:34 2016] [notice] Child 2788: Child process is running
ImportError: No module named site
[Fri Jan 22 15:44:34 2016] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Fri Jan 22 15:44:34 2016] [notice] Parent: Child process exited successfully.
[Fri Jan 22 15:53:14 2016] [warn] mod_wsgi: Compiled for Python/2.7.6.
[Fri Jan 22 15:53:14 2016] [warn] mod_wsgi: Runtime using Python/2.7.8.
[Fri Jan 22 15:53:14 2016] [notice] Apache/2.2.19 (Win64) mod_wsgi/3.5 Python/2.7.8 configured -- resuming normal operations
[Fri Jan 22 15:53:14 2016] [notice] Server built: May 28 2011 15:18:56
[Fri Jan 22 15:53:14 2016] [notice] Parent: Created child process 2012
[Fri Jan 22 15:53:14 2016] [warn] mod_wsgi: Compiled for Python/2.7.6.
[Fri Jan 22 15:53:14 2016] [warn] mod_wsgi: Runtime using Python/2.7.8.
[Fri Jan 22 15:53:14 2016] [notice] Child 2012: Child process is running
[Fri Jan 22 15:53:14 2016] [notice] Child 2012: Acquired the start mutex.
[Fri Jan 22 15:53:14 2016] [notice] Child 2012: Starting 64 worker threads.
[Fri Jan 22 15:53:14 2016] [notice] Child 2012: Starting thread to listen on port 8000.
-----------------------------2016-01-22更新-结束----------------------------------------
操作步骤:
说真的,配置比较简单,难在软件,你知道么。
首先把mod_wsgi解压后放在apache的modules目录下,一般名字就叫mod_wsgi.so。
剩下的基本就是配置apache,和下面linxu的第1、3点基本是一样的,我这里就重复说一下吧。
首先,讲讲我项目的基本存放路径:
D:/TestDjango/ --这个是manage.py存放的路径
D:/TestDjango/TestApp/static --这个是js等文件存放的根路径
apache:
D:/apache2.2 --32bit
D:/httpd-2.2-x64 --64bit
整个目录结构:
D:.
├─TestDjango
│ ├─TestDjango
│ ├─TestApp
│ │ ├─controls
│ │ ├─migrations
│ │ ├─static
│ │ │ ├─dist
│ │ │ │ ├─css
│ │ │ │ ├─img
│ │ │ │ └─js
│ │ │ ├─plugins
│ │ │ └─template
│ │ └─templates
│ └─upload
├─apache2.2
│ ├─bin
│ ├─conf
│ │ └─extra
│ ├─htdocs
│ ├─logs
│ └─modules
└─httpd-2.2-x64
├─bin
├─conf
│ └─extra
├─error
│ └─include
├─htdocs
├─logs
└─modules
和我们配置相关的目录我都打了红色。
配置文件是通用的,这里以32位为例。
D:/apache2.2/conf/httpd.conf:
-----------------------------------------------------------------------
……
ServerRoot "D:/apache2.2"
……
Listen 8000
LoadModule wsgi_module modules/mod_wsgi_py27_win32.so #在LoadModule那一块的最后加上这一句,当然,注意mod_wsgi的存放位置和名字,请按实际的来。
……
DocumentRoot "D:/apache2.2/htdocs"
……
<Directory "D:/apache2.2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
……
<IfModule alias_module>
ScriptAlias /cgi-bin/ "D:/apache2.2/cgi-bin/"
</IfModule>
……
<Directory "D:/apache2.2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
……
Include conf/extra/Django.conf #在文件的最后加上这一句
-----------------------------------------------------------------------
好了,然后就是在conf/extra/下面新建一个Django.conf 文档:
D:/apache2.2/conf/extra/Django.conf:
-----------------------------------------------------
NameVirtualHost *:8000
<VirtualHost *:8000>
ServerAdmin [email protected]
DocumentRoot "D:/TestDjango/"
ServerName www.TestDjango.com
ErrorLog "logs/TestDjango_error.log"
CustomLog "logs/TestDjango_access.log" common
WSGIScriptAlias / D:/TestDjango/TestDjango/wsgi.py
</VirtualHost>
WSGIPythonPath D:/TestDjango
<Directory "D:/TestDjango">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /static D:/TestDjango/TestApp/static
<Location "/static/">
Order allow,deny
Allow from all
</Location>
-----------------------------------------------------
就是照着改,基本都能看懂,我就不多做解释了。
改完后,打开cmd窗口(还是以32位的为例,64位完全一样):
C:\Users\Administrator>d:
D:\>cd D:\apache2.2\bin
D:\apache2.2\bin>httpd -k install -n "TestDjango" #安装服务服务名是TestDjango,自己YY一个也行
D:\apache2.2\bin>httpd -k start -n "TestDjango" #启动服务
如果至此没有报错,浏览器打开localhos:8000就可以看到本文最后面的截图了。
=====================================可爱到惨无人道的分隔符======================================================
好了,重点讲一下Linux下的配置:
软件版本:
docker_centos6.x_64bit_minimal
httpd.x86_64_2.2.15-47.el6.centos.1
mod_wsgi-4.4.21
python2.7.11
django1.7.1
操作步骤:
1. 安装apache,并配置
yum install apache (正常来说,默认已经装好了apache2.2版本的)
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.20160103
修改内容如下:
……
ServerRoot "/etc/httpd" #确认目录就好,一般默认安装之后就不用改了。
……
Listen 8000
……
ServerName www.HelloWorld.com:8000
……
DocumentRoot "/var/www/html" #默认情况下不用改
……
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #默认情况下不用改
……
<Directory "/var/www/cgi-bin"> #默认情况下不用改
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
上面写了一大堆废话,其实就是改两个地方,当然,如果你的配置曾经变动过,那么就需要相应地修改回来了。
1. Listen *:8000 #这个是监听的端口
2. ServerName www.HelloWorld.com:8000 #域名+端口号,其实没有绑定域名的情况下,可以不配置的哟(会报warning)
配置完之后就可以测试一下apache是否能正常用了:
service httpd start
在浏览器输入:http://localhost:8000/
可以看到Apache的默认主页:
2. 安装Mod_wsgi 及 相关配置:
重头戏来了,这个步骤搞了我两晚。
先告诉大家,这一步需要先安装apache的开发包httpd-devel,而且要重新编译你的python(用自带的2.6.6版本的话,直接yum install mod_wsgi一下就好了,不用这么麻烦。)
首先第一个难点在于下载,Mod_wsgi的下载实在太晦涩了,找了n久,最后突然想起来不如上github上搜索一下,果然有源码:
https://github.com/GrahamDumpleton/mod_wsgi/tree/master
然后安装的时候会接连报两个错:
apxs: command not found #需要安装httpd的开发包,上面已经安装
apxs:Error: Command failed with rc=65536 #需要重装python2.7,加入参数--enable-shared(下面红色字体)
全部命令如下:
yum install httpd-devel #安装apache的开发包httpd-devel
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz
tar -xvf Python-2.7.11.tar.xz
cd Python-2.7.11
./configure --enable-shared
make
make install
make clean
make distclean
#这部分选做########################################
#如果你的系统也是从2.6.6升级到2.7的话,就照做吧:
mv /usr/bin/python /usr/bin/python2.6.6 #备份2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python #生成软连接
python -V #确认版本,如果报错就执行一下下面红色的两行
cp /usr/bin/yum /usr/bin/yum.20160104 #备份程序
sed -i 's/\#\!\/usr\/bin\/python/\#\!\/usr\/bin\/python2.6.6/' /usr/bin/yum #修改程序头文件,python2.7升级完毕
#如果执行python的时候报错python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or
#那么下面这两行就执行一下
echo '/usr/local/lib' > /etc/ld.so.conf.d/python2.7.conf
ldconfig
#选做结束##########################################
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/master.zip
mv master.zip mod_wsgi-4.4.21.zip
unzip mod_wsgi-4.4.21.zip
cd mod_wsgi-master
./configure
make
make install
make clean
make distclean
cp /usr/local/lib/python2.7/site-packages/mod_wsgi-4.4.21-py2.7-linux-x86_64.egg/mod_wsgi/server/mod_wsgi-py27.so /etc/httpd/modules/
#上面这个路径贼长了,自行确认一下吧,版本可能会有差异。
至此,Mod_wsgi安装完毕
3. 配置 apache 和 django 项目
我的目录:
apache:/etc/httpd
django:/Data/HelloWorld #注意,这里是存放manage.py这个文件的目录
首先,加载Mod_wsgi:LoadModule wsgi_module modules/mod_wsgi-py27.so
接下来有两种配置方法:
1) 把下面的内容直接贴到httpd.conf最后。
2) 在conf下面新建一个文件,例如HelloWorld.conf,然后再httpd.conf最后一行加上:include conf/HelloWorld.conf
NameVirtualHost *:8000
<VirtualHost *:8000>
ServerAdmin [email protected]
DocumentRoot "/Data/HelloWorld"
ServerName www.HelloWorld.com
ErrorLog "logs/HelloWorld_django_error.log"
CustomLog "logs/HelloWorld_django_access.log" common
WSGIScriptAlias / /Data/HelloWorld/HelloWorld/wsgi.py
</VirtualHost>
WSGIPythonPath /Data/HelloWorld
<Directory "/Data/HelloWorld">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/Data/HelloWorld/HelloWorld">
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
其中第2步真的是关键,没有弄好,后面的配置都是白搭。
之前弄不好,是因为我直接用yum install mod_wsgi来安装Mod_wsgi,安装是很顺利,但是引发了无限的问题!
具体原因嘛,主要是因为系统自带python2.6.6,而我升级了python2.7,安装Mod_wsgi是用yum的,而yum只认python2.6.6,而且2.6.6默认是不share的,所以必须重新编译才行。
然后别忘了重启一下apache服务:
service httpd restart
看到下面这个页面我真是好感动: