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 #这个地方如果是用flask框架,作用不太大,本人经过测试,如果是django的话应该设置成webapp:app
 3 callable = app #这个是必须设置的,如果用flask框架
 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

完毕!

    

原文地址:https://www.cnblogs.com/gide/p/11262856.html

时间: 2024-08-29 06:37:07

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

Flask+uwsgi+Nginx+Ubuntu部署教程

学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的过程就会重复一次.不知道多少人的膝盖中箭了呢?我也这样干过,这么做确实很蠢,所以我决定写一篇 Flask+uwsgi+Nginx+Ubuntu 的部署教程,解答一些我自己在这个过程中的疑问,从原理到方案,以一个小白的角度,总结一下部署.运维这件事,应该对初学 Flask 需要部署的同学有些帮助. 环

Flask+uwsgi+Nginx+Ubuntu部署

学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Python选择的是2.7.2这个是Ubuntu系统自带的学起来感觉还是简单的 不用去软连,目前自己的flask是python3写的 ,慢慢去过渡,先吧这个给搞通了,那么在优化也是很顺手的.其实对于很多的原理自己也是一知半解,先吧这个给搭起来,慢慢去了解里面的逻辑什么的. Nginx Nginx 是高效的

Docker(八)用docker compose部署服务

用docker compose部署服务 docker compose可以方便我们快捷高效地管理容器的启动.停止.重启等操作,它类似linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像.数据卷.网络模式.监听端口等信息.我们可以在一个compose文件中定义一个多容器的应用,然后通过该compose来启动这个应用. 下载安装docker-compose # curl -L https://github.com/docker/compose/release

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

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

使用Docker Compose部署SpringBoot应用

使用Docker Compose部署SpringBoot应用 原创: 梦想de星空 macrozheng 6月19日 Docker Compose是一个用于定义和运行多个docker容器应用的工具.使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了. 安装 下载Docker Compose: curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/doc

Docker Compose部署Nexus3时的docker-compose,yml代码

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

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

场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611 在上面已经实现部署Nexus后,初次登录的默认账户密码: admin admin123 但是在进行登录时却提示 密码不正确后者没权限,根据提示密码文件的位置在nexus-data/admin.password下. 因为上面在docker-compose.yml文件

使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance

场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611 在上面部署好Nexus后,启动后日志提示: Unable to create directory /nexus-data/instance 注: 博客:https://blog.csdn.net/badao_liumang_qizhi关注公众号霸道的程序猿获取编程

Docker Compose 部署Nginx服务实现负载均衡

Compose简介: Compose是Docker容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose,不再需要使用shell脚本来启动容器.Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用.docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过image 指令指定镜

使用docker compose部署服务

谈到微服务的话题,技术上我们往往会涉及到多服务.多容器的部署与管理. Docker 有三个主要的作用:Build, Ship和Run.使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YUML语法)文件,在这个文件上面描述应用的架构,如使用什么镜像.数据卷.网络.绑定服务端口等等,然后再用一条命令就可以管理所有的服务(如启动.停止.重启.日志监控等等). 本文通过发布3个APP(App1,App2,App3),来演示Docker在服务发布.网