tornado+supervisor+nginx配置

supervisor+Tornado+nginx配置

目的:实现反向代理+tornado高性能web的服务器

下面是所有应用下载之后默认的配置文件路径:
supervisor配置文件:
1.配置文件:/etc/supervisord/supervisord.conf
2.unix_http_server file: /tmp/supervisor.sock
3.supervisord logfile:/tmp/supervisord.log
4.supervisord pidfile :/tmp/supervisord.pid
nginx配置文件路径:/etc/nginx/nginx.conf

实施步骤

Nginx简介以及配置:

  • 通过Nginx实现反向代理以及负载均衡
  • 常用命令参数:

nginx -s +参数 reload重新启动

命令作用
-c制定配置文件
-t不运行仅仅只是测试配置文件
-v显示版本
WINCH升级可执行程序
HUP重新加载配置
  • 常用命令:
    +. 启动:nginx (也可以指定启动文件 nginx -s 配置文件路径)
    +. nginx从容停止命令,等所有请求结束后关闭服务:kill -QUIT nginx主进程号
    +. nginx 快速停止命令,立刻关闭nginx进程:kill -TERM nginx主进程号

可以直接kill -信号类型(HUP|TERM|QUIT) cat /usr/local/nginx/nginx.pid

  • 负载均衡以及反向代理配置:

Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)

    http{
    #进行负载均衡配置
        upstream 自定义名{
        server supervisor控制的域名;
        }
        #进行反向代理
        server {
            listen 监听端口;
        location 正则表达式{
                proxy_pass http://自定义名
            }
        }
    }

nginx配置文件常用配置:

  • worker_prcesses auth; 制定工作衍生进程数
  • events{connections 数量;} 允许连接数量
  • http{iclude }

Tornado简介以及配置:

tornado是一个异步的框架,但并不基于wsgi,并且通常每一个进程只运行一个线程

在通常情况下tornado线程是不安全的,只有一种方法能够使得tornado的线程安全 IOLoop.add_callback,也可以使用IOLoop.run_in_executor在另一个线程上异步运行阻塞函数,但是注意,传递给run_in_executor的函数应该避免引用任何Tornado对象。run_in_executor是与阻塞代码交互的推荐方法。

  • tornado下载:
    pip3 install tornado

  • tornado基本设置:
    导入模块:

        import tornado.httpclient 
        import tornado.httpserver#底层处理
        import tornado.web
        import tornado.options#配置全局配置
        import tornado.ioloop#核心io循环模块,封装linux的epoll和BSD的kqueue,
         tornado高性能处理的核心。
        from tornado.options import define,options
        
        #定义变量,定义port默认端口
        tornado.options.define('port',default=8000,type=int,help="this is the port >for application")
    
        #定义处理类型,RequestHandler:封装对请求处理的所有信息和处理方法
        class IndexHandler(tornado.web.RequestHandler):
        #添加一个处理get请求方式的方法,或者post方法
        def get(self,api=''):
            #向响应中,添加数据,可添加类型bytes,int,string
            if api == '':
            	self.write('你好')
            elif api== '首页':
            	self.write('欢迎进入首页')
       
            if __name__ == '__main__':
        #创建一个应用对象,.*表示前端发送的所有url参数都会传递给定义的class应用中函数参数
        app = tornado.web.Application([(r'/',IndexHandler),
        (r'/.*'),IndexHandler])
        
        #绑定一个监听端口
        #启动web程序,开始监听端口的连接
        tornado.httpserver.HTTPServer(app)
        httpserver.listen(port)
        #current()返回当前线程的IOLoop实例对象
        #start()启动IOLoop实力对象的IO循环,开启监听
        tornado.ioloop.IOLoop.current().start()
    

常用方法和参数

