uWSGI+nginx部署python及django应用

2 篇文章 0 订阅
2 篇文章 0 订阅

1 简介

部署python的web应用常见的方式大体有2种:

fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。

wsgi:利用http服务的mod_wsgi模块来跑各个project。

uWSGI 为新的协议,兼容 wsgi的写法,性能高于上述协议。

2 部署nginx

首先安装nginx:

debian(ubuntu等):

sudo apt-get install nginx

centos:

sudo yum install nginx

安装后,配置nginx:

用vim等编辑器打开/etc/nginx/nginx.conf,有一些版本的nginx将conf配置文件放到了/etc/nginx/conf或/etc/nginx/site-enabled中。

加入以下server负责转发请求给之后的uwsgi

    server {
        listen       80;
        server_name  xxx.com;#需要监听的域名或ip
        location / {
		uwsgi_pass 127.0.0.1:8010;#8010为uwsgi工作的端口
        	include uwsgi_params;#nginx转发的uwsgi的http头
                access_log /var/www/xx/log/nginx.log;#nginx日志文件
	}
    }

完成后重启nginx

sudo service nginx restart

3 部署uwsgi

3.1 安装uwsgi

由于uwsgi更新较快,而且uwsgi较为轻量,1分钟即可编译完成,因此官方没有提供编译好的二进制文件。

可以使用pip进行安装,简单快捷,推荐。

sudo pip install uwsgi

安装后跳到 3.2 配置uwsgi


此外我们也可以到

http://uwsgi-docs.readthedocs.org/en/latest/Download.html 下载,解压后,自行编译。

编译前,配置编译环境

debian:

sudo apt-get install build-essential python
sudo apt-get install python-dev

centos:

sudo yum groupinstall "Development Tools"
sudo yum install python
sudo yum install python-devel


进入到解压的目录,然后编译:

python uwsgiconfig.py --build

编译后会得到uwsgi可执行文件,将其复制到/usr/sbin/文件夹中

cp ./uwsgi /usr/sbin
至此安装完成

3.2 配置uwsgi

uwsgi具有很多工作模式,我们使用其中的emporer模式。即uwsgi启动后,自动读取/etc/uwsgi/下的web应用配置文件,并启动相应的web应用。

为uwsgi建立service,并开机自动启动,将下列内容写入/etc/init.d/uwsgi文件(需新建),设置YOURNAME变量为你的非root的用户名。

### BEGIN INIT INFO
# Provides:          uwsgi
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts uwsgi Server
# Description:       Starts uwsgi Server
### END INIT INFO
<span style="font-size:18px;">YOURNAME = XX #将XX替换为你的用户名</span>
case "$1" in
        start)
                nohup uwsgi --emperor /etc/uwsgi/ --uid $<span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME</span><span style="font-family: Arial, Helvetica, sans-serif;"> --gid  $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME </span><span style="font-family: Arial, Helvetica, sans-serif;">&</span>
        ;;
        restart)
                killall uwsgi && <span style="font-family: Arial, Helvetica, sans-serif;">nohup uwsgi --emperor /etc/uwsgi/ --uid $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME</span><span style="font-family: Arial, Helvetica, sans-serif;"> --gid  $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME </span><span style="font-family: Arial, Helvetica, sans-serif;">&</span>
        ;;
	run)
		uwsgi --emperor /etc/uwsgi/ --uid $YOURNAME --gid $YOURNAME &
	;;
        stop)
                killall uwsgi
        ;;
        *)
                echo "Usage: /etc/init.d/uwsgi {start|stop|run|restart}"
                exit 1
        ;;
esac

修改文件权限

sudo chmod 755 /etc/init.d/uwsgi

新建并进入/etc/uwsgi文件夹

sudo mkdir /etc/uwsgi
cd /etc/uwsgi

每个web应用需要建立一个ini配置文件,示例如下:


[uwsgi]
socket = 127.0.0.1:9000
chdir = /var/www/xxx #你的python web应用的主目录
pythonpath = ..
module = wsgi #python web应用中含有application可调用函数的python模块,不用写.py扩展名
processes = 1 #进程数,一般和处理器核心数量相同
threads = 2 #线程数,一般是进程数乘2
daemonize = /var/www/xx/log/uwsgi.log #日志文件

其中module需要符合wsgi规范,含有一个原型为application(environ,start_response)的可调用对象。具体规范查看我的另一篇转发的文章。

完成后执行

sudo service uwsgi start

启动uwsgi即可







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值