用tornado ,Supervisord ,nginx架网站

2023-11-10

supervisor 安装配置

supervisor 是一个守护进程管理软件,是把linux上众多的守护进行集中在supervisor  进行统一的管理。

 安装:

  shell> sudo apt-get  install  supervisor# pip/easy_install

或者用pip 或者easy_install 也可以进行安装。

安装后配置文件

/usr/bin/supervisord    --supervisor服务守护进程

/usr/bin/supervisorctl  --supervisor服务控制程序,比如:status/start/stop/restartxx

/etc/supervisor/supervisord.conf   --配置文件,定义服务名称以及接口等等

 

配置一个守护进程:

    我们在/etc/supervisor/conf.d文件添加文件interview.conf,里面进行配置

[program:interview] #设置守护进程名 
command=python /home/www/python/interview/web.py   #设置command 路径
autostart=true    #是否自动启动

autorestart=true 

autostop=true
stdout_logfile=/home/www/python/interview/interview.log    #设置日志路径

 

shell>sudo/etc/init.d/supervisor  start--启动supervisor服务

shell>sudo supervisorctl  status   interview  --获取interview  服务的状态,因为是autorstart,这里已经启动了

interview   RUNNING pid1159,uptime0:20:32

shell>sudo supervisorctl   stop   interview --停止interview  服务

interview  :stopped

shell>sudo supervisorctl stop interview  --再次停止interview  ,会有错误信息

interview  :ERROR(notrunning)

shell>sudo supervisorctl  start  interview  --启动interview  服务interview  :started

 

参考网站http://supervisord.org 

 

 

用nginx代理转发Tornado 

 

在nginx sites-enabled 文件夹里面新建 interview文件

# 这里的frontends 作为下面连接转发的标志

 upstream frontends {
        server 192.168.52.128:8080; #supervisor控制的域名
    }
    server {
        listen 8888;  #监听端口
        location / {
            proxy_read_timeout 1800;
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            prox
y_pass http://frontends;
        }
    }

 

这样子我们访问192.168.52.128:8888就会转发到192.168.52.128:8080 上,就可以实现nginx配置的Tornado 了。

 

问题:据介绍supervisor是可以通过配置进行web访问查看的,但本人没有配置成功!


http://blog.csdn.net/tengzhaorong/article/details/12833157

----------------------------------------------------------------------------------------------------------------------------------------------------

另一篇

最近使用 Tornado 重写了博客,于是查看了很多关于部署基于 Tornado 开发的网站的资料,比较成熟的方案就是使用 Nginx 来做反向代理,使用 Supervisord 来作为进程管理工具。至于什么叫反向代理,为什么 Tornado 需要使用 Supervisord 来进行进程管理,可以自己 Google 一下。现在主要介绍一下配置和其中遇到的一些问题。

Nginx 的配置文件可以参考 Tornado 的文档最后面的例子,基本上就那样了,需要说明的是,Tornado 使用 Nginx 来处理静态文件,所以在 nginx.conf 中有这样一段:

location ^~ /static/ {
    root /home/blog/app; # static 文件夹所在的目录
    if ($query_string) {
        expires max;
    }
}

和后面 Supervisord 配置有关的主要还是负载均衡的这段配置:

upstream http {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
}

这个博客我开了两个 Tornado 进程,端口号分别是8000和8001,现在开始来看 supervisord.conf的配置,其它配置可以自行 Google,这里主要讲和这两个端口有关的故事,话说需要开两个 Tornado 进程,需要使用 Supervisord 来进行管理,于是和这个有关的配置如下:

[program:blog-8000]
command=python /home/blog/app/app.py --port=8000
autostart=true                ; supervisord守护程序启动时自动启动tornado
autorestart=true              ; supervisord守护程序重启时自动重启tornado
redirect_stderr=true          ; 将stderr重定向到stdout
stdout_logfile = /home/blog/blog-8000.log

[program:blog-8001]
command=python /home/blog/app/app.py --port=8001
autostart=true                ; supervisord守护程序启动时自动启动tornado
autorestart=true              ; supervisord守护程序重启时自动重启tornado
redirect_stderr=true          ; 将stderr重定向到stdout
stdout_logfile = /home/blog/blog-8001.log

使用 Tornado 都知道,在 Tornado 中 main 函数都是这样的写法:

http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(port)
tornado.ioloop.IOLoop.instance().start()

