有了Nginx,对于Tomcat没有必要详细了解。
有了supervisor,再也没有必要把一个程序设置成服务、驻留进程,supervisor真是一个相见恨晚的好工具。
在Tomcat中,所有的webapp默认共享8080端口;在Python世界中,每一个web程序都要占用一个端口,要想让这些web程序共享80端口,就需要使用Nginx进行反向代理,Nginx相当于一个路由器用来转发请求。Nginx跟Tomcat、Gunicorn之间的关系是相当的松耦合,Nginx根本不负责管理这些服务器,Nginx只是一个请求转发器,当请求来临,判断一下请求的类型、重写一下请求、将请求转发向合适的处理者。即便是Tomcat、Gnicorn崩了,Nginx也是不关心。Nginx只知道向某个端口转发请求。

最简单的运行python web的方式

最简单的python web运行方式是使用nohup myCmd &命令运行,nohup表示no hang up,关闭远程登录之后程序不挂起继续执行,&表示后台执行。
对于django,使用命令python manage.py runserver 0.0.0.0:8000
对于flask,使用命令python mine.py

使用supervisor

supervisor是用Python语言编的进程管理、监控工具,只适用于Linux。
supervisor功能虽然强大,但常用功能也就那么一点点,实在没有必要对它特别了解。
知道常用配置足矣。

安装supervisor可以采用pip install的方式,但是可能出错(supervisor与python版本的问题)。

supervisor不仅是python包,也是一个应用程序,可以通过sudo apt-get install supervisor命令进行安装,这是最佳实践。

如果一个python工具不是编程调用,那就使用apt-get进行安装
这样安装还有一个好处,可以自动把supervisor设置成一个服务,从而可以开机自启动。

下面介绍与supervisor相关的几个概念:

  • echo_supervisord_conf命令:打印supervisor常用配置,可以重定向命令将配置输出到文本文件echo_supervisord_conf > haha.conf

  • supervisord:supervisor的后台守护进程,跟mysqld、ftpd等服务一样,它是一个TCP客户端,监听某个固定端口。

  • supervisorctl:command tools,是supervisor控制台,这个控制台可以远程控制服务器上的supervisord,它们之间的通信方式为XML-RPC

  • supervisorctl常用命令:help查看全部命令
    当修改supervisord.conf之后,需要在supervisorctl中使用reload命令重新加载配置

supervisord命令加载配置的顺序:

  • 如果使用-c命令指定配置文件位置,那么就加载那个文件,否则按如下顺序查找配置文件
  • $CWD/supervisord.conf
  • $CWD/etc/supervisord.conf
  • /etc/supervisord.conf

配置文件最佳实践:

将每一个应用创建一个conf文件,放在/etc/supervisor/conf.d目录下,主配置文件/etc/supervisord.conf中默认包含了conf.d目录下的配置文件。
像这种一个主配置文件,允许自定义从配置文件的方式很常见,很多软件都是这样配置的。

