部署指南¶
uliweb支持任何标准的wsgi方式的部署。缺省情况下,在创建一个项目后,会在项目目录 下生成: wsgi_handler.py
.
并且uliweb目录还支持:gae, sae, dotcloud, gevent, gevent-socketio等。因此,如果 想要在这些环境上部署,一般需要执行:
uliweb support [gae|sae|dotcloud]
则会分别生成相应的环境包含部署用的处理程序。
并且uliewb还提供了静态文件的提取功能,它可以把所有安装的app下的static目录汇总到 指定的目录下去,然后利用web server来提供静态文件的处理。如使用:
uliweb exportstatic /your/static/path
Nginx+uwsgi¶
Nginx¶
使用Nginx运行Uliweb,可以考虑使用nginx+uwsgi的模式,其中nginx采用反向代理的方式 来配置。uwsgi可以采用手工处理,也可以考虑使用supervisor来管理。
在Nginx中配置比较简单,在nginx.conf中添加:
http {
#...
include /etc/nginx/conf.d/*.conf;
#...
}
这里将其它不涉及的内容忽略掉了。上面的代码的作用是包含在conf.d目录下的所有.conf文件。 因此,你可以把特别的配置写到conf.d目录下的某个文件,如: uliweb.conf
。内容 可以是:
server {
listen 80;
location / {
include uwsgi_params;
#proxy_pass localhost:8000;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_pass unix:///tmp/uwsgi.sock;
}
}
将uwsgi设置为反向代理有两种方式,一种是通过服务的方式,即上面注释掉的那一行,但 是当请求过多,这种方式会报错。因此一般都采用socket文件的方法。
如果你是 WEB-AP-DB 三层结构,在WEB层还有一个Nginx的话,那么上面的proxy_set_header可能 需要加上,这样可以让AP层得到正确的客户端地址。
同时应用中对于存在二级代理的情况要对IP进行特殊处理,才可以得到正确的客户端的IP,所以可以在 settings.ini 或local_settings.ini中添加:
[WSGI_MIDDLEWARES]
proxyfix = 'werkzeug.contrib.fixers.ProxyFix', 50
上面就把Nginx设置好了。如果要使用Nignx提供静态文件服务,可以在上面的server中添加:
location ~ ^/static/ {
root /your/path/to;
}
这样就将URL以 /static/
开头的资源文件作为静态文件来处理了,同时会在 /your/path/to
下来查找文件。
在 /your/path/to
下应有 static
子目录。
如果要支持favicon.ico,可以在配置文件中添加:
location = /favicon.ico {
alias /home/webd/www/favicon.ico;
}
uwsgi¶
uwsgi可以支持命令行方式启动,也可以由supervisor来管理(个人以为supervisor要简单 得多)。下面是一个命令行启动uwsgi的一个示例脚本(start.sh):
#!/bin/bash
sockfile=/tmp/uwsgi.sock
projectdir=/your/project/path
logfile=/opt/web/logs/uwsgi.log
if [ $1 = start ];then
psid=`ps aux|grep "uwsgi"|grep -v "grep"|wc -l`
if [ $psid -gt 2 ];then
echo "uwsgi is running!"
exit 0
else
uwsgi -s $sockfile --chdir $projectdir -w wsgi_handler -p 10 -M -t 120 -T -C -d $logfile
fi
echo "Start uwsgi service [OK]"
elif [ $1 = stop ];then
killall -9 uwsgi
echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
killall -9 uwsgi
uwsgi -s $sockfile --chdir $projectdir -w wsgi_handler -p 10 -M -t 120 -T -C -d $logfile
echo "Restart uwsgi service [OK]"
else
echo "Usages: sh start.sh [start|stop|restart]"
fi
开始的三个变量可以根据你的实际情况进行修改。这个命令提供了启动、停止、重启三个 功能。并且相应的参数你可以根据情况进行设置。因为uwsgi有许多的参数可以使用,并 且配置参数可以有三种提供方式,如:
- 命令行参数
- ini文件
- xml文件
另外还可以使用supervisor来管理uwsgi程序,如下面是一个示例:
[program:yourproject]
command = uwsgi
--socket /tmp/yourproject.sock
--harakiri 60
--reaper
--module wsgi_handler
--processes 2
--master
--home /python/env
--chmod-socket=666
--limit-as 256
--socket-timeout 5
--max-requests 2
directory=/path/to/yourproject
stopsignal=QUIT
autostart=true
autorestart=true
stdout_logfile=/tmp/yourproject.log
redirect_stderr=true
exitcodes=0,1,2
这里把其它的配置都忽略掉了,只显示uliweb相关的配置,上面的许多参数可以根据要求 进行修改。
processes
表示启动uwsgi进程的个数yourproject
应改为实际的项目名称directory
改为项目目录stdout_logfile
的值改为实际的日志文件名
其中 --home xxx
的作用是设置python环境,它主要是用于使用virtualenv来创建 python环境的情况。
然后使用supervisorctl就可以进行管理了。
uwsgi+gevent¶
uwsgi在目前是支持gevent的支持,所以现在可以这样部署,以supervisor配置为例:
[program:yourproject]
command = uwsgi
--socket /tmp/yourproject.sock
--harakiri 60
--reaper
--module wsgi_handler
--processes 5
--master
--gevent 100
--home /python/env
--chmod-socket=666
--limit-as 256
--socket-timeout 5
--max-requests 2
directory=/path/to/yourproject
stopsignal=QUIT
autostart=true
autorestart=true
stdout_logfile=/tmp/yourproject.log
redirect_stderr=true
exitcodes=0,1,2
这里添加了 --gevent
参数,用来指明限制协程的数量。所以总的并发量是:
processes*gevent = 5 * 100 = 500
上面的module不用修改。
那么uliweb还提供了 uliweb support gevent 命令,它会生成一个 gevent_handler.py的 文件,这个文件是用来单独执行的,所以它会绑定IP和端口。如果使用uwsgi就不需要它。 仍然使用原来的wsgi_handler就可以了。
配置文件的快速生成¶
为了方便,在uliweb 0.2.2版本之后,提供了 config 命令,可以快速 .
Apache¶
mod_wsgi¶
按 mod_wsgi 的说明安装mod_wsgi到apache下。
- 拷贝mod_wsgi.so到apache的modules目录下
Window环境可以看:
http://code.google.com/p/modwsgi/wiki/InstallationOnWindows
Linux环境可以看:
配置 apache 的httpd.conf文件
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /path/to/uliweb/wsgi_handler.py <Directory /path/to/youruliwebproject> Order deny,allow Allow from all </Directory>
上面是将起始的URL设为/,你可以根据需要换为其它的起始URL,如/myproj。
如果在windows下,示例为:
WSGIScriptAlias / d:/project/svn/uliweb/wsgi_handler.py <Directory d:/project/svn/uliweb> Order deny,allow Allow from all </Directory>
- 重启apache
- 测试。启动浏览器输入: http://localhost/YOURURL 来检测你的网站可否可以正常访问。
静态文件¶
当需要使用apache来配置静态文件时,可以在配置文件中配置为:
Alias /static/ /your/static/path/