From 631d86e22aeb028da0a72903885dda975325ca8b Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:30:37 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=BA=86requirement,?= =?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E4=B8=BB=E7=9B=AE=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E5=90=8C=E5=90=8D=E6=96=87=E4=BB=B6=E8=A2=AB=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index a3a6f6c..a5a404d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,5 @@ dockerdata docker-compose.yml Dockerfile.server README.md -requirements.txt !dockerdata/config.py !dockerdata/start.sh -- Gitee From 6685310b5f9f2259a8f22d5bbc0c8368d5b4379c Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:31:08 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0dockerdata=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile.server | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 Dockerfile.server diff --git a/Dockerfile.server b/Dockerfile.server deleted file mode 100644 index 01465bb..0000000 --- a/Dockerfile.server +++ /dev/null @@ -1,15 +0,0 @@ -FROM pearadminflask/python3.7-flask:pillow - -COPY . /app/ -COPY dockerdata/config.py /app/applications/ -COPY dockerdata/start.sh /app - -WORKDIR /app/ - -ENV TIME_ZONE Asia/Shanghai - -RUN echo "${TIME_ZONE}" > /etc/timezone \ - && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \ - && chmod +x /app/start.sh - -CMD ./start.sh -- Gitee From acc1b7d10bce931f7b30c2e752c6897db117da35 Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:31:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86docker=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e7481e4..48a06f6 100644 --- a/README.md +++ b/README.md @@ -164,19 +164,26 @@ curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compos chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose -chmod -R 777 dockerdata/mysql/ -docker-compose --version -docker-compose up -d # -d后台运行 -docker-compose stop # 停止启动 -docker-compose down # 清除容器 - -dockerdata/config.py # 配置文件 -dockerdata/mysql/initdb/ # MySQL初始化数据在 -rm -rf dockerdata/mysql/data/* # down掉容器后启动需要清除删除data -dockerdata/restart_mysql_data.sh #重置dokcer数据库 +#运行如下命令,有输入版本,表示docker-compose 可以用了 +docker-compose --version + +#在当前目录执行如下命令即可以运行app +docker-compose -f dockercompose.yaml up + +#看到如下表示运行成功,由于pip下载慢,需要一些时间,请耐心等待;如果安装失败,重新执行上面的命令即可。 + +#运行后在浏览器访问127.0.0.1:5000 + +#如果要停止容器运行,在当前文件夹执行如下命令: +docker-compose -f dockercompose.yaml dwon + + ``` -Pear Admin Flask 还有以下几个版本: +#### Pear Admin Flask 还有以下几个版本: + +``` + **[mini 分支版本](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)** @@ -198,3 +205,5 @@ main 分支是对 mini 分支的后续,目前还在开发中。 | ![](docs/assets/1.jpg) | ![](docs/assets/2.jpg) | | ![](docs/assets/3.jpg) | ![](docs/assets/4.jpg) | | ![](docs/assets/5.jpg) | ![](docs/assets/6.jpg) | +``` + -- Gitee From 7ceb114822d587564ab25be89507c363c697e207 Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:32:18 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E4=BA=86dockerd?= =?UTF-8?q?ata=20=E6=96=87=E4=BB=B6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 0faa82c..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,40 +0,0 @@ -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 -- Gitee From 0d0998ec3cf85a3be940ee8e50e2702fe04ba10d Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:33:03 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E4=BA=86dockerd?= =?UTF-8?q?ata=20=E6=96=87=E4=BB=B6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gunicorn.conf.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 gunicorn.conf.py diff --git a/gunicorn.conf.py b/gunicorn.conf.py deleted file mode 100644 index 4aa61bf..0000000 --- a/gunicorn.conf.py +++ /dev/null @@ -1,19 +0,0 @@ -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") -- Gitee From 157a83711f5cac431fc511ae600cf04e788e6fd7 Mon Sep 17 00:00:00 2001 From: "ranee@ubuntu" Date: Sun, 7 May 2023 02:34:58 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=9F=BA?= =?UTF-8?q?=E4=BA=8Edocker=20=E4=B8=80=E9=94=AE=E9=83=A8=E7=BD=B2=E7=9A=84?= =?UTF-8?q?Dockerfile=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 + -- Gitee