debian系统上面配置lighttpd+django1.0

 前些日子项目终于结束,客户购买了服务器,开始设置环境和项目。于是顺路把实施过程中碰到的一些问题记录下来,方便大家参考。

系统实施软件以及硬件环境:

Django:1.02

Mysql:5.067

字符集:utf-8

Web-server:lighttpd1.4

Memcached:1.21

Os:debian4.0,linux2.6

硬件:intel cpu至强处理器,硬盘500g,4G内存

=====================================================

 

 

Liunx操作统安装

操作系统为debian4.0版本,拿到手时候已经按装好。由于硬件和系统提供商不知道项目实施的方向,因此安装的debian版本较低,而且安装了三个python版本,默认python版本是python2.4。由于这些原因,造成了后期安装的一些小麻烦和时间上的浪费。

如何将debianpython版本修改为目标python版本?

Debian系统中python可执行文件是/usr/bin/python,实际上是通过硬连接进行的。

网上建议采用update-alternatives来进行链接重新配置,这样可以避免旧的python版本链接被删除后引发的一些问题。

ln /usr/bin/python /usr/bin/python2.5

 

安装mysql数据库

Debian中安装mysql数据库有一点点特殊之处,就是debian操作系统提供了自己的Mysql维护和升级帐号,具体在/usr/mysql/debian.cnf

采用apt-get install mysql-server-5.0安装mysqldebian系统会自动提示你安装一些附加的软件包,可以根据自己的情况选择安装。

由于我的debian版本是4.0,以至于python-mysqldb的版本最高仅适合python2.4,而我的项目是基于python2.5的,因此我没有安装python-mysqldb的软件包。

安装完成后配置mysql.cnf文件:

[client]

#设置客户端访问字符集

default-character-set=utf8

[client]

[mysqld]

#设置mysql存储数据的文件夹目录。由于我们多采用了MyISAM引擎,因此数据都位于同一个硬盘分区,如果还有其他例如InnoDB引擎,则需要根据引擎特点划分数据分区

datadir=/home/mysqldata

#设置mysql字符集

default-character-set=utf8

character_set_server=utf8

#只允许从本机直接访问mysql数据库

bind-address            =127.0.0.1

#根据硬件配置情况,将key_buffer从默认的16M调整为256M,可加快利用主健的访问速度

Key_buffer             =256M

#16M->2M

Max_allowed_packet     =2M

#8->128

Thread_cache_size       =128

#64->512

Table_cache            =512

#16M->32M

Query_cache_size       =32M

 

在最底下加入:

skip-name-resolve

back_log=200

sort_buffer_size=4M

read_buffer_size=4M

log-slow-queries=slow.log #用来分析执行比较缓慢的sql语句,可以进行数据库方面的优化

 

安装lighttpd服务器

Apt-get install lighttpd*,选择适合自己的版本进行安装。

安装成功后,lighttpd的默认配置目录在/etc/lighttpd下面的lighttpd.conf中。

根据系统硬件的配置情况和操作系统特征,我们对lighttpd进行优化,加入以下:

server.event-handler       ="linux-sysepoll"

server.document-root       = "/var/www"

server.max-fds             =2048

server.stat-cache-engine   ="fam"

server.max-keep-alive-requests=512

server.max-keep-alive-idle =30

server.network-backend     ="linux-sendfile"

 

如果安装出现问题,可以查看/usr/log/lighttpd目录中的文件,根据项目的错误进行排除。

 

 

 

Lighttpd配置django的插件顺序如下:

mod_access

mod_alias

mod_compress

mod_rewrite

mod_accesslog

mod_evasive

 

mod_fastcgi插件将在fastcgi.conf进行配置。

打开/etc/lighttpd/conf-enabled/目录

vim fastcgi.conf创建或者修改当前文件:

global{server.modules +=("mod_fastcgi") }

#配置phpmysqladmin

$SERVER["socket"]=="IP:端口"{

server.document-root="/var/www/phpmyadmin"

fastcgi.server=(

".php"=>

 ((

"bin-path"=>"/usr/bin/php-cgi -c /etc/php5/cgi/php.ini",

"socket"=>"tmp/php.socket",

"max-procs"=>2,

"idle-timeout"=>20,

"bin-environment"=>(

"PHP_FCGI_CHILDREN"=>"4",

"PHP_FCGI_MAX_REQUESTS"=>"10000"

),

"bin-copy-environment"=>("PATH","SHELL","USER"),

"broken-scriptfilename"=>"enable"

))

)

}

#配置django项目

$HTTP["host"]=~"(^|/.)artdecochina/.com"{

server.name="域名"

server.document-root="/home/www/web"

server.port=80

fastcgi.server=(

"/artdeco.fcgi" =>

 ("main"=>(

#"host" =>"127.0.0.1",#tcp/ip访问方式

#"port" =>3040,

"socket"=>"/tmp/artdeco.sock",#inux管道访问方式

"check-local" =>"disable",

"bin-path"=>"/home/www/web/artdeco.fcgi",

"max-procs"=>20,

 "min=procs"=>10,

 "max-children"=>100,

))

)

#alias.url+=("/media/" => "/usr/lib/python2.5/site-packages/django/contrib/admin/media")

url.rewrite-once=(

#"^(/media.*)$"=>"$1/media/",

"^(/.*)$"=>"/artdeco.fcgi$1",

)

server.error-handler-404="/artdeco.fcgi"

}

 

安装phpmyadmin

