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

 

 

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