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。由于这些原因,造成了后期安装的一些小麻烦和时间上的浪费。
如何将debian的python版本修改为目标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安装mysql,debian系统会自动提示你安装一些附加的软件包,可以根据自己的情况选择安装。
由于我的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下载django,python setup.py install安装django。
安装python-mysqldb
Wget下载python-mysqldb for python2.5源码。
运行python setup.py build
进行编译
这一步可能出现许多问题,常见的有
问题1:fatal: library -lmysqlclient_r: not found
这是因为当前平台上没有thread-safe library造成的。
解决办法是,在site.cfg文件中设置:
threadsafe = False
问题2:mysql.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
posted on 2009-03-06 18:06 reck for zhou 阅读(534) 评论(0) 编辑 收藏 举报