1.利用tornado.options模块进行全局参数的定义
define():用来定义options选项变量的方法
参数
name:选项变量名,须保证全局唯一性
default:选项变量的默认值,如不传默认为None
type:选项变量的类型。可以是str、float、int、
datetime、timedelta中的某个。
multiple:选项变量的值是否可以为多个,默认值为False
multiple为True,那么选项变量是一个list列表值与值之间用逗号分隔。
2.httpserver实现多进程操作
tornado.httpserver.HTTPServer(app)
httpserver.bind(port)
httpserver.start(0/None/<0/num)
3.配置文件
#即在当前py文件目录创建config文件,并在py代码中加入以下代码,
tornado.options.parse_config_file("./config")
4.application配置

  • 程序调试之debug配置

    #自动重启+取消缓存模板+取消缓存静态文件+提供追踪信息
    tornado.web.Application([(..)], debug=True)
    #开发之初可以设置debug=True方便调试,开发完毕改为False
    
    
  • 路由信息初始化参配置
    tonado.web.Application([(r””, Handler, {k:v})])' def initialize(self, k)

  • 路由名称设置及反解析

        #名称设置
        tornado.web.Application([
            url(r””, handler, {k,v}, name=“”)
        ])
        #反解析操作
        reverse_url(name)
    ``
    
    • 参数传递
      #get方式传递参数 get_query_arguments(name,default=_ARG_DEFAULT,strip=True) get_query_argument(name ,strip=True) #psot方式传递 get_body_arguments(name, default=_ARG_DEFAULT,strip=True) get_body_argument(name ,strip=True)
    • header
      1. .add_header() .set_header() .set_default_headers()
      设置响应HTTP头, 前两者的不同点在于多次设置同一个项时, .add_header()会叠加参数, 而.set_header()则以最后一次为准.
      2. .set_default_headers()比较特殊, 是一个空方法, 可根据需要重写, 作用是在每次请求初始化RequestHandler时设置默认headers.
      3. .clear_header()清除指定的headers,而.clear()清除.set_default_headers()以外所有的headers设置.

supervisor简介以及初始配置:

  • 作用为管理进程,通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动.当子进程出现异常的时候会自动重新启动,以及获得子进程异常中断的信息.

注意:supervisor只适用2.4以上版本,不支持python3

  • 安装supervisor:
    • ‘python setup.py install supervisor’ 或者’pip install supervisor’

supervisor基本命令

命令作用
supervisord -c 配置文件路径通过制定配置文件启动supervisor

supervisorctl命令

  • supervisorctl相当于supervisor客户端,对被管理进程进行一系列操作。
常用命令作用
update 进程名当配置文件修改的时候需要更新
restart 进程名重新启动某子进程
status 进程名查看状态
tail 进程名进程状态等详细信息
stop 进程名停止某个进程的运行
shutdown停止启动supervisor
reload重新加载

supervisor配置

  • 配置设置:
    +. 安装下载完成之后需要设置默认文件,以及配置文件

    这里配置文件注释以;表示,需要与内容间隔一个空格间隙

    1. 配置supervisor配置文件
        echo_supervisord_conf > /etc/supervisord/supervisord.conf
    
      supervisor 默认会在/etc/supervisor进行搜索默认配置文件
    

    2.修改配置文件:

      信息|参数|作用|是否需要开启|备注
      
      :-|:-:|:-:|:-:|:-
        [unix_http_server]|file:指向UNIX domain socket|设置Http服务器监听的 .          UNIX domain socket|是|需要修改指定file默认文件会被删除 touch /var/run/supervisor.sock , chomd 777 /var/run/supervisor.sock
      |'' | chmod:启动时改变supervisor.sock的权限|||
      |[supervisord]|logfile指定进程log文件路径|与supervisord有关的全局配置|是|
      |[inet_http_server]|port=ip:port |通过port管理子进程|是|
      |[supervisorctl]|file需要于unix_http_server中file路径相同|开启servisorctl|是
    

    3.在配置文件中添加程序,或添加一个程序路径

      vim /etc/supervisord/supervisord.conf 
      [program:项目名]
      command=python3 app.py -port=8001 ; 运行命令,与手动命令行启动的命令是一样的,注意如果有home,这里home不可以用~替代
      autostart=true ; 在supervisor启动时自动启动
      startsecs=5        ;启动5 秒后没有异常退出,就当作已经正常启动了
      autorestart=true  ; 程序异常退出后自动重启
      startretries=3    ; 启动失败自动重试次数,默认是 3
      user=root   ; 用哪个系统用户启动
      redirect_stderr=true  ; 把 stderr 重定向到 stdout,默认 false
      stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
      stdout_logfile_backups = 20     ; stdout 日志文件备份数
      #stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
      stdout_logfile = /tmp/tornado_app_8001.log
      loglevel=info ; 日志输出等级
      ;numprocs=1 ;启动进程的数目。当不为1时,就是进程池的概念,注意process_name的设置默认为1非必须设置
      ;directory=/tmp  ; 进程运行前,会前切换到这个目录
    
	--------------------------------------------------
	若要重新定义一份文件
	1. vim /etc/supervisord/supervisord.conf文件尾添加:
	[include]
	files=/etc/supervisord/conf.d ;需要添加项目文件路径
	2. vim /etc/supervisord/conf.d 
	[group:自定义]
	programs=自定义,自定义 ;分别定义几个进程的配置
	[program:自定义进程名]
	与上述配置文件相同定义.....
  • 当配置完成之后启动supervisor,当访问网站时候supervisorctl子进程有状态输出即成功
    1. supervisor -c 配置文件路径
    2. supervisorctl 进入之后可以查看当前子进程情况

supervisor详细配置以及参数在上一篇文章中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值