• exp-flask构建脚本


    with docker-compose

    Dockerfile:

    FROM ubuntu:18.04
    MAINTAINER chudongyu <chudongyu#126.com>
    
    ENV TZ=Asia/Shanghai
    
    # host也是Ubuntu1804,可以直接配置镜像源为host的源
    COPY sources.list /etc/apt/sources.list
    
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone  && 
        apt-get update -y && 
        apt-get install tzdata -y && 
        dpkg-reconfigure --frontend noninteractive tzdata
    
    RUN apt upgrade -y && 
        apt-get install -y vim && 
        apt-get install -y software-properties-common
        #add-apt-repository ppa:jonathonf/python-3.6
    
    RUN apt-get update && 
        apt upgrade -y && 
        apt install -y python3.6 python3-pip
    
    RUN apt-get install -y python3.6-dev python3.6-venv
    
    # 并更新pip
    RUN python3.6 -m pip install pip --upgrade -i https://pypi.douban.com/simple && 
        python3.6 -m pip install wheel -i https://pypi.douban.com/simple
    
    # 设置pip源
    RUN pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple/ && 
        pip3 config set global.trusted-host mirrors.aliyun.com
    
    RUN apt-get update -y && 
        apt-get install -y locales && 
        locale-gen en_US.UTF-8
    
    ENV LANG en_US.UTF-8
    ENV LANGUAGE en_US:en
    ENV LC_ALL en_US.UTF-8
    
    RUN python3.6 -m pip install --no-cache-dir numpy pycrypto gevent
    
    RUN pip install --no-cache-dir webrtcvad python-levenshtein pymongo pypinyin zhon
    
    RUN pip install --no-cache-dir redis 'kombu==4.6.3' 'celery[redis]==4.3.0' 
        'tornado==5.1.1' flower celery-flower
    
    RUN pip install --no-cache-dir requests
    
    RUN pip install --no-cache-dir 'coverage==5.0.4' 'eventlet==0.25.1' 'Flask-APScheduler==1.11.0' && 
        pip install --no-cache-dir flask Flask-Logger Flask-login flask-mongoengine  && 
        pip install --no-cache-dir Flask-Script Flask-Session gevent importlib-metadata python-Levenshtein
    
    RUN pip install --no-cache-dir uwsgi uwsgitop
    RUN pip install --no-cache-dir python-jenkins
    
    RUN apt install -y supervisor
    
    RUN pip install --no-cache-dir jieba nose pypinyin rednose 'smart-open==1.10.0' synonyms webrtcvad zhon
    
    EXPOSE 5001
    EXPOSE 5555
    
    WORKDIR /expression-flask
    
    #ENTRYPOINT ["celery", "worker", "-A", "celery_tasks.app"]
    ENTRYPOINT ["uwsgi", "--ini", "uwsgi.ini"]
    

    docker-compose:

    version: '2.1'
    services:
      web:
        image: exp-flask
        build: ./build-scripts
        container_name: exp-web
        ports:
          - 5001:5001
        volumes:
          - .:/expression-flask
        extra_hosts:
          - "redis-server.expression.hosts:192.168.0.4"
          - "mongo-server.expression.hosts:192.168.0.4"
          - "flask-server.expression.hosts:192.168.0.4"
        sysctls:
          - net.ipv4.tcp_keepalive_time=1800
          - net.ipv4.tcp_keepalive_probes=3
          - net.ipv4.tcp_keepalive_intvl=15
          - net.ipv4.tcp_max_tw_buckets=25000
          - net.ipv4.tcp_tw_reuse=1
          - net.ipv4.tcp_fin_timeout=10
          - net.ipv4.tcp_syncookies=0
          - net.core.somaxconn=65535
    
      flower:
        image: exp-flask
        container_name: exp-flower
        ports:
          - 50082:5555
        volumes:
          - .:/expression-flask
        extra_hosts:
          - "redis-server.expression.hosts:192.168.0.4"
          - "mongo-server.expression.hosts:192.168.0.4"
          - "flask-server.expression.hosts:192.168.0.4"
        entrypoint: celery flower -A app.async_tasks.celery_config.app --address=0.0.0.0 --port=5555
    
      nginx:
        image: nginx:stable
        container_name: exp-nginx
        restart: always
        network_mode: "host"
        volumes:
          - ./build-scripts/nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./build-scripts/nginx/conf.d:/etc/nginx/conf.d
          # 证书不要放在代码仓库中
          - /root/expression/nginx/cert:/etc/nginx/cert
          # 挂载日志路径
          - ./log/nginx:/var/log/nginx
          # 挂入静态文件
          - /root/expression/expression-vue/dist:/var/www/expression-vue/dist
          - /root/expression/expression-wx-static:/var/www/expression-wx-static
    

    jenkins:

    #!/bin/bash
    
    base_dir='/root/expression/'
    source_dir='/root/expression/expression-flask'
    git_repo='git@git.mooctest.net:Expressiveness/expression-flask.git'
    service_name_web='web'
    container_name_web='exp-web'
    service_name_flower='flower'
    container_name_flower='exp-flower'
    
    function get_latest_source_code(){
      # cd /somedir/doesnot/exisit
      echo "=============Start get latest source code============="
      if [ ! -d $source_dir  ];then
        mkdir -p $base_dir && 
        cd $base_dir && 
        git clone --recursive $git_repo
      else
        cd $source_dir && 
        git checkout . && 
        git pull && 
        echo "update submodule..." && 
        git submodule init && 
        git submodule update
      fi && 
      echo "=============End get latest source code============="
    }
    
    function restart_project(){
      echo "======== services runnig:" && 
      docker-compose ps && 
      echo . && 
      echo "restarting services..." && 
      lns=`docker-compose ps|grep $service_name_web|grep Up|wc -l`
      if [[ $lns -gt 0 ]]; then
          docker-compose restart $service_name_web $service_name_flower
      else
          docker-compose up -d $service_name_web $service_name_flower
      fi && 
      echo "====Wait 20s for uwsgi to respawn before re-checking processes===="
      sleep 20s && 
      docker-compose ps && 
      echo "========================"
    }
    
    function tail_log(){
      echo -e "last 23 lines of the log file:
    " && 
      docker-compose logs --tail 23 -t $service_name_web
      echo -e "
    ========================"
      lns=`docker-compose ps|grep $container_name_web|grep Up|wc -l`
      if [[ $lns -gt 0 ]]; then
          exit 0
      else
          exit 1
      fi
    }
    
    get_latest_source_code && 
    cd $source_dir && 
    restart_project && 
    tail_log
    

  • 相关阅读:
    ABAP 捕获回车键更新值
    拼接报错信息
    你知道什么叫金丝雀分布吗?你知道如何在Service Mesh微服务架构中实现吗?
    java代码在阿里云函数计算中的应用
    创投机构BP联系方式3
    迁移到RDS或者腾讯云MYSQL实例发生sql_mode=only_full_group_by错误的解决
    我国广告业存在的问题
    【微信小程序】固定头部,只滚动内容部分功能
    低智商屌丝蒟蒻的2012成都题解
    罪过啊,废了好大的力气才搞出了 Kth 数
  • 原文地址:https://www.cnblogs.com/dylanchu/p/12995809.html
Copyright © 2020-2023  润新知