ubuntu12.04 lts server 下搭建nginx+uwsgi+webpy服務器

提示:如果你正在linux下面(比如ubuntu系統)嘗試搭建基於python的服務器,nginx+uwsgi+webpy 。假如你在google上搜索了很多帖子,依然有許多問題。

並且某些問題在網上基本找不到答案。那建議你果斷重裝系統。從頭開始。因爲,其實這個組合挺好搭建。請看下文。

本人的版本爲

ubuntu 12.04 LTS+nginx1.2.2+UWSGI1.2.4+webpy0.36(當然0.37也可以),基本一次跑通。

最近在ubuntu12.04 lts server 下搭建nginx+uwsgi+webpy服務器,經歷許多波折,現在此版本的server和destop版本跑通,這裏一併記錄下來

server版本從http://www.ubuntu.com/download/server 下載。安裝完成後。要先安裝gcc,g++,make,webbench,apach2等基本工具.

本人蔘考的帖子如下(呵呵,IT要站在巨人的肩膀上)

nginx學習研究(一)安裝啓動及調試 :http://blog.csdn.net/apache0554/article/details/7766567

搭建UWSGI,通過簡單的webpy例子:http://www.cnblogs.com/Jerryshome/archive/2011/07/20/2111683.html

純靜態文件環境下的Nginx優化思路 :http://os.51cto.com/art/201111/300876.htm

關於Nginx的一些優化(突破十萬併發) :http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8

 

主要精華按照順序是:

nginx最好從官方網站下載安裝,而不要從apt-get install 安裝,這裏下載地址是

http://nginx.org/en/download.html

tar -xvf nginx-1.2.2.tar.gz
cd nginx-1.2.2
useradd www
./configure --prefix=/usr/local/nginx --user=www --group=www  --with-http_stub_status_module  --with-http_ssl_module
如果發現缺少Pcre模塊,則apt-get install libpcre3 libpcre3-dev 
重新configure
make && make install

註釋:PCRE模塊的一個功能是,解析正則。下面會講到。


這裏編譯完成後的nginx爲2M多,你可以

cd nginx-1.2.2
vi auto/cc/gcc
註釋掉CFLAGS="$CFLAGS -g"

這樣編譯完成後,nginx爲500多K。效率也會得到極大提升。

安裝完成後我們會在/usr/local/nginx下看到如下幾個文件

conf    nginx默認配置文件存放目錄

html   nginx默認的網站根目錄

logs    nginx默認日誌文件目錄

sbin   nginx默認可執行文件目錄

首先我們來嘗試啓動nginx,啓動的命令如下:

/usr/local/nginx/sbin/nginx    執行過後如果沒有任何提示,那麼nginx可能就已經啓動成功

當然也可以使用ps -ef | grep nginx 來查看進程中是否有nginx

這是可以在瀏覽器中輸入http://IP來檢查nginx能否訪問。

在html中默認有一個歡迎index.html

如果安裝成功,你將能夠看到Welcome to nginx!字樣,當然你可以更改html/index.html文件中的顯示文字。

常用命令:啓動nginx

/usr/local/nginx/sbin/nginx 

刷新nginx

/usr/local/nginx/sbin/nginx -s reload 

停止

/usr/local/nginx/sbin/nginx -s stop 

 

安裝UWSGI,同樣,這個最好還是自己從官網下載吧

http://projects.unbit.it/uwsgi/

wget  http://projects.unbit.it/downloads/uwsgi-1.2.4.tar.gz
tar -xvf uwsgi-1.2.4.tar.gz
cd uwsgi-1.2.4
python uwsgiconfig.py build

如果提示缺少python-header,則

apt-get install python-dev

 

注意,不需要再去執行

python setup.py install

因爲build之後,uwsgi已經生成了,你只需要把它拷貝到/usr/local/nginx下,即可方便調用

 

配置conf/nginx.conf 。主要都在這一步,這裏寫出來的是關鍵點。你看到的自己系統裏的文件內容跟這個差不多

user  root root; 

worker_processes  4;

worker_cpu_affinity 0001 0010  0100 1000;

worker_connections 102400;

error_log  logs/error.log;

worker_rlimit_nofile 102400;
events {
    worker_connections  10240;
    use epoll;
}

http{

    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
 
    server {
	listen       8000;
        server_name  localhost;
	location / {
            root   /home/webapp;
            uwsgi_pass 127.0.0.1:9000;
            include uwsgi_params;
            index  index.html index.htm;
            uwsgi_param UWSGI_CHDIR /home/webapp;
            uwsgi_param UWSGI_SCRIPT apprun;
        }
         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
            root /home/webapp;
	    break;
        }
	}

}

 

 這裏解釋下

1,user root root;

前面提到 adduser www用戶。我開始也是設置爲www www.但是nginx讀取靜態文件老是沒有權限,比如webapp下面的css文件。表現爲頁面混亂。用

chrome 分析,發現是加載不了CSS文件。提示Perssion denied 或者是permission forbidden.

即使對webapp目錄,執行

chmod -R 777 ./  和chown -R www  也沒有用處。後來換成root,問題解決。

 2,worker_processes 4和worker_cpu_affinity

這個主要是對nginx手動分配CPU。使其充分利用多核心

3

worker_rlimit_nofile 102400;

這個指令是指當一個nginx進程打開的最多文件描述符數目,linux下面的最多打開文件數(ulimit -n)一般是1024.這個你可以自己試驗下。所以設置大一點有好處

4 listen 這個是設置爲你最後訪問的端口。

5,server name,因爲在本機,就設置爲localhost

6,第一組location下面的

root:網站文件夾根目錄

uwsgi_pass 127.0.0.1:9000;  uwsgi的啓動參數
uwsgi_param UWSGI_CHDIR/home/webapp; 網站文件夾下運行的python程序的父目錄。
uwsgi_param UWSGI_SCRIPT apprun; 網站文件夾下運行的python程序的名字。

7.第二組location下面的

root,主要是給出css等靜態文件的父目錄。比如我的css文件在/home/webapp/static/style.css.

當然,對應的html代碼中的引入標識就是href="/static/style.css"

 另外,這個location中對CSS等靜態文件的 解析,正是需要pcre library的地方。因爲用到了正則。

 

到目前爲止,nginx和UWSGI都已經搞好了,下面我們安裝web.py的支持庫。

默認通過apt-get install python-webpy。即可安裝完畢。但是這種方式得到的庫webpy版本不一定是最新的,或者可能會遇到問題。

如果遇到問題,你可以通過

wget http://webpy.org/static/web.py-0.37.tar.gz
tar -xvf web.py-0.37.tar.gz
cd web.py-0.37
python setup.py build
python setup.py install


用最新的版本來試驗。

另外我還用到了Beautifulsoup.xlrd,wlwt等這些庫。每個人根據項目自己選擇。

 

要想uwsgi能調用apprun.py

要有以下代碼

if __name__=="__main__":
    app.run()
else :
    application = app.wsgifunc()


else的語句是關鍵。

 

最後工作

cd /usr/local/nginx
./sbin/nginx -s reload
./uwsgi -s 127.0.0.1:9000 -w apprun


在瀏覽器上輸入:http://your server address:8000即可訪問

 

 

發佈了39 篇原創文章 · 獲贊 7 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章