LEMP(PHP)下安装Webpy(Ubuntu14.04+Nginx+PHP+Python+Webpy)
安装Django的方法可以参考这里:LEMP(PHP)下安装django(Ubuntu14.04+Nginx+PHP+Python+Django)
Webpy是一款轻量级的python web开发框架,简单、高效、学习成本低,特别适合作为python web开发的入门框架。
这里需要用到的是Spawn-fcgi
和Flup
,用来配合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.py
是index.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"`
需要注意的几点:
- Nginx配置文件中实际
fastcgi_pass
才是最重要的,注意启动Spawn-fcgi
命令的参数中端口号一定要和Nginx配置文件中相同; - 启动
Spawn-fcgi
后需要重启Nginx才能正常运行; - 启动
Spawn-fcgi
时遇到错误child exited with 2
:在.py文件加入#!/usr/bin/env
至第一行; - 启动
Spawn-fcgi
时遇到错误child exited with 126
:.py
文件没有执行权限,需要执行chmod +x main.py
命令; - 遇到其他
child exited with
错误,可以在启动命令后加-n
,可以显示错误详情; - 启动
Spawn-fcgi
时遇到错误child exited with 127
:其实可能是.py
文件存在windows换行符,从另外的地方复制.py
内容或者重新写一份可能会解决问题。 - Webpy官网的文档:Webpy + Nginx with FastCGI