zoukankan      html  css  js  c++  java
  • flask+uwsgi+nginx+docker-compose部署

    • 简单介绍

    Flask这里就不多阐述了,已经是很流行的一个轻量级python框架了,对于小、中型项目特别适合。这里用docker的compose编排部署.
    uwsgi 简单的说明下,uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

    Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

    这是官方说法,大概还是看具体例子能够说明一切,https://www.runoob.com/python3/python-uwsgi.html(这里是http方式),另外一种是socket方式,

    下面附一张图来说明

    现在大部分web服务器(如nginx)支持uwsgi, socket是最高效的一种网络通信方式,socket通信速度会比http快

    uwsgi.ini的配置说明:

     1 http-socket=:5000//配置uwsgi监听的socket(ip+端口)
     2 callable=app//uwsgi调用的python应用实例名称,Flask里默认是app,根据具体项目代码实例命名来设置
     3 wsgi-file=server.py//调用的主程序文件,绝对路径或相对于该ini文件位置的相对路径均可
     4 master=true//以独立守护进程运行
     5 processes=8//配置进程数量
     6 threads=4//配置线程数量
     7 enable-threads=true//允许在请求中开启新线程
     8 stats=127.0.0.1:9191//返回一个json串,显示各进程和worker的状态
     9 pidfile=uwsgi.pid//存放uwsgi进程的pid,便于重启和关闭操作
    10 listen=1024//监听队列长度,默认100,设置大于100的值时,需要先调整系统参数
    11 chdir = /project  //指定项目目录为主目录
    12 daemonize=uwsgi.daemonize.log//以守护进程运行,日志文件路径
    13 memory-report=true//启用内存报告,报告占用的内存
    14 buffer-size=65535//设置请求的最大大小 (排除request-body),这一般映射到请求头的大小。默认情况下,它是4k,大cookies的情况下需要加大该配置

    docker-compose的一些常用操作

     1 docker-compose up -d nginx                     构建建启动nignx容器
     2 
     3 docker-compose exec nginx bash            登录到nginx容器中
     4 
     5 docker-compose down                              删除所有nginx容器,镜像
     6 
     7 docker-compose ps                                   显示所有容器
     8 
     9 docker-compose restart nginx                   重新启动nginx容器
    10 
    11 docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
    12 
    13 docker-compose build nginx                     构建镜像 。        
    14 
    15 docker-compose build --no-cache nginx   不带缓存的构建。
    16 
    17 docker-compose logs  nginx                     查看nginx的日志 
    18 
    19 docker-compose logs -f nginx                   查看nginx的实时日志
    20 
    23 docker-compose config  -q                        验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
    24 
    25 docker-compose events --json nginx       以json的形式输出nginx的docker日志
    26 
    27 docker-compose pause nginx                 暂停nignx容器
    28 
    29 docker-compose unpause nginx             恢复ningx容器
    30 
    31 docker-compose rm nginx                       删除容器(删除前必须关闭容器)
    32 
    33 docker-compose stop nginx                    停止nignx容器
    34 
    35 docker-compose start nginx                    启动nignx容器
    • 正式部署
    1. 先看下目录

        创建文件夹mkdir docker-flask

                创建文件docker-compose.yml nginx.conf  文件夹webapp

                 cd webapp里面创建文件Dockerfile app.py requirements.txt uwsgi.ini

        文件内容依次如下:

        docker-compose.yml 

        

     1 version: "2"
     2 services:
     3     webapp:
     4         build: ./webapp  #webapp目录地址,当前文件夹
     5         container_name: webapp  #容器名称
     6     nginx:
     7         image: nginx  #需要nginx镜像,所以最好在本地事先生成一个nginx镜像
     8         volumes:
     9             - ./nginx.conf:/etc/nginx/conf.d/default.conf  #做配置映射
    10         depends_on:
    11             - webapp   #依赖webapp
    12         ports:
    13             - "8888:80"

    编排服务的其实就是将多个分别的服务关联到一起启动,可以事先对每个服务先做下单独的运行,都成功的话,在配置的docker-compose里面。

        nginx.conf     

    server {
        listen 80;
        server_name 0.0.0.0; 
        location / {
            include uwsgi_params;
            uwsgi_pass webapp:8002; 
        }
    }

        webapp文件夹里的文件内容

        Dockerfile

    1 FROM python:3.5
    2 ENV TZ=Asia/Shanghai
    3 RUN mkdir /webapp
    4 WORKDIR /webapp  #指定工作目录
    5 COPY . /webapp
    6 
    7 RUN pip install -i https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com -r requirements.txt #这里用国内信任的豆瓣源,速度比较快
    8 
    9 CMD ["uwsgi", "--ini", "/webapp/uwsgi.ini"] #初始化的启动操作

        app.py

     1 #!/usr/bin/env python
     2 #coding=utf-8
     3 
     4 from flask import Flask,render_template_string
     5 
     6 app = Flask(__name__)
     7 
     8 @app.route("/")
     9 def index():
    10         return render_template_string('<h1>Hello Flask</h1>')
    11 
    12 if __name__ == "__main__":
    13     app.run(debug=True,host='127.0.0.1',port=5000) #这里是用python app.py启动的设置,如果用uwsgi这种,可以无需关注 

        requirements.txt

    1 Flask
    2 uwsgi

        uwsgi.ini  

     1 [uwsgi]
     2 module = app:app #目录.文件:app对象
     3 #callable = app #或者这么设置
     4 master = true
     5 processes = 4
     6 chdir = /webapp #指定运行目录
     7 socket = :8002  #监听端口
     8 chmod-socket = 666
     9 logto = /webapp/app.log
    10 vacuum = true

     2、都配置完成后,在docker-flask目录下执行

      docker-compose up  或者 docker-compose up -d 后台运行

          docker ps 查看运行的容器

      docker-compose ps 查看运行的服务

     3、如果没什么问题的话在浏览器直接输入 127.0.0.1:8888就会看到

      Hello Flask

    完毕!

        

  • 相关阅读:
    转载:通过Servlet生成验证码
    转载:web工程中URL地址的推荐写法
    使用Git上传本地项目代码到github
    $watch 和 $apply
    平时用的sublime插件
    zTree.js
    js
    npm install详解
    git
    git基础
  • 原文地址:https://www.cnblogs.com/gide/p/11262856.html
Copyright © 2011-2022 走看看