阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Gunicorn部署web.py应用

86次阅读
没有评论

共计 2314 个字符,预计需要花费 6 分钟才能阅读完成。

经常看到有人问 python 的 web 应用如何部署的问题。

常见的方案是用 apache 的 mod_wsgi,或者高端一点的用 uWsgi。但是个人觉得这些都太复杂了,使用维护都不方便,我一般是推荐用 gunicorn,配合 Apache 或 Nginx,可以实现简单高效的应用部署和维护。

为此特地写了这么个文档来介绍,并且本文提交 pull request 到 web.py 项目的 cookbook,只是 Aaron Swartz 去世之后,web.py 不知道是谁在维护,提交了一个月也没人处理,看了一下 pull request 列表,还有 2 年前的请求在挂着……

所以我只好 fork 了一个,加上这个页面,未来我作的维护,都会更新在这个分支上。

通过 Gunicorn 在 Apache 和 Nginx 下部署

下面的代码基于 Gunicorn 0.14.6 在 Debian 6.0.6 和 FreeBSD 9.0 系统下测试。

目前最新版本的 Gunicorn 在使用方法上没有区别。其它 Linux 发行版、各种 BSD、Mac OS X 等系统应该也没问题。但不推荐 Windows 系统,因为目测会多出很多不必要的困难。

Note:

  • 你可以重命名 code.py 为任何你自己愿意的名字,该例子还是以 code.py 为例。
  • /path-to/webpy-app 为包含你的 code.py 代码的路径。
  • /path-to/webpy-app/code.py 应该是你的 **python file** 的完整路径。

可以在命令行运行 gunicorn --version 查看当前 gunicorn 的版本。

安装 Gunicorn

参见 Gunicorn 官网:

http://gunicorn.org/#quickstart

官网的建议是用 virtualenv 方式安装,这是个好方法。这里不再介绍 virtualenv(个人推荐用 virtualenvwrapper),以下以已安装好的 virtualenv 环境为例介绍,当然你也可以跳过 virtualenv,直接全局安装(需要加上 sudo)。

pip install gunicorn

用 Gunicorn 部署 web.py 应用

Gunicorn 是用于部署 wsgi 应用的,任何支持 wsgi 的应用都可以,不止是 web.py。

整个部署过程分为两个部分:

  • 用 Gunicorn 运行 web.py/wsgi 应用
  • 配置 web server 前端的反向代理

用 Gunicorn 运行 web.py 应用

前面已经说过,Gunicorn 是用来部署 wsgi 应用的,所以首先要修改 code.py,使之成为一个 wsgi 应用。

#  ...
app = web.application(urls, globals())
#  在这里加入下面这句,即可
application = app.wsgifunc()

最简单的运行方式就是:

gunicorn code:application

其中 code 就是指 code.py,application 就是那个 wsgifunc 的名字。

这样运行的话,gunicorn 默认作为一个监听 127.0.0.1:8000 的 web server,可以在本机通过:http://127.0.0.1:8000 访问。

如果要通过网络访问,则需要绑定不同的地址(也可以同时设置监听端口):

gunicorn -b 192.168.0.123:8080 code:application

在多核服务器上,为了支持更多的并发访问并充分利用资源,可以使用更多的 gunicorn 进程:

gunicorn -w 8 code:application

这样就可以启动 8 个进程同时处理 HTTP 请求,提高系统的使用效率及性能。

另外,gunicorn 默认使用同步阻塞的网络模型 (-k sync),对于大并发的访问可能表现不够好,它还支持其它更好的模式,比如:gevent 或 meinheld。

#  gevent
gunicorn -k gevent code:application
#  meinheld
gunicorn -k egg:meinheld#gunicorn_worker code:application

当然,要使用这两个东西需要另外安装,具体请参考各自的文档。

以上设置还可以通过 -c 参数传入一个配置文件实现。

配置 Apapache 的反向代理

简单的反向代理配置如下(以在 VirtualHost 里为例):

ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
    ProxyPreserveHost On
    ProxyErrorOverride Off

将对根路径的所有访问请求全部代理到 http://127.0.0.1:8000 的 gunicorn 服务上。

配置 Nginx 的反向代理

简单的反向代理配置如下(同样是以 virtual host 为例):

location / {try_files $uri @test;}

    location @test {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8000;
    }

将对根路径的所有访问请求全部代理到 http://127.0.0.1:8000 的 gunicorn 服务上。

实际应用中可能需要设置更多的 proxy_set_header 变量,视应用需求而定。

Gunicorn 的详细介绍 :请点这里
Gunicorn 的下载地址 :请点这里

相关阅读

Gunicorn 运行 python 的网站非常简单 http://www.linuxidc.com/Linux/2014-01/95076.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2314字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中