• 简单介绍

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的配置说明:

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

docker-compose的一些常用操作

 docker-compose up -d nginx                     构建建启动nignx容器

 docker-compose exec nginx bash            登录到nginx容器中

 docker-compose down                              删除所有nginx容器,镜像

 docker-compose ps                                   显示所有容器

 docker-compose restart nginx                   重新启动nginx容器

 docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

 docker-compose build nginx                     构建镜像 。        

 docker-compose build --no-cache nginx   不带缓存的构建。

 docker-compose logs  nginx                     查看nginx的日志 

 docker-compose logs -f nginx                   查看nginx的实时日志

 docker-compose config  -q                        验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 

 docker-compose events --json nginx       以json的形式输出nginx的docker日志

 docker-compose pause nginx                 暂停nignx容器

 docker-compose unpause nginx             恢复ningx容器

 docker-compose rm nginx                       删除容器(删除前必须关闭容器)

 docker-compose stop nginx                    停止nignx容器

 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 

    

 version: ""
services:
webapp:
build: ./webapp #webapp目录地址,当前文件夹
container_name: webapp #容器名称
nginx:
image: nginx #需要nginx镜像,所以最好在本地事先生成一个nginx镜像
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf #做配置映射
depends_on:
- webapp #依赖webapp
ports:
- "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

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

    app.py

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

    requirements.txt

 Flask
uwsgi

    uwsgi.ini  

 [uwsgi]
module = app:app #目录.文件:app对象
#callable = app #或者这么设置
master = true
processes = 4
chdir = /webapp #指定运行目录
socket = :8002 #监听端口
chmod-socket = 666
logto = /webapp/app.log
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

完毕!

    

flask+uwsgi+nginx+docker-compose部署的更多相关文章

  1. 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程

    学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...

  2. Flask+uwsgi+Nginx+Ubuntu部署教程

    学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...

  3. Flask+uwsgi+Nginx+Ubuntu部署

    学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Pyth ...

  4. flask +gevent+nginx+Gunicorn+supervisor部署flask应用

    上篇   可以完美部署flask ,但是视乎在结合gevent+apscheduler 实现异步非阻塞后台和定时任务的时候视乎不是那么完美.请教了前辈,决定使用flask+gevent+nginx+g ...

  5. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

  6. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  8. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  9. 在Windows Server 2019通过Docker Compose部署Asp.Net Core

    一.安装Docker Enterprise 安装文档是: https://docs.docker.com/install/windows/docker-ee/ 安装完成后,如下图 二.首先,拉取一个W ...

  10. 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

随机推荐

  1. sentinel 滑动窗口统计机制

    sentinel的滑动窗口统计机制就是根据当前时间,获取对应的时间窗口,并更新该时间窗口中的各项统计指标(pass/block/rt等),这些指标被用来进行后续判断,比如限流.降级等:随着时间的推移, ...

  2. Android 即时通讯开发小结(一)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  3. 10月18日 JS begant

    1.JS的本质就是处理数据,数据来自后台的数据库,所以变量起到了临时存储的作用, ES制定了js的数据类型 2.数据类型有哪些? (1)字符串 String (2)数字  Number (3)布尔 B ...

  4. 将GMap封装为Activex供QT使用(工具:VS2017,QT5.12) 更新部署到其它电脑

    由于一开始定的开发平台在QT下,到后面要加入地图控件.qt里本身带有地图qmap(在qt的官方案例中可以找到,用qml做的),但只有固定的几个地图源,要做google或者bing地图,时间和人力不允许 ...

  5. 并发编程-concurrent指南-原子操作类-AtomicLong

    可以用原子方式更新的 long 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicLong 可用在应用程序中(如以原子方式增加的序列号), ...

  6. Codeforces Gym100543L:Outer space invaders(区间DP)

    题目链接 题意 有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人 ...

  7. flask请求上下文 (转)

    本篇阅读目录 一.flask中的CBV 二.werkzeug + 上下文初步解读 三.偏函数和线程安全 回到顶部 一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV ...

  8. ajax 前端发含有列表的数据

    在前端页面也可以给后端发送一个包含列表的数据 html <body> <h3>index页面 </h3> <input type="text&quo ...

  9. Perm排列计数(新博客试水,写的不好,各路大神见谅)

    B. Perm 排列计数 内存限制:512 MiB 时间限制:1000 ms 标准输入输出   题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i&l ...

  10. Bzoj 3166 [Heoi2013] Alo 题解

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1118  Solved: 518[Submit][Status ...