zoukankan      html  css  js  c++  java
  • centos 6.x 部署uwsgi+flask项目

    一、项目背景

    1. 公司需求要做一个在线统计页面;
    2. 统计在线人数,进行人数数据展示;
    3. 类似QQ官网在线人数

    二、测试环境

    [root@linux-node2 ~]# cat /etc/*release
    CentOS release 6.7 (Final)
    CentOS release 6.7 (Final)
    CentOS release 6.7 (Final)
    [root@linux-node2 ~]# python --version
    Python 2.7.12
    [root@linux-node2 ~]# pip --version
    pip 10.0.1 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)
    [root@linux-node2 ~]# 
    # 需要安装  flask
    pip  install  flask

    三、web框架

    说明:由于需求的页面只有单一一个页面,动态展示的人数数据也可以通过js动态请求接口获取,就考虑使用轻量级的web框架或者vue
    最终选择flask,毕竟笔者是后端开发人员,vue之后通过在本地测试练习进行基本知识学习!

    上代码:测试服务器的代码结构

    [root@linux-node2 bonline]# pwd
    /data/web/bonline
    [root@linux-node2 bonline]# ll
    total 24
    -rw-r--r-- 1 root root  293 Aug 13 13:49 bonline.py
    -rw-r--r-- 1 root root  231 Aug 13 20:04 b_uwsgi.ini
    drwxr-xr-x 6 root root 4096 Aug 13 13:42 static
    drwxr-xr-x 2 root root 4096 Aug 13 13:49 templates
    -rw-r--r-- 1 root root  117 Aug 13 19:51 wsgi.py
    -rw-r--r-- 1 root root  278 Aug 13 19:53 wsgi.pyc
    [root@linux-node2 bonline]# tree 
    .
    |-- bonline.py
    |-- b_uwsgi.ini
    |-- static
    |   |-- css
    |   |   `-- index.css
    |   |-- images
    |   |   `-- b.png
    |   |-- img
    |   |   |-- 1-login-icon.png
    |   |   |-- 4-pd.png
    |   |   |-- advert01.png
    |   |   |-- advert02.png
    |   |   |-- advert03.png
    |   |   `-- get_flash_player.gif
    |   `-- js
    |       |-- bj-report-tryjs.min.js
    |       |-- jquery-1.9.1.min.js
    |       `-- swfobject.js
    |-- templates
    |   `-- b.html
    |-- wsgi.py
    `-- wsgi.pyc
    
    6 directories, 16 files
    [root@linux-node2 bonline]# 

     bonline.py代码

    [root@linux-node2 bonline]# cat bonline.py 
    from flask import Flask,request,render_template
    
    app = Flask(__name__)
    
    @app.route('/',methods=['GET',])
    def hello_world():
        if request.method == "GET":
            return render_template('b.html')
    
    if __name__ == '__main__':
        app.run(host='192.168.10.12',port=80,debug=True)

    四,uwsgi服务

    说明:百度查看资料有很多方案解决通信服务结合flask的案例,独角兽也可以
    由于习惯使用了uwsgi的配置文件方式就使用uwsgi和flask通信后续也可以结合supervisor进行统一管理
    1. 安装uwsgi  # pip version  2.7
    pip  install  uwsgi  
    2. 配置文件    #cat b_uwsgi.ini
    [uwsgi]
    socket=127.0.0.1:9001
    chdir=/data/web/bonline
    wsgi-file=bonline.py
    vacuum=True
    master=True
    workers=4
    enable-threads=True
    threads=10
    pidfile=/var/run/uwsgi9001.pid
    daemonize=/var/log/uwsgi9001.log      # 开启守护进程在后台运行
    memory-report=True

    五、启动uwsgi服务

    1. 启动

    # 手动启动
    [root@linux-node2 bonline]# uwsgi b_uwsgi.ini
    # supervisor启动
    继续往下看

    2. 检查

    [root@linux-node2 bonline]# netstat -lnpt |grep 9001
    tcp        0      0 127.0.0.1:9001              0.0.0.0:*                   LISTEN      11334/uwsgi         
    [root@linux-node2 bonline]# 
    #由于uwsgi配置文件启动的时候是使用socket模式启动的,所有就就不写程序进行测试访问了,需要不是nginx代理

    3. nginx部署

    这步骤就省略了有兴趣的朋友可以移步去看我之前写的nginx代理django项目里面有些如何安装nginx以及安装步骤:使用Nginx代理Django

    六、supervisor管理uwsgi

    1. 安装

    这里也省略了之前有写过supervisor管理uwsgi的博客:supervisor管理uwsgi

    2. 修改配置文件

    [root@linux-node2 bonline]# cat b_uwsgi.ini 
    [uwsgi]
    socket=127.0.0.1:9001
    chdir=/data/web/bonline
    wsgi-file=bonline.py
    vacuum=True
    master=True
    workers=4
    enable-threads=True
    threads=10
    pidfile=/var/run/uwsgi9001.pid
    #daemonize=/var/log/uwsgi9001.log    # 这里关闭守护进程(必须操作)
    memory-report=True
    [root@linux-node2 bonline]#

    3. 配置子配置文件

    # 路径
    [include]
    files = /etc/supervisor/conf.d/*.ini
    [root@linux-node02 ~]# cd /etc/supervisor/conf.d/
    [root@linux-node02 conf.d]# ll
    total 8
    -rw-r--r-- 1 root root 1474 Jul 25 20:09 website.ini
    [root@linux-node01 conf.d]# cat website.ini
    [program:bonline]
    command =/usr/local/bin/uwsgi /data/web/bonline/b_uwsgi.ini ; 启动命令,可以看出与手动在命令行启动的命令是一样的
    autostart = true     ; 在 supervisord 启动的时候也自动启动
    stopsignal=QUIT    
    user=root           ; 启动的用户
    startsecs = 5     ; 启动 5 秒后没有异常退出,就当作已经正常启动了
    startretries = 3   ; 启动失败自动重试次数,默认是 3
    autorestart = true   ; 程序异常退出后自动重启
    redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
    stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
    stdout_logfile = /data/log/bonline_stdout.log
    stderr_logfile = /data/log/bonline_err.log

    4. 启动supervisord服务

    /etc/init.d/supervisord start

    5. 检查

    [root@linux-node02 bonline ]# supervisorctl status
    bonline                         RUNNING   pid 31595, uptime 14:35:07

    # 已经正常运行了,走到这里就表示supervisor就可以管理uwsgi服务不用在手动杀死进程启动uwsgi操作也避免了写shell脚本的麻烦!

    # 该文章只是作为本人的回忆笔记,参考性看个人因素!

  • 相关阅读:
    数据预处理
    数据挖掘-聚类分析
    数据挖掘分类--判别式模型 ----支持向量机
    神经网络
    数据挖掘-贝叶斯定理
    数据挖掘之分类和预测
    关于stm32的IO口的封装
    星际炸弹——炸弹爆炸时间计算
    共阳极数码管三极管驱动
    自定义的TIME.H头文件
  • 原文地址:https://www.cnblogs.com/supery007/p/9468551.html
Copyright © 2011-2022 走看看