我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Flask+python3+super

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Flask+python3+super

背景

手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码docker化,用于持续部署。

技术架构

原来的代码使用gunicorn+gevent+supervisor+flask+DB的架构;具体的细节如下:

本地服务器搭建了一个nginx域名服务器,里面区分PC端还是手机端;
访问域名通过nginx,访问前端静态页面的内容
静态页面中加载指定地址的数据,提供数据的服务由flask后端提供接口;
后端提供的接口,通过访问redis缓存和mongodb数据库,返回相应的数据;

docker-compose

上篇文章说了flask项目是怎么拆分和组合的,但是上次仅仅是使用docker,多个容器之间使用的--link连接起来的,本篇文章将介绍如何使用docker-compose代替原来的多个docker命令;

  • docker compose是什么可以自行搜索,我直接上我的docker-compose.yml

        version: '3'
        
        services:
             flask:
                image: "flask:latest"
                restart: always
                depends_on:
                  - mongoDB 
               - redisDB
                tty: true
                stdin_open: false
                environment:
                  SLEEP_SECOND: 10
                container_name: flask
                logging:
                  driver: "json-file"
                  options:
                    max-size: "200M"
                    max-file: "10"
                command: "gunicorn manage:app -k gevent -w 4 -b 0.0.0.0"
                volumes:
                  - $HOME/logs:/app/logs
            networks:
              - inline-network
            ports:
              - "8000:8000"
    
          matrix:
            image: "flask:latest"
            restart: always
            depends_on:
              - mongoDB
              - redisDB
            tty: true
            stdin_open: false
            environment:
              SLEEP_SECOND: 10
            container_name: matrix
            command: "flask matrix"
            volumes:
              - $HOME/logs:/app/logs
              - /etc/localtime:/etc/localtime
            networks:
             - inline-network
    
          broadcast:
            image: "flask:latest"
            restart: always
            depends_on:
              - mongoDB
              - redisDB
            tty: true
            stdin_open: false
            environment:
              SLEEP_SECOND: 10
            container_name: broadcast
            command: "flask broadcast"
            volumes:
              - $HOME/logs:/app/logs
              - /etc/localtime:/etc/localtime
            networks:
              - inline-network
    
        redisDB:
          image: "redis:latest"
          container_name: redis
          restart: always
          networks:
            inline-network:
              aliases:
                - redis
          ports:
            - "6379:6379"
    
        mongoDB:
          image: "mongo:latest"
          restart: always
          container_name: mongo
          ports:
            - "27017:27017"
          volumes:
            - /var/lib/mongo:/data/db
          networks:
            inline-network:
              aliases:
                - mongo
    
    networks:
      inline-network:
        driver: "bridge"
    
