Posts for: #Debian

給阿怪 Lighttpd + Fastcgi + Django

我的環境

Debian testing
Python 2.5.2
MySQL 5.0.51a
Lighttpd 1.4.19
Django Django version 0.97-pre-SVN-7480

Django 專案位址,您要對應您自己的位址

/home/terry/digez


Python 的部份
要安裝 python-flup

Django 的部份

一般只要把 django 用 fastcgi 的方式跑起來,即可

在命令列執行方式,其中 socket 還有 pidfile 可以放在你喜歡的地方,注意權限沒有問題就可以,也可以用 TCP 的方式執行 fastcgi
可以在命令列下打 ./manage.py help runfcgi 得到更多的提示



/home/terry/digez/manage.py runfcgi socket=/home/terry/run/digez.sock pidfile=/home/terry/run/digez.pid


您可以把執行的方式,寫成 Linux 或是 FreeBSD 下的 init.d 的執行方式,也可以用 supervisord 的方式來監控啟動

init.d 的方式可以參考 http://code.djangoproject.com/wiki/InitdScriptForDebian


Lighttpd 的部份
至少必須把 fastcgi 的模組啟動
在 Debian 的環境下,用 root的權限,在命令列下打

lighttpd-enable-mod


來啟動,下面是我執行的結果

terry:# lighttpd-enable-mod
Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir
Already enabled modules: fastcgi simple-vhost

Enable module:


下面則是在 Lighttpd 下,我設的 virtual host,我所有的主機都是設定 virtual host 的方式
下面是整個 virtual host 的設定檔,我的環境下是放在 /etc/lighttpd/conf-enabled/10-simple-vhost.conf
有井字號開頭的,整行是註解
在這裡面要注意的是 socket file 的權限,如果是 執行 Lighttpd 的 user 是 www-data 的話,socket 檔案的權限就要是 www-data 可以的讀寫
設定裡那個叫 /mysite.fcgi 的檔案,是假的,不必真實存在


## Simple name-based virtual hosting
##
## Documentation: /usr/share/doc/lighttpd-doc/simple-vhost.txt
## http://www.lighttpd.net/documentation/simple-vhost.html

server.modules += ( “mod_simple_vhost” )

## The document root of a virtual host isdocument-root =
## simple-vhost.server-root + $HTTP[“host”] + simple-vhost.document-root
simple-vhost.server-root = “/var/www”
simple-vhost.document-root = “/blog/"
simple-vhost.default-host = “home.digez.com”
$HTTP[“host”] = “^(home.digez.com|stock.digez.com)$” {
server.document-root = “/home/terry/digez”

fastcgi.server = (
“/mysite.fcgi” => (
“main” => (
# Use host / port instead of socket for TCP fastcgi
#“host” => “127.0.0.1”,
#“port” => 8080,
“socket” => “/home/terry/run/digez.sock”,
“check-local” => “disable”,
)
),

)
alias.url = (
“/media/” => “/home/terry/django_src/django/contrib/admin/media/”,
“/site_media/” => “/home/terry/media/”,
)

url.rewrite-once = (
“^(/media.)$” => “$1”,
“^(/site_media.
)$” => “$1”,
“^/favicon.ico$” => “/site_media/images/favicon.ico”,
“^(/.*)$” => “/mysite.fcgi$1”,
)
}







以上Lighttpd 設定更改過後,該重新啟動的要啟動過後才會生效,有關於 Lighttpd 設定還有多進階的方法,可以幫我們擋攻擊,或是增加效能 ;-)

prefork or threaded

開發好的網站程式最終還是會裝在網站伺服器上,開放對外面的服務,實際考驗你寫程式的效能,及整個架構能否負荷對所有網民的請求

這是最近試過的組合

Lighttpd + fastcgi + Django prefork

Lighttpd + fastcgi + Django threaded

Lighttpd + scgi + Django prefork

Lighttpd + scgi + Django threaded

用 apache 附的 ab 作壓力測試 ,concurrency 100, 1000 request 100, 1000

Django 都是使用 local unix sock 的方式跑,用預設的 maxchildren=50 請求頁面是一個 Django 的 cache 頁面,有 6個 MySQL 的查詢

環境

