From 157a83711f5cac431fc511ae600cf04e788e6fd7 Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:34:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=9F=BA=E4=BA=8Edo?= =?UTF-8?q?cker=20=E4=B8=80=E9=94=AE=E9=83=A8=E7=BD=B2=E7=9A=84Dockerfile?= =?UTF-8?q?=20=E5=92=8Cdockercompose.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 31 +++++++++++++++++++++++++++ dockercompose.yaml | 27 +++++++++++++++++++++++ dockerdata/Dockerfile.server | 4 +++- dockerdata/docker-compose.yml | 40 +++++++++++++++++++++++++++++++++++ dockerdata/gunicorn.conf.py | 19 +++++++++++++++++ start.sh | 26 +++++++++++++++++++++++ 6 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 dockercompose.yaml create mode 100644 dockerdata/docker-compose.yml create mode 100644 dockerdata/gunicorn.conf.py create mode 100644 start.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..84ff758 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +FROM python:3.7-alpine + +COPY . /app/ + +WORKDIR /app/ + +ENV TIME_ZONE Asia/Shanghai +ENV PIPURL "https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.douban.com" + +RUN apk update \ + && apk add --virtual mysqlclient-build gcc python3-dev musl-dev \ + && apk add --no-cache mariadb-dev \ + && apk add --virtual system-build linux-headers libffi-dev \ + && apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \ + && apk add --no-cache bash bash-doc bash-completion \ + && apk add --no-cache libxslt-dev tzdata g++ +RUN echo "${TIME_ZONE}" > /etc/timezone \ + && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime +RUN pip --no-cache-dir install -i ${PIPURL} --upgrade pip \ + && pip --no-cache-dir install -i ${PIPURL} -r requirements.txt \ + && pip --no-cache-dir install -i ${PIPURL} gunicorn +RUN apk add mysql-client +RUN chmod +x start.sh +RUN sed -i 's/MYSQL_HOST = "127.0.0.1"/MYSQL_HOST = "mysql"/' applications/config.py +RUN sed -i 's/REDIS_HOST = "127.0.0.1"/REDIS_HOST = "redis"/' applications/config.py + + +WORKDIR /app + + +CMD /bin/sh diff --git a/dockercompose.yaml b/dockercompose.yaml new file mode 100644 index 0000000..f111a1a --- /dev/null +++ b/dockercompose.yaml @@ -0,0 +1,27 @@ +version: '3' +services: + redis: + image: redis + ports: + - "63799:6379" + mysql: + image: mysql + environment: + MYSQL_ROOT_PASSWORD: 123456 + LANG: C.UTF-8 + TZ: Asia/Shanghai + MYSQL_CHARSET: utf8mb4 + MYSQL_COLLATION: utf8mb4_unicode_ci + ports: + - "3306:3306" + flask: + build: + context: . + dockerfile: Dockerfile + ports: + - "5000:5000" + depends_on: + - redis + - mysql + restart: always + command: sh -c "./start.sh" diff --git a/dockerdata/Dockerfile.server b/dockerdata/Dockerfile.server index 8cd61e3..01465bb 100644 --- a/dockerdata/Dockerfile.server +++ b/dockerdata/Dockerfile.server @@ -8,6 +8,8 @@ WORKDIR /app/ ENV TIME_ZONE Asia/Shanghai -RUN chmod +x /app/start.sh +RUN echo "${TIME_ZONE}" > /etc/timezone \ + && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \ + && chmod +x /app/start.sh CMD ./start.sh diff --git a/dockerdata/docker-compose.yml b/dockerdata/docker-compose.yml new file mode 100644 index 0000000..0faa82c --- /dev/null +++ b/dockerdata/docker-compose.yml @@ -0,0 +1,40 @@ +version: '3' +services: + mysql: + image: "mysql:5.7" + container_name: mysql + restart: always + ports: + - "3306:3306" + volumes: + - "./dockerdata/mysql/data:/var/lib/mysql" + - "./dockerdata/mysql/initdb:/docker-entrypoint-initdb.d" + environment: + LANG: C.UTF-8 + TZ: Asia/Shanghai + MYSQL_ROOT_PASSWORD: 123456 + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + networks: + flask-network: + ipv4_address: 172.10.1.31 + + flask: + build: + context: . + dockerfile: Dockerfile.server + container_name: flask + restart: always + ports: + - "8000:8000" + depends_on: + - mysql + networks: + flask-network: + ipv4_address: 172.10.1.11 + +networks: + flask-network: + driver: bridge + ipam: + config: + - subnet: 172.10.0.0/16 diff --git a/dockerdata/gunicorn.conf.py b/dockerdata/gunicorn.conf.py new file mode 100644 index 0000000..4aa61bf --- /dev/null +++ b/dockerdata/gunicorn.conf.py @@ -0,0 +1,19 @@ +import os +import multiprocessing + +bind = '0.0.0.0:8000' +backlog = 512 +chdir = os.path.dirname(os.path.abspath(__file__)) +timeout = 30 +worker_class = 'sync' + +workers = multiprocessing.cpu_count() * 2 + 1 +threads = 2 +loglevel = 'info' +access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' + +if not os.path.exists('logs'): + os.mkdir('logs') + +accesslog = os.path.join(chdir, "logs/gunicorn_access.log") +errorlog = os.path.join(chdir, "logs/gunicorn_error.log") diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..b799283 --- /dev/null +++ b/start.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Wait for MySQL container to be ready +echo "Waiting for MySQL container to start..." +until mysql -h mysql -uroot -p123456 -e ";" 2>/dev/null; do + echo "MySQL container not ready, sleeping for 5 seconds..." + sleep 5 +done +echo "MySQL container started successfully!" + +# to start create the dababase +echo " start to create the databse... " +mysql -uroot -p123456 -hmysql -e 'CREATE DATABASE PearAdminFlask DEFAULT CHARSET UTF8;' + + +# Initialize Flask database +echo "Initializing Flask database..." +flask db init +flask db migrate +flask db upgrade +flask admin init + +# Start Flask application +echo "Starting Flask application..." +python3 app.py +