/etc/supervisord.conf主配置文件包含了conf.d/*.conf

[include]
files = /etc/supervisor/conf.d/*.conf

用supervisor管理gunicorn时,需要将gunicorn的deamon参数置为false。

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = leon          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

更改完supervisor配置之后,使用sudo service supervisor restart命令重启supervisor服务。输入sudo service supervisor命令,按几下tab可以看到更多可用命令。使用sudo service supervisor force-reload 重新加载配置。

在supervisorctl中可以start、stop、restart+程序名称来控制这个程序。supervisorctl是一个交互式supervisor管理工具。sudo supervisorctl stop 服务名可以停止程序。sudo supervisorctl reload可以重新加载配置。sudo supervisorctl status可以查看服务运行状态。

修改主配置文件supervisord.conf中的inet_http_server部分可以通过网页方式访问supervisor,监控服务器状态。

查看日志

在服务器上,查看日志是唯一能够看到程序运行细节的方式。大部分程序的默认日志都放在/var/log/目录下(像Nginx、supervisor等工具的日志都在这里)。如果配置完supervisor之后,发现没有达到想要的效果,有可能是配置不正确,至于哪里不正确,可以去日志/var/log/supervisor里看一下。
我们在/etc/supervisor/conf.d/xxx.conf 中配置了stdout和stderr,去对应路径下tail -f,然后尝试sudo service supervisor restart重启服务,肯定能够定位错误。

更多配置内容请使用echo_supervisord_conf|more命令慢慢查看吧。

使用gunicorn

gunicorn也是只适用于Linux,不适用于windows。
gunicorn也是采用apt-get方式安装,gunicorn当然也是一个应用,不用管它是用python2开发的还是python3开发的,直接sudo apt-get install肯定好使。

最简单的方式启动django应用:
cd到myweb/myweb目录下(myweb是django项目名称),直接运行gunicorn -b0.0.0.0:8000 wsgi:application
解释:

  • -b参数用来绑定监听端口,默认是绑定到localhost,改成0.0.0.0就变成了监听全部主机的端口,这样才能够外网访问。
  • wsgi为python文件名,application为文件中的一个变量

将gunicorn后台运行有多种方式:

  • 使用supervisor管理之,这时gunicorn一定不是守护进程
  • 使用nohup gunicorn wsgi:application&不挂起地执行
  • 使用gunicorn的--deamon参数,使之作为deamon来运行
  • 将gunicorn设置成一个服务

一旦使用了supervisor,就再也没有必要添加更多的服务、守护进程了,用supervisor就足够了。

将一个程序设置成服务,需要如下步骤:
编辑 sudo nano /etc/init/gunicorn.conf

description "The gunicorn service"start on runlevel [2345]
stop on runlevel [!2345]respawn
setuid root
setgid www-dataenv PATH= /var/www/venv/bin
chdir /var/www/exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

如上,设置好用户、当前路径、全局变量、要执行的命令。
sudo service gunicorn start就可以将gunicorn作为服务运行了

详细文档

supervisor官方文档
gunicorn官方文档

转载于:https://www.cnblogs.com/weiyinfu/p/6505346.html

supervisor+gunicorn部署python web项目相关推荐

  1. 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述

    关于 WSGI.uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 引言 最近基于 Flask Web框架在开发一个后端项目,在Web Server和 F ...

  2. linux部署python web项目 详细_在linux服务器下部署python工程(爬虫)

    ---恢复内容开始--- 这两天 部署 这个 工程 ,真的是 心力交瘁惹. 如果有用到爬虫的话,python环境 先配好,如果是 python3的话 beautifulsoup 可以参见 http:/ ...

  3. linux部署python web项目 详细_linux下nginx+python+uwsgi部署总结(django+web.py)

    ara on 2011年10月24日 17:23 # 按您文章进行了配置,出现错误,请教问题原因 nginx.conf 配置: server { # python/uwsgi listen 80; r ...

  4. docker部署python web应用_安装docker并部署web项目

    一.docker简介 1.docker定义:docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以装笔,书包可以放书一样.你可以把"hello world!"放到docke ...

  5. eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法

    eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法 参考文章: (1)eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法 (2)http ...

  6. 云服务器 ECS 建站教程:手工部署Java Web项目

    手工部署Java Web项目 Tomcat 一个开源的且免费的 Java Web 服务器,常用来作为 web 开发的工具.它可以托管由 servlet,JSP 页面(动态内容),HTML 页面,jav ...

  7. python构建知识库_手把手教导实战Python Web项目

    手把手教导实战Python Web项目 一.前言 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.Django的主要目的是简便.快 ...

  8. 本篇文档介绍如何手动在ECS实例上部署Java web项目

    本篇文档介绍如何手动在ECS实例上部署Java web项目.适用于刚开始使用阿里云进行建站的个人用户. 项目配置 { .section} 本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软 ...

  9. 1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

    在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作: 所有路由不能全部都在myDjango下的urls.py路由文件中, ...

最新文章

  1. xebium周末启动_我如何在周末建立和启动聊天机器人
  2. html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式
  3. html div p 区别,html中div br p三者有什么区别?
  4. matlab计算三角格网面积,不规则平面图形的面积计算及其MATLAB实现.doc
  5. mysql 服务账号_MySql 账号管理
  6. 前端开发---ppt展示页面评论区展示
  7. Spring入门第十七课
  8. php中如何实现多进程
  9. Rectangle Pro for Mac移动光标窗口捕捉工具
  10. 5.文件操作 --- 系统调用
  11. 免费中文Python电子书 转载
  12. 优酷KUX1080转码工具如何将KUX视频转换成MP4格式
  13. gitbook:epub电子书制作教程
  14. 亚马逊平台还收费吗?收费多少?
  15. 学渣的刷题之旅 leetcode刷题 26. 删除排序数组中的重复项
  16. 【最新】M1芯片Mac安装PS2021/2020卡在启动页解决教程下载方法
  17. 源码深度解析系列之 Spring IOC
  18. 用GPOPS2解最优控制问题
  19. java编写一个圆环类Ring_编写一个圆环类ring的java程序
  20. Python 波形处理

热门文章

  1. 训练集、验证集和测试集的概念及划分原则
  2. CentOS7.3下部署Rsyslog+LogAnalyzer+MySQL中央日志服务器
  3. 接口传值实例DatePickerDialog
  4. java_web学习(六) request对象中的get和post差异
  5. Java学习笔记之方法
  6. div+css二级菜单
  7. centos 减少tty数量的方法
  8. 基于虚拟日志压缩的数据同步方案
  9. 有关二叉树的相关实现:建树,遍历(递归与非递归实现)
  10. WinForm 的dataGridView全选,反选