Centos下搭建 nginx+uwsgi+python

时间:2013-08-17 13:54来源:quanpower 作者:本站 举报 点击:862次


用python做web应用最麻烦的还是配置服务器了,此话不假,光中间件就有好几种选择,fastcgi、wsgi、uwsgi,难 免让人眼花缭乱。 而听说uwsgi的效率是fastcgi和wsgi的10倍,因此初学python的我就有点跃跃欲试了,打算在centos下搭建个 nginx+uwsgi+python玩玩。

下面是本人经过google和亲身实践所得:

准备工作:

yum install python-devel libxml2-devel python-setuptools zlib-devel wget pcre-devel gcc make

编译安装nginx:

cd /tmp
    wget http://nginx.org/download/nginx-1.7.4.tar.gz  tar -zxvf nginx-1.7.4.tar.gz  ./configure				//此处可能会提示有些library未安装,安装完再运行此命令检查即可
    make;make install		//确认无误,编译安装

编译安装uwsgi:

wget http://projects.unbit.it/downloads/uwsgi-2.0.tar.gz tar -zxvf uwsgi-2.0.tar.gz
 cd uwsgi-2.0.tar.gz python setup.py build
    make
    mv uwsgi /usr/bin		//将编译好的文件移动到此处

配置nginx

vim /usr/local/nginx/conf/nginx.conf

在server下的location下增加以下2行

location / {
    	uwsgi_pass 127.0.0.1:9001;
    	include uwsgi_params;
    }


	

新建test.py文件,内容如下:

def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return "Hello World"

然后在终端运行:

/usr/local/nginx/sbin/nginx
    uwsgi -s 127.0.0.1:9001 --wsgi-file test.py  (居然没有采用9001端口端)改为:
        uwsgi --http :9001 --wsgi-file test.py   采用了9001端口。 


二,
	

1. 软件下载地址:

uwsgi 

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz

flup 

wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz

django

wget http://media.djangoproject.com/releases/1.2/Django-1.2.5.tar.gz

2. 安装

flup和django   都是用 python setup.py install

uwsgi安装 

cd  uwsgi-0.9.6.8
python uwsgiconfig.py --build
cd nginx
cp uwsgi_params /usr/local/nginx/conf/

 3. 建立项目目录

cd /root
django-admin.py startproject  my_django

vi uwsgi.xml

vi django_wsgi

import os
import django.core.handlers.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_django.settings'    #这里的my_django.settings 表示 "项目名.settings"
application = django.core.handlers.wsgi.WSGIHandler()

4. 添加nginx配置

server { 
        listen  80; 
         server_name 192.168.0.100; 
   
          location / { 
            root /root/my_django;
            uwsgi_pass   127.0.0.1:8000; 
            include     uwsgi_params; 
            access_log  off;  }
 

5. 启动uwsgi和nginx

/usr/local/nginx/sbin/nginx
uwsgi -x /root/my_django/uwsgi.xml &

好了,打开浏览器测试下吧

Centos下搭建 nginx+uwsgi+python+Django-LMLPHP

二,安装Django
Download:   https://www.djangoproject.com/download/
	

解压安装:

  tar xzvf Django-1.6b1.tar.gz

  cd Django-1.6b1   sudo python setup.py install 不到1分钟左右,就安装好了;如果安装过django需要卸载以后再安装;

  执行django-admin.py startproject PROJECT_NAME 创建项目

  其中PROJECT_NAME是项目的名称,这里假设项目的名称是Blog   那么可以得到这样的一个目录树:

Blog/ |____ manager.py |____ Blog/     |____ urls.py     |____ wsgi.py     |____ __init__.py     |____ settings.py

  执行 django-admin.py startproject ztgame 创建名为ztgame的项目

  执行  python ztgame/manage.py runserver 0.0.0.0:80 即可开启服务,输入IP,就可以打开Django的默认欢迎页面了;如下图:

Centos下搭建 nginx+uwsgi+python+Django-LMLPHP

在django项目主目录下创建 django_wsgi.py



[plain] view plaincopy
  1. import os,sys  
  2.   
  3. if not os.path.dirname(__file__) in sys.path[:1]:  
  4.     sys.path.insert(0, os.path.dirname(__file__))  
  5. os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'  
  6.   
  7. from django.core.handlers.wsgi import WSGIHandler  
  8. application = WSGIHandler()  
3)在django项目主目录下创建 django.xml



[plain] view plaincopy
  1.   
接下来运行



[plain] view plaincopy
  1. uwsgi -x /home/example/django.xml  


OK,输入127.0.0.1就能看到 django worked!

不过每次重启服务器都需要输上面那行代码比较麻烦,可以将代码复制到 /etc/init.d/rc.local ,这样开机就自动启动

从网上找了段代码也可以试试,或者将下面代码copy到 /etc/init.d/uwsgi


[plain] view plaincopy
  1. #!/bin/bash  
  2.   
  3. PORT=3031  
  4. PROCESSES=4  
  5. LOG=/var/log/uwsgi  
  6.   
  7. PID=`pidof -o %PPID /usr/bin/uwsgi`  
  8.   
  9. . /etc/rc.conf  
  10. . /etc/rc.d/functions  
  11.   
  12. case "$1" in  
  13.   start)  
  14.     stat_busy "Starting uwsgi"  
  15.     if [ -n "$PID" ]; then  
  16.       stat_busy "uwsgi is already running"  
  17.       stat_die  
  18.     else  
  19.       uwsgi -s ":$PORT" -M -p $PROCESSES -d $LOG &> /dev/null  
  20.       add_daemon uwsgi  
  21.       stat_done  
  22.     fi  
  23.     ;;  
  24.   stop)  
  25.     stat_busy "Stopping uwsgi"  
  26.     killall -QUIT uwsgi &> /dev/null  
  27.     rm_daemon uwsgi  
  28.     stat_done  
  29.     ;;  
  30.   restart)  
  31.     $0 stop  
  32.     sleep 1  
  33.     $0 start  
  34.     ;;  
  35.   *)  
  36.     echo "usage: $0 {start|stop|restart}"    
  37. esac  
  38. exit 0  
10-05 06:28