apache 2.2
django 1.6.2
mod_wsgi 3.4
python 2.7
sqlite 3.6.2
1,linux机器上已部署好apache和python,安装sqlite后要重装python,再安装django和mod_wsgi。
2,安装sqlite3,和一般软件安装流程一样:
解压,进入解压后的文件夹,运行 ./configure --prefix=/home/work/sqlite3
运行:make
运行:make install
重装python:
在Python解压后的文件中,setup.py中修改:
在 sqlite_inc_paths 中添加sqlite的include 路径(后两行):
sqlite_inc_paths = [
'/usr/include/sqlite3',
'/usr/local/include',
'/usr/local/include/sqlite',
'/usr/local/include/sqlite3',
'/home/work/sqlite/include',
'/home/work/sqlite/include/sqlite3',
]
安装python:
./configure --enable-shared --prefix=/home/work/python
make
make install
若没有“--enable-shared“编译一些共享库,则import一些共享库时会报错:libpython2.7.so.1.0: cannot open shared object file: No such file or directory
在python中import sqlite3 如果没有报错,则表示安装成功。
3,安装mod_wsgi ,参照官网文档(https://code.google.com/p/modwsgi/wiki/QuickInstallationGuide):
解压,进入解压后的文件夹,运行(需要指定apx和python路径)./configure--with-apxs=/usr/local/apache/bin/apxs --with-python=/home/work/python/bin/python
make
make install
安装成功后,apache配置文件httpd.conf中会新增一行:LoadModule wsgi_module modules/mod_wsgi.so
4,测试mod_wsgi是否安装成功:
在/home/work/test/目录下创建test.wsgi,内容如下:
<span style="font-size:14px;"> def application(environ, start_response): status = '200 OK' output = 'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] </span>
在httpd.conf中配置:
<VirtualHost *:8087>
WSGIScriptAlias / "/home/work/test/test.wsgi"
<Directory "/home/work/test">
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
注意:
a. <Directory>...</Directory>是为wsgi文件所在目录打开访问权限,不配置的话会在apache中有error信息:client denied by server configuration
b. Deny,Allow 逗号后面没有空格,否则会有语法错误
c. 如果使用VirtualHost,要在httpd.conf添加Listen 8087打开端口;如果不使用,则不用输入第一行和最后一行,端口为apache默认端口。本文使用VirtualHost。
重启apache,用浏览器访问http://域名:端口号,可看到“Hello World!”
5,配置django项目
这里很容易出问题,是因为django不同版本创建的工程,目录结构不一样,django1.6创建的如下目录结构:
mysite #项目名称
|
--mysite
|
----__init__.py
|
----settings.py
|
----urls.py
|
----wsgi.py #wsgi配置文件,由django自动生成
|
--manage.py
修改wsgi.py:
<span style="font-size:14px;">import sys import os sys.path.append("/home/work/test/mysite") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "update.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()</span>
注意:因为项目文件夹和下面的子文件夹是同个名字,容易搞混,sys.path.append的路径,到项目文件夹就可以了,否则下一行的“update.settings”将找不到项目的setting.py文件,而引发“internal server error”.
httpd.conf配置修改如下:
<VirtualHost *:8087>
WSGIScriptAlias / "/home/work/test/mysite/mysite/wsgi.py"
<Directory "/home/work/test/mysite">
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
重启apache:
apachectl restart