本文介绍了在Centos系统下搭建Django站点的流程。
一.安装环境
本文适合环境:
centOS 5/6
python2.7+-
Django1.5
mod_wsgi
apache2.2/2.4
其中由于mod_python对python2.7没有提供支持,因此采用mod_wsgi代替mod_python.1.安装apache服务器:
# yum install -y httpd httpd-devel(一般系统已自带apache服务器,安装在/etc/httpd目录下)
http-devel 是为了apxs,yum后你可以whereis apxs去寻找他,然后后边编译使用。
2.安装python2.7
(我编译后不能import zlib,先要
# yum install -y zlib zlib-devel
)
centos系统自带的python基本是小于2.6版本的,你可以用自带的编译,可能会产生错误,尽量编译2.7吧。【假设所有下载的压缩文件放在~(家目录)目录下。】
#tar -xzvf Python-2.7.tar.bz2 #cd Python-2.7 #.configure --enable-shared (!!!后面安装mysql-python时,python必须采用共享方式)加了这个参数--enable-shared会出现运行找不到 libpython2.5.so.1.0 这个库,在编辑 目录下把这个文件复制到 /usr/lib下就可以,然后可加入链接到 /usr/lib64目录。如果在有错把/usr/local/lib and /usr/local/lib64 都做lin(快捷方式)
一般安装路径是:/usr/local/lib/python2.7。安装好后执行命令#python,若输出版本号,说明成功。
错误1:/usr/local/lib/python2.7/config/libpython2.7.a: could not read symbols: Bad value collect2ld returned 1 exit status apxs:Error: Command failed with rc=65536
=》因为安装python的时候,没有 ./configure --enable-shared
或
更改在编译目录下src文件夹下connobject.c 142行左右
!(b == APR_BRIGADE_SENTINEL(b) ||
改为
!(b == APR_BRIGADE_SENTINEL(bb) ||
(我都遇到了)
错误2:python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory =》新建文件: #vim /etc/ld.so.conf.d/python2.7.conf
加入内容: /usr/local/lib保存退出后运行: ldconfig 再执行#python,测试是否成功。
上边一定要注意,因为编译wsgi还可能会报一样的错。
3. 安装Django 【下载Django压缩文件至~目录】
#tar -xzvf Django1.4 #cd Django1.4 #python setup.py install
测试:
#python >>>import django >>>django.VERSION
4. 安装mod_wsgi
a。安装之前,先进行apache的apxs扩展:(上边已经装了)
# yum install httpd-devel
错误:有可能发现yum命令用不了,提示:No module named yum
=》原因是yum命令依赖python2.4,现在用了2.7之后,yum命令就用不了了,解决方法如下:
#vim /usr/bin/yum
将 #!/usr/bin/python 修改为 #!/usr/bin/python2.4
其他错误:bad interpreter: No such file or directory
b。安装mod_wsgi,mod_wsgi压缩包也在/var目录下,同样采用源码【链接】安装
在这我卡了好长时间。终于编译mod_wgsi成功了。。。。。。。。
这块看你改不改编译的python作为你的默认python了,我直接用
# alias python="python2.7" #你可以把这个写在/etc/profile最后边,然后# source /etc/profile这样能安全点吧。
# ./configure --with-python=/usr/local/bin/python2.7 【关联python2.7】 # make # make install
有可能报错。
缺啥就--with-。
找不到就whereis一下
尽量完整。
5,开始配置。
在httpd.conf文件中加入
LoadModule wsgi_module modules/mod_wsgi.so
重启即完成安装。
然后部署django
首先先看一下tree
[root@localhost html]# tree /var/www/html/ #在这django-admin.py startproject mysite /var/www/html/ #除了标记都是生成的。 └── mysite ├── manage.py ├── mysite │ ├── helloworld.py #自己测试写的一个hello,不写可以,成功后会显示默认 │ ├── helloworld.pyc │ ├── __init__.py │ ├── __init__.pyc │ ├── settings.py │ ├── settings.pyc │ ├── urls.py │ ├── urls.pyc │ ├── wsgi.py │ └── wsgi.pyc #不动 └── wsgi └── django.wsgi #自己写的django.wsgi 内容
import os import sys sys.path.append('/var/www/html/mysite')#不写这个老说配置文件不再环境变量里,就不在环境变量里写了,在这写 os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' #配置文件。 os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs' current_dir = os.path.dirname(__file__) if current_dir not in sys.path: sys.path.append(current_dir) import django.core.handlers.wsgi #!! application = django.core.handlers.wsgi.WSGIHandler() #!!
httpd.conf配置文件中添加的内容,用来连接django.wsgi,使工程被apache加载。
咱们httpd不是编译的。有这个目录。
[root@localhost mysite]# ls /etc/httpd/conf.d/apache会加载他,新建配置文件wsgi.conf
# LoadModule wsgi_module modules/mod_wsgi.so #在httpd.conf写了的话这就注释掉。 WSGIScriptAlias / "/var/www/html/mysite/wsgi/django.wsgi" <Directory "/var/www/html/mysite"> #网站家目录。 Order Deny,Allow Allow from all </Directory>
http.conf
更改
DocumentRoot "/var/www/html/mysite" ServerName 127.0.0.1:80
然后因为静态文件放在static目录中,所以要在httpd.conf中加入static的映射:
Alias /static H:/pythondev/webDSS/static
如果使用django的后台管理的话,还必须在httpd.conf中加入:
Alias /static/admin E:/Python27/Lib/site-packages/django/contrib/admin/media <Directory "E:/Python27/Lib/site-packages/django/contrib/admin/media"> Order Deny,Allow Allow from all </Directory>