```
  • 解释:所有的启动的dontainer都在inline-network网络环境中,所以可以直接使用aliases指定的名字作为数据库连接时候的host,本来是不打算将数据库的端口的,只给flask用,但是后面由于切换的时候是现切换数据库,在切换后段flask的镜像,所以就将数据库端口和宿主机绑定了。
  • 其中flask、matrix、broadcast,都是之前代码中的功能,使用supervisor启动的,现在单独启动三个docker进程去完成。

前端docker

前端的PC端和移动端,都使用npm构建成dist文件,然后通过nginx定向到指定的dist文件内容就可以,所以我们对前端的代码也进行了docker化,使用的是nginx;

  • dockerfile:

    FROM nginx:1.15-alpine
    
    COPY dist/ /usr/share/nginx/html
    
    COPY default.conf /etc/nginx/conf.d/default.conf
    
    ENTRYPOINT nginx -g "daemon off;"
  • default.conf

     server {
         listen       80;
         server_name  localhost;
     
         #charset koi8-r;
         #access_log  /var/log/nginx/host.access.log  main;
     
         location / {
             root   /usr/share/nginx/html;
             index  index.html index.htm;
             try_files $uri $uri/ /index.html;
         }
     
     
         #error_page  404              /404.html;
     
         # redirect server error pages to the static page /50x.html
         #
         error_page   500 502 503 504  /50x.html;
         location = /50x.html {
             root   /usr/share/nginx/html;
         }
     }
  • PC端和移动端使用的dockerfile和default.conf都是上面的;
  • 在服务其部署的时候,只需要部署域名服务,将PC端和移动端的docker镜像映射到宿主机的8088和8087端口,服务器nginx配置中根据PC请求和移动端的请求,定位到指定的PC/移动端nginx镜像即可。

总结

本次镜像化大概花了一周的时间,包括测试和解决一些坑,很多知识点包括原来的项目都不是太熟悉,所以记录一下,可能回头会发现这些很LOW,但是相信对一些人还是有用的。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Flask+python3+super

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Flask+python3+super

背景手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码docker化,
2023-01-31

Python3 flask nginx

配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理。至于如何使用搜索即可,并不难1、安装python3yum -y install zlib-devel bzip2-devel openssl-devel ncurses
2023-01-30

flask + Python3 实现的的

**背景: 1.平时测试接口,总是现写代码,对测试用例的管理,以及测试报告的管理持久化做的不够,2.工作中移动端开发和后端开发总是不能并行进行,需要一个mock的依赖来让他们并行开发。3.同时让自己锻炼去开发测试平台,掌握flask开发程序
2023-01-31

如果使用 Python3(Flask)

[TOC]1.1、打开浏览器输入下面网址https://wx.qq.com/按下F12打开开发调试模式。我们可以看到产生二维码的图片的URL为https://login.weixin.qq.com/qrcode/wbO9FUkKHg==,但
2023-01-31

python3 flask 使用连接池

在真实的线上环境连接数据库一般都是要使用连接池的,连接池统一管理数据库连接,可以提高应用性能。python数据库连接池可以使用dbutils和PySQLPool但是这两个库似乎都只支持python2不支持python3,最后折腾了半天,Py
2023-01-31

python3-开发进阶Flask的基础

一、概述最大的特点:短小精悍、可拓展强的一个Web框架。注意点:上下文管理机制,依赖wsgi:werkzurg 模块二、前奏学习werkzurg先来回顾一个知识点:一个类加括号会执行__init__方法,一个对象加括号执行__call__方
2023-01-30

python3--object类,继承与派生,super方法,钻石继承问题

昨天内容复习组合:什么有什么的关系(例:老师有生日)classBirthday:def__init__(self,year,month,day):self.year=yearself.month=monthself.day=daydeffm
2023-01-30

Flask

python三大框架预览Python Web框架分类 功能分类: a:收发消息相关(socket) b:根据不同的URL执行不同的函数(业务逻辑相关的) c:实现动态网页(字符串的替换)
2023-01-30

java什么是super

java中super能够用来訪问超类的构造方法和被子类所隐藏的方法。super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。假设子类中有方法与超类中的方法名称和參数同样,则超类中的方法就被
java什么是super
2014-09-27

Flask-Mail

WOW! 我的大号QQ收到了小号QQ的邮件! 小玩Flask-Mail先到小号邮箱开启服务并获取获取授权码  https://jingyan.baidu.com/article/b0b63dbf1b2ef54a49307054.html接下
2023-01-30

Flask Blueprint

Blueprint简介Blueprint它是Flask项目的一种组件式开发,可以在一个应用内或跨越 多个项目共用蓝图。使用蓝图可以极大地简化大型应用的开发难度,也为Flask扩展 提供了一种在应用中注册服务的集中式机制。 模块化管理程序路由
2023-01-31

Flask 扩展系列之 Flask-R

简介安装快速入门一个最小的 api 例子资源丰富的路由端点参数解析数据格式化完整 TODO 应用例子Flask-RESTful是一个Flask的扩展,它增加了对快速构建REST APIs的支持。它是一种轻量级的抽象,可以与现有的ORM/库一
2023-01-31

AJPFX区分this和super

this和super的区别No.区别thissuper1操作属性this.属性:表示调用本类中的属性,如果本类中的属性不存在,则从父类查找super.属性:表示调用父类中的属性2操作方法this.方法():表示调用本类中的方法,如果本类中的
2023-06-02

Flask信号

信号是可以在固定的事件发生时执行某些事情一个简单的使用信号的例子:from flask import Flask,signalsapp = Flask(__name__)def signal_func(*args,**kwargs):
2023-01-31

Flask send_file requ

send_file:send_file(filename_or_fp,mimetype=None, as_attachment=False,attachment_filename=None, add_etags=True,cache_tim
2023-01-31

Python super(钻石继承)

1.   Python的继承以及调用父类成员python子类调用父类成员有2种方法,分别是普通方法和super方法假设Base是基类class Base(object):   def __init__(self):    
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录