• python部署-Flask+uwsgi+Nginx


    一、Flask部分(app.py)

    flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力。

    from app import create_app
    from singtec_Config import *
    
    app = create_app(DEV_MODEL)
    
    @app.route('/')
    def hello_world():
        return 'Hello World!!!'
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=8000)

    二、uwsgi部分(uwsgi.ini)

    简单介绍一下uwsgi:在python web开发中,我们经常使用uwsgi配合nginx部署一个web框架,如Djangoflask。同时我们又会说,框架和web服务器之间要符合WSGI协议。那就来厘清一下这几个概念。

    1、web服务器和web框架

      web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。Nginx就是一个web服务器,Djangoflask就是web框架。

    2、WSGI和uwsgi

      WSGI是一种通信协议。WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Web框架)与 Web Server 之间交互的一种规范。

      uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

      uwsgi是一种通信协议,不过跟WSGI分属两种东西,该协议下速度比较快。

    [uwsgi]
    # 如果使用nginx就用socket
    socket
    =0.0.0.0:8000

    # 如果不使用socket,直接用uwsgi启动程序,就是用http
    #http=0.0.0.0:8000

    # 如果程序中有文件下载,图片、视频等就需要就上这个配置
    sgi-disable-file-wrapper=true

    # flask程序在你服务器上的目录
    chdir=/opt/www/singtec/www/singtecProject

    # flask项目的启动文件
    wsgi-file=manage.py
    # 启动文件中的flask app(即第一部分中的app)
    callable
    =app

    # 启动的进程数 processes
    =4

    #启动的线程数 threads=2

    # 是否启动多线程 enable-threads=True

    # 是否将uwsgi的运行线程设置为主线程,如果设置为主进程,在开启的其他的子进程会随着主进程关闭而关闭 master
    =True

    # 设置用来记录uwsgi进程号的文件 pidfile
    =uwsgi.pid

    # 设置uwsgi运行的日志文件(可以记录程序运行的) daemonize
    =uwsgi.log

    #在每个worker而不是master中加载应用 lazy
    -apps=true

    # 设置编码(不是必须) env LANG
    ="en_US.UTF-8" env LANGUAGE="en_US.UTF-8"

    三、nginx部分

      简单介绍一下nginx:Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

    常用功能:反向代理、正向代理、负载均衡、服务器的动静分离、高可用等,这里就不一一介绍了,主要介绍一下关于uwsgi的配置。

    # 设置用户
    user root;
    # 设置worker及可以理解为进程或者线程数 worker_processes
    4;
    # 日志设置 error_log logs
    /error.log; error_log logs/error.log notice; error_log logs/error.log info;
    # 每个worker的最大连接数 events { worker_connections
    1024; } # http全局设置 http {

    # 设置mine.type类型 include mime.types; default_type application
    /octet-stream;   
      # 日志格式 log_format main
    '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
      # 运行日志 access_log logs
    /access.log main;

      # 如果有上传文件,例如视频或者图片,限制文件传输大小的
    client_max_body_size 100M;  
        # 服务器级别的设置
        server {

         # 设置监听端口 listen
    80;
         # 设置访问的域名 server_name localhost;

         # 请求级别的设置 

         # /便是监听什么参数都没有的根目录请求

         location / {

           # 设置请求的根目录

           root   /opt/www/singtec;

              # 设置根目录的请求静态index.html

                index  index.html index.htm;

             # 一下两行是设置请求的时候解析真实地址的

                proxy_set_header X-Real-IP $remote_addr;

    
    

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            }

         # 设置监听请求以api开头的接口

            location /api{

    
    

                # 设置导入uwsgi_params文件(通常在nginx安装的时候,默认和nginx.cong文件在同一个目录下)

                include /usr/local/nginx/conf/uwsgi_params;

              # 设置nginx的反向代理路由,只要请求api开头的都去访问0.0.0.0:8000程序,及我们的flask程序的接口,实现uwsgi的反向代理

                uwsgi_pass 0.0.0.0:8000;

            }

        }

  • 相关阅读:
    在Activity/Fragment以外使用Toast【转】
    Android笔记(四十七) Android中的数据存储——XML(三)SAX解析
    Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
    Python的包(Packages)
    编写你自己的Python模块
    了解Python控制流语句——continue 语句
    了解Python控制流语句——break 语句
    了解Python控制流语句——for 循环
    了解Python控制流语句——while 语句
    了解Python控制流语句——if语句
  • 原文地址:https://www.cnblogs.com/Se7eN-HOU/p/12674522.html
Copyright © 2020-2023  润新知