linux下搭建nginx+uwsgi+web.py的python web服务器

前提声明:

   python开发web,就现阶段的本人认知来收,还不是很成熟和优势鲜明,同样是脚本开发,开发便利性不如php,企业级开发不如java。唯一的优势就是类库基数大,基本上什么库都找得到,还有就是语法比较优美,仅此而已。而且在国内的应用也比较少和局限,大部分人还是用python来做运行性的脚本。

  所以本文仅止于浅显地探讨一下python如何在linux下进行web开发,如何深入开发不在本文范围。


1、环境配置

python至少升级到2.6.6版本

安装nginx

#rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
#yum install nginx

安装mysql数据库

#yum -y install mysql mysql-server mysql-devel libdbi-dbd-mysql
#service mysqld start
#chkconfig mysqld on


安装MySQLdb ( mysql-python )
#easy_install mysql-python

安装web.py ( 官网 )
#easy_install web.py

安装uwsgi ( 官网 )
#easy_install uwsgi


2、 配置uwsgi
uwsgi 的配置文件 可支持xml yaml ini等格式。这里使用ini格式的配置文件。默认路径为/etc/uwsgi.ini。

[uwsgi] 
#使用动态端口,启动后将端口号写入以下文件中
socket = /tmp/uwsgi_vhosts.sock
#也可以指定使用固定的端口
#socket=127.0.0.1:9090 
pidfile=/var/run/uwsgi.pid 
daemonize=/var/log/uwsgi.log 

master=true 
vhost=true 
gid=root
uid=root

#性能相关的一些参数,具体内容查看官网文档
workers=10
max-requests=5000 
limit-as=512

3、 创建uwsgi开机自启动脚本,便于进行系统管理
vi /etc/init.d/uwsgi,内容如下:

#! /bin/sh  

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  
DESC="uwsgi daemon"  
NAME=uwsgi  
DAEMON=/usr/bin/uwsgi  
CONFIGFILE=/etc/$NAME.ini  
PIDFILE=/var/run/$NAME.pid  
SCRIPTNAME=/etc/init.d/$NAME  

set -e  
[ -x "$DAEMON" ] || exit 0  

do_start() {  
   $DAEMON $CONFIGFILE || echo -n "uwsgi already running"  
}  

do_stop() {  
   $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"  
   rm -f $PIDFILE  
   echo "$DAEMON STOPED."  
}  

do_reload() {  
   $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"  
}  

do_status() {  
   ps aux|grep $DAEMON  
}  

case "$1" in  
 status)  
   echo -en "Status $NAME: \n"  
   do_status  
 ;;  
 start)  
   echo -en "Starting $NAME: \n"  
   do_start  
 ;;  
 stop)  
   echo -en "Stopping $NAME: \n"  
   do_stop  
 ;;  
 reload|graceful)  
   echo -en "Reloading $NAME: \n"  
   do_reload  
 ;;  
 *)  
   echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2  
   exit 3  
 ;;  
esac  

exit 0

将脚本属性修改为可执行:
#chmod 755 /etc/init.d/uwsgi

启用开机自动启动:
#chkconfig uwsgi on

启动uwsgi服务:
#service uwsgi start


4、 配置nginx下的uwsgi站点
例如新增以下一个站点uwsgi。
vi /etc/nginx/conf.d/uwsgi.conf, 内容:

server { 
  listen  9091; 
  server_name  localhost; 
  root /www/uwsgi; 
  index index.html index.htm; 
  access_log logs/uwsgi.log; 
  error_log logs/uwsgi.log; 
  location / { 
    #使用动态端口
    uwsgi_pass unix:///tmp/uwsgi_vhosts.sock;
    #uwsgi_pass 127.0.0.1:9090; 

    include uwsgi_params; 
    uwsgi_param UWSGI_SCRIPT index;   #默认载入的脚本文件
    uwsgi_param UWSGI_PYHOME $document_root; 
    uwsgi_param UWSGI_CHDIR  $document_root; 
  } 
}

启动Nginx服务
#service nginx start
#chkconfig nginx on


5、编写Hello Word!

#vim index.py

脚本名称和上面nginx虚机配置的uwsgi_param UWSGI_SCRIPT参数要一致

不使用web.py框架的写法:

01 #!/usr/bin/python

02 import os
03 import sys

06 def application(environ, start_response):
07     status = '200 OK'
08     output = 'Hello World!'
09     response_headers = [('Content-type''text/plain'),
10                     ('Content-Length', str(len(output)))]
11     start_response(status, response_headers)
12     return [output]

使用web.py框架的写法:

#!/usr/bin/env python
# -*- coding: utf-8 -*-  

import web

urls = (
  '/t', 'test', #测试
  '/', 'home'
)

app = web.application(urls, globals())
#返回wsgi接口,application 是 wsgi app入口函数
application = app.wsgifunc()

class test:
  '测试'	  

  def GET(self):
    # 开发测试用
    referer = web.ctx.env.get('HTTP_REFERER', 'http://google.com')
    client_ip = web.ctx.env.get('REMOTE_ADDR')
    host = web.ctx.env.get('host')
    fullpath = web.ctx.fullpath
    user_agent = web.ctx.env.get('HTTP_USER_AGENT')

    data = ""
    data += 'Client: %s<br/>\n' % client_ip
    data += 'User-agent: %s<br/>\n' % user_agent
    data += 'FullPath: %s<br/>\n' % fullpath
    data += 'Referer: %s<br/>\n' % referer

    return data

  def POST(self):
    pass

class home:
  '根目录请求的处理'		
  def GET(self):
    return "Hello Web.py"

  def POST(self):
    return self.GET()

#定义404错误显示内容  
def notfound():  
    return web.notfound("Sorry, the page you were looking for was not found.")  

app.notfound = notfound  
if __name__ == "__main__":
  app.run()


6、重新载入python脚本

#service uwsgi reload

或者

#python index.py 9092

表示使用index.py脚本在9092端口新开启一个web服务监听

这样你写的hello word就生效了,现在可以在浏览器输入你的ip地址+端口来访问python web内容了



结束

本文主要参考/转载

http://www.tuicool.com/articles/qEVrYn

如果需要更深入一些了解python使用web.py框架如何进行表单/视图/数据库开发,请访问

http://blog.csdn.net/caleng/article/details/5712850

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值