摘要:生产环境下,自带的服务器,无法满足性能要求。配置前面我们已经在系统环境下安装了安装好的二进制文件放在文件夹下,接下来使用来管理。参考文章探针安装部署部署笔记在生产环境上部署使用详解本文系工程师编译整理。
由于字数的限制,其实本篇文章的全标题为 《如何在 virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》
在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 OneAPM Python 探针来监测应用性能,形成一个「闭环」 !希望能对大家有所帮助,首先简单来介绍一下环境:
系统环境:ubuntu 14.04 Python 2.7.6
安装组件库第一步安装所需要的存储库,因为打算用到虚拟环境,用到 pip 安装和管理 Python 组件,所以先更新本地包,然后安装组件:
sudo apt-get update sudo apt-get install python-pip python-dev nginx创建虚拟环境 virtualenv
在一个系统中创建不同的 Python 隔离环境,相互之间还不会影响,为了使系统保持干净,遂决定用 virtualenv 跑应用程序,创建一个容易识别的目录,开始安装,再创建项目目录 super,然后激活环境:
sudo pip install virtualenv mkdir ~/supervisor && cd ~/supervisor virtualenv super source super/bin/activate安装 Flask 框架
好了,现在在虚拟环境里面,开始安装 Flask 框架,flask 依赖两个库 werkzeug 和 jinjia2, 采用 pip 方式安装即可, pip 是一个重要的工具,Python 用它来管理包:
pip install flask
先用 Flask 写一个简单的 Web 服务 myweb.py ,因为后面要做一些测试,所以设置了几个请求:
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello world supervisor gunicorn " @app.route("/1") def index1(): return "hello world supervisor gunicorn ffffff" @app.route("/qw/1") def indexqw(): return "hello world supervisor gunicorn fdfdfbdfbfb " if __name__ == "__main__": app.debug = True app.run()
启动 Flask 看看!
python myweb.py
在浏览器中访问 http://127.0.0.1:5000 就可以看到了「几个路径都试一试」
用 Gunicorn 部署 Python Web现在我们使用 Flask 自带的服务器,完成了 Web 服务的启动。生产环境下,Flask 自带的服务器,无法满足性能要求。所以我们这里采用 Gunicorn 做 wsgi 容器,用来部署 Python,首先还是安装 Gunicorn:
pip install gunicorn
当我们安装好 Gunicorn 之后,需要用 Gunicorn 启动 Flask,Flask 用自带的服务器启动时,Flask 里面的 name 里面的代码启动了 app.run()。而这里我们使用 Gunicorn,myweb.py 就等同于一个库文件,被 Gunicorn 调用,这样启动:
gunicorn -w 4 -b 0.0.0.0:8000 myweb:app
其中 myweb 就是指 myweb.py,app 就是那个 wsgifunc 的名字,这样运行监听 8000 端口,原先的 5000 端口并没有启用,-w 表示开启多少个 worker,-b 表示 Gunicorn 开发的访问地址。
想要结束 Gunicorn 只需执行 pkill Gunicorn,但有时候还要 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器 ---supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。
安装 Supervisorpip install supervisor echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件 gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理 在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的项目目录」 [program:myweb] command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app directory=/home/wang/supervisor startsecs=0 stopwaitsecs=0 autostart=false autorestart=false user=wang stdout_logfile=/home/wang/supervisor/log/gunicorn.log stderr_logfile=/home/wang/supervisor/log/gunicorn.err
supervisor 的基本使用命令:
supervisord -c supervisor.conf supervisorctl -c supervisor.conf status 查看supervisor的状态 supervisorctl -c supervisor.conf reload 重新载入 配置文件 supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor 管理的程序进程 supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor 管理的程序进程
supervisor 还有一个 web 的管理界面,可以激活。更改下配置:
[inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for alliface) username=wang ; (default is no username (open server) password=123 ; (default is no password (open server)) [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket username=wang ; should be same as http_username if set password=123 ; should be same as http_password if set ;prompt=mysupervisor ; cmd line prompt (default "supervisor") ;history_file=~/.sc_history ; use readline history if available
现在可以使用 supervsior 启动 gunicorn 啦。运行命令:
supervisord -c supervisor.conf
浏览器访问 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,访问 http://127.0.0.1:8000 可以看见 gunicorn 启动的返回的页面。
配置 Nginx前面我们已经在系统环境下安装了 Nginx, 安装好的 Nginx 二进制文件放在 /usr/sbin/ 文件夹下,接下来使用 Supervisor 来管理 Nginx。这里需要注意一个问题,权限问题。Nginx 是 sudo 的方式安装,启动的适合也是 root 用户,那么我们现在也需要用 root 用户启动 supervisor。在 supervisor.conf 下添加配置文件:
[program:nginx] command=/usr/sbin/nginx startsecs=0 stopwaitsecs=0 autostart=false autorestart=false stdout_logfile=/home/wang/supervisor/log/nginx.log stderr_logfile=/home/wang/supervisor/log/nginx.err
好了,都配置完之后,启动 supervisor:
supervisord -c supervisor.conf
访问页面,也可以用 ab 进行压力测试:
ab -c 100 -n 100 http://127.0.0.1:8000/qw/1
-c 用于指定压力测试的并发数, -n 用于指定压力测试总共的执行次数。
安装 Python 探针搭建好了 web,想实时监控应用数据,有什么好的工具,用 OneAPM 的 Python 探针试试,
首先也是安装 Python 探针:
pip install -i http://pypi.oneapm.com/simple --upgrade blueware
根据 License Key 生成配置文件:
blueware-admin generate-config (License Key) = blueware.ini
由于是在虚拟环境下,所以要特别注意路径,修改 supervisor.conf 里面两项:
[program:myapp] command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app environment = BLUEWARE_CONFIG_FILE=blueware.ini
重启应用
supervisorctl # 进入命令行 supervisor> reload # 重新加载
向上面一样访问页面,也可以用 ab 进行压力测试
几分钟后有下图,可以看到页面加载时间,web 事物,页面吞吐量,其中后面是设置自定义事物「Business Transaction」。
How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 14.04
OneAPM Python 探针安装
python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
Tornado+nginx+supervisor 在生产环境上部署
supervisor + Tornado + Nginx 使用详解
本文系 OneAPM 工程师编译整理。想阅读更多技术文章,请访问 OneAPM 官方博客。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39192.html
摘要:生产环境下,自带的服务器,无法满足性能要求。配置前面我们已经在系统环境下安装了安装好的二进制文件放在文件夹下,接下来使用来管理。参考文章探针安装部署部署笔记在生产环境上部署使用详解本文系工程师编译整理。 由于字数的限制,其实本篇文章的全标题为 《如何在 virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》...
摘要:模板函数到底长什么样下面我们就可以来看看模板函数到底长什么样了。当然,首先得创建一个模板文件。总结通过打印中间结果和分析代码,我们已经大概知道了的模板是如何转化成内容的。下一篇文章会阐述模板的各种语法所对应的动态函数内容。 web.py模板的实现原理 web.py的模板实现利用了Python的可执行对象的动态特性:根据模板内容和渲染函数的参数创建一个函数,该函数执行的时候会返回一个Te...
摘要:从今天起,我将在这里更新一个系列的简单爬虫到建立网站的实践手记。内容将会从最简单的开始,环境搭建,基本爬虫,入库,用建立可供用户访问的网站,网站部署。第一部分,买,装环境。我们爬虫站点的所有文件都放在里面。 从今天起,我将在这里更新一个系列的python简单爬虫到建立网站的实践手记。 内容将会从最简单的开始,环境搭建,基本爬虫,入库,用Django建立可供用户访问的网站,网站部署。 ...
摘要:原来叫做,后来改名为,意思是,囊括了三大数据科学语言。文学化编程支持编程模式,代码和正文有机交融在一起,在代码可运行结果可见的情况下又很好地保留了研究逻辑,非常便于交流。在安装过程中,我们使用来对做环境隔离。 Jupyter原来叫做IPython,后来改名为Jupyter,意思是Julia+Python+R,囊括了三大数据科学语言。Jupyter编程环境具有以下两个特点: 中心化工作...
阅读 1014·2019-08-30 12:57
阅读 2060·2019-08-30 11:11
阅读 2161·2019-08-29 15:20
阅读 1847·2019-08-29 14:12
阅读 3256·2019-08-28 17:51
阅读 2363·2019-08-26 13:23
阅读 763·2019-08-26 10:34
阅读 3812·2019-08-23 12:37