From fa6cc470638de5da44a581962e48f863a8b8d0f8 Mon Sep 17 00:00:00 2001 From: wojiaoyishang Date: Sun, 26 Jan 2025 16:38:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20docker=20=E6=9E=84?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 2 - Dockerfile => dockerdata/Dockerfile | 3 + dockerdata/Dockerfile.all | 26 ------ dockerdata/Dockerfile.flask | 14 --- dockerdata/Dockerfile.server | 15 --- dockerdata/config.py | 92 ------------------- .../docker-compose.yaml | 8 +- dockerdata/docker-compose.yml | 40 -------- dockerdata/gunicorn.conf.py | 19 ---- dockerdata/mysql/initdb/init.sql | 1 - dockerdata/mysql/my.cnf | 31 ------- dockerdata/requirements.txt | 14 --- dockerdata/restart_mysql_data.sh | 4 - dockerdata/start.sh | 6 +- migrate.sh | 1 - run.sh | 1 - 16 files changed, 12 insertions(+), 265 deletions(-) rename Dockerfile => dockerdata/Dockerfile (86%) delete mode 100644 dockerdata/Dockerfile.all delete mode 100644 dockerdata/Dockerfile.flask delete mode 100644 dockerdata/Dockerfile.server delete mode 100644 dockerdata/config.py rename docker-compose.yaml => dockerdata/docker-compose.yaml (60%) delete mode 100644 dockerdata/docker-compose.yml delete mode 100644 dockerdata/gunicorn.conf.py delete mode 100755 dockerdata/mysql/initdb/init.sql delete mode 100644 dockerdata/mysql/my.cnf delete mode 100644 dockerdata/requirements.txt delete mode 100644 dockerdata/restart_mysql_data.sh delete mode 100644 migrate.sh delete mode 100755 run.sh diff --git a/.dockerignore b/.dockerignore index b859899..b3b37a4 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,5 @@ # 构建的相关文件 dockerdata -docker-compose.yml -Dockerfile.server README.md # Python 相关文件 diff --git a/Dockerfile b/dockerdata/Dockerfile similarity index 86% rename from Dockerfile rename to dockerdata/Dockerfile index 3e5612c..16d4530 100644 --- a/Dockerfile +++ b/dockerdata/Dockerfile @@ -15,6 +15,9 @@ RUN echo "${TIME_ZONE}" > /etc/timezone \ # 安装必备库 RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ +# 安装 +RUN python3 -m pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple/ + # 初始化数据库 RUN flask db init RUN flask db migrate diff --git a/dockerdata/Dockerfile.all b/dockerdata/Dockerfile.all deleted file mode 100644 index 5811537..0000000 --- a/dockerdata/Dockerfile.all +++ /dev/null @@ -1,26 +0,0 @@ -FROM python:3.7-alpine - -COPY . /app/ -COPY dockerdata/config.py /app/applications/ -COPY dockerdata/start.sh /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 \ - && chmod +x /app/start.sh - -CMD ./start.sh diff --git a/dockerdata/Dockerfile.flask b/dockerdata/Dockerfile.flask deleted file mode 100644 index 3a19ed6..0000000 --- a/dockerdata/Dockerfile.flask +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:3.7-alpine - -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++ -COPY requirements.txt /requirements.txt -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 diff --git a/dockerdata/Dockerfile.server b/dockerdata/Dockerfile.server deleted file mode 100644 index 01465bb..0000000 --- a/dockerdata/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 diff --git a/dockerdata/config.py b/dockerdata/config.py deleted file mode 100644 index b398d99..0000000 --- a/dockerdata/config.py +++ /dev/null @@ -1,92 +0,0 @@ -import logging -from datetime import timedelta -from urllib.parse import quote_plus as urlquote - - -class BaseConfig: - # 超级管理员账号 - SUPERADMIN = 'admin' - - # 系统名称 - SYSTEM_NAME = 'Pear Admin' - - # 主题面板的链接列表配置 - SYSTEM_PANEL_LINKS = [ - { - "icon": "layui-icon layui-icon-auz", - "title": "官方网站", - "href": "http://www.pearadmin.com" - }, - { - "icon": "layui-icon layui-icon-auz", - "title": "开发文档", - "href": "http://www.pearadmin.com" - }, - { - "icon": "layui-icon layui-icon-auz", - "title": "开源地址", - "href": "https://gitee.com/Jmysy/Pear-Admin-Layui" - } - ] - - # 上传图片目标文件夹 - UPLOADED_PHOTOS_DEST = 'static/upload' - UPLOADED_FILES_ALLOW = ['gif', 'jpg', 'jpeg', 'png', 'webp'] - UPLOADS_AUTOSERVE = True - - # JSON 配置 - JSON_AS_ASCII = False - - # 配置多个数据库连接的连接串写法示例 - # HOSTNAME: 指数据库的IP地址、USERNAME:指数据库登录的用户名、PASSWORD:指数据库登录密码、PORT:指数据库开放的端口、DATABASE:指需要连接的数据库名称 - # MSSQL: f"mssql+pymssql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=cp936" - # MySQL: f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4" - # Oracle: f"oracle+cx_oracle://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}" - # SQLite "sqlite:/// database.db" - # Postgres f"postgresql+psycopg2://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}" - # Oracle的第二种连接方式 - # dsnStr = cx_Oracle.makedsn({HOSTNAME}, 1521, service_name='orcl') - # connect_str = "oracle://%s:%s@%s" % ('{USERNAME}', ' {PASSWORD}', dsnStr) - - # 在SQLALCHEMY_BINDS 中设置:'{数据库连接别名}': '{连接串}' - # 最后在models的数据模型class中,在__tablename__前设置 __bind_key__ = '{数据库连接别名}' 即可,表示该数据模型不使用默认的数据库连接,改用“SQLALCHEMY_BINDS”中设置的其他数据库连接 - # SQLALCHEMY_BINDS = { - # 'testMySQL': 'mysql+pymysql://test:123456@192.168.1.1:3306/test?charset=utf8', - # 'testMsSQL': 'mssql+pymssql://test:123456@192.168.1.1:1433/test?charset=cp936', - # 'testOracle': 'oracle+cx_oracle://test:123456@192.168.1.1:1521/test', - # 'testSQLite': 'sqlite:///database.db - # } - - # 数据库的配置信息 - MYSQL_USERNAME = "root" - MYSQL_PASSWORD = "123456" - MYSQL_HOST = "172.10.1.31" - MYSQL_PORT = 3306 - MYSQL_DATABASE = "PearAdminFlask" - - # mysql 数据库的配置信息 - SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4" - - # 默认日志等级 - LOG_LEVEL = logging.WARN - - # 发信设置 - MAIL_SERVER = 'smtp.qq.com' - MAIL_USE_TLS = False - MAIL_USE_SSL = True - MAIL_PORT = 465 - MAIL_USERNAME = '123@qq.com' - MAIL_PASSWORD = 'XXXXX' # 生成的授权码 - MAIL_DEFAULT_SENDER = MAIL_USERNAME - - # 插件配置,填写插件的文件名名称,默认不启用插件。 - PLUGIN_ENABLE_FOLDERS = [] - - # Session 设置 - PERMANENT_SESSION_LIFETIME = timedelta(days=7) - - SESSION_TYPE = "filesystem" # 默认使用文件系统来保存会话 - SESSION_PERMANENT = False # 会话是否持久化 - SESSION_USE_SIGNER = True # 是否对发送到浏览器上 session 的 cookie 值进行加密 - - SECRET_KEY = "pear-system-flask" diff --git a/docker-compose.yaml b/dockerdata/docker-compose.yaml similarity index 60% rename from docker-compose.yaml rename to dockerdata/docker-compose.yaml index c7172c3..7d357d8 100644 --- a/docker-compose.yaml +++ b/dockerdata/docker-compose.yaml @@ -2,16 +2,16 @@ version: '3' services: flask: build: - context: . - dockerfile: Dockerfile + context: .. + dockerfile: dockerdata/Dockerfile container_name: flask ports: - "5000:5000" restart: always command: sh -c "/app/start.sh" networks: - - my_bridge_network + - bridge_network networks: - my_bridge_network: + bridge_network: driver: bridge \ No newline at end of file diff --git a/dockerdata/docker-compose.yml b/dockerdata/docker-compose.yml deleted file mode 100644 index 0faa82c..0000000 --- a/dockerdata/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 diff --git a/dockerdata/gunicorn.conf.py b/dockerdata/gunicorn.conf.py deleted file mode 100644 index 4aa61bf..0000000 --- a/dockerdata/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") diff --git a/dockerdata/mysql/initdb/init.sql b/dockerdata/mysql/initdb/init.sql deleted file mode 100755 index 3cfad21..0000000 --- a/dockerdata/mysql/initdb/init.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE DATABASE PearAdminFlask DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;; diff --git a/dockerdata/mysql/my.cnf b/dockerdata/mysql/my.cnf deleted file mode 100644 index c998cb0..0000000 --- a/dockerdata/mysql/my.cnf +++ /dev/null @@ -1,31 +0,0 @@ -[mysql] - -default-character-set=utf8 - -[client] - -default-character-set = utf8 - -[mysqld] -server_id = 1 -# 开启二进制日志 -log-bin = mysql-bin -# 只保留7天的二进制日志,以防磁盘被日志占满 -expire-logs-days = 7 -# 二进制日志自动删除的天数,默认值为0,表示“没有自动删除”,启动时和二进制日志循环时可能删除 -expire_logs_days = 7 -# 设置编码与字符集 -init_connect='SET collation_connection = utf8_unicode_ci' -init_connect='SET NAMES utf8' -character-set-server=utf8 -collation-server=utf8_unicode_ci -# 设置错误日志路径 -log-error = /usr/local/mysql/log/error.log -# 设置查询日志路径 -general_log = on -general_log_file = /usr/local/mysql/log/mysql.log -#开启慢查询日志路径 -slow_query_log = on -long_query_time = 3 -log-queries-not-using-indexes = on -slow-query-log-file = /usr/local/mysql/log/slowquery.log diff --git a/dockerdata/requirements.txt b/dockerdata/requirements.txt deleted file mode 100644 index 34a80f2..0000000 --- a/dockerdata/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -Flask -Flask-APScheduler -Flask-Migrate -Flask-Login -Flask_Reuploaded -Flask-SQLAlchemy -flask-marshmallow -marshmallow-sqlalchemy -PyMySQL -psutil -Flask-Mail -Pillow -validators -cryptography \ No newline at end of file diff --git a/dockerdata/restart_mysql_data.sh b/dockerdata/restart_mysql_data.sh deleted file mode 100644 index 99858ed..0000000 --- a/dockerdata/restart_mysql_data.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -rm -rf /root/pear-admin-flask/dockerdata/mysql/data/ -docker exec mysql /bin/bash -c "mysql -uroot -p123456 -e 'drop database IF EXISTS PearAdminFlask;CREATE DATABASE PearAdminFlask DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;'" -docker exec flask /bin/sh -c "rm -rf migrations ; sh /app/start.sh" \ No newline at end of file diff --git a/dockerdata/start.sh b/dockerdata/start.sh index c2d76af..1171931 100644 --- a/dockerdata/start.sh +++ b/dockerdata/start.sh @@ -1,5 +1,9 @@ #!/bin/bash +# 这里可以设置同步时间等操作 + # 运行程序 echo "Starting application..." -python3 app.py \ No newline at end of file + +# 这里可以修改运行命令 +gunicorn -b 0.0.0.0:5000 app:app \ No newline at end of file diff --git a/migrate.sh b/migrate.sh deleted file mode 100644 index e3cb307..0000000 --- a/migrate.sh +++ /dev/null @@ -1 +0,0 @@ -flask db migrate && flask db upgrade \ No newline at end of file diff --git a/run.sh b/run.sh deleted file mode 100755 index aded26a..0000000 --- a/run.sh +++ /dev/null @@ -1 +0,0 @@ -flask --app app.py run -h 0.0.0.0 -p 8000 --debug \ No newline at end of file