安装Django的方法可以参考这里:LEMP(PHP)下安装django(Ubuntu14.04+Nginx+PHP+Python+Django)

Webpy是一款轻量级的python web开发框架,简单、高效、学习成本低,特别适合作为python web开发的入门框架。

这里需要用到的是Spawn-fcgiFlup,用来配合FastCGI在Nginx下运行。

安装flup在Django那篇里已经介绍过了,这里就不再重复。

安装easy_install

因为安装Webpy需要用到easy_install,这里首先安装easy_install
sudo apt-get install python-setuptools

安装Webpy:

sudo easy_install web.py

安装Spawn-fcgi

sudo apt-get install spawn-fcgi

修改Nginx配置文件:

这里也可以参考Django那篇,重点是locantion / {...}部分:

location / {
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9002;  # 这里的端口号可以自定义,注意不要和其他正在使用的端口号冲突
}

创建.py文件:(我起的名字是index.py

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

import web

urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello:
    def GET(self):
        return 'Hello, world!'

if __name__ == "__main__":
    web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
    app.run()

注意可能需要修改该.py文件的权限:
chmod +x index.py

启动Spawn-fcgi

spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002
这里/path/to/www是Webpy应用的目录,/path/to/www/index.pyindex.py的路径。

重启Nginx:

service nginx restart

接下来在浏览器中输入Nginx配置文件中的server_name就能看到:
Hello, world
这样Webpy就安装成功了。


启动Spawn-fcgi脚本:

#!/bin/sh
spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002

停止Spawn-fcgi脚本:

#!/bin/sh
kill `pgrep -f "python /path/to/www/index.py"`

需要注意的几点:

  1. Nginx配置文件中实际fastcgi_pass才是最重要的,注意启动Spawn-fcgi命令的参数中端口号一定要和Nginx配置文件中相同;
  2. 启动Spawn-fcgi后需要重启Nginx才能正常运行;
  3. 启动Spawn-fcgi时遇到错误child exited with 2:在.py文件加入#!/usr/bin/env至第一行;
  4. 启动Spawn-fcgi时遇到错误child exited with 126.py文件没有执行权限,需要执行chmod +x main.py命令;
  5. 遇到其他child exited with错误,可以在启动命令后加 -n,可以显示错误详情;
  6. 启动Spawn-fcgi时遇到错误child exited with 127:其实可能是.py文件存在windows换行符,从另外的地方复制.py内容或者重新写一份可能会解决问题。
  7. Webpy官网的文档:Webpy + Nginx with FastCGI