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即可访问

 

 

你可能感兴趣的:(ubuntu12.04 lts server 下搭建nginx+uwsgi+webpy服务器)