Debian Linux 2.6.24-1-686,Lighttpd 1.4.19,MySQL 5.0.51a, Python2.5.2,python-flup 1.0-1,python-mysqldb 1.2.2-6,Django version 0.97-pre-SVN-7480

IBM X60 CPU Intel Core Duo 1.83 RAM 1G

調整 Django 的架構方式得到的結論

效能上 scgi 和 fastcgi 並無太大的差別

所以只比較 prefork,threaded

效能
threaded > prefork
成功完成 web 請求數最多,最快
threaded Requests per second: 438.89 [#/sec] (mean)
prefork Requests per second: 129.53 [#/sec] (mean)
穩定度
prefork > threaded
threaded 模式運作一段時間後會出現 Internal Server Error,沒有回應

兩種模式,在壓力過大的時候,都會出現無法回應,要等待才能回復,這是正常的現象,因為,Lighttpd pass 給 Django,也要 Django 來得及回應

不過,在真實的運作中, threaded 出現的 Internal Server Error 是不會回復的,需重新啟動 Django 才行

結論就是,先不要對 threaded 的效能流口水,prefork 擋著先

希望有大大可以有建議

參考資料

http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/
http://timchen119.blogspot.com/2007/06/thread-dying-problem-may-fixed-in.html

supervisor 讓你的 Django 活久一點

過去曾經提過一篇Keep your daemon nerver die,有關 supervisor 的文章,今天,要小記一下, 用supervisord 來控制 Django ,若是發現程式運作發生問題,會自動幫你重新啟動

這是放在設定檔 /etc/supervisord.conf 裡的片段
digez 就是我自己取的名字,因為是要讓 supervisor 來監控,所以 daemonize 設成 false,要注意的是 sock file 的權限,必須是 user www-data 可以讀寫的權限,我的環境是 Debian testing, python 2.5.2


[program:digez]
command=/home/web/digez/manage.py runfcgi daemonize=false socket=/home/web/run/digez.sock pidfile=/home/web/run/digez.pid
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/digez.log

Deabin 2.6.24

有用 Debian 的朋友,如果您的無線網卡用的是 ipw3945,跟著 testing 的人,現在官方是建議用 iwlwifi 了,記得安裝 firmware-iwlwifi,還有 kernel module 要有 iwl3945,安裝後,原本的無線裝置,會變成 wlan0,相對配合的設定,要一起修改

我的筆電原來的對應網路裝置是 eth1,都要修改成 wlan0


/etc/network/interfaces 檔案裡,eth1 變成 wlan0
還有砍掉
/etc/udev/rules.d/z25_persistent-net.rules 檔案裡,有關 eth1 的部份,他重開機後,第一次會重抓

接著就恭喜你,可以重新無線遨遊了

參考資料 http://wiki.debian.org/iwlwifi

Linux Video Tool

Linux 平台尚要剪接影片的工具有非常多的,可是好用,非常容易上手的不多,近幾天剪一些東西的心得

可先看看 WKIPEDIA 的參考
http://en.wikipedia.org/wiki/Comparison_of_video_editing_software

Cinelerra
,功能強大,但介面太花俏,要熟悉上手不易

Kino ,功能簡單,最容易上手,可是功能真的太簡單啦,連照片匯入,都沒辦法自動設定成多少秒數

Kdenlive ,介面簡單,功能較齊全,可是要裝一些 KDE 的相依套件,不是用 KDE 桌面有點OOXX,不過,算是最好用的了


另外,如果只是要作 DVD 的 slideshow 可以裝 dvd-slideshow ,是一個 shell script (真可怕,shell script 可以寫成這樣),也是非常的實用的工具

[廣告文] DigEZ.COM

這是一則廣告文,繼之前 U & People

的說明文章後,要再介紹一下如何使用,真正好用的是,你寫連結,他會自動更新,也可以放影片,甚至是 Google 的廣告,不同的服務,不用綁在單一的網站,相簿,有 Twitter的帳號,是 public,也會自動更新名片內,或是在 黑米 您有自己的帳號,都可以加入,書籤的更新一樣自動加入

My Third Django Site

秉持著作中學的原則,有新的想法的時候,就會在下班後花一點點的時間把他實現出來

我的第三個 Django Site,支援多國語文的介面,可以沒有語言界線了,不過,很多語言的 po 檔,我生不出來,語言能力太差 ;-)

U & People ,一個人際 RSS planet 的玩具


極簡的功能是網路名片,使用到複雜一點的部份,可以延伸到人脈的管理,在群組的實現,還是以人為中心,以標籤的方式實現,開始測試中……

這是我的自我介紹頁面,非常低調,哈哈

http://digez.com/users/terry/

想法由來

網路上已經有各式各樣的服務,也許,部落格,我喜歡用 Blogger,可是相簿我喜歡用 Flickr ,不想用無名的相簿,因為他的照片,只能在他的網站上看,或是也有在 Twitter 寫 micro blog 的習慣,我們可以選擇不同的服務商,可是這些更新,無法整合,所以才有一個單純的想法,把在 Web 2.0 裡被技客叫好,卻不叫座的 RSS 再延伸整合,除了訂閱,可以直接看更新,再把門檻降低

附註

網站的外觀,參考 Django http://www.djangoproject.com/ 及 Django snippets http://www.djangosnippets.org/




A Memo for wxPython

這是作給自己看的筆記,怕以後自己都忘了,主要說明一個 windos 庫存軟體的開發我所用的工具

要注意的事,都是安裝 win32 的套件包

基本套件


Python2.5
http://www.python.org/

wxPython http://wxpython.org/

wxGlade http://wxglade.sourceforge.net/ 可以快速拖拉的方式產生視窗程式碼
PIL
http://www.pythonware.com/products/pil/

Django http://www.djangoproject.com/ ,拜託不要K我,我在 windows 裡也是用他的 ORM,除了,幾乎所有的 SQL 都可以作,如果嫌套件太大,可以把 locales 的目錄去掉,就很小了

IPython
http://ipython.scipy.org/moin/ ,必須加裝 pyreadline http://ipython.scipy.org/dist/ 這種 shell 方式的測試開發,算是特別的福利喔,好好珍惜,很好用的
pywin32 http://sourceforge.net/projects/pywin32/ ,可以用 COM 的方式來控制元件

ReportLab
http://www.reportlab.org/ ,可以用PDF來處理列印

reportlab 在 windows 下有一個很久沒有修的 bug,maillist 上也有人說,就是沒修正,記得 /reportlab/pdfbase/_cidfontdata.py line 137

‘MSung-Light’: (‘cht’, ‘UniGB-UCS2-H’)
改成
‘MSung-Light’: (‘cht’, ‘UniCNS-UCS2-H’)

生成安裝包

py2exe
http://www.py2exe.org/ 生成執行程式,0.6.6版有一點怪怪的 bug,也許是 windows 系統的問題,記得發行套件加入 MSVCP71.dll http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71

NSIS
http://nsis.sourceforge.net/ ,可以用來作安裝包,好用



Open Source 的獲利模式


開放原始碼


在國外已經行之多年的開發模式,在台灣似乎並不是那麼的流行,在政府沒有強力主導,所有的解決方案,都是大廠囊括了大多。

技術與行銷


一種技術能否成功,有時不是他本質得好壞,而是使用及採用人數,和行銷的成功,有越多人,使得資源越豐富,不管是教材,資源,人才或是解決方案的諮詢,都因使用的人數升高能成長,行銷的成功,可以傳達訊息給有高層有決定權的主管,或是消費者。

其中的例子有太多,像是太多的主管或是使用者不知道,這世界上還有其他的瀏覽器,或是 Mircosoft Office 以外的 office 軟體,或是不知道,Windows 以外還有其他作業系統,這就是現實,也是有無行銷的差異。

前些陣子,看到新聞台的記者,發布 MicrcoSoft 未來作業系統將支援 64位元運算時,心想,電視台應該作一個,在 PC 平台上作業系統支援 64 位元的時程表,他才知道 MicroSoft 支援的速度是慢的可憐。

不同領域其實有很不同的情形,像是在嵌入式系統的領域,open source 已經相當成熟,而且有著豐厚的利潤,在其他的領域則是需要知名度,或是大廠的背書,才敢採用。

商機與不同的角度


解決方案提供者
應該商機是在市場形成,open source 普遍成為解決方案時,商機才會浮現。
服務或是產品提供者
是用這些 open source 的利器,打造自己的方案,解決自己的問題,創造新的服務。