CentOS下搭建python web生產環境(nginx+web.py+uwsgi)


首先使用環境介紹: 系統: CentOS 5.5 32位

Python版本:2.7.2

nginx:1.0.13

ip:192.168.3.3/24

由於CentOS默認自帶都python(2.4.3)版本較低,所以我們采用手動編譯安裝python的方式來使用python 2.7.2

首先安裝python 2.7.2

cd /usr/src/
mkdir python
cd python
#下載python2.7.2
wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
tar -jvxf Python-2.7.2.tar.bz2
cd Python-2.7.2
./configure --prefix=/usr/local/python27 --enable-unicode=ucs4

先別急着安裝,為什么后面的步驟能順利進行我們需要我們的python支持zlib模塊,

vi Modules/Setup
#在454行左右找到:#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
# 去掉注釋
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
然后接着編譯
make && make install

安裝完成后我們想更方面的使用我們新安裝的Python我們做如下更改.

mv /usr/bin/python /usr/bin/python24
ln -s /usr/local/python27/bin/python /usr/bin/python
ln -s /usr/local/python27/bin/python2.7 /usr/bin/python2.7

這樣改完我們的yum就無法工作了,我們要修改yum來使yum工作:

vi /usr/bin/yum

將/#!/usr/bin/python改為#!/usr/bin/python2.4即可正常工作(版本可能不一樣需查看自己系統自帶的版本是什么)

現在我們執行python -V查看應該就是我們剛剛安裝的2.7.2版本:

python -V
Python 2.7.2

我們安裝了python下面我們就來武裝我們的新python,

我們先為新的Python安裝python的setuptools,配備easy_install.easy_install用於安裝Python第三方擴展包而且只要一個命令即可完成:

下載:

wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea

然后直接執行安裝:

sh setuptools-0.6c11-py2.7.egg

安裝好之后我們做一個軟鏈接方便我們使用:

ln -s /usr/local/python27/bin/easy_install* /usr/bin/

然后我們來使用easy_install來安裝Python第三方擴展

安裝本文所需要的web.py

easy_install web.py

然后我們打開Python shell輸入

import web

如果沒有報錯則說明我們安裝成功 安裝flup:

easy_install flup

安裝Spawn-fcgi :

wegt http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
tar -zxvf spawn-fcgi-1.6.3.tar.gz
cd spawn-fcgi-1.6.3
./configure --prefix=/usr/local/spawn-fcgi
make && make install
ln -s /usr/local/spawn-fcgi/bin/spawn-fcgi /usr/bin/

到這里我們就完成了Python的所有包安裝,下面我們來部署nginx(本博有大量文章來介紹安裝nginx,這里還是再來一遍吧..)

yum -y install zlib-devel pcre-devel openssl-devel  # 安裝依賴
wget http://nginx.org/download/nginx-1.0.13.tar.gz # 下載
tar -zxvf nginx-1.0.13.tar.gz
cd nginx-1.0.13
 ./configure --prefix=/usr/local/nginx\   # 指定安裝目錄為/usr/local/nginx
--with-openssl=/usr/include/openssl\  # 啟用ssl
--with-pcre\                          # 啟用正規表達式
--with-http_stub_status_module        # 安裝可以查看nginx狀態的程序
make  && make install

我們修改nginx的配置文件:

        location / {
#           root   html;
#          index  index.html index.htm;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_pass unix:/tmp/pyweb.sock;
            fastcgi_param SERVER_ADDR $server_addr;
            fastcgi_param SERVER_PORT $server_port;
            fastcgi_param SERVER_NAME $server_name;
        }

然后創建一個web.py程序:

#!/usr/bin/env python
#-*-coding:utf8-*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello:
        def GET(self):
                return 'Hello, world!'

if __name__ == "__main__":
        web.wsgi.runwsgi = lambda func, addr = None: web.wsgi.runfcgi(func, addr)
        app.run()

將內容保存到/usr/local/nginx/html/下命名為index.py(或任意你喜歡的名字) 然后賦予其執行權限:

chmod +x /usr/local/nginx/html/index.py

通過命令創建spawn-fcgi進程:

spawn-fcgi -d /usr/local/nginx/html/ -f /usr/local/nginx/html/index.py  -s /tmp/pyweb.sock -u nobody -g nobody

我們使用unix socket,並用nginx的用戶來創建.現在我們訪問http://192.168.3.3/就可以看到:Hello, world!

 

 

 


一、分別正常apt安裝nginx+php5+spawn-fcgi即可;

二、關於配置的說明:
1、網上有很多介紹使用fpm補丁或先安裝lighttpd然后復制spawn-fcgi甚至關閉lighttpd自動啟動來解析php頁面的方法。本人發現可直接apt安裝spawn-fcgi,並在/etc/rc.local中加入/usr/bin/spawn-fcgi.standalone -a 127.0.0.1 -p 9000 -C 8 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid即可。請注意:此處最好為spawn-fcgi.standalone,很多文章只是說使用/usr/bin/spawn-fcgi,但經查,spawn-fcg連接至/etc/alternatives/spawn-fcgi,且該文件又鏈接回/usr/bin/spawn-fcgi.standalone,故直接使用。

2、一定要加入 -C 8參數,此處為spawn-fcgi啟動的子進程數,如果沒有此參數,將很容易出現502 bad gateway錯誤。當然可以使用-C 128或512等,但經實際測試在使用-C 8的情況下,賽揚M1.7的CPU 1G內存 ubuntu 9.10 i386,webbench 並發3000連接持續運行3600秒,在測試同時及結束后均可以正常連入服務器phpinfo.php頁面。而未加-C 8時,並發1000連接才幾秒就出現502 bad gateway錯誤。因我的服務器使用需求遠未達到持續3000並發數的使用環境,故未設置超過8的參數來測試,一直都是使用-C 8已可穩定運行。

3、網上還有文章提出使用upstream解決502 bad gateway的方法,經實際測試在不加-C ?進程數而使用upstream的情況下,同樣很快出現502錯誤。

4、關於nginx配置文件nginx.conf方面,建議worker_processes數值不用設置太大,一般生產環境為了保障穩定性設置為2即可。經一台Xeon E5405 4核CPU、16G內存的服務器webbench並發3000連接數實際測試,worker_processer設置為1、2、4(加worker_cpu_affinity優化及不加)、8共5中環境,測試結果表明worker數為4且加cpu_affinity的情況下,性能最差,反而worker數為1的時候CPU使用率最低,性能最強。但5中情況下進行3輪測試取平均值,測試結果沒有太大差別,排除測試先后及硬盤內存影響的話,本人認為在5種測試環境下,很難有明顯的性能區分。所以我的nginx是設置worker_processer為2,並且一直都運行得很好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM