Loading

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:\n" && \
  docker-compose logs --tail 23 -t $service_name_web
  echo -e "\n========================"
  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

posted @ 2020-05-31 00:14  dylanchu  阅读(158)  评论(0编辑  收藏  举报