• 前后端项目部署-5, flask+Gunicorn+gevent+supervisor+nginx+redis+mysql+mongodb,docker-compose部署


    ###

    flask+Gunicorn+gevent+supervisor+nginx+redis+mysql+mongodb,docker-compose部署

    ###

    flask+Gunicorn+gevent+supervisor+nginx+redis,docker-compose部署

    这个不多说了,不在赘述,这一篇主要研究一下,如果docker部署的时候,使用MongoDB,还有mysql,

    ####

    mysql的Dockerfile,这个地方指定了要使用mysql镜像,

    FROM mysql
    COPY ./init.sql /docker-entrypoint-initdb.d

      init.sql是数据库初始化文件,它会把flask应用需要用到的库和表创建出来。在mysql官方镜像中提供了容器启动时自动执行/docker-entrypoint-initdb.d文件夹下的脚本的功能(包括shell脚本和sql脚本) 。因此我们只要把初始化文件在镜像启动时复制到/docker-entrypoint-initdb.d文件夹就可以了

    ####

    重点,mysql的账号密码应该怎么配置在docker里面,是放到docker-compose.yml文件里面的,不需要手动设置了,

    只要你在文件里面指定了密码,你连接的时候使用这个密码就可以了,

    ###

    初始化脚本,init.sql

    CREATE DATABASE knights;
    use knights;
    
    CREATE TABLE favorite_colors (
      name VARCHAR(20),
      color VARCHAR(10)
    );
    
    INSERT INTO favorite_colors
      (name, color)
    VALUES
      ('Lancelot', 'blue'),
      ('Galahad', 'yellow');

    ####

    mongo的dockerfile

    FROM mongo

    很简单,就是一行,指定使用MongoDB镜像,

    还有很多配置,可以网上搜索,

    ###

    docker-compose.yml

    version: "2.0"
    
    services:
      redis:
        image: redis:buster
    
      mysql:
        build: ./mysql
        ports:
          - "32000:3306"
        environment:
          MYSQL_ROOT_PASSWORD: root
        restart: always
    
      mongodb:
        build: ./mongo
        hostname: mongodb
        ports:
          - '27017:27017'
    
      web:
        build:
          context: ./web/
        ports:
          - "8000:8000"
        links:
          - redis
          - mysql:mysql
    
      nginx:
        restart: always
        build: ./nginx/
        ports:
          - "80:80"
        links:
          - web

    ###

    mysql和redis的ip不能是以前的localhost或者127.0.0.1.要改为容器名字作为ip,或者指定hostname

    ###

    对应的app.py

    增加几个接口,用来验证容器启动之后,是否能访问,

    import pymysql
    import json
    import os
    import socket
    from redis import Redis
    from pymongo import MongoClient
    from flask import Flask, redirect, url_for, request, render_template
    import datetime
    
    app = Flask(__name__)
    redis = Redis(host=os.environ.get('REDIS_HOST', 'redis'), port=6379)
    
    myclient = MongoClient("mongodb://mongodb:27017/")
    
    mongo_db = myclient['test']  # 这个是库名
    mongo_collection = mongo_db['test_collection']  # 这个是表名
    
    
    def favorite_colors():
        config = {
            'user': 'root',
            'password': 'root',
            'host': 'mysql',
            'port': 3306,
            'database': 'knights'
        }
        connection = pymysql.connect(**config)
        cursor = connection.cursor()
        cursor.execute('SELECT * FROM favorite_colors')
        results = [{name: color} for (name, color) in cursor]
        cursor.close()
        connection.close()
    
        return results
    
    
    @app.route('/')
    def index() -> str:
        return json.dumps({'favorite_colors': favorite_colors()})
    
    
    @app.route('/redis')
    def hello():
        redis.incr('hits')
        return 'Hello Container World! I have been seen %s times and my hostname is %s.
    ' % (
        redis.get('hits'), socket.gethostname())
    
    
    @app.route('/mongo')
    def mongo():
    
        info = {
            'name': 'Zarten',
            'text': 'Inserting a Document',
            'tags': ['a', 'b', 'c'],
            'date': datetime.datetime.now()
        }
        mongo_collection.insert_one(info)
    
        find_result = mongo_collection.find_one()
    
        find_result = json.dumps(str(find_result))
    
        return find_result

    ####

    http://0.0.0.0:8000/,这个来验证mysql的连接结果,

    http://0.0.0.0:8000/redis,这个来验证redis的连接结果,

    http://0.0.0.0:8000/mongo,这个来验证mongo的连接结果,

    #####

    运行,

    第一步:先cd到项目根目录

    第二步:构建,docker-compose build

    第三步:启动,docker-compose up -d

    -d是后台启动,可以不加,不加运行的时候就能看到启动过程,

    第四步:查看,docker-compose ps

    验证:输入ip和端口号,查看一下是否正常访问

    第五步:停止,docker-compose stop

    ####

    其他具体flask+Gunicorn+gevent+supervisor+nginx,这些配置和文件,在前一篇文章,

    ###

    通过这篇文章,

    体会一下,docker是怎么使用redis+mysql+mongodb的,

    ####

    到此,整个后端的部署,就是这样了,

    使用的架构就是: flask+Gunicorn+gevent+supervisor+nginx+redis+mysql+mongodb,docker-compose部署

    ####

    下一步,把前端的vue集成进来, 看看如何使用docker部署

    ###

    ###

  • 相关阅读:
    TPYBoard—MicroPython开发板免费试用!你最想抱走哪款?
    MicroPython最全资料集锦丨TPYBoard全系列教程之文档+例程源码
    MicroPython-GPRS教程之TPYBoardv702GPRS功能测试
    MicroPython-GPS教程之TPYBoardv702控制5110显示当前经纬度
    MicroPython之TPYBoard v102开发板控制OLED显示中文
    TPYBoard开发板ADC数模转换一: 初识ADC使用
    Set集合
    Collection接口和List集合
    在方法中抛出异常,使用throw关键字抛出异常
    捕捉异常和异常的使用原则
  • 原文地址:https://www.cnblogs.com/andy0816/p/15374860.html
Copyright © 2020-2023  润新知