经常看到有人问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 变量,视应用需求而定。
分享到:
相关推荐
)可视化API接口(基于ReDoc,针对中文字体优化)自带一键部署命令(基于uvicorn与gunicorn)挂载ASGI / WSGI应用进度内后台任务(基于 )可使用任何可用的ASGI生态安装pip install -U index.py或者直接从Github上...
* 采用nginx + gunicorn + web.py + supervisor 部署运行 ### 3. 自动化部署 进入hjs_cms/install目录下,修改好远程服务器的业务配置环境(persion.conf)和远程服务器的ssh配置(secret.py),并行: ``` python...
使用start.py启动Web应用程序 $ python3 start.py 建议使用virtualenv和gunicorn在服务器上部署网站 $ pip install virtualenv $ virtualenv -p /usr/bin/python3 ENVE $ gunicorn -c gunicorn.conf.py --error-log...
使用Flask作为web服务框架,提供后台数据接口,利用python实现公开数据的抓取并插入数据库,前端基于jquery使用ajax异步加载数据,echarts根据填充的数据进行可视化,部署基于gunicorn、Nginx。使用说明环境要求:...
该存储库提供了一个使用Flask Web框架实现并使用gunicorn托管的Python Web应用程序示例。 它旨在用于演示将Python Web应用程序部署到OpenShift 3的过程。 实施说明 此样本Python应用程序依赖于默认S2I构建器提供的...
1.代码结构 web.py 通过webapp2 + jinja 构建的web服务,为webmail提供web界面功能。...2.1部署web服务(web.py) Step1.从github克隆代码 git clone https://github.com/iforgotid/webmail.git cd webmail Step2.登录
如果在服务器运行,要保留数据,则可以复制数据库 migrations 文件夹以及数据库 data-dev.sqlite 到服务器,之后请参考这篇文章进行配置,Flask + Gunicorn + Nginx 部署 ,最后输入命令 ./venv/bin/gunicorn -w 4 -...
该应用程序应配置为启用“使用Twitter登录”。 有关更多详细信息,请参见twauth-web.py ,但您可以: 将这些值添加到config.cfg文件(本地部署); 或者 设置环境变量TWAUTH_APP_CONSUMER_KEY和TWAUTH_APP_...
也可以使用Gunicorn Heroku(免费)将Web应用程序部署在服务器中。 安装 一些基本要求包括Keras,numpy,tensorflow,烧瓶和枕头。 为了在服务器中进行部署,必须安装包括gunicorn在内的库。 pip install -r ...
HTML5微数据提取器这是将公开为运行中的Web服务所需的最低要求本地运营pipenv install pipenv run gunicorn microdata_extractor.wsgi:application部署方式码头工人docker build -t microdata-extractor ....
:medical_symbol::medical_symbol: ...运行python app.py以在localhost:5000上打开该应用程序。 在Heroku上部署 在heroku中进行部署有点麻烦,涉及许多错误修复。 希望我能指导您。 由于我在应用程序中使用了PyTorc
该存储库提供了一个使用Flask Web框架实现并使用gunicorn托管的Python Web应用程序示例。 它旨在用于演示将Python Web应用程序部署到OpenShift 3的过程。 实施须知 此样本Python应用程序依赖于默认S2I构建器提供的...
使用 Ansible 的 Mezzanine 和 Django 系统的完整部署管道(开发、暂存、生产)模板 “部署”下定义的 Ansible 剧本执行以下操作: 在 Vagrant 或 AWS 中配置节点 供应节点 设置 DNS(包括本地开发的主机) 供应 ...
詹果蝇它是一个有用的命令行工具,用于在Linux web server使用NGINX,Supervisor,Gunicorn和Letsencrypt管理(初始化和更新)部署设置。 当前版本仅适合django2.2.x。 部署Django Web应用程序是我个人使用的命令。...
web: gunicorn -w 3 app:server clock: python clock.py 在本地运行 python download_data.py python app.py 会费 欢迎捐款! 分叉存储库。 添加您的功能。 确保应用仍在运行。 提交拉取请求! 部署方式 Git推送...
包含由Flask制成并与Gunicorn一起使用的后端 主程序 deploy.sh:用于部署到Google Cloud main.py包含后端的所有可执行代码 app.yaml是用于描述应如何将后端部署到gcloud的项目文件 cron.yaml是gcloud的cron作业...
为了克服这一障碍,我们可以使用Gunicorn帮助我们将Flask项目部署到Heroku应用中。 本指南假定您已经完成了安装和验证。 分叉存储库 您应该分叉存储库,然后对其进行克隆,以便您可以管理自己的存储库并将其仅用作...
在我的情况下是app.py,所以我指定了第一个应用程序,第二个应用程序指明了烧瓶的名称。 requirements.txt 在此文件中,您需要指定有助于执行此模型的库。 在这里我提到了以下库: Flask == 1.1.1 gunicorn == ...
股票可见股票可视化和比较添加多个股票并在图表上可视化比较技术栈短跑密谋熊猫数据读取...git添加git commit -m“首次部署” git push heroku主如果使用免费heroku ps:scale web=1这些是实验性的部署将在url上: https
Gunicorn Web服务器 模型,模板,视图: 管理员页面 用它来创建用户并添加文章 其余API: 清单: : 详细信息: : JSON序列化器: ...