Apt-get install phpmyadmin,系统会根据选项自动安装相关插件和软件包,如果没有,则将/etc/phpmyadmin中文件拷贝至/var/www目录,lighttpd已近配置好,可直接访问。

如果权限不足,可利用chown –R或者chmod –R修改访问权限。

 

安装django

Wget下载djangopython setup.py install安装django

 

安装python-mysqldb

Wget下载python-mysqldb for python2.5源码。

运行python setup.py build

进行编译

这一步可能出现许多问题,常见的有

问题1fatal: library -lmysqlclient_r: not found

这是因为当前平台上没有thread-safe library造成的。

解决办法是,在site.cfg文件中设置:

threadsafe = False

问题2mysql.h: No such file or directory

这是因为找不到mysql.h这个文件,一般来说,文件都存放在mysql安装目录的include目录下。

解决办法是,在site.cfg中指定mysql的路径。

 

另外需要注意的是,在编译时,一定要保证mysql安装目录中/bin目录下的文件都在PATH中,否则无法编译通过。

 

接下来执行

python setup.py install

安装完成。

 

比较诡异的是,有时即使安装完成,在python中执行

import MySQLdb

仍然可能出错:

libmysqlclient.so.12: cannot open shared object file: No such file or directory

 

遇到这种问题,需要在/usr/lib/下为libmysqlclient.so.12设置一个符号链接(这里假设mysql安装在/usr/local/mysql下)

ln -s /usr/lib/mysql/lib/libmysqlclient.so /usr/lib/libmysqlclient.so.12

再次执行

import MySQLdb

成功。

 

安装python-Imaging(Pil)

Wget python-Imageing源码进行编译

执行python setup.py build测试,查看缺少的模块进行安装

分配安装各个模块成功后,也有可能无法执行,需要对setup.py中相关目录进行设置

FREETYPE_ROOT = None

PEG_ROOT = "/usr/local/src/jpeg-6b"

TIFF_ROOT = None

ZLIB_ROOT = None

TCL_ROOT = "/usr/include/tcl8.4"

 

安装python-flup1.0+版本

Wget flup源码

Python setup.py install顺利安装

 

安装simple-json2.08

Wget simple-json源码,

python setup.py install 顺利安装

 

项目实施

设置fcgi文件

#!/usr/bin/python

#coding=utf-8

import sys,os

sys.path.insert(0,"/home/www")

os.chdir("/home/www/web")

os.environ['DJANGO_SETTINGS_MODULE']="settings"

from django.core.servers.fastcgi import runfastcgi

runfastcgi(method="threaded",daemonize="false")

 

配置项目settings文件中缓存选项

SESSION_COOKIE_AGE=60*60 #session过期时间

#缓存引擎

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

#session缓存

SESSION_CACHE = 'memcached://127.0.0.1:11211/' #

#数据缓存

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

#关闭浏览器session过期

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

#session作用范围

SESSION_COOKIE_DOMAIN='.域名

 

安装memcached服务

Apt-get install memcached服务

Apt-get install python-memcached访问api

配置memcached服务器:

vim /etc/memcached.conf

#最大缓存64M内存

-m 64

#访问端口11211

-p 11211

#只允许本地访问

-l 127.0.0.1

 

其他可能出现的问题

出现错误:

2009-02-22 06:09:47: (log.c.97) server started

2009-02-22 06:09:47: (mod_fastcgi.c.1051) the fastcgi-backend /work/www/test/main.py failed to start:

2009-02-22 06:09:47: (mod_fastcgi.c.1055) child exited with status 1 /work/www/test/main.py

2009-02-22 06:09:47: (mod_fastcgi.c.1058) If you're trying to run PHP as a FastCGI backend, make sure you're using the FastCGI-enabled version.

You can find out if it is the right one by executing 'php -v' and it should display '(cgi-fcgi)' in the output, NOT '(cgi)' NOR '(cli)'.

For more information, check http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI#preparing-php-as-a-fastcgi-programIf this is PHP on Gentoo, add 'fastcgi' to the USE flags.

2009-02-22 06:09:47: (mod_fastcgi.c.1365) [ERROR]: spawning fcgi failed.

 

出现原因:可能是python/lib文件中的egg文件异常或者混乱引起

 

egg 也有缓存?干啥用滴? 暂且不管干什么用的,为什么默认要把 PYTHON_EGG_CACHE 设置到 /root 目录下呢,因为我是以 root 用户安装的?好傻。 baidu google 查找“The following error occurred while trying to extract file(s) to the Python egg”,结果就多了。 可以修改缓存文件夹的位置或权限,也可以把 egg 直接解压。 权限已经让我纠结这么久了,我就不用这种方式了,直接解压: 解压前先从 easy-install.pth 中删除 MySQLdb egg 包路径:

 

 

# cd /usr/lib64/python2.5/site-packages/

# mkdir t

# unzip MySQL_python-1.2.2-py2.5-linux-x86_64.egg -d t

# rm MySQL_python-1.2.2-py2.5-linux-x86_64.egg

# mv t MySQL_python-1.2.2-py2.5-linux-x86_64.egg

 

sys.path 中可以看到,我的 flup 也是 egg,顺带也把它解压了:

 

# mkdir t

# unzip flup-1.0.1-py2.5.egg -d t

# rm flup-1.0.1-py2.5.egg

# mv t flup-1.0.1-py2.5.egg

 

 

 暂时服务器处于测试状态,请高手们手下留情,互相交流一下这方面经验。

可访问:http://eshop.artdecochina.com

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章