部署项目Nginx+flask+Tornado+Supervisor

 

需要监控项目数据,但公司的系统比较大,数据比较多,平时只是需要关注部分数据即可,所以考虑自己写个简单的数据监控页面,正好自己也有服务器与域名,于是着手自己做一个简单的数据页面,本来想用Django来写,后台抽风下,又想尝试做做不是太熟悉的flask与Tornado,于是把过程记录一下。

过程中我选择了一个比较绕的方式,把静态html直接挂Nginx,用flask做接口调用,用Tornado做并发,再用Supervisor守护Tornado进程。

静态结构

Nginx配置:

	server { 
		listen 80; 
		server_name xxx.xxx.cn; # 你访问的路径前面的url名称 
		access_log /var/log/nginx/access.log main; # Nginx日志配置
		charset utf-8; # Nginx编码
		gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型
		error_page 404 /404.html; # 错误页面
		error_page 500 502 503 504 /50x.html; # 错误页面
		root         /root/mdata;

        # 指定静态文件路径
        location /static {         
            root /root/mdata;
            index  index.html index.htm;
            expires 24h;
            access_log   off;
       }

效果:

 

页面完成后,开始做flask部分,之前Nginx又开了一个地址做接口地址

	server { 
		listen 80;
		server_name XXX.XXX.cn; 
		access_log /var/log/nginx/access.log main; # Nginx日志配置
		charset utf-8; # Nginx编码
		gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型
		error_page 404 /404.html; # 错误页面
		error_page 500 502 503 504 /50x.html; # 错误页面
		
		location /{
			proxy_pass_header Server;
			proxy_set_header Host $http_host;
			proxy_redirect off;
			proxy_set_header X-Real-IP $remote_addr;
			# 把请求方向代理传给tornado服务器,负载均衡
			proxy_pass http://127.0.0.1:8008;
		}

flask代码 

# -*- coding=utf-8 -*-
import flask
from flask import make_response
from flask_cors import *
from flask import request
from flask import jsonify
from flask import Flask,current_app,render_template,make_response,jsonify,redirect
import json
import urllib
import requests
import psycopg2
import pymysql
import datetime
import requests
from sshtunnel import SSHTunnelForwarder
from urllib import request, parse
import time,datetime
import json
from datetime import timedelta

app = flask.Flask(__name__)
CORS(app, supports_credentials=True)

    
@app.route('/usrdata', methods=['POST'])
def usrdata():
    fdata = data()
    usrdata = fdata.getuser()
    return jsonify({'usrdata':usrdata})

@app.route('/usrval', methods=['POST'])
def usrval():
    fdata = data()
    td = fdata.usrval()
    return jsonify({'td':td})

这里有几个问题,因为我这边接口用了另外一个地址,存在跨域访问的问题,这个问题纠结了很久,最后发现flask自己就有解决方案,就是flask_cors 库

引入后在代码中加入

CORS(app, supports_credentials=True)

即可解决。

另外,在代码中写了业务的类访问数据库以及做数据处理,路由访问的时候直接调用,这里函数名比较随意,毕竟自己用而已。在传输数据的时候,我用了jsonify来处理。

再来就是Tornado部分,因为业务flask都搞定了,Tornado只是分担转发而已,所以代码比较的简单。

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from mdata_api import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8008)  #flask默认的端口,可任意修改
IOLoop.instance().start()

最后就是把文件传到服务器啦,运行Tornado文件即可。

当然,要让Tornado在运行中能一直正常的运作下去,守护进程是不可缺少的。这里就要请到Supervisor

首先配置Supervisor,我这里做的很简单,配置supervisord.conf放到指定位置,运行Supervisor指定配置文件,之后运行即可。

配置如下:

# 为了方便管理,增加一个tornado组
[group:tornados]
programs=tornado-0
 
# 分别定义三个tornado的进程配置
[program:tornado-0]
# 进程要执行的命令
command=python3 /root/mdata_api_server.py --port=8008
directory=/root/
user=root
# 自动重启
autorestart=true
redirect_stderr=true
# 日志路径
stdout_logfile=//root/tornado0.log
loglevel=info

最后在服务器上运行sudo supervisorctl  再start  all 即可 ,搞定

这一套下来都是入门级的操作,可以优化的地方太多了,做商用可不敢这样来。

更新:

supervisord出问题,关闭重启

$ sudo unlink /tmp/supervisor.sock 
$ ps -ef | grep supervisord 
$ sudo kill -9 5622 
$ supervisord 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值