2013年4月

不像PHP,安装好就不用管什么了,Python的环境部署还真是麻烦,还要弄各种路径…

在Google找了找,知道了一个uWSG的东西,别人评测说速度很快,效率高.就决定使用了..能力现在有限,没法测试是否真的快呢.

用Python的pip install uwsgi命令安装uWSGI时,不是502 gate away,就是 uWSGI error

经过几百次安装研究搜索,终于弄uWSGI部署好Python网站环境了..

折腾的东西说不完,实在太多了,搞了三天 -_-!! 还把yum命令给搞坏了..记录下正确的操作好了…使用的是CentOS6.2 64bit

先去官网下面个uWSGI的最新版

[deloz@deloz.net ~]# wget -c http://projects.unbit.it/downloads/uwsgi-1.1.2.tar.gz
[deloz@deloz.net ~]# tar -zxvf uwsgi-1.1.2.tar.gz
[deloz@deloz.net ~]# cd uwsgi-1.1.2 && make

编译结束用下面的命令把uwsgi这个程序文件复制到/usr/bin,如下. 这样就可以直接使用uwsgi命令了.

[deloz@deloz.net uwsgi-1.1.2]# cp uwsgi /usr/bin/

启动uWSGI,如下.

uwsgi -s /tmp/uwsgi.sock -C 666 -M -p 4 -t 60 --limit-as 128 -R 10000 --vhost -d /logs/uwsgi.log --pidfile /tmp/uwsgi.pid --pythonpath /python_sites

uWSGI的参数说明:

-s 以unix socket的方式执行uWSGI,后面跟路径.
-C 修改/tmp/uwsgi.sock的权限为666
-M 启动管理进程
-p 生成worker子进程数,-p 4 表示生成4个
-t cgi程序超时时间,-t 60 表示超时60秒就丢掉
–limit-as 脚本占用最大内存,–limit-as 128表示最大为128M
-R 每个worker处理的最大请求数,-R 10000表示处理的请求最多10000个
–vhost 表示启用虚拟服务器,这样就可以一个uWSGI主进程,管理多个Python站点了
-d 守护进程方式启动,-d /logs/uwsgi.log 表示指定日志文件
–pythonpath 指定Python站点的目录, –pythonpath /python_sites 表示里边放Python的站点,例如/python_sites/web_one/, /python_sites/web_two/

本来想加进开机启动的,把命令给写错了.正确的应该是>>而不是> ,导致覆盖了/etc/rc.local之前的配置…

[deloz@deloz.net uwsgi-1.1.2]# echo /usr/bin/uwsgi -s /tmp/uwsgi.sock -C 666 -M -p 4 -t 60 --limit-as 128 -R 10000 --vhost -d /data/logs/uwsgi.log --pidfile /tmp/uwsgi.pid --pythonpath /python_sites >> /etc/rc.local

在Google把/etc/rc.local的初始配置给找回来了,添加uWSGI后,变成

#!/bin/sh
 
touch /var/locak/subsys/local
/usr/bin/uwsgi -s /tmp/uwsgi.sock -C 666 -M -p 4 -t 60 --limit-as 128 -R 10000 --vhost -d /data/logs/uwsgi.log --pidfile /tmp/uwsgi.pid --pythonpath /python_sites

启动uWSGI后,还需要配置一下Nginx中站点的server块,如下

listen 80;
location /{
    #注意是///
    uwsgi_pass unix:///tmp/uwsgi.sock;
    include uwsgi_params;
    uwsgi_param UWSGI_PYTHOME /python_sites;
    #web_one_app是站点web_one目录下的一个web_one_app.py文件
    uwsgi_param UWSGI_SCRIPT web_one_app;
    uwsgi_param UWSGI_CHDIR /python_sites/web_one;
}

上面的配置完后,重启一下Nginx,就可以了…