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

来源:互联网 发布:java压缩文件 编辑:程序博客网 时间:2024/04/29 13:21

前提声明:

   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=rootuid=root#性能相关的一些参数,具体内容查看官网文档workers=10max-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

02import os
03import sys

06def 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 weburls = (  '/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):    passclass 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

0 0
原创粉丝点击