[以下方法太丑陋,请看下面更新]其中必须指定 port ,这样怎么同一个文件指定两个端口呢?当然就像上面的 supervisord.conf 的配置那样,使用 --port=xxxx 来指定端口了,于是app.py 中可以写:

if __name__ == "__main__":
    import sys
    port = int(sys.argv[1].split('=')[1])
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(port)
    tornado.ioloop.IOLoop.instance().start()

这样就解决了。现在就可以通过 Supervisord 来启动 Tornado 进程了,即使 Tornado 进程不小心退出,Supervisord 也可以让它再次运行。不过 Supervisord 自己也完蛋了呢?比如服务器重启了,怎么办?当然是让它开机自启动了,Linux 中的开机自启动有很多方法,这里介绍一个比较传统的方法,就是把 Supervisord 加入 /etc/init.d 中, 把这个脚本保存为 supervisord ,然后加入到 /etc/init.d 文件夹中,再以 root 权限执行如下命令:

chmod +x /etc/init.d/supervisord
update-rc.d supervisord defaults

这样即使重启服务器后,Supervisord 也会自动运行,当然它也会运行它管理的进程,最后在安装 Nginx 时,如果自己不需要加入一些第三方模块,建议直接使用官方源进行安装,这样升级等非常方便,而且也是开机自启动,这样一下来,即使重启服务器,什么都不用做,网站也会原地满血复活。

最后注意:启动脚本 supervisord 中的 PIDFILE=/tmp/$NAME.pid 这个设置一定要和supervisord.conf 中的配置相同。(顺便吐槽一下这个程序的名字,太长了,不过写完这篇文章,我居然就背着了)

一些参考资料

  1. 用Supervisord管理Python进程
  2. Tornado + Supervisor 在生产环境下的部署方法

更新

2012.06.27:在启动指定端口时,可以使用 Tornado 自带的命令行工具,如下:

from tornado.options import define, options

define("port", default=8888, help="run on the given port", type=int)

这样就默认为8888端口,这样__main__就可以如下:

import tornado.options
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

启动时就可以指定端口了。

http://blog.csdn.net/fbd2011/article/details/7737022


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用tornado ,Supervisord ,nginx架网站 的相关文章

  • eclipse 使用maven 构建springboot+注入servlet

    本文转载至 http www cnblogs com java zhao p 5775103 html 问 有了springMVC 为什么还要用servlet 有了servlet3的注解 为什么还要使用ServletRegistration
  • 【计算机视觉

    文章目录 一 MIS Check Dam Minor Irrigation Structures Check Dam 二 MLGESTURE DATASET 三 Marine Microalgae Detection in Microsco
  • CDN上的缓存刷新、缓存预热是怎样的使用场景?

    缓存刷新 源站内容更新后 希望用户可以获取到最新资源 CDN租户可以通过提交刷新请求将CDN节点上指定的缓存内容强制过期 当用户再次访问时 CDN节点将回源获取已更新内容返回给用户并在节点缓存最新资源 简单来说就是删除cdn各节点上的缓存
  • 10. 拦截器的使用

    文章目录 拦截器概述 自定义拦截器 1 新建一个Moudule springmvc 05 Interceptor 添加web支持 2 导入pom依赖 并检查Artifacts的lib目录 3 配置web xml 和 applicationC
  • 查看 docker 容器使用的资源

    在容器的使用过程中 如果能及时的掌握容器使用的系统资源 无论对开发还是运维工作都是非常有益的 幸运的是 docker 自己就提供了这样的命令 docker stats 默认输出 docker stats 命令用来显示容器使用的系统资源 不带
  • 【小宝解惑】VC++中delete和delete [] 的区别

    我们通常从教科书上看到这样的说明 delete 释放new分配的单个对象指针指向的内存 delete 释放new分配的对象数组指针指向的内存 那么 按照教科书的理解 我们看下下面的代码 int a new int 10 delete a 方
  • shell脚本中的交互式变量(read)

    交互式变量 在执行时会互动 根据提示继续执行 read WESTOS read s WESTOS 无回显 隐藏 read p input WESTOS 会回显 编写脚本 会回显 执行发现会回显 编写脚本 不回显 发现输入过程会隐藏 之后显示
  • nginx 文件服务器 s3,利用S3+nginx实现静态站点的托管

    需求描述 用户有一个静态website 都是html和js css img这些文件 同时还有一个域名static website com 需要将用户访问的请求由nginx转发到后端的S3 website文件夹结构如下 website ind